{
  "config": {
    "configFile": "/var/www/360lm/playwright.config.js",
    "rootDir": "/var/www/360lm/tests",
    "forbidOnly": false,
    "fullyParallel": false,
    "globalSetup": null,
    "globalTeardown": null,
    "globalTimeout": 0,
    "grep": {},
    "grepInvert": null,
    "maxFailures": 0,
    "metadata": {
      "actualWorkers": 1
    },
    "preserveOutput": "always",
    "projects": [
      {
        "outputDir": "/var/www/360lm/test-results",
        "repeatEach": 1,
        "retries": 1,
        "metadata": {
          "actualWorkers": 1
        },
        "id": "android-chrome",
        "name": "android-chrome",
        "testDir": "/var/www/360lm/tests",
        "testIgnore": [],
        "testMatch": [
          "**/*.@(spec|test).?(c|m)[jt]s?(x)"
        ],
        "timeout": 30000
      },
      {
        "outputDir": "/var/www/360lm/test-results",
        "repeatEach": 1,
        "retries": 1,
        "metadata": {
          "actualWorkers": 1
        },
        "id": "desktop-chrome",
        "name": "desktop-chrome",
        "testDir": "/var/www/360lm/tests",
        "testIgnore": [],
        "testMatch": [
          "**/*.@(spec|test).?(c|m)[jt]s?(x)"
        ],
        "timeout": 30000
      }
    ],
    "quiet": false,
    "reporter": [
      [
        "json",
        {
          "outputFile": "test_reports/last_run.json"
        }
      ],
      [
        "line",
        null
      ]
    ],
    "reportSlowTests": {
      "max": 5,
      "threshold": 300000
    },
    "shard": null,
    "tags": [],
    "updateSnapshots": "missing",
    "updateSourceMethod": "patch",
    "version": "1.60.0",
    "workers": 1,
    "webServer": null
  },
  "suites": [
    {
      "title": "tour_pg.spec.js",
      "file": "tour_pg.spec.js",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "Tour Playground — Smoke",
          "file": "tour_pg.spec.js",
          "line": 31,
          "column": 6,
          "specs": [
            {
              "title": "page returns 200",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 0,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 515,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:34:25",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 25,
                          "line": 34
                        },
                        "snippet": "  32 |   test('page returns 200', async ({ page }) => {\n  33 |     const r = await page.goto(BASE_URL);\n> 34 |     expect(r?.status()).toBe(200);\n     |                         ^\n  35 |   });\n  36 |\n  37 |   test('manifest.json returns 200', async ({ page }) => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 25,
                            "line": 34
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m\n\n  32 |   test('page returns 200', async ({ page }) => {\n  33 |     const r = await page.goto(BASE_URL);\n> 34 |     expect(r?.status()).toBe(200);\n     |                         ^\n  35 |   });\n  36 |\n  37 |   test('manifest.json returns 200', async ({ page }) => {\n    at /var/www/360lm/tests/tour_pg.spec.js:34:25"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:29:09.711Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—-Smoke-page-returns-200-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—-Smoke-page-returns-200-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 25,
                        "line": 34
                      }
                    },
                    {
                      "workerIndex": 1,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 387,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:34:25",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 25,
                          "line": 34
                        },
                        "snippet": "  32 |   test('page returns 200', async ({ page }) => {\n  33 |     const r = await page.goto(BASE_URL);\n> 34 |     expect(r?.status()).toBe(200);\n     |                         ^\n  35 |   });\n  36 |\n  37 |   test('manifest.json returns 200', async ({ page }) => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 25,
                            "line": 34
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m\n\n  32 |   test('page returns 200', async ({ page }) => {\n  33 |     const r = await page.goto(BASE_URL);\n> 34 |     expect(r?.status()).toBe(200);\n     |                         ^\n  35 |   });\n  36 |\n  37 |   test('manifest.json returns 200', async ({ page }) => {\n    at /var/www/360lm/tests/tour_pg.spec.js:34:25"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:29:12.259Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—-Smoke-page-returns-200-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—-Smoke-page-returns-200-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 25,
                        "line": 34
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-07a7be6c69471b097587",
              "file": "tour_pg.spec.js",
              "line": 32,
              "column": 3
            },
            {
              "title": "manifest.json returns 200",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 2,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 280,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:39:25",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 25,
                          "line": 39
                        },
                        "snippet": "  37 |   test('manifest.json returns 200', async ({ page }) => {\n  38 |     const r = await page.goto(BASE_URL + 'manifest.json');\n> 39 |     expect(r?.status()).toBe(200);\n     |                         ^\n  40 |   });\n  41 |\n  42 |   test('sample.xlsx is downloadable', async () => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 25,
                            "line": 39
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m\n\n  37 |   test('manifest.json returns 200', async ({ page }) => {\n  38 |     const r = await page.goto(BASE_URL + 'manifest.json');\n> 39 |     expect(r?.status()).toBe(200);\n     |                         ^\n  40 |   });\n  41 |\n  42 |   test('sample.xlsx is downloadable', async () => {\n    at /var/www/360lm/tests/tour_pg.spec.js:39:25"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:29:14.016Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—-Smoke-manifest-json-returns-200-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—-Smoke-manifest-json-returns-200-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 25,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 3,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 429,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:39:25",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 25,
                          "line": 39
                        },
                        "snippet": "  37 |   test('manifest.json returns 200', async ({ page }) => {\n  38 |     const r = await page.goto(BASE_URL + 'manifest.json');\n> 39 |     expect(r?.status()).toBe(200);\n     |                         ^\n  40 |   });\n  41 |\n  42 |   test('sample.xlsx is downloadable', async () => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 25,
                            "line": 39
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m\n\n  37 |   test('manifest.json returns 200', async ({ page }) => {\n  38 |     const r = await page.goto(BASE_URL + 'manifest.json');\n> 39 |     expect(r?.status()).toBe(200);\n     |                         ^\n  40 |   });\n  41 |\n  42 |   test('sample.xlsx is downloadable', async () => {\n    at /var/www/360lm/tests/tour_pg.spec.js:39:25"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:29:15.507Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—-Smoke-manifest-json-returns-200-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—-Smoke-manifest-json-returns-200-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 25,
                        "line": 39
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-3663c6956c03edf85c87",
              "file": "tour_pg.spec.js",
              "line": 37,
              "column": 3
            },
            {
              "title": "sample.xlsx is downloadable",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 4,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 86,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:45:24",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 24,
                          "line": 45
                        },
                        "snippet": "  43 |     const ctx = await request.newContext();\n  44 |     const r   = await ctx.get(BASE_URL + 'sample.xlsx');\n> 45 |     expect(r.status()).toBe(200);\n     |                        ^\n  46 |     expect(r.headers()['content-length']).toBeTruthy();\n  47 |     expect(Number(r.headers()['content-length'])).toBeGreaterThan(1000);\n  48 |     await ctx.dispose();"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 24,
                            "line": 45
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m\n\n  43 |     const ctx = await request.newContext();\n  44 |     const r   = await ctx.get(BASE_URL + 'sample.xlsx');\n> 45 |     expect(r.status()).toBe(200);\n     |                        ^\n  46 |     expect(r.headers()['content-length']).toBeTruthy();\n  47 |     expect(Number(r.headers()['content-length'])).toBeGreaterThan(1000);\n  48 |     await ctx.dispose();\n    at /var/www/360lm/tests/tour_pg.spec.js:45:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:29:17.313Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—-Smoke-sample-xlsx-is-downloadable-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 24,
                        "line": 45
                      }
                    },
                    {
                      "workerIndex": 5,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 94,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:45:24",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 24,
                          "line": 45
                        },
                        "snippet": "  43 |     const ctx = await request.newContext();\n  44 |     const r   = await ctx.get(BASE_URL + 'sample.xlsx');\n> 45 |     expect(r.status()).toBe(200);\n     |                        ^\n  46 |     expect(r.headers()['content-length']).toBeTruthy();\n  47 |     expect(Number(r.headers()['content-length'])).toBeGreaterThan(1000);\n  48 |     await ctx.dispose();"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 24,
                            "line": 45
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m\n\n  43 |     const ctx = await request.newContext();\n  44 |     const r   = await ctx.get(BASE_URL + 'sample.xlsx');\n> 45 |     expect(r.status()).toBe(200);\n     |                        ^\n  46 |     expect(r.headers()['content-length']).toBeTruthy();\n  47 |     expect(Number(r.headers()['content-length'])).toBeGreaterThan(1000);\n  48 |     await ctx.dispose();\n    at /var/www/360lm/tests/tour_pg.spec.js:45:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:29:19.053Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—-Smoke-sample-xlsx-is-downloadable-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 24,
                        "line": 45
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-a984cd7f10c08f210a94",
              "file": "tour_pg.spec.js",
              "line": 42,
              "column": 3
            },
            {
              "title": "HTML carries current tour-pg SW version",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 6,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 66,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoMatch\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected pattern: \u001b[32m/tour-pg-v\\d+/\u001b[39m\nReceived string:  \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoMatch\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected pattern: \u001b[32m/tour-pg-v\\d+/\u001b[39m\nReceived string:  \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:54:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 54
                        },
                        "snippet": "  52 |     const ctx = await request.newContext();\n  53 |     const html = await (await ctx.get(BASE_URL)).text();\n> 54 |     expect(html).toMatch(/tour-pg-v\\d+/);\n     |                  ^\n  55 |     expect(html).toContain('Tour Playground');\n  56 |     await ctx.dispose();\n  57 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 54
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoMatch\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected pattern: \u001b[32m/tour-pg-v\\d+/\u001b[39m\nReceived string:  \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  52 |     const ctx = await request.newContext();\n  53 |     const html = await (await ctx.get(BASE_URL)).text();\n> 54 |     expect(html).toMatch(/tour-pg-v\\d+/);\n     |                  ^\n  55 |     expect(html).toContain('Tour Playground');\n  56 |     await ctx.dispose();\n  57 |   });\n    at /var/www/360lm/tests/tour_pg.spec.js:54:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:29:20.436Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--46ffb--current-tour-pg-SW-version-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 54
                      }
                    },
                    {
                      "workerIndex": 7,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 76,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoMatch\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected pattern: \u001b[32m/tour-pg-v\\d+/\u001b[39m\nReceived string:  \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoMatch\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected pattern: \u001b[32m/tour-pg-v\\d+/\u001b[39m\nReceived string:  \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:54:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 54
                        },
                        "snippet": "  52 |     const ctx = await request.newContext();\n  53 |     const html = await (await ctx.get(BASE_URL)).text();\n> 54 |     expect(html).toMatch(/tour-pg-v\\d+/);\n     |                  ^\n  55 |     expect(html).toContain('Tour Playground');\n  56 |     await ctx.dispose();\n  57 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 54
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoMatch\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected pattern: \u001b[32m/tour-pg-v\\d+/\u001b[39m\nReceived string:  \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  52 |     const ctx = await request.newContext();\n  53 |     const html = await (await ctx.get(BASE_URL)).text();\n> 54 |     expect(html).toMatch(/tour-pg-v\\d+/);\n     |                  ^\n  55 |     expect(html).toContain('Tour Playground');\n  56 |     await ctx.dispose();\n  57 |   });\n    at /var/www/360lm/tests/tour_pg.spec.js:54:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:29:21.636Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--46ffb--current-tour-pg-SW-version-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 54
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-f8b419d6030eb8f1dfd4",
              "file": "tour_pg.spec.js",
              "line": 51,
              "column": 3
            },
            {
              "title": "proxy /health returns ok",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 8,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 79,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:29:22.885Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "c6527e00e898397fb4a5-4f4987b0ee72f032f49f",
              "file": "tour_pg.spec.js",
              "line": 59,
              "column": 3
            },
            {
              "title": "page returns 200",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 50,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 331,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:34:25",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 25,
                          "line": 34
                        },
                        "snippet": "  32 |   test('page returns 200', async ({ page }) => {\n  33 |     const r = await page.goto(BASE_URL);\n> 34 |     expect(r?.status()).toBe(200);\n     |                         ^\n  35 |   });\n  36 |\n  37 |   test('manifest.json returns 200', async ({ page }) => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 25,
                            "line": 34
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m\n\n  32 |   test('page returns 200', async ({ page }) => {\n  33 |     const r = await page.goto(BASE_URL);\n> 34 |     expect(r?.status()).toBe(200);\n     |                         ^\n  35 |   });\n  36 |\n  37 |   test('manifest.json returns 200', async ({ page }) => {\n    at /var/www/360lm/tests/tour_pg.spec.js:34:25"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:33:32.566Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—-Smoke-page-returns-200-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—-Smoke-page-returns-200-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 25,
                        "line": 34
                      }
                    },
                    {
                      "workerIndex": 51,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 362,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:34:25",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 25,
                          "line": 34
                        },
                        "snippet": "  32 |   test('page returns 200', async ({ page }) => {\n  33 |     const r = await page.goto(BASE_URL);\n> 34 |     expect(r?.status()).toBe(200);\n     |                         ^\n  35 |   });\n  36 |\n  37 |   test('manifest.json returns 200', async ({ page }) => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 25,
                            "line": 34
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m\n\n  32 |   test('page returns 200', async ({ page }) => {\n  33 |     const r = await page.goto(BASE_URL);\n> 34 |     expect(r?.status()).toBe(200);\n     |                         ^\n  35 |   });\n  36 |\n  37 |   test('manifest.json returns 200', async ({ page }) => {\n    at /var/www/360lm/tests/tour_pg.spec.js:34:25"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:33:34.033Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—-Smoke-page-returns-200-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—-Smoke-page-returns-200-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 25,
                        "line": 34
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-9dbe1966c7dd5452b371",
              "file": "tour_pg.spec.js",
              "line": 32,
              "column": 3
            },
            {
              "title": "manifest.json returns 200",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 52,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 390,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:39:25",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 25,
                          "line": 39
                        },
                        "snippet": "  37 |   test('manifest.json returns 200', async ({ page }) => {\n  38 |     const r = await page.goto(BASE_URL + 'manifest.json');\n> 39 |     expect(r?.status()).toBe(200);\n     |                         ^\n  40 |   });\n  41 |\n  42 |   test('sample.xlsx is downloadable', async () => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 25,
                            "line": 39
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m\n\n  37 |   test('manifest.json returns 200', async ({ page }) => {\n  38 |     const r = await page.goto(BASE_URL + 'manifest.json');\n> 39 |     expect(r?.status()).toBe(200);\n     |                         ^\n  40 |   });\n  41 |\n  42 |   test('sample.xlsx is downloadable', async () => {\n    at /var/www/360lm/tests/tour_pg.spec.js:39:25"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:33:35.917Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—-Smoke-manifest-json-returns-200-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—-Smoke-manifest-json-returns-200-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 25,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 53,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 453,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:39:25",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 25,
                          "line": 39
                        },
                        "snippet": "  37 |   test('manifest.json returns 200', async ({ page }) => {\n  38 |     const r = await page.goto(BASE_URL + 'manifest.json');\n> 39 |     expect(r?.status()).toBe(200);\n     |                         ^\n  40 |   });\n  41 |\n  42 |   test('sample.xlsx is downloadable', async () => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 25,
                            "line": 39
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m\n\n  37 |   test('manifest.json returns 200', async ({ page }) => {\n  38 |     const r = await page.goto(BASE_URL + 'manifest.json');\n> 39 |     expect(r?.status()).toBe(200);\n     |                         ^\n  40 |   });\n  41 |\n  42 |   test('sample.xlsx is downloadable', async () => {\n    at /var/www/360lm/tests/tour_pg.spec.js:39:25"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:33:37.410Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—-Smoke-manifest-json-returns-200-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—-Smoke-manifest-json-returns-200-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 25,
                        "line": 39
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-c7fda584a64f77dd8b37",
              "file": "tour_pg.spec.js",
              "line": 37,
              "column": 3
            },
            {
              "title": "sample.xlsx is downloadable",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 54,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 62,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:45:24",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 24,
                          "line": 45
                        },
                        "snippet": "  43 |     const ctx = await request.newContext();\n  44 |     const r   = await ctx.get(BASE_URL + 'sample.xlsx');\n> 45 |     expect(r.status()).toBe(200);\n     |                        ^\n  46 |     expect(r.headers()['content-length']).toBeTruthy();\n  47 |     expect(Number(r.headers()['content-length'])).toBeGreaterThan(1000);\n  48 |     await ctx.dispose();"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 24,
                            "line": 45
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m\n\n  43 |     const ctx = await request.newContext();\n  44 |     const r   = await ctx.get(BASE_URL + 'sample.xlsx');\n> 45 |     expect(r.status()).toBe(200);\n     |                        ^\n  46 |     expect(r.headers()['content-length']).toBeTruthy();\n  47 |     expect(Number(r.headers()['content-length'])).toBeGreaterThan(1000);\n  48 |     await ctx.dispose();\n    at /var/www/360lm/tests/tour_pg.spec.js:45:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:33:39.141Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—-Smoke-sample-xlsx-is-downloadable-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 24,
                        "line": 45
                      }
                    },
                    {
                      "workerIndex": 55,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 66,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:45:24",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 24,
                          "line": 45
                        },
                        "snippet": "  43 |     const ctx = await request.newContext();\n  44 |     const r   = await ctx.get(BASE_URL + 'sample.xlsx');\n> 45 |     expect(r.status()).toBe(200);\n     |                        ^\n  46 |     expect(r.headers()['content-length']).toBeTruthy();\n  47 |     expect(Number(r.headers()['content-length'])).toBeGreaterThan(1000);\n  48 |     await ctx.dispose();"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 24,
                            "line": 45
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m200\u001b[39m\nReceived: \u001b[31m404\u001b[39m\n\n  43 |     const ctx = await request.newContext();\n  44 |     const r   = await ctx.get(BASE_URL + 'sample.xlsx');\n> 45 |     expect(r.status()).toBe(200);\n     |                        ^\n  46 |     expect(r.headers()['content-length']).toBeTruthy();\n  47 |     expect(Number(r.headers()['content-length'])).toBeGreaterThan(1000);\n  48 |     await ctx.dispose();\n    at /var/www/360lm/tests/tour_pg.spec.js:45:24"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:33:40.251Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—-Smoke-sample-xlsx-is-downloadable-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 24,
                        "line": 45
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-8620fb99767dbe91366c",
              "file": "tour_pg.spec.js",
              "line": 42,
              "column": 3
            },
            {
              "title": "HTML carries current tour-pg SW version",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 56,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 83,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoMatch\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected pattern: \u001b[32m/tour-pg-v\\d+/\u001b[39m\nReceived string:  \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoMatch\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected pattern: \u001b[32m/tour-pg-v\\d+/\u001b[39m\nReceived string:  \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:54:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 54
                        },
                        "snippet": "  52 |     const ctx = await request.newContext();\n  53 |     const html = await (await ctx.get(BASE_URL)).text();\n> 54 |     expect(html).toMatch(/tour-pg-v\\d+/);\n     |                  ^\n  55 |     expect(html).toContain('Tour Playground');\n  56 |     await ctx.dispose();\n  57 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 54
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoMatch\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected pattern: \u001b[32m/tour-pg-v\\d+/\u001b[39m\nReceived string:  \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  52 |     const ctx = await request.newContext();\n  53 |     const html = await (await ctx.get(BASE_URL)).text();\n> 54 |     expect(html).toMatch(/tour-pg-v\\d+/);\n     |                  ^\n  55 |     expect(html).toContain('Tour Playground');\n  56 |     await ctx.dispose();\n  57 |   });\n    at /var/www/360lm/tests/tour_pg.spec.js:54:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:33:41.402Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--46ffb--current-tour-pg-SW-version-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 54
                      }
                    },
                    {
                      "workerIndex": 57,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 79,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoMatch\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected pattern: \u001b[32m/tour-pg-v\\d+/\u001b[39m\nReceived string:  \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoMatch\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected pattern: \u001b[32m/tour-pg-v\\d+/\u001b[39m\nReceived string:  \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:54:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 54
                        },
                        "snippet": "  52 |     const ctx = await request.newContext();\n  53 |     const html = await (await ctx.get(BASE_URL)).text();\n> 54 |     expect(html).toMatch(/tour-pg-v\\d+/);\n     |                  ^\n  55 |     expect(html).toContain('Tour Playground');\n  56 |     await ctx.dispose();\n  57 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 54
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoMatch\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected pattern: \u001b[32m/tour-pg-v\\d+/\u001b[39m\nReceived string:  \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  52 |     const ctx = await request.newContext();\n  53 |     const html = await (await ctx.get(BASE_URL)).text();\n> 54 |     expect(html).toMatch(/tour-pg-v\\d+/);\n     |                  ^\n  55 |     expect(html).toContain('Tour Playground');\n  56 |     await ctx.dispose();\n  57 |   });\n    at /var/www/360lm/tests/tour_pg.spec.js:54:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:33:42.615Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--46ffb--current-tour-pg-SW-version-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 54
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-fe54eff155321b030cdd",
              "file": "tour_pg.spec.js",
              "line": 51,
              "column": 3
            },
            {
              "title": "proxy /health returns ok",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 58,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 81,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:33:43.727Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "c6527e00e898397fb4a5-c27a1f81f0f1bef71bf0",
              "file": "tour_pg.spec.js",
              "line": 59,
              "column": 3
            }
          ]
        },
        {
          "title": "Tour Playground — HTML structure",
          "file": "tour_pg.spec.js",
          "line": 72,
          "column": 6,
          "specs": [
            {
              "title": "two main screens declared",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 8,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 9,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"s-upload\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"s-upload\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:81:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 81
                        },
                        "snippet": "  79 |\n  80 |   test('two main screens declared', () => {\n> 81 |     expect(html).toContain('id=\"s-upload\"');\n     |                  ^\n  82 |     expect(html).toContain('id=\"s-editor\"');\n  83 |   });\n  84 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 81
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"s-upload\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  79 |\n  80 |   test('two main screens declared', () => {\n> 81 |     expect(html).toContain('id=\"s-upload\"');\n     |                  ^\n  82 |     expect(html).toContain('id=\"s-editor\"');\n  83 |   });\n  84 |\n    at /var/www/360lm/tests/tour_pg.spec.js:81:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:29:23.026Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--bed8e-e-two-main-screens-declared-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 81
                      }
                    },
                    {
                      "workerIndex": 9,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 17,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"s-upload\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"s-upload\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:81:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 81
                        },
                        "snippet": "  79 |\n  80 |   test('two main screens declared', () => {\n> 81 |     expect(html).toContain('id=\"s-upload\"');\n     |                  ^\n  82 |     expect(html).toContain('id=\"s-editor\"');\n  83 |   });\n  84 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 81
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"s-upload\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  79 |\n  80 |   test('two main screens declared', () => {\n> 81 |     expect(html).toContain('id=\"s-upload\"');\n     |                  ^\n  82 |     expect(html).toContain('id=\"s-editor\"');\n  83 |   });\n  84 |\n    at /var/www/360lm/tests/tour_pg.spec.js:81:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:29:24.228Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--bed8e-e-two-main-screens-declared-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 81
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-695c509119fd5d12f8b3",
              "file": "tour_pg.spec.js",
              "line": 80,
              "column": 3
            },
            {
              "title": "upload form widgets present",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 10,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 32,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"dropzone\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"dropzone\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:86:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 86
                        },
                        "snippet": "  84 |\n  85 |   test('upload form widgets present', () => {\n> 86 |     expect(html).toContain('id=\"dropzone\"');\n     |                  ^\n  87 |     expect(html).toContain('id=\"excel-file\"');\n  88 |     expect(html).toContain('id=\"inp-origin\"');\n  89 |     expect(html).toContain('id=\"inp-roundtrip\"');"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 86
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"dropzone\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  84 |\n  85 |   test('upload form widgets present', () => {\n> 86 |     expect(html).toContain('id=\"dropzone\"');\n     |                  ^\n  87 |     expect(html).toContain('id=\"excel-file\"');\n  88 |     expect(html).toContain('id=\"inp-origin\"');\n  89 |     expect(html).toContain('id=\"inp-roundtrip\"');\n    at /var/www/360lm/tests/tour_pg.spec.js:86:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:29:26.000Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--8486f-upload-form-widgets-present-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 86
                      }
                    },
                    {
                      "workerIndex": 11,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 16,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"dropzone\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"dropzone\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:86:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 86
                        },
                        "snippet": "  84 |\n  85 |   test('upload form widgets present', () => {\n> 86 |     expect(html).toContain('id=\"dropzone\"');\n     |                  ^\n  87 |     expect(html).toContain('id=\"excel-file\"');\n  88 |     expect(html).toContain('id=\"inp-origin\"');\n  89 |     expect(html).toContain('id=\"inp-roundtrip\"');"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 86
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"dropzone\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  84 |\n  85 |   test('upload form widgets present', () => {\n> 86 |     expect(html).toContain('id=\"dropzone\"');\n     |                  ^\n  87 |     expect(html).toContain('id=\"excel-file\"');\n  88 |     expect(html).toContain('id=\"inp-origin\"');\n  89 |     expect(html).toContain('id=\"inp-roundtrip\"');\n    at /var/www/360lm/tests/tour_pg.spec.js:86:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:29:28.143Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--8486f-upload-form-widgets-present-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 86
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-0a8482cda7d5afe32715",
              "file": "tour_pg.spec.js",
              "line": 85,
              "column": 3
            },
            {
              "title": "editor screen widgets present",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 12,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 12,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"origin-pill\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"origin-pill\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:94:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 94
                        },
                        "snippet": "  92 |\n  93 |   test('editor screen widgets present', () => {\n> 94 |     expect(html).toContain('id=\"origin-pill\"');\n     |                  ^\n  95 |     expect(html).toContain('id=\"origin-val\"');\n  96 |     expect(html).toContain('id=\"tiles\"');\n  97 |     // Prominent top action bar (totals + share + re-optimise) — only the"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 94
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"origin-pill\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  92 |\n  93 |   test('editor screen widgets present', () => {\n> 94 |     expect(html).toContain('id=\"origin-pill\"');\n     |                  ^\n  95 |     expect(html).toContain('id=\"origin-val\"');\n  96 |     expect(html).toContain('id=\"tiles\"');\n  97 |     // Prominent top action bar (totals + share + re-optimise) — only the\n    at /var/www/360lm/tests/tour_pg.spec.js:94:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:29:29.274Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--f1000-itor-screen-widgets-present-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 94
                      }
                    },
                    {
                      "workerIndex": 13,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 14,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"origin-pill\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"origin-pill\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:94:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 94
                        },
                        "snippet": "  92 |\n  93 |   test('editor screen widgets present', () => {\n> 94 |     expect(html).toContain('id=\"origin-pill\"');\n     |                  ^\n  95 |     expect(html).toContain('id=\"origin-val\"');\n  96 |     expect(html).toContain('id=\"tiles\"');\n  97 |     // Prominent top action bar (totals + share + re-optimise) — only the"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 94
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"origin-pill\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  92 |\n  93 |   test('editor screen widgets present', () => {\n> 94 |     expect(html).toContain('id=\"origin-pill\"');\n     |                  ^\n  95 |     expect(html).toContain('id=\"origin-val\"');\n  96 |     expect(html).toContain('id=\"tiles\"');\n  97 |     // Prominent top action bar (totals + share + re-optimise) — only the\n    at /var/www/360lm/tests/tour_pg.spec.js:94:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:29:30.488Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--f1000-itor-screen-widgets-present-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 94
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-4aeb9f684d0e10040cef",
              "file": "tour_pg.spec.js",
              "line": 93,
              "column": 3
            },
            {
              "title": "share modal present with 5 actions",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 14,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 30,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"modal-share\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"modal-share\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:110:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 110
                        },
                        "snippet": "  108 |\n  109 |   test('share modal present with 5 actions', () => {\n> 110 |     expect(html).toContain('id=\"modal-share\"');\n      |                  ^\n  111 |     expect(html).toContain('openInGoogleMaps()');\n  112 |     expect(html).toContain('shareWhatsApp()');\n  113 |     expect(html).toContain('copyText()');"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 110
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"modal-share\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  108 |\n  109 |   test('share modal present with 5 actions', () => {\n> 110 |     expect(html).toContain('id=\"modal-share\"');\n      |                  ^\n  111 |     expect(html).toContain('openInGoogleMaps()');\n  112 |     expect(html).toContain('shareWhatsApp()');\n  113 |     expect(html).toContain('copyText()');\n    at /var/www/360lm/tests/tour_pg.spec.js:110:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:29:31.816Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--6846f-odal-present-with-5-actions-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 110
                      }
                    },
                    {
                      "workerIndex": 15,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 69,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"modal-share\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"modal-share\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:110:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 110
                        },
                        "snippet": "  108 |\n  109 |   test('share modal present with 5 actions', () => {\n> 110 |     expect(html).toContain('id=\"modal-share\"');\n      |                  ^\n  111 |     expect(html).toContain('openInGoogleMaps()');\n  112 |     expect(html).toContain('shareWhatsApp()');\n  113 |     expect(html).toContain('copyText()');"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 110
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"modal-share\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  108 |\n  109 |   test('share modal present with 5 actions', () => {\n> 110 |     expect(html).toContain('id=\"modal-share\"');\n      |                  ^\n  111 |     expect(html).toContain('openInGoogleMaps()');\n  112 |     expect(html).toContain('shareWhatsApp()');\n  113 |     expect(html).toContain('copyText()');\n    at /var/www/360lm/tests/tour_pg.spec.js:110:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:29:33.988Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--6846f-odal-present-with-5-actions-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 110
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-e3ac227106e400cac68e",
              "file": "tour_pg.spec.js",
              "line": 109,
              "column": 3
            },
            {
              "title": "mid-tour replan widget present",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 31,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"origin-edit\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"origin-edit\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:119:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 119
                        },
                        "snippet": "  117 |\n  118 |   test('mid-tour replan widget present', () => {\n> 119 |     expect(html).toContain('id=\"origin-edit\"');\n      |                  ^\n  120 |     expect(html).toContain('id=\"inp-new-origin\"');\n  121 |     expect(html).toContain('applyOriginAndReplan()');\n  122 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 119
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"origin-edit\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  117 |\n  118 |   test('mid-tour replan widget present', () => {\n> 119 |     expect(html).toContain('id=\"origin-edit\"');\n      |                  ^\n  120 |     expect(html).toContain('id=\"inp-new-origin\"');\n  121 |     expect(html).toContain('applyOriginAndReplan()');\n  122 |   });\n    at /var/www/360lm/tests/tour_pg.spec.js:119:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:29:37.269Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--04bad--tour-replan-widget-present-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 119
                      }
                    },
                    {
                      "workerIndex": 17,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 9,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"origin-edit\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"origin-edit\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:119:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 119
                        },
                        "snippet": "  117 |\n  118 |   test('mid-tour replan widget present', () => {\n> 119 |     expect(html).toContain('id=\"origin-edit\"');\n      |                  ^\n  120 |     expect(html).toContain('id=\"inp-new-origin\"');\n  121 |     expect(html).toContain('applyOriginAndReplan()');\n  122 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 119
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"origin-edit\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  117 |\n  118 |   test('mid-tour replan widget present', () => {\n> 119 |     expect(html).toContain('id=\"origin-edit\"');\n      |                  ^\n  120 |     expect(html).toContain('id=\"inp-new-origin\"');\n  121 |     expect(html).toContain('applyOriginAndReplan()');\n  122 |   });\n    at /var/www/360lm/tests/tour_pg.spec.js:119:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:29:41.113Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--04bad--tour-replan-widget-present-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 119
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-8391bbee5cdba382f02e",
              "file": "tour_pg.spec.js",
              "line": 118,
              "column": 3
            },
            {
              "title": "SortableJS CDN + SheetJS self-hosted",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 18,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 27,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"sortablejs@1.15.2\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"sortablejs@1.15.2\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:125:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 125
                        },
                        "snippet": "  123 |\n  124 |   test('SortableJS CDN + SheetJS self-hosted', () => {\n> 125 |     expect(html).toContain('sortablejs@1.15.2');\n      |                  ^\n  126 |     expect(html).toContain('xlsx.full.min.js');\n  127 |   });\n  128 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 125
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"sortablejs@1.15.2\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  123 |\n  124 |   test('SortableJS CDN + SheetJS self-hosted', () => {\n> 125 |     expect(html).toContain('sortablejs@1.15.2');\n      |                  ^\n  126 |     expect(html).toContain('xlsx.full.min.js');\n  127 |   });\n  128 |\n    at /var/www/360lm/tests/tour_pg.spec.js:125:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:29:44.001Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--61597-eJS-CDN-SheetJS-self-hosted-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 125
                      }
                    },
                    {
                      "workerIndex": 19,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 24,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"sortablejs@1.15.2\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"sortablejs@1.15.2\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:125:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 125
                        },
                        "snippet": "  123 |\n  124 |   test('SortableJS CDN + SheetJS self-hosted', () => {\n> 125 |     expect(html).toContain('sortablejs@1.15.2');\n      |                  ^\n  126 |     expect(html).toContain('xlsx.full.min.js');\n  127 |   });\n  128 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 125
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"sortablejs@1.15.2\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  123 |\n  124 |   test('SortableJS CDN + SheetJS self-hosted', () => {\n> 125 |     expect(html).toContain('sortablejs@1.15.2');\n      |                  ^\n  126 |     expect(html).toContain('xlsx.full.min.js');\n  127 |   });\n  128 |\n    at /var/www/360lm/tests/tour_pg.spec.js:125:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:29:46.153Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--61597-eJS-CDN-SheetJS-self-hosted-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 125
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-bfefb2f7d1e685d72979",
              "file": "tour_pg.spec.js",
              "line": 124,
              "column": 3
            },
            {
              "title": "Leaflet CDN + inline map widget present",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 20,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 41,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"leaflet@1.9.4/dist/leaflet.css\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"leaflet@1.9.4/dist/leaflet.css\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:130:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 130
                        },
                        "snippet": "  128 |\n  129 |   test('Leaflet CDN + inline map widget present', () => {\n> 130 |     expect(html).toContain('leaflet@1.9.4/dist/leaflet.css');\n      |                  ^\n  131 |     expect(html).toContain('leaflet@1.9.4/dist/leaflet.js');\n  132 |     expect(html).toContain('id=\"tour-map\"');\n  133 |     expect(html).toContain('id=\"map-wrap\"');"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 130
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"leaflet@1.9.4/dist/leaflet.css\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  128 |\n  129 |   test('Leaflet CDN + inline map widget present', () => {\n> 130 |     expect(html).toContain('leaflet@1.9.4/dist/leaflet.css');\n      |                  ^\n  131 |     expect(html).toContain('leaflet@1.9.4/dist/leaflet.js');\n  132 |     expect(html).toContain('id=\"tour-map\"');\n  133 |     expect(html).toContain('id=\"map-wrap\"');\n    at /var/www/360lm/tests/tour_pg.spec.js:130:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:29:47.980Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--79086-N-inline-map-widget-present-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 130
                      }
                    },
                    {
                      "workerIndex": 21,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 21,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"leaflet@1.9.4/dist/leaflet.css\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"leaflet@1.9.4/dist/leaflet.css\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:130:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 130
                        },
                        "snippet": "  128 |\n  129 |   test('Leaflet CDN + inline map widget present', () => {\n> 130 |     expect(html).toContain('leaflet@1.9.4/dist/leaflet.css');\n      |                  ^\n  131 |     expect(html).toContain('leaflet@1.9.4/dist/leaflet.js');\n  132 |     expect(html).toContain('id=\"tour-map\"');\n  133 |     expect(html).toContain('id=\"map-wrap\"');"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 130
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"leaflet@1.9.4/dist/leaflet.css\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  128 |\n  129 |   test('Leaflet CDN + inline map widget present', () => {\n> 130 |     expect(html).toContain('leaflet@1.9.4/dist/leaflet.css');\n      |                  ^\n  131 |     expect(html).toContain('leaflet@1.9.4/dist/leaflet.js');\n  132 |     expect(html).toContain('id=\"tour-map\"');\n  133 |     expect(html).toContain('id=\"map-wrap\"');\n    at /var/www/360lm/tests/tour_pg.spec.js:130:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:29:50.627Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--79086-N-inline-map-widget-present-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 130
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-6a6396b44064bf473745",
              "file": "tour_pg.spec.js",
              "line": 129,
              "column": 3
            },
            {
              "title": "manual planner screen + entry button + back/pill present",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 22,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 24,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"s-manual\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"s-manual\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:140:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 140
                        },
                        "snippet": "  138 |\n  139 |   test('manual planner screen + entry button + back/pill present', () => {\n> 140 |     expect(html).toContain('id=\"s-manual\"');\n      |                  ^\n  141 |     expect(html).toContain('enterManual()');             // landing entry button\n  142 |     expect(html).toContain('Plan a tour manually');\n  143 |     expect(html).toContain('id=\"user-pill-3\"');          // name pill on manual screen"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 140
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"s-manual\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  138 |\n  139 |   test('manual planner screen + entry button + back/pill present', () => {\n> 140 |     expect(html).toContain('id=\"s-manual\"');\n      |                  ^\n  141 |     expect(html).toContain('enterManual()');             // landing entry button\n  142 |     expect(html).toContain('Plan a tour manually');\n  143 |     expect(html).toContain('id=\"user-pill-3\"');          // name pill on manual screen\n    at /var/www/360lm/tests/tour_pg.spec.js:140:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:29:52.981Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--c56d7-ry-button-back-pill-present-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 140
                      }
                    },
                    {
                      "workerIndex": 23,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 16,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"s-manual\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"s-manual\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:140:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 140
                        },
                        "snippet": "  138 |\n  139 |   test('manual planner screen + entry button + back/pill present', () => {\n> 140 |     expect(html).toContain('id=\"s-manual\"');\n      |                  ^\n  141 |     expect(html).toContain('enterManual()');             // landing entry button\n  142 |     expect(html).toContain('Plan a tour manually');\n  143 |     expect(html).toContain('id=\"user-pill-3\"');          // name pill on manual screen"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 140
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"s-manual\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  138 |\n  139 |   test('manual planner screen + entry button + back/pill present', () => {\n> 140 |     expect(html).toContain('id=\"s-manual\"');\n      |                  ^\n  141 |     expect(html).toContain('enterManual()');             // landing entry button\n  142 |     expect(html).toContain('Plan a tour manually');\n  143 |     expect(html).toContain('id=\"user-pill-3\"');          // name pill on manual screen\n    at /var/www/360lm/tests/tour_pg.spec.js:140:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:29:54.707Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--c56d7-ry-button-back-pill-present-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 140
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-7530a846c74c42250e96",
              "file": "tour_pg.spec.js",
              "line": 139,
              "column": 3
            },
            {
              "title": "shared refactor functions present (S0)",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 24,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 27,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"function optimiseAndShowEditor\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"function optimiseAndShowEditor\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:151:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 151
                        },
                        "snippet": "  149 |\n  150 |   test('shared refactor functions present (S0)', () => {\n> 151 |     expect(html).toContain('function optimiseAndShowEditor');\n      |                  ^\n  152 |     expect(html).toContain('function makeManualStop');\n  153 |     expect(html).toContain('function openPicker');\n  154 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 151
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"function optimiseAndShowEditor\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  149 |\n  150 |   test('shared refactor functions present (S0)', () => {\n> 151 |     expect(html).toContain('function optimiseAndShowEditor');\n      |                  ^\n  152 |     expect(html).toContain('function makeManualStop');\n  153 |     expect(html).toContain('function openPicker');\n  154 |   });\n    at /var/www/360lm/tests/tour_pg.spec.js:151:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:29:56.713Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--af23e-actor-functions-present-S0--android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 151
                      }
                    },
                    {
                      "workerIndex": 25,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 34,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"function optimiseAndShowEditor\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"function optimiseAndShowEditor\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:151:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 151
                        },
                        "snippet": "  149 |\n  150 |   test('shared refactor functions present (S0)', () => {\n> 151 |     expect(html).toContain('function optimiseAndShowEditor');\n      |                  ^\n  152 |     expect(html).toContain('function makeManualStop');\n  153 |     expect(html).toContain('function openPicker');\n  154 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 151
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"function optimiseAndShowEditor\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  149 |\n  150 |   test('shared refactor functions present (S0)', () => {\n> 151 |     expect(html).toContain('function optimiseAndShowEditor');\n      |                  ^\n  152 |     expect(html).toContain('function makeManualStop');\n  153 |     expect(html).toContain('function openPicker');\n  154 |   });\n    at /var/www/360lm/tests/tour_pg.spec.js:151:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:29:59.080Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--af23e-actor-functions-present-S0--android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 151
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-a327237aba39686d70f3",
              "file": "tour_pg.spec.js",
              "line": 150,
              "column": 3
            },
            {
              "title": "two main screens declared",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 58,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 8,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"s-upload\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"s-upload\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:81:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 81
                        },
                        "snippet": "  79 |\n  80 |   test('two main screens declared', () => {\n> 81 |     expect(html).toContain('id=\"s-upload\"');\n     |                  ^\n  82 |     expect(html).toContain('id=\"s-editor\"');\n  83 |   });\n  84 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 81
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"s-upload\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  79 |\n  80 |   test('two main screens declared', () => {\n> 81 |     expect(html).toContain('id=\"s-upload\"');\n     |                  ^\n  82 |     expect(html).toContain('id=\"s-editor\"');\n  83 |   });\n  84 |\n    at /var/www/360lm/tests/tour_pg.spec.js:81:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:33:43.869Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--bed8e-e-two-main-screens-declared-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 81
                      }
                    },
                    {
                      "workerIndex": 59,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 16,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"s-upload\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"s-upload\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:81:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 81
                        },
                        "snippet": "  79 |\n  80 |   test('two main screens declared', () => {\n> 81 |     expect(html).toContain('id=\"s-upload\"');\n     |                  ^\n  82 |     expect(html).toContain('id=\"s-editor\"');\n  83 |   });\n  84 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 81
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"s-upload\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  79 |\n  80 |   test('two main screens declared', () => {\n> 81 |     expect(html).toContain('id=\"s-upload\"');\n     |                  ^\n  82 |     expect(html).toContain('id=\"s-editor\"');\n  83 |   });\n  84 |\n    at /var/www/360lm/tests/tour_pg.spec.js:81:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:33:44.987Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--bed8e-e-two-main-screens-declared-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 81
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-3efaae47ee3ef653f64c",
              "file": "tour_pg.spec.js",
              "line": 80,
              "column": 3
            },
            {
              "title": "upload form widgets present",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 60,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 16,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"dropzone\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"dropzone\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:86:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 86
                        },
                        "snippet": "  84 |\n  85 |   test('upload form widgets present', () => {\n> 86 |     expect(html).toContain('id=\"dropzone\"');\n     |                  ^\n  87 |     expect(html).toContain('id=\"excel-file\"');\n  88 |     expect(html).toContain('id=\"inp-origin\"');\n  89 |     expect(html).toContain('id=\"inp-roundtrip\"');"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 86
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"dropzone\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  84 |\n  85 |   test('upload form widgets present', () => {\n> 86 |     expect(html).toContain('id=\"dropzone\"');\n     |                  ^\n  87 |     expect(html).toContain('id=\"excel-file\"');\n  88 |     expect(html).toContain('id=\"inp-origin\"');\n  89 |     expect(html).toContain('id=\"inp-roundtrip\"');\n    at /var/www/360lm/tests/tour_pg.spec.js:86:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:33:46.632Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--8486f-upload-form-widgets-present-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 86
                      }
                    },
                    {
                      "workerIndex": 61,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 11,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"dropzone\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"dropzone\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:86:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 86
                        },
                        "snippet": "  84 |\n  85 |   test('upload form widgets present', () => {\n> 86 |     expect(html).toContain('id=\"dropzone\"');\n     |                  ^\n  87 |     expect(html).toContain('id=\"excel-file\"');\n  88 |     expect(html).toContain('id=\"inp-origin\"');\n  89 |     expect(html).toContain('id=\"inp-roundtrip\"');"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 86
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"dropzone\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  84 |\n  85 |   test('upload form widgets present', () => {\n> 86 |     expect(html).toContain('id=\"dropzone\"');\n     |                  ^\n  87 |     expect(html).toContain('id=\"excel-file\"');\n  88 |     expect(html).toContain('id=\"inp-origin\"');\n  89 |     expect(html).toContain('id=\"inp-roundtrip\"');\n    at /var/www/360lm/tests/tour_pg.spec.js:86:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:33:47.860Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--8486f-upload-form-widgets-present-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 86
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-5c26810bed9cc28fce33",
              "file": "tour_pg.spec.js",
              "line": 85,
              "column": 3
            },
            {
              "title": "editor screen widgets present",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 62,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 12,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"origin-pill\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"origin-pill\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:94:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 94
                        },
                        "snippet": "  92 |\n  93 |   test('editor screen widgets present', () => {\n> 94 |     expect(html).toContain('id=\"origin-pill\"');\n     |                  ^\n  95 |     expect(html).toContain('id=\"origin-val\"');\n  96 |     expect(html).toContain('id=\"tiles\"');\n  97 |     // Prominent top action bar (totals + share + re-optimise) — only the"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 94
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"origin-pill\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  92 |\n  93 |   test('editor screen widgets present', () => {\n> 94 |     expect(html).toContain('id=\"origin-pill\"');\n     |                  ^\n  95 |     expect(html).toContain('id=\"origin-val\"');\n  96 |     expect(html).toContain('id=\"tiles\"');\n  97 |     // Prominent top action bar (totals + share + re-optimise) — only the\n    at /var/www/360lm/tests/tour_pg.spec.js:94:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:33:48.912Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--f1000-itor-screen-widgets-present-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 94
                      }
                    },
                    {
                      "workerIndex": 63,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 14,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"origin-pill\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"origin-pill\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:94:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 94
                        },
                        "snippet": "  92 |\n  93 |   test('editor screen widgets present', () => {\n> 94 |     expect(html).toContain('id=\"origin-pill\"');\n     |                  ^\n  95 |     expect(html).toContain('id=\"origin-val\"');\n  96 |     expect(html).toContain('id=\"tiles\"');\n  97 |     // Prominent top action bar (totals + share + re-optimise) — only the"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 94
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"origin-pill\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  92 |\n  93 |   test('editor screen widgets present', () => {\n> 94 |     expect(html).toContain('id=\"origin-pill\"');\n     |                  ^\n  95 |     expect(html).toContain('id=\"origin-val\"');\n  96 |     expect(html).toContain('id=\"tiles\"');\n  97 |     // Prominent top action bar (totals + share + re-optimise) — only the\n    at /var/www/360lm/tests/tour_pg.spec.js:94:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:33:49.917Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--f1000-itor-screen-widgets-present-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 94
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-a56bef580f604eff9386",
              "file": "tour_pg.spec.js",
              "line": 93,
              "column": 3
            },
            {
              "title": "share modal present with 5 actions",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 64,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 13,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"modal-share\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"modal-share\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:110:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 110
                        },
                        "snippet": "  108 |\n  109 |   test('share modal present with 5 actions', () => {\n> 110 |     expect(html).toContain('id=\"modal-share\"');\n      |                  ^\n  111 |     expect(html).toContain('openInGoogleMaps()');\n  112 |     expect(html).toContain('shareWhatsApp()');\n  113 |     expect(html).toContain('copyText()');"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 110
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"modal-share\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  108 |\n  109 |   test('share modal present with 5 actions', () => {\n> 110 |     expect(html).toContain('id=\"modal-share\"');\n      |                  ^\n  111 |     expect(html).toContain('openInGoogleMaps()');\n  112 |     expect(html).toContain('shareWhatsApp()');\n  113 |     expect(html).toContain('copyText()');\n    at /var/www/360lm/tests/tour_pg.spec.js:110:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:33:51.037Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--6846f-odal-present-with-5-actions-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 110
                      }
                    },
                    {
                      "workerIndex": 65,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 22,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"modal-share\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"modal-share\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:110:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 110
                        },
                        "snippet": "  108 |\n  109 |   test('share modal present with 5 actions', () => {\n> 110 |     expect(html).toContain('id=\"modal-share\"');\n      |                  ^\n  111 |     expect(html).toContain('openInGoogleMaps()');\n  112 |     expect(html).toContain('shareWhatsApp()');\n  113 |     expect(html).toContain('copyText()');"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 110
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"modal-share\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  108 |\n  109 |   test('share modal present with 5 actions', () => {\n> 110 |     expect(html).toContain('id=\"modal-share\"');\n      |                  ^\n  111 |     expect(html).toContain('openInGoogleMaps()');\n  112 |     expect(html).toContain('shareWhatsApp()');\n  113 |     expect(html).toContain('copyText()');\n    at /var/www/360lm/tests/tour_pg.spec.js:110:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:33:52.093Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--6846f-odal-present-with-5-actions-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 110
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-b3d5bcbc5dc2526d303a",
              "file": "tour_pg.spec.js",
              "line": 109,
              "column": 3
            },
            {
              "title": "mid-tour replan widget present",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 66,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 13,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"origin-edit\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"origin-edit\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:119:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 119
                        },
                        "snippet": "  117 |\n  118 |   test('mid-tour replan widget present', () => {\n> 119 |     expect(html).toContain('id=\"origin-edit\"');\n      |                  ^\n  120 |     expect(html).toContain('id=\"inp-new-origin\"');\n  121 |     expect(html).toContain('applyOriginAndReplan()');\n  122 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 119
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"origin-edit\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  117 |\n  118 |   test('mid-tour replan widget present', () => {\n> 119 |     expect(html).toContain('id=\"origin-edit\"');\n      |                  ^\n  120 |     expect(html).toContain('id=\"inp-new-origin\"');\n  121 |     expect(html).toContain('applyOriginAndReplan()');\n  122 |   });\n    at /var/www/360lm/tests/tour_pg.spec.js:119:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:33:53.151Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--04bad--tour-replan-widget-present-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 119
                      }
                    },
                    {
                      "workerIndex": 67,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 8,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"origin-edit\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"origin-edit\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:119:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 119
                        },
                        "snippet": "  117 |\n  118 |   test('mid-tour replan widget present', () => {\n> 119 |     expect(html).toContain('id=\"origin-edit\"');\n      |                  ^\n  120 |     expect(html).toContain('id=\"inp-new-origin\"');\n  121 |     expect(html).toContain('applyOriginAndReplan()');\n  122 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 119
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"origin-edit\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  117 |\n  118 |   test('mid-tour replan widget present', () => {\n> 119 |     expect(html).toContain('id=\"origin-edit\"');\n      |                  ^\n  120 |     expect(html).toContain('id=\"inp-new-origin\"');\n  121 |     expect(html).toContain('applyOriginAndReplan()');\n  122 |   });\n    at /var/www/360lm/tests/tour_pg.spec.js:119:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:33:54.294Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--04bad--tour-replan-widget-present-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 119
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-6dbbc2f246d66bdb483d",
              "file": "tour_pg.spec.js",
              "line": 118,
              "column": 3
            },
            {
              "title": "SortableJS CDN + SheetJS self-hosted",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 68,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 9,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"sortablejs@1.15.2\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"sortablejs@1.15.2\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:125:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 125
                        },
                        "snippet": "  123 |\n  124 |   test('SortableJS CDN + SheetJS self-hosted', () => {\n> 125 |     expect(html).toContain('sortablejs@1.15.2');\n      |                  ^\n  126 |     expect(html).toContain('xlsx.full.min.js');\n  127 |   });\n  128 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 125
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"sortablejs@1.15.2\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  123 |\n  124 |   test('SortableJS CDN + SheetJS self-hosted', () => {\n> 125 |     expect(html).toContain('sortablejs@1.15.2');\n      |                  ^\n  126 |     expect(html).toContain('xlsx.full.min.js');\n  127 |   });\n  128 |\n    at /var/www/360lm/tests/tour_pg.spec.js:125:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:33:55.631Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--61597-eJS-CDN-SheetJS-self-hosted-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 125
                      }
                    },
                    {
                      "workerIndex": 69,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 37,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"sortablejs@1.15.2\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"sortablejs@1.15.2\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:125:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 125
                        },
                        "snippet": "  123 |\n  124 |   test('SortableJS CDN + SheetJS self-hosted', () => {\n> 125 |     expect(html).toContain('sortablejs@1.15.2');\n      |                  ^\n  126 |     expect(html).toContain('xlsx.full.min.js');\n  127 |   });\n  128 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 125
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"sortablejs@1.15.2\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  123 |\n  124 |   test('SortableJS CDN + SheetJS self-hosted', () => {\n> 125 |     expect(html).toContain('sortablejs@1.15.2');\n      |                  ^\n  126 |     expect(html).toContain('xlsx.full.min.js');\n  127 |   });\n  128 |\n    at /var/www/360lm/tests/tour_pg.spec.js:125:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:33:57.137Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--61597-eJS-CDN-SheetJS-self-hosted-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 125
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-61c3930d8e82775c0d0c",
              "file": "tour_pg.spec.js",
              "line": 124,
              "column": 3
            },
            {
              "title": "Leaflet CDN + inline map widget present",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 70,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 18,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"leaflet@1.9.4/dist/leaflet.css\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"leaflet@1.9.4/dist/leaflet.css\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:130:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 130
                        },
                        "snippet": "  128 |\n  129 |   test('Leaflet CDN + inline map widget present', () => {\n> 130 |     expect(html).toContain('leaflet@1.9.4/dist/leaflet.css');\n      |                  ^\n  131 |     expect(html).toContain('leaflet@1.9.4/dist/leaflet.js');\n  132 |     expect(html).toContain('id=\"tour-map\"');\n  133 |     expect(html).toContain('id=\"map-wrap\"');"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 130
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"leaflet@1.9.4/dist/leaflet.css\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  128 |\n  129 |   test('Leaflet CDN + inline map widget present', () => {\n> 130 |     expect(html).toContain('leaflet@1.9.4/dist/leaflet.css');\n      |                  ^\n  131 |     expect(html).toContain('leaflet@1.9.4/dist/leaflet.js');\n  132 |     expect(html).toContain('id=\"tour-map\"');\n  133 |     expect(html).toContain('id=\"map-wrap\"');\n    at /var/www/360lm/tests/tour_pg.spec.js:130:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:33:58.864Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--79086-N-inline-map-widget-present-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 130
                      }
                    },
                    {
                      "workerIndex": 71,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 36,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"leaflet@1.9.4/dist/leaflet.css\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"leaflet@1.9.4/dist/leaflet.css\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:130:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 130
                        },
                        "snippet": "  128 |\n  129 |   test('Leaflet CDN + inline map widget present', () => {\n> 130 |     expect(html).toContain('leaflet@1.9.4/dist/leaflet.css');\n      |                  ^\n  131 |     expect(html).toContain('leaflet@1.9.4/dist/leaflet.js');\n  132 |     expect(html).toContain('id=\"tour-map\"');\n  133 |     expect(html).toContain('id=\"map-wrap\"');"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 130
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"leaflet@1.9.4/dist/leaflet.css\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  128 |\n  129 |   test('Leaflet CDN + inline map widget present', () => {\n> 130 |     expect(html).toContain('leaflet@1.9.4/dist/leaflet.css');\n      |                  ^\n  131 |     expect(html).toContain('leaflet@1.9.4/dist/leaflet.js');\n  132 |     expect(html).toContain('id=\"tour-map\"');\n  133 |     expect(html).toContain('id=\"map-wrap\"');\n    at /var/www/360lm/tests/tour_pg.spec.js:130:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:34:00.307Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--79086-N-inline-map-widget-present-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 130
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-ac9849b17b955308785e",
              "file": "tour_pg.spec.js",
              "line": 129,
              "column": 3
            },
            {
              "title": "manual planner screen + entry button + back/pill present",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 72,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 24,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"s-manual\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"s-manual\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:140:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 140
                        },
                        "snippet": "  138 |\n  139 |   test('manual planner screen + entry button + back/pill present', () => {\n> 140 |     expect(html).toContain('id=\"s-manual\"');\n      |                  ^\n  141 |     expect(html).toContain('enterManual()');             // landing entry button\n  142 |     expect(html).toContain('Plan a tour manually');\n  143 |     expect(html).toContain('id=\"user-pill-3\"');          // name pill on manual screen"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 140
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"s-manual\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  138 |\n  139 |   test('manual planner screen + entry button + back/pill present', () => {\n> 140 |     expect(html).toContain('id=\"s-manual\"');\n      |                  ^\n  141 |     expect(html).toContain('enterManual()');             // landing entry button\n  142 |     expect(html).toContain('Plan a tour manually');\n  143 |     expect(html).toContain('id=\"user-pill-3\"');          // name pill on manual screen\n    at /var/www/360lm/tests/tour_pg.spec.js:140:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:34:02.722Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--c56d7-ry-button-back-pill-present-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 140
                      }
                    },
                    {
                      "workerIndex": 73,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 13,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"s-manual\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"s-manual\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:140:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 140
                        },
                        "snippet": "  138 |\n  139 |   test('manual planner screen + entry button + back/pill present', () => {\n> 140 |     expect(html).toContain('id=\"s-manual\"');\n      |                  ^\n  141 |     expect(html).toContain('enterManual()');             // landing entry button\n  142 |     expect(html).toContain('Plan a tour manually');\n  143 |     expect(html).toContain('id=\"user-pill-3\"');          // name pill on manual screen"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 140
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"id=\\\"s-manual\\\"\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  138 |\n  139 |   test('manual planner screen + entry button + back/pill present', () => {\n> 140 |     expect(html).toContain('id=\"s-manual\"');\n      |                  ^\n  141 |     expect(html).toContain('enterManual()');             // landing entry button\n  142 |     expect(html).toContain('Plan a tour manually');\n  143 |     expect(html).toContain('id=\"user-pill-3\"');          // name pill on manual screen\n    at /var/www/360lm/tests/tour_pg.spec.js:140:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:34:04.554Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--c56d7-ry-button-back-pill-present-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 140
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-63441ac4b0f36122a81c",
              "file": "tour_pg.spec.js",
              "line": 139,
              "column": 3
            },
            {
              "title": "shared refactor functions present (S0)",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 74,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 13,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"function optimiseAndShowEditor\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"function optimiseAndShowEditor\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:151:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 151
                        },
                        "snippet": "  149 |\n  150 |   test('shared refactor functions present (S0)', () => {\n> 151 |     expect(html).toContain('function optimiseAndShowEditor');\n      |                  ^\n  152 |     expect(html).toContain('function makeManualStop');\n  153 |     expect(html).toContain('function openPicker');\n  154 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 151
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"function optimiseAndShowEditor\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  149 |\n  150 |   test('shared refactor functions present (S0)', () => {\n> 151 |     expect(html).toContain('function optimiseAndShowEditor');\n      |                  ^\n  152 |     expect(html).toContain('function makeManualStop');\n  153 |     expect(html).toContain('function openPicker');\n  154 |   });\n    at /var/www/360lm/tests/tour_pg.spec.js:151:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:34:05.847Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--af23e-actor-functions-present-S0--desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 151
                      }
                    },
                    {
                      "workerIndex": 75,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 13,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"function optimiseAndShowEditor\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"function optimiseAndShowEditor\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:151:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 151
                        },
                        "snippet": "  149 |\n  150 |   test('shared refactor functions present (S0)', () => {\n> 151 |     expect(html).toContain('function optimiseAndShowEditor');\n      |                  ^\n  152 |     expect(html).toContain('function makeManualStop');\n  153 |     expect(html).toContain('function openPicker');\n  154 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 151
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"function optimiseAndShowEditor\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  149 |\n  150 |   test('shared refactor functions present (S0)', () => {\n> 151 |     expect(html).toContain('function optimiseAndShowEditor');\n      |                  ^\n  152 |     expect(html).toContain('function makeManualStop');\n  153 |     expect(html).toContain('function openPicker');\n  154 |   });\n    at /var/www/360lm/tests/tour_pg.spec.js:151:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:34:07.417Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--af23e-actor-functions-present-S0--desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 151
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-3add251077b2f20eea70",
              "file": "tour_pg.spec.js",
              "line": 150,
              "column": 3
            }
          ]
        },
        {
          "title": "Tour Playground — Auth",
          "file": "tour_pg.spec.js",
          "line": 160,
          "column": 6,
          "specs": [
            {
              "title": "no session → redirects to /hub/",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 26,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 6285,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:30:00.975Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "c6527e00e898397fb4a5-83dd50fbaa77ebc47a5d",
              "file": "tour_pg.spec.js",
              "line": 161,
              "column": 3
            },
            {
              "title": "valid session → upload screen visible",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 26,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5808,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#s-upload')\nExpected: visible\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#s-upload')\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#s-upload')\nExpected: visible\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#s-upload')\u001b[22m\n\n    at /var/www/360lm/tests/tour_pg.spec.js:174:45",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 45,
                          "line": 174
                        },
                        "snippet": "  172 |     await page.goto(BASE_URL);\n  173 |     await page.waitForTimeout(400);\n> 174 |     await expect(page.locator('#s-upload')).toBeVisible();\n      |                                             ^\n  175 |     await expect(page.locator('#dropzone')).toBeVisible();\n  176 |     await expect(page.locator('#btn-go')).toBeDisabled();\n  177 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 45,
                            "line": 174
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#s-upload')\nExpected: visible\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#s-upload')\u001b[22m\n\n\n  172 |     await page.goto(BASE_URL);\n  173 |     await page.waitForTimeout(400);\n> 174 |     await expect(page.locator('#s-upload')).toBeVisible();\n      |                                             ^\n  175 |     await expect(page.locator('#dropzone')).toBeVisible();\n  176 |     await expect(page.locator('#btn-go')).toBeDisabled();\n  177 |   });\n    at /var/www/360lm/tests/tour_pg.spec.js:174:45"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:30:08.280Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--ad782-ion-→-upload-screen-visible-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--ad782-ion-→-upload-screen-visible-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 45,
                        "line": 174
                      }
                    },
                    {
                      "workerIndex": 27,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5982,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#s-upload')\nExpected: visible\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#s-upload')\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#s-upload')\nExpected: visible\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#s-upload')\u001b[22m\n\n    at /var/www/360lm/tests/tour_pg.spec.js:174:45",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 45,
                          "line": 174
                        },
                        "snippet": "  172 |     await page.goto(BASE_URL);\n  173 |     await page.waitForTimeout(400);\n> 174 |     await expect(page.locator('#s-upload')).toBeVisible();\n      |                                             ^\n  175 |     await expect(page.locator('#dropzone')).toBeVisible();\n  176 |     await expect(page.locator('#btn-go')).toBeDisabled();\n  177 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 45,
                            "line": 174
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#s-upload')\nExpected: visible\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#s-upload')\u001b[22m\n\n\n  172 |     await page.goto(BASE_URL);\n  173 |     await page.waitForTimeout(400);\n> 174 |     await expect(page.locator('#s-upload')).toBeVisible();\n      |                                             ^\n  175 |     await expect(page.locator('#dropzone')).toBeVisible();\n  176 |     await expect(page.locator('#btn-go')).toBeDisabled();\n  177 |   });\n    at /var/www/360lm/tests/tour_pg.spec.js:174:45"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:30:15.719Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--ad782-ion-→-upload-screen-visible-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--ad782-ion-→-upload-screen-visible-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 45,
                        "line": 174
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-ac58e3c45c229c64a5c8",
              "file": "tour_pg.spec.js",
              "line": 170,
              "column": 3
            },
            {
              "title": "user pill shows logged-in name",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 28,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5714,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoContainText\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#user-pill')\nExpected substring: \u001b[32m\"Rakesh K\"\u001b[39m\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toContainText\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#user-pill')\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoContainText\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#user-pill')\nExpected substring: \u001b[32m\"Rakesh K\"\u001b[39m\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toContainText\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#user-pill')\u001b[22m\n\n    at /var/www/360lm/tests/tour_pg.spec.js:183:46",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 46,
                          "line": 183
                        },
                        "snippet": "  181 |     await page.goto(BASE_URL);\n  182 |     await page.waitForTimeout(400);\n> 183 |     await expect(page.locator('#user-pill')).toContainText('Rakesh K');\n      |                                              ^\n  184 |   });\n  185 | });\n  186 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 46,
                            "line": 183
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoContainText\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#user-pill')\nExpected substring: \u001b[32m\"Rakesh K\"\u001b[39m\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toContainText\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#user-pill')\u001b[22m\n\n\n  181 |     await page.goto(BASE_URL);\n  182 |     await page.waitForTimeout(400);\n> 183 |     await expect(page.locator('#user-pill')).toContainText('Rakesh K');\n      |                                              ^\n  184 |   });\n  185 | });\n  186 |\n    at /var/www/360lm/tests/tour_pg.spec.js:183:46"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:30:23.064Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--d6c77-r-pill-shows-logged-in-name-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--d6c77-r-pill-shows-logged-in-name-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 46,
                        "line": 183
                      }
                    },
                    {
                      "workerIndex": 29,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5803,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoContainText\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#user-pill')\nExpected substring: \u001b[32m\"Rakesh K\"\u001b[39m\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toContainText\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#user-pill')\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoContainText\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#user-pill')\nExpected substring: \u001b[32m\"Rakesh K\"\u001b[39m\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toContainText\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#user-pill')\u001b[22m\n\n    at /var/www/360lm/tests/tour_pg.spec.js:183:46",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 46,
                          "line": 183
                        },
                        "snippet": "  181 |     await page.goto(BASE_URL);\n  182 |     await page.waitForTimeout(400);\n> 183 |     await expect(page.locator('#user-pill')).toContainText('Rakesh K');\n      |                                              ^\n  184 |   });\n  185 | });\n  186 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 46,
                            "line": 183
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoContainText\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#user-pill')\nExpected substring: \u001b[32m\"Rakesh K\"\u001b[39m\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toContainText\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#user-pill')\u001b[22m\n\n\n  181 |     await page.goto(BASE_URL);\n  182 |     await page.waitForTimeout(400);\n> 183 |     await expect(page.locator('#user-pill')).toContainText('Rakesh K');\n      |                                              ^\n  184 |   });\n  185 | });\n  186 |\n    at /var/www/360lm/tests/tour_pg.spec.js:183:46"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:30:30.526Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--d6c77-r-pill-shows-logged-in-name-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--d6c77-r-pill-shows-logged-in-name-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 46,
                        "line": 183
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-b105e116251a5a974331",
              "file": "tour_pg.spec.js",
              "line": 179,
              "column": 3
            },
            {
              "title": "no session → redirects to /hub/",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 76,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 4420,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:34:08.809Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "c6527e00e898397fb4a5-8a7b32ab13ba7e650d6d",
              "file": "tour_pg.spec.js",
              "line": 161,
              "column": 3
            },
            {
              "title": "valid session → upload screen visible",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 76,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5710,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#s-upload')\nExpected: visible\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#s-upload')\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#s-upload')\nExpected: visible\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#s-upload')\u001b[22m\n\n    at /var/www/360lm/tests/tour_pg.spec.js:174:45",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 45,
                          "line": 174
                        },
                        "snippet": "  172 |     await page.goto(BASE_URL);\n  173 |     await page.waitForTimeout(400);\n> 174 |     await expect(page.locator('#s-upload')).toBeVisible();\n      |                                             ^\n  175 |     await expect(page.locator('#dropzone')).toBeVisible();\n  176 |     await expect(page.locator('#btn-go')).toBeDisabled();\n  177 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 45,
                            "line": 174
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#s-upload')\nExpected: visible\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#s-upload')\u001b[22m\n\n\n  172 |     await page.goto(BASE_URL);\n  173 |     await page.waitForTimeout(400);\n> 174 |     await expect(page.locator('#s-upload')).toBeVisible();\n      |                                             ^\n  175 |     await expect(page.locator('#dropzone')).toBeVisible();\n  176 |     await expect(page.locator('#btn-go')).toBeDisabled();\n  177 |   });\n    at /var/www/360lm/tests/tour_pg.spec.js:174:45"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:34:13.456Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--ad782-ion-→-upload-screen-visible-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--ad782-ion-→-upload-screen-visible-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 45,
                        "line": 174
                      }
                    },
                    {
                      "workerIndex": 77,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5778,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#s-upload')\nExpected: visible\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#s-upload')\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#s-upload')\nExpected: visible\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#s-upload')\u001b[22m\n\n    at /var/www/360lm/tests/tour_pg.spec.js:174:45",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 45,
                          "line": 174
                        },
                        "snippet": "  172 |     await page.goto(BASE_URL);\n  173 |     await page.waitForTimeout(400);\n> 174 |     await expect(page.locator('#s-upload')).toBeVisible();\n      |                                             ^\n  175 |     await expect(page.locator('#dropzone')).toBeVisible();\n  176 |     await expect(page.locator('#btn-go')).toBeDisabled();\n  177 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 45,
                            "line": 174
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#s-upload')\nExpected: visible\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#s-upload')\u001b[22m\n\n\n  172 |     await page.goto(BASE_URL);\n  173 |     await page.waitForTimeout(400);\n> 174 |     await expect(page.locator('#s-upload')).toBeVisible();\n      |                                             ^\n  175 |     await expect(page.locator('#dropzone')).toBeVisible();\n  176 |     await expect(page.locator('#btn-go')).toBeDisabled();\n  177 |   });\n    at /var/www/360lm/tests/tour_pg.spec.js:174:45"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:34:20.529Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--ad782-ion-→-upload-screen-visible-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--ad782-ion-→-upload-screen-visible-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 45,
                        "line": 174
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-c08ca36371ec8fd17b5d",
              "file": "tour_pg.spec.js",
              "line": 170,
              "column": 3
            },
            {
              "title": "user pill shows logged-in name",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 78,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5703,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoContainText\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#user-pill')\nExpected substring: \u001b[32m\"Rakesh K\"\u001b[39m\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toContainText\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#user-pill')\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoContainText\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#user-pill')\nExpected substring: \u001b[32m\"Rakesh K\"\u001b[39m\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toContainText\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#user-pill')\u001b[22m\n\n    at /var/www/360lm/tests/tour_pg.spec.js:183:46",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 46,
                          "line": 183
                        },
                        "snippet": "  181 |     await page.goto(BASE_URL);\n  182 |     await page.waitForTimeout(400);\n> 183 |     await expect(page.locator('#user-pill')).toContainText('Rakesh K');\n      |                                              ^\n  184 |   });\n  185 | });\n  186 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 46,
                            "line": 183
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoContainText\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#user-pill')\nExpected substring: \u001b[32m\"Rakesh K\"\u001b[39m\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toContainText\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#user-pill')\u001b[22m\n\n\n  181 |     await page.goto(BASE_URL);\n  182 |     await page.waitForTimeout(400);\n> 183 |     await expect(page.locator('#user-pill')).toContainText('Rakesh K');\n      |                                              ^\n  184 |   });\n  185 | });\n  186 |\n    at /var/www/360lm/tests/tour_pg.spec.js:183:46"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:34:27.477Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--d6c77-r-pill-shows-logged-in-name-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--d6c77-r-pill-shows-logged-in-name-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 46,
                        "line": 183
                      }
                    },
                    {
                      "workerIndex": 79,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5721,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoContainText\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#user-pill')\nExpected substring: \u001b[32m\"Rakesh K\"\u001b[39m\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toContainText\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#user-pill')\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoContainText\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#user-pill')\nExpected substring: \u001b[32m\"Rakesh K\"\u001b[39m\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toContainText\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#user-pill')\u001b[22m\n\n    at /var/www/360lm/tests/tour_pg.spec.js:183:46",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 46,
                          "line": 183
                        },
                        "snippet": "  181 |     await page.goto(BASE_URL);\n  182 |     await page.waitForTimeout(400);\n> 183 |     await expect(page.locator('#user-pill')).toContainText('Rakesh K');\n      |                                              ^\n  184 |   });\n  185 | });\n  186 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 46,
                            "line": 183
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoContainText\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#user-pill')\nExpected substring: \u001b[32m\"Rakesh K\"\u001b[39m\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toContainText\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#user-pill')\u001b[22m\n\n\n  181 |     await page.goto(BASE_URL);\n  182 |     await page.waitForTimeout(400);\n> 183 |     await expect(page.locator('#user-pill')).toContainText('Rakesh K');\n      |                                              ^\n  184 |   });\n  185 | });\n  186 |\n    at /var/www/360lm/tests/tour_pg.spec.js:183:46"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:34:34.244Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--d6c77-r-pill-shows-logged-in-name-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--d6c77-r-pill-shows-logged-in-name-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 46,
                        "line": 183
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-debfcd19a58dd43fb67b",
              "file": "tour_pg.spec.js",
              "line": 179,
              "column": 3
            }
          ]
        },
        {
          "title": "Tour Playground — Proxy end-to-end",
          "file": "tour_pg.spec.js",
          "line": 190,
          "column": 6,
          "specs": [
            {
              "title": "full optimise + drag-reorder + exclude flow",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 30,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 2679,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:30:38.061Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "c6527e00e898397fb4a5-d9eb7610af698ae1097f",
              "file": "tour_pg.spec.js",
              "line": 191,
              "column": 3
            },
            {
              "title": "matrix + 2-opt path for 14 stops",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 30,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 733,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:30:40.805Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "c6527e00e898397fb4a5-ae600ef94ad0ea6686b6",
              "file": "tour_pg.spec.js",
              "line": 238,
              "column": 3
            },
            {
              "title": "full optimise + drag-reorder + exclude flow",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 80,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 2653,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:34:41.421Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "c6527e00e898397fb4a5-803599e44c1e6f67a1c1",
              "file": "tour_pg.spec.js",
              "line": 191,
              "column": 3
            },
            {
              "title": "matrix + 2-opt path for 14 stops",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 80,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 805,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:34:44.177Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "c6527e00e898397fb4a5-68347481273a6865f1ad",
              "file": "tour_pg.spec.js",
              "line": 238,
              "column": 3
            }
          ]
        },
        {
          "title": "Tour Playground — Browser JS state",
          "file": "tour_pg.spec.js",
          "line": 267,
          "column": 6,
          "specs": [
            {
              "title": "clicking Go without Excel shows error toast",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 30,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5855,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeDisabled\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#btn-go')\nExpected: disabled\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeDisabled\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#btn-go')\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeDisabled\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#btn-go')\nExpected: disabled\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeDisabled\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#btn-go')\u001b[22m\n\n    at /var/www/360lm/tests/tour_pg.spec.js:273:43",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 43,
                          "line": 273
                        },
                        "snippet": "  271 |     await page.waitForTimeout(400);\n  272 |     // btn-go is disabled by default. Verify it stays disabled\n> 273 |     await expect(page.locator('#btn-go')).toBeDisabled();\n      |                                           ^\n  274 |   });\n  275 |\n  276 |   test('round-trip toggle hides/shows destination input', async ({ page }) => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 43,
                            "line": 273
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeDisabled\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#btn-go')\nExpected: disabled\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeDisabled\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#btn-go')\u001b[22m\n\n\n  271 |     await page.waitForTimeout(400);\n  272 |     // btn-go is disabled by default. Verify it stays disabled\n> 273 |     await expect(page.locator('#btn-go')).toBeDisabled();\n      |                                           ^\n  274 |   });\n  275 |\n  276 |   test('round-trip toggle hides/shows destination input', async ({ page }) => {\n    at /var/www/360lm/tests/tour_pg.spec.js:273:43"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:30:41.560Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--9faa6-out-Excel-shows-error-toast-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--9faa6-out-Excel-shows-error-toast-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 43,
                        "line": 273
                      }
                    },
                    {
                      "workerIndex": 31,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6022,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeDisabled\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#btn-go')\nExpected: disabled\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeDisabled\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#btn-go')\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeDisabled\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#btn-go')\nExpected: disabled\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeDisabled\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#btn-go')\u001b[22m\n\n    at /var/www/360lm/tests/tour_pg.spec.js:273:43",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 43,
                          "line": 273
                        },
                        "snippet": "  271 |     await page.waitForTimeout(400);\n  272 |     // btn-go is disabled by default. Verify it stays disabled\n> 273 |     await expect(page.locator('#btn-go')).toBeDisabled();\n      |                                           ^\n  274 |   });\n  275 |\n  276 |   test('round-trip toggle hides/shows destination input', async ({ page }) => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 43,
                            "line": 273
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeDisabled\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#btn-go')\nExpected: disabled\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeDisabled\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#btn-go')\u001b[22m\n\n\n  271 |     await page.waitForTimeout(400);\n  272 |     // btn-go is disabled by default. Verify it stays disabled\n> 273 |     await expect(page.locator('#btn-go')).toBeDisabled();\n      |                                           ^\n  274 |   });\n  275 |\n  276 |   test('round-trip toggle hides/shows destination input', async ({ page }) => {\n    at /var/www/360lm/tests/tour_pg.spec.js:273:43"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:30:49.238Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--9faa6-out-Excel-shows-error-toast-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--9faa6-out-Excel-shows-error-toast-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 43,
                        "line": 273
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-1ad6d74924fbe20b2a74",
              "file": "tour_pg.spec.js",
              "line": 268,
              "column": 3
            },
            {
              "title": "round-trip toggle hides/shows destination input",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 32,
                      "parallelIndex": 0,
                      "status": "timedOut",
                      "duration": 30150,
                      "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": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 16,
                            "line": 281
                          },
                          "message": "Error: page.click: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m  - waiting for locator('#inp-roundtrip')\u001b[22m\n\n\n  279 |     await page.waitForTimeout(400);\n  280 |     await expect(page.locator('#dest-wrap')).toBeHidden();\n> 281 |     await page.click('#inp-roundtrip');\n      |                ^\n  282 |     await page.waitForTimeout(120);\n  283 |     await expect(page.locator('#dest-wrap')).toBeVisible();\n  284 |     await page.click('#inp-roundtrip');\n    at /var/www/360lm/tests/tour_pg.spec.js:281:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:30:57.124Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--4b0c8-des-shows-destination-input-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--4b0c8-des-shows-destination-input-android-chrome/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 33,
                      "parallelIndex": 0,
                      "status": "timedOut",
                      "duration": 30099,
                      "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": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 16,
                            "line": 281
                          },
                          "message": "Error: page.click: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m  - waiting for locator('#inp-roundtrip')\u001b[22m\n\n\n  279 |     await page.waitForTimeout(400);\n  280 |     await expect(page.locator('#dest-wrap')).toBeHidden();\n> 281 |     await page.click('#inp-roundtrip');\n      |                ^\n  282 |     await page.waitForTimeout(120);\n  283 |     await expect(page.locator('#dest-wrap')).toBeVisible();\n  284 |     await page.click('#inp-roundtrip');\n    at /var/www/360lm/tests/tour_pg.spec.js:281:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:31:28.977Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--4b0c8-des-shows-destination-input-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--4b0c8-des-shows-destination-input-android-chrome-retry1/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-d37ddfb5b63aa657d1cf",
              "file": "tour_pg.spec.js",
              "line": 276,
              "column": 3
            },
            {
              "title": "full state pipeline via page.evaluate (mimics Excel upload)",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 34,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 1025,
                      "error": {
                        "message": "Error: page.evaluate: ReferenceError: state is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)",
                        "stack": "Error: page.evaluate: ReferenceError: state is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:295:31",
                        "location": {
                          "file": "eval at evaluate (:302:30), <anonymous>",
                          "column": 7,
                          "line": 2
                        }
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "eval at evaluate (:302:30), <anonymous>",
                            "column": 7,
                            "line": 2
                          },
                          "message": "Error: page.evaluate: ReferenceError: state is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:295:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:32:00.544Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--418e6-aluate-mimics-Excel-upload--android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--418e6-aluate-mimics-Excel-upload--android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "eval at evaluate (:302:30), <anonymous>",
                        "column": 7,
                        "line": 2
                      }
                    },
                    {
                      "workerIndex": 35,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 956,
                      "error": {
                        "message": "Error: page.evaluate: ReferenceError: state is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)",
                        "stack": "Error: page.evaluate: ReferenceError: state is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:295:31",
                        "location": {
                          "file": "eval at evaluate (:302:30), <anonymous>",
                          "column": 7,
                          "line": 2
                        }
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "eval at evaluate (:302:30), <anonymous>",
                            "column": 7,
                            "line": 2
                          },
                          "message": "Error: page.evaluate: ReferenceError: state is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:295:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:32:05.083Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--418e6-aluate-mimics-Excel-upload--android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--418e6-aluate-mimics-Excel-upload--android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "eval at evaluate (:302:30), <anonymous>",
                        "column": 7,
                        "line": 2
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-76a529476034b7654e66",
              "file": "tour_pg.spec.js",
              "line": 289,
              "column": 3
            },
            {
              "title": "manual planner: enter → add stops via factory → Find → editor",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 36,
                      "parallelIndex": 0,
                      "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": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 67,
                            "line": 331
                          },
                          "message": "Error: locator.click: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m  - waiting for locator('button:has-text(\"Plan a tour manually\")')\u001b[22m\n\n\n  329 |\n  330 |     // Open the manual planner from the landing page\n> 331 |     await page.locator('button:has-text(\"Plan a tour manually\")').click();\n      |                                                                   ^\n  332 |     await expect(page.locator('#s-manual')).toBeVisible();\n  333 |     await expect(page.locator('#user-pill-3')).toContainText('Harish');\n  334 |\n    at /var/www/360lm/tests/tour_pg.spec.js:331:67"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:32:08.037Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--0bac1-via-factory-→-Find-→-editor-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--0bac1-via-factory-→-Find-→-editor-android-chrome/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 37,
                      "parallelIndex": 0,
                      "status": "timedOut",
                      "duration": 30131,
                      "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": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 67,
                            "line": 331
                          },
                          "message": "Error: locator.click: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m  - waiting for locator('button:has-text(\"Plan a tour manually\")')\u001b[22m\n\n\n  329 |\n  330 |     // Open the manual planner from the landing page\n> 331 |     await page.locator('button:has-text(\"Plan a tour manually\")').click();\n      |                                                                   ^\n  332 |     await expect(page.locator('#s-manual')).toBeVisible();\n  333 |     await expect(page.locator('#user-pill-3')).toContainText('Harish');\n  334 |\n    at /var/www/360lm/tests/tour_pg.spec.js:331:67"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:32:40.349Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--0bac1-via-factory-→-Find-→-editor-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--0bac1-via-factory-→-Find-→-editor-android-chrome-retry1/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-4969201a960fbf508039",
              "file": "tour_pg.spec.js",
              "line": 325,
              "column": 3
            },
            {
              "title": "toggle include then verify state.stops still has the item",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 38,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 917,
                      "error": {
                        "message": "Error: page.evaluate: ReferenceError: state is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)",
                        "stack": "Error: page.evaluate: ReferenceError: state is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:367:16",
                        "location": {
                          "file": "eval at evaluate (:302:30), <anonymous>",
                          "column": 7,
                          "line": 2
                        }
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "eval at evaluate (:302:30), <anonymous>",
                            "column": 7,
                            "line": 2
                          },
                          "message": "Error: page.evaluate: ReferenceError: state is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:367:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:33:11.958Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--2be95-te-stops-still-has-the-item-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--2be95-te-stops-still-has-the-item-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "eval at evaluate (:302:30), <anonymous>",
                        "column": 7,
                        "line": 2
                      }
                    },
                    {
                      "workerIndex": 39,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 842,
                      "error": {
                        "message": "Error: page.evaluate: ReferenceError: state is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)",
                        "stack": "Error: page.evaluate: ReferenceError: state is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:367:16",
                        "location": {
                          "file": "eval at evaluate (:302:30), <anonymous>",
                          "column": 7,
                          "line": 2
                        }
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "eval at evaluate (:302:30), <anonymous>",
                            "column": 7,
                            "line": 2
                          },
                          "message": "Error: page.evaluate: ReferenceError: state is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:367:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:33:14.887Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--2be95-te-stops-still-has-the-item-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--2be95-te-stops-still-has-the-item-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "eval at evaluate (:302:30), <anonymous>",
                        "column": 7,
                        "line": 2
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-fb5425d4cf28fdd89fa0",
              "file": "tour_pg.spec.js",
              "line": 362,
              "column": 3
            },
            {
              "title": "clicking Go without Excel shows error toast",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 80,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5795,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeDisabled\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#btn-go')\nExpected: disabled\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeDisabled\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#btn-go')\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeDisabled\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#btn-go')\nExpected: disabled\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeDisabled\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#btn-go')\u001b[22m\n\n    at /var/www/360lm/tests/tour_pg.spec.js:273:43",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 43,
                          "line": 273
                        },
                        "snippet": "  271 |     await page.waitForTimeout(400);\n  272 |     // btn-go is disabled by default. Verify it stays disabled\n> 273 |     await expect(page.locator('#btn-go')).toBeDisabled();\n      |                                           ^\n  274 |   });\n  275 |\n  276 |   test('round-trip toggle hides/shows destination input', async ({ page }) => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 43,
                            "line": 273
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeDisabled\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#btn-go')\nExpected: disabled\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeDisabled\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#btn-go')\u001b[22m\n\n\n  271 |     await page.waitForTimeout(400);\n  272 |     // btn-go is disabled by default. Verify it stays disabled\n> 273 |     await expect(page.locator('#btn-go')).toBeDisabled();\n      |                                           ^\n  274 |   });\n  275 |\n  276 |   test('round-trip toggle hides/shows destination input', async ({ page }) => {\n    at /var/www/360lm/tests/tour_pg.spec.js:273:43"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:34:45.028Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--9faa6-out-Excel-shows-error-toast-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--9faa6-out-Excel-shows-error-toast-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 43,
                        "line": 273
                      }
                    },
                    {
                      "workerIndex": 81,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5941,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeDisabled\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#btn-go')\nExpected: disabled\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeDisabled\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#btn-go')\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeDisabled\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#btn-go')\nExpected: disabled\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeDisabled\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#btn-go')\u001b[22m\n\n    at /var/www/360lm/tests/tour_pg.spec.js:273:43",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 43,
                          "line": 273
                        },
                        "snippet": "  271 |     await page.waitForTimeout(400);\n  272 |     // btn-go is disabled by default. Verify it stays disabled\n> 273 |     await expect(page.locator('#btn-go')).toBeDisabled();\n      |                                           ^\n  274 |   });\n  275 |\n  276 |   test('round-trip toggle hides/shows destination input', async ({ page }) => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 43,
                            "line": 273
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeDisabled\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#btn-go')\nExpected: disabled\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeDisabled\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#btn-go')\u001b[22m\n\n\n  271 |     await page.waitForTimeout(400);\n  272 |     // btn-go is disabled by default. Verify it stays disabled\n> 273 |     await expect(page.locator('#btn-go')).toBeDisabled();\n      |                                           ^\n  274 |   });\n  275 |\n  276 |   test('round-trip toggle hides/shows destination input', async ({ page }) => {\n    at /var/www/360lm/tests/tour_pg.spec.js:273:43"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:34:52.847Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--9faa6-out-Excel-shows-error-toast-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--9faa6-out-Excel-shows-error-toast-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 43,
                        "line": 273
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-b55f22712ed011390d18",
              "file": "tour_pg.spec.js",
              "line": 268,
              "column": 3
            },
            {
              "title": "round-trip toggle hides/shows destination input",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 82,
                      "parallelIndex": 0,
                      "status": "timedOut",
                      "duration": 30140,
                      "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": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 16,
                            "line": 281
                          },
                          "message": "Error: page.click: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m  - waiting for locator('#inp-roundtrip')\u001b[22m\n\n\n  279 |     await page.waitForTimeout(400);\n  280 |     await expect(page.locator('#dest-wrap')).toBeHidden();\n> 281 |     await page.click('#inp-roundtrip');\n      |                ^\n  282 |     await page.waitForTimeout(120);\n  283 |     await expect(page.locator('#dest-wrap')).toBeVisible();\n  284 |     await page.click('#inp-roundtrip');\n    at /var/www/360lm/tests/tour_pg.spec.js:281:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:35:01.235Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--4b0c8-des-shows-destination-input-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--4b0c8-des-shows-destination-input-desktop-chrome/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 83,
                      "parallelIndex": 0,
                      "status": "timedOut",
                      "duration": 30211,
                      "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": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 16,
                            "line": 281
                          },
                          "message": "Error: page.click: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m  - waiting for locator('#inp-roundtrip')\u001b[22m\n\n\n  279 |     await page.waitForTimeout(400);\n  280 |     await expect(page.locator('#dest-wrap')).toBeHidden();\n> 281 |     await page.click('#inp-roundtrip');\n      |                ^\n  282 |     await page.waitForTimeout(120);\n  283 |     await expect(page.locator('#dest-wrap')).toBeVisible();\n  284 |     await page.click('#inp-roundtrip');\n    at /var/www/360lm/tests/tour_pg.spec.js:281:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:35:34.189Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--4b0c8-des-shows-destination-input-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--4b0c8-des-shows-destination-input-desktop-chrome-retry1/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-2542672225a60b02d394",
              "file": "tour_pg.spec.js",
              "line": 276,
              "column": 3
            },
            {
              "title": "full state pipeline via page.evaluate (mimics Excel upload)",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 84,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 1138,
                      "error": {
                        "message": "Error: page.evaluate: ReferenceError: state is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)",
                        "stack": "Error: page.evaluate: ReferenceError: state is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:295:31",
                        "location": {
                          "file": "eval at evaluate (:302:30), <anonymous>",
                          "column": 7,
                          "line": 2
                        }
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "eval at evaluate (:302:30), <anonymous>",
                            "column": 7,
                            "line": 2
                          },
                          "message": "Error: page.evaluate: ReferenceError: state is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:295:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:36:06.575Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--418e6-aluate-mimics-Excel-upload--desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--418e6-aluate-mimics-Excel-upload--desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "eval at evaluate (:302:30), <anonymous>",
                        "column": 7,
                        "line": 2
                      }
                    },
                    {
                      "workerIndex": 85,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 972,
                      "error": {
                        "message": "Error: page.evaluate: ReferenceError: state is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)",
                        "stack": "Error: page.evaluate: ReferenceError: state is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:295:31",
                        "location": {
                          "file": "eval at evaluate (:302:30), <anonymous>",
                          "column": 7,
                          "line": 2
                        }
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "eval at evaluate (:302:30), <anonymous>",
                            "column": 7,
                            "line": 2
                          },
                          "message": "Error: page.evaluate: ReferenceError: state is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:295:31"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:36:10.185Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--418e6-aluate-mimics-Excel-upload--desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--418e6-aluate-mimics-Excel-upload--desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "eval at evaluate (:302:30), <anonymous>",
                        "column": 7,
                        "line": 2
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-ee875d59fbce16fa3a8f",
              "file": "tour_pg.spec.js",
              "line": 289,
              "column": 3
            },
            {
              "title": "manual planner: enter → add stops via factory → Find → editor",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 86,
                      "parallelIndex": 0,
                      "status": "timedOut",
                      "duration": 30095,
                      "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": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 67,
                            "line": 331
                          },
                          "message": "Error: locator.click: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m  - waiting for locator('button:has-text(\"Plan a tour manually\")')\u001b[22m\n\n\n  329 |\n  330 |     // Open the manual planner from the landing page\n> 331 |     await page.locator('button:has-text(\"Plan a tour manually\")').click();\n      |                                                                   ^\n  332 |     await expect(page.locator('#s-manual')).toBeVisible();\n  333 |     await expect(page.locator('#user-pill-3')).toContainText('Harish');\n  334 |\n    at /var/www/360lm/tests/tour_pg.spec.js:331:67"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:36:13.370Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--0bac1-via-factory-→-Find-→-editor-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--0bac1-via-factory-→-Find-→-editor-desktop-chrome/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 87,
                      "parallelIndex": 0,
                      "status": "timedOut",
                      "duration": 30129,
                      "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": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 67,
                            "line": 331
                          },
                          "message": "Error: locator.click: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m  - waiting for locator('button:has-text(\"Plan a tour manually\")')\u001b[22m\n\n\n  329 |\n  330 |     // Open the manual planner from the landing page\n> 331 |     await page.locator('button:has-text(\"Plan a tour manually\")').click();\n      |                                                                   ^\n  332 |     await expect(page.locator('#s-manual')).toBeVisible();\n  333 |     await expect(page.locator('#user-pill-3')).toContainText('Harish');\n  334 |\n    at /var/www/360lm/tests/tour_pg.spec.js:331:67"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:36:44.894Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--0bac1-via-factory-→-Find-→-editor-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--0bac1-via-factory-→-Find-→-editor-desktop-chrome-retry1/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-3eed26b6c0e35f36d7c9",
              "file": "tour_pg.spec.js",
              "line": 325,
              "column": 3
            },
            {
              "title": "toggle include then verify state.stops still has the item",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 88,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 747,
                      "error": {
                        "message": "Error: page.evaluate: ReferenceError: state is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)",
                        "stack": "Error: page.evaluate: ReferenceError: state is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:367:16",
                        "location": {
                          "file": "eval at evaluate (:302:30), <anonymous>",
                          "column": 7,
                          "line": 2
                        }
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "eval at evaluate (:302:30), <anonymous>",
                            "column": 7,
                            "line": 2
                          },
                          "message": "Error: page.evaluate: ReferenceError: state is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:367:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:37:16.334Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--2be95-te-stops-still-has-the-item-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--2be95-te-stops-still-has-the-item-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "eval at evaluate (:302:30), <anonymous>",
                        "column": 7,
                        "line": 2
                      }
                    },
                    {
                      "workerIndex": 89,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 971,
                      "error": {
                        "message": "Error: page.evaluate: ReferenceError: state is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)",
                        "stack": "Error: page.evaluate: ReferenceError: state is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:367:16",
                        "location": {
                          "file": "eval at evaluate (:302:30), <anonymous>",
                          "column": 7,
                          "line": 2
                        }
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "eval at evaluate (:302:30), <anonymous>",
                            "column": 7,
                            "line": 2
                          },
                          "message": "Error: page.evaluate: ReferenceError: state is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:2:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:367:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:37:18.458Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--2be95-te-stops-still-has-the-item-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--2be95-te-stops-still-has-the-item-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "eval at evaluate (:302:30), <anonymous>",
                        "column": 7,
                        "line": 2
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-ee0ea69eaa8d3fc3f0d7",
              "file": "tour_pg.spec.js",
              "line": 362,
              "column": 3
            }
          ]
        },
        {
          "title": "Tour Playground — Hub",
          "file": "tour_pg.spec.js",
          "line": 394,
          "column": 6,
          "specs": [
            {
              "title": "PWA is registered in hub.pwa_registry with grants",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 40,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 121,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m1\u001b[39m\nReceived: \u001b[31m0\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m1\u001b[39m\nReceived: \u001b[31m0\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:401:25",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 25,
                          "line": 401
                        },
                        "snippet": "  399 |     });\n  400 |     const rows = await r.json();\n> 401 |     expect(rows.length).toBe(1);\n      |                         ^\n  402 |     expect(rows[0].url).toBe('/tour-pg/');\n  403 |     expect(rows[0].is_live).toBe(true);\n  404 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 25,
                            "line": 401
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m1\u001b[39m\nReceived: \u001b[31m0\u001b[39m\n\n  399 |     });\n  400 |     const rows = await r.json();\n> 401 |     expect(rows.length).toBe(1);\n      |                         ^\n  402 |     expect(rows[0].url).toBe('/tour-pg/');\n  403 |     expect(rows[0].is_live).toBe(true);\n  404 |\n    at /var/www/360lm/tests/tour_pg.spec.js:401:25"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:33:16.907Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--ef9ad-ub-pwa-registry-with-grants-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 25,
                        "line": 401
                      }
                    },
                    {
                      "workerIndex": 41,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 59,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m1\u001b[39m\nReceived: \u001b[31m0\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m1\u001b[39m\nReceived: \u001b[31m0\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:401:25",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 25,
                          "line": 401
                        },
                        "snippet": "  399 |     });\n  400 |     const rows = await r.json();\n> 401 |     expect(rows.length).toBe(1);\n      |                         ^\n  402 |     expect(rows[0].url).toBe('/tour-pg/');\n  403 |     expect(rows[0].is_live).toBe(true);\n  404 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 25,
                            "line": 401
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m1\u001b[39m\nReceived: \u001b[31m0\u001b[39m\n\n  399 |     });\n  400 |     const rows = await r.json();\n> 401 |     expect(rows.length).toBe(1);\n      |                         ^\n  402 |     expect(rows[0].url).toBe('/tour-pg/');\n  403 |     expect(rows[0].is_live).toBe(true);\n  404 |\n    at /var/www/360lm/tests/tour_pg.spec.js:401:25"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:33:18.057Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--ef9ad-ub-pwa-registry-with-grants-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 25,
                        "line": 401
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-dbd8d78ec13d6ad2657d",
              "file": "tour_pg.spec.js",
              "line": 395,
              "column": 3
            },
            {
              "title": "PWA is registered in hub.pwa_registry with grants",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 90,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 111,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m1\u001b[39m\nReceived: \u001b[31m0\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m1\u001b[39m\nReceived: \u001b[31m0\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:401:25",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 25,
                          "line": 401
                        },
                        "snippet": "  399 |     });\n  400 |     const rows = await r.json();\n> 401 |     expect(rows.length).toBe(1);\n      |                         ^\n  402 |     expect(rows[0].url).toBe('/tour-pg/');\n  403 |     expect(rows[0].is_live).toBe(true);\n  404 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 25,
                            "line": 401
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m1\u001b[39m\nReceived: \u001b[31m0\u001b[39m\n\n  399 |     });\n  400 |     const rows = await r.json();\n> 401 |     expect(rows.length).toBe(1);\n      |                         ^\n  402 |     expect(rows[0].url).toBe('/tour-pg/');\n  403 |     expect(rows[0].is_live).toBe(true);\n  404 |\n    at /var/www/360lm/tests/tour_pg.spec.js:401:25"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:37:21.118Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--ef9ad-ub-pwa-registry-with-grants-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 25,
                        "line": 401
                      }
                    },
                    {
                      "workerIndex": 91,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 77,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m1\u001b[39m\nReceived: \u001b[31m0\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m1\u001b[39m\nReceived: \u001b[31m0\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:401:25",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 25,
                          "line": 401
                        },
                        "snippet": "  399 |     });\n  400 |     const rows = await r.json();\n> 401 |     expect(rows.length).toBe(1);\n      |                         ^\n  402 |     expect(rows[0].url).toBe('/tour-pg/');\n  403 |     expect(rows[0].is_live).toBe(true);\n  404 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 25,
                            "line": 401
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\nExpected: \u001b[32m1\u001b[39m\nReceived: \u001b[31m0\u001b[39m\n\n  399 |     });\n  400 |     const rows = await r.json();\n> 401 |     expect(rows.length).toBe(1);\n      |                         ^\n  402 |     expect(rows[0].url).toBe('/tour-pg/');\n  403 |     expect(rows[0].is_live).toBe(true);\n  404 |\n    at /var/www/360lm/tests/tour_pg.spec.js:401:25"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:37:22.251Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--ef9ad-ub-pwa-registry-with-grants-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 25,
                        "line": 401
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-8827f07514089a554a45",
              "file": "tour_pg.spec.js",
              "line": 395,
              "column": 3
            }
          ]
        },
        {
          "title": "Tour Playground — Excel header-row detection",
          "file": "tour_pg.spec.js",
          "line": 421,
          "column": 6,
          "specs": [
            {
              "title": "findHeaderRowIndex skips title rows and finds real headers",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 42,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 922,
                      "error": {
                        "message": "Error: page.evaluate: ReferenceError: findHeaderRowIndex is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:4:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)",
                        "stack": "Error: page.evaluate: ReferenceError: findHeaderRowIndex is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:4:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:4:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:427:28",
                        "location": {
                          "file": "eval at evaluate (:302:30), <anonymous>",
                          "column": 7,
                          "line": 4
                        }
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "eval at evaluate (:302:30), <anonymous>",
                            "column": 7,
                            "line": 4
                          },
                          "message": "Error: page.evaluate: ReferenceError: findHeaderRowIndex is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:4:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:4:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:427:28"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:33:19.197Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--66016-rows-and-finds-real-headers-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--66016-rows-and-finds-real-headers-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "eval at evaluate (:302:30), <anonymous>",
                        "column": 7,
                        "line": 4
                      }
                    },
                    {
                      "workerIndex": 43,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 930,
                      "error": {
                        "message": "Error: page.evaluate: ReferenceError: findHeaderRowIndex is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:4:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)",
                        "stack": "Error: page.evaluate: ReferenceError: findHeaderRowIndex is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:4:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:4:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:427:28",
                        "location": {
                          "file": "eval at evaluate (:302:30), <anonymous>",
                          "column": 7,
                          "line": 4
                        }
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "eval at evaluate (:302:30), <anonymous>",
                            "column": 7,
                            "line": 4
                          },
                          "message": "Error: page.evaluate: ReferenceError: findHeaderRowIndex is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:4:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:4:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:427:28"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:33:21.290Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--66016-rows-and-finds-real-headers-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--66016-rows-and-finds-real-headers-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "eval at evaluate (:302:30), <anonymous>",
                        "column": 7,
                        "line": 4
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-dc2e3161aaff41137354",
              "file": "tour_pg.spec.js",
              "line": 422,
              "column": 3
            },
            {
              "title": "findHeaderRowIndex returns 0 for well-formed files (no title rows)",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 44,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 1048,
                      "error": {
                        "message": "Error: page.evaluate: ReferenceError: findHeaderRowIndex is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:3:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)",
                        "stack": "Error: page.evaluate: ReferenceError: findHeaderRowIndex is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:3:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:3:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:446:28",
                        "location": {
                          "file": "eval at evaluate (:302:30), <anonymous>",
                          "column": 7,
                          "line": 3
                        }
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "eval at evaluate (:302:30), <anonymous>",
                            "column": 7,
                            "line": 3
                          },
                          "message": "Error: page.evaluate: ReferenceError: findHeaderRowIndex is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:3:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:3:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:446:28"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:33:23.606Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--9ed51-formed-files-no-title-rows--android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--9ed51-formed-files-no-title-rows--android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "eval at evaluate (:302:30), <anonymous>",
                        "column": 7,
                        "line": 3
                      }
                    },
                    {
                      "workerIndex": 45,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 953,
                      "error": {
                        "message": "Error: page.evaluate: ReferenceError: findHeaderRowIndex is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:3:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)",
                        "stack": "Error: page.evaluate: ReferenceError: findHeaderRowIndex is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:3:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:3:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:446:28",
                        "location": {
                          "file": "eval at evaluate (:302:30), <anonymous>",
                          "column": 7,
                          "line": 3
                        }
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "eval at evaluate (:302:30), <anonymous>",
                            "column": 7,
                            "line": 3
                          },
                          "message": "Error: page.evaluate: ReferenceError: findHeaderRowIndex is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:3:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:3:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:446:28"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:33:25.939Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--9ed51-formed-files-no-title-rows--android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--9ed51-formed-files-no-title-rows--android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "eval at evaluate (:302:30), <anonymous>",
                        "column": 7,
                        "line": 3
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-bad23d34ad3665a04928",
              "file": "tour_pg.spec.js",
              "line": 441,
              "column": 3
            },
            {
              "title": "source contains findHeaderRowIndex function",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 63,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"function findHeaderRowIndex(\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"function findHeaderRowIndex(\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:460:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 460
                        },
                        "snippet": "  458 |     const html = await (await ctx.get(BASE_URL)).text();\n  459 |     await ctx.dispose();\n> 460 |     expect(html).toContain('function findHeaderRowIndex(');\n      |                  ^\n  461 |     expect(html).toContain('range: hdrIdx');\n  462 |   });\n  463 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 460
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"function findHeaderRowIndex(\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  458 |     const html = await (await ctx.get(BASE_URL)).text();\n  459 |     await ctx.dispose();\n> 460 |     expect(html).toContain('function findHeaderRowIndex(');\n      |                  ^\n  461 |     expect(html).toContain('range: hdrIdx');\n  462 |   });\n  463 |\n    at /var/www/360lm/tests/tour_pg.spec.js:460:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:33:28.198Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--8fdb7-findHeaderRowIndex-function-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 460
                      }
                    },
                    {
                      "workerIndex": 47,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 79,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"function findHeaderRowIndex(\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"function findHeaderRowIndex(\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:460:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 460
                        },
                        "snippet": "  458 |     const html = await (await ctx.get(BASE_URL)).text();\n  459 |     await ctx.dispose();\n> 460 |     expect(html).toContain('function findHeaderRowIndex(');\n      |                  ^\n  461 |     expect(html).toContain('range: hdrIdx');\n  462 |   });\n  463 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 460
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"function findHeaderRowIndex(\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  458 |     const html = await (await ctx.get(BASE_URL)).text();\n  459 |     await ctx.dispose();\n> 460 |     expect(html).toContain('function findHeaderRowIndex(');\n      |                  ^\n  461 |     expect(html).toContain('range: hdrIdx');\n  462 |   });\n  463 |\n    at /var/www/360lm/tests/tour_pg.spec.js:460:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:33:29.209Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--8fdb7-findHeaderRowIndex-function-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 460
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-0d8675d8c0a33d8b0f92",
              "file": "tour_pg.spec.js",
              "line": 456,
              "column": 3
            },
            {
              "title": "cache version is v22 or later",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 48,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 109,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoMatch\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected pattern: \u001b[32m/tour-pg-v(2[2-9]|[3-9]\\d)/\u001b[39m\nReceived string:  \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoMatch\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected pattern: \u001b[32m/tour-pg-v(2[2-9]|[3-9]\\d)/\u001b[39m\nReceived string:  \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:468:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 468
                        },
                        "snippet": "  466 |     const html = await (await ctx.get(BASE_URL)).text();\n  467 |     await ctx.dispose();\n> 468 |     expect(html).toMatch(/tour-pg-v(2[2-9]|[3-9]\\d)/);\n      |                  ^\n  469 |   });\n  470 | });\n  471 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 468
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoMatch\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected pattern: \u001b[32m/tour-pg-v(2[2-9]|[3-9]\\d)/\u001b[39m\nReceived string:  \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  466 |     const html = await (await ctx.get(BASE_URL)).text();\n  467 |     await ctx.dispose();\n> 468 |     expect(html).toMatch(/tour-pg-v(2[2-9]|[3-9]\\d)/);\n      |                  ^\n  469 |   });\n  470 | });\n  471 |\n    at /var/www/360lm/tests/tour_pg.spec.js:468:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:33:30.368Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--c6067-che-version-is-v22-or-later-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 468
                      }
                    },
                    {
                      "workerIndex": 49,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 65,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoMatch\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected pattern: \u001b[32m/tour-pg-v(2[2-9]|[3-9]\\d)/\u001b[39m\nReceived string:  \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoMatch\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected pattern: \u001b[32m/tour-pg-v(2[2-9]|[3-9]\\d)/\u001b[39m\nReceived string:  \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:468:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 468
                        },
                        "snippet": "  466 |     const html = await (await ctx.get(BASE_URL)).text();\n  467 |     await ctx.dispose();\n> 468 |     expect(html).toMatch(/tour-pg-v(2[2-9]|[3-9]\\d)/);\n      |                  ^\n  469 |   });\n  470 | });\n  471 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 468
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoMatch\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected pattern: \u001b[32m/tour-pg-v(2[2-9]|[3-9]\\d)/\u001b[39m\nReceived string:  \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  466 |     const html = await (await ctx.get(BASE_URL)).text();\n  467 |     await ctx.dispose();\n> 468 |     expect(html).toMatch(/tour-pg-v(2[2-9]|[3-9]\\d)/);\n      |                  ^\n  469 |   });\n  470 | });\n  471 |\n    at /var/www/360lm/tests/tour_pg.spec.js:468:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:33:31.545Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--c6067-che-version-is-v22-or-later-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 468
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-dbe9d43d0bf07ff3bb80",
              "file": "tour_pg.spec.js",
              "line": 464,
              "column": 3
            },
            {
              "title": "findHeaderRowIndex skips title rows and finds real headers",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 92,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 980,
                      "error": {
                        "message": "Error: page.evaluate: ReferenceError: findHeaderRowIndex is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:4:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)",
                        "stack": "Error: page.evaluate: ReferenceError: findHeaderRowIndex is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:4:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:4:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:427:28",
                        "location": {
                          "file": "eval at evaluate (:302:30), <anonymous>",
                          "column": 7,
                          "line": 4
                        }
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "eval at evaluate (:302:30), <anonymous>",
                            "column": 7,
                            "line": 4
                          },
                          "message": "Error: page.evaluate: ReferenceError: findHeaderRowIndex is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:4:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:4:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:427:28"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:37:23.361Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--66016-rows-and-finds-real-headers-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--66016-rows-and-finds-real-headers-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "eval at evaluate (:302:30), <anonymous>",
                        "column": 7,
                        "line": 4
                      }
                    },
                    {
                      "workerIndex": 93,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 1054,
                      "error": {
                        "message": "Error: page.evaluate: ReferenceError: findHeaderRowIndex is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:4:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)",
                        "stack": "Error: page.evaluate: ReferenceError: findHeaderRowIndex is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:4:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:4:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:427:28",
                        "location": {
                          "file": "eval at evaluate (:302:30), <anonymous>",
                          "column": 7,
                          "line": 4
                        }
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "eval at evaluate (:302:30), <anonymous>",
                            "column": 7,
                            "line": 4
                          },
                          "message": "Error: page.evaluate: ReferenceError: findHeaderRowIndex is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:4:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:4:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:427:28"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:37:25.476Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--66016-rows-and-finds-real-headers-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--66016-rows-and-finds-real-headers-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "eval at evaluate (:302:30), <anonymous>",
                        "column": 7,
                        "line": 4
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-469f75b1ee2b672dcf48",
              "file": "tour_pg.spec.js",
              "line": 422,
              "column": 3
            },
            {
              "title": "findHeaderRowIndex returns 0 for well-formed files (no title rows)",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 94,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 1133,
                      "error": {
                        "message": "Error: page.evaluate: ReferenceError: findHeaderRowIndex is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:3:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)",
                        "stack": "Error: page.evaluate: ReferenceError: findHeaderRowIndex is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:3:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:3:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:446:28",
                        "location": {
                          "file": "eval at evaluate (:302:30), <anonymous>",
                          "column": 7,
                          "line": 3
                        }
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "eval at evaluate (:302:30), <anonymous>",
                            "column": 7,
                            "line": 3
                          },
                          "message": "Error: page.evaluate: ReferenceError: findHeaderRowIndex is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:3:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:3:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:446:28"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:37:28.407Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--9ed51-formed-files-no-title-rows--desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--9ed51-formed-files-no-title-rows--desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "eval at evaluate (:302:30), <anonymous>",
                        "column": 7,
                        "line": 3
                      }
                    },
                    {
                      "workerIndex": 95,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 1144,
                      "error": {
                        "message": "Error: page.evaluate: ReferenceError: findHeaderRowIndex is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:3:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)",
                        "stack": "Error: page.evaluate: ReferenceError: findHeaderRowIndex is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:3:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:3:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:446:28",
                        "location": {
                          "file": "eval at evaluate (:302:30), <anonymous>",
                          "column": 7,
                          "line": 3
                        }
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "eval at evaluate (:302:30), <anonymous>",
                            "column": 7,
                            "line": 3
                          },
                          "message": "Error: page.evaluate: ReferenceError: findHeaderRowIndex is not defined\n    at eval (eval at evaluate (:302:30), <anonymous>:3:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at eval (eval at evaluate (:302:30), <anonymous>:3:7)\n    at UtilityScript.evaluate (<anonymous>:304:16)\n    at UtilityScript.<anonymous> (<anonymous>:1:44)\n    at /var/www/360lm/tests/tour_pg.spec.js:446:28"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:37:31.136Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--9ed51-formed-files-no-title-rows--desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--9ed51-formed-files-no-title-rows--desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "eval at evaluate (:302:30), <anonymous>",
                        "column": 7,
                        "line": 3
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-ed54ef0227153f9ae35e",
              "file": "tour_pg.spec.js",
              "line": 441,
              "column": 3
            },
            {
              "title": "source contains findHeaderRowIndex function",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 96,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 110,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"function findHeaderRowIndex(\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"function findHeaderRowIndex(\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:460:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 460
                        },
                        "snippet": "  458 |     const html = await (await ctx.get(BASE_URL)).text();\n  459 |     await ctx.dispose();\n> 460 |     expect(html).toContain('function findHeaderRowIndex(');\n      |                  ^\n  461 |     expect(html).toContain('range: hdrIdx');\n  462 |   });\n  463 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 460
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"function findHeaderRowIndex(\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  458 |     const html = await (await ctx.get(BASE_URL)).text();\n  459 |     await ctx.dispose();\n> 460 |     expect(html).toContain('function findHeaderRowIndex(');\n      |                  ^\n  461 |     expect(html).toContain('range: hdrIdx');\n  462 |   });\n  463 |\n    at /var/www/360lm/tests/tour_pg.spec.js:460:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:37:33.935Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--8fdb7-findHeaderRowIndex-function-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 460
                      }
                    },
                    {
                      "workerIndex": 97,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 76,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"function findHeaderRowIndex(\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"function findHeaderRowIndex(\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:460:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 460
                        },
                        "snippet": "  458 |     const html = await (await ctx.get(BASE_URL)).text();\n  459 |     await ctx.dispose();\n> 460 |     expect(html).toContain('function findHeaderRowIndex(');\n      |                  ^\n  461 |     expect(html).toContain('range: hdrIdx');\n  462 |   });\n  463 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 460
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoContain\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // indexOf\u001b[22m\n\nExpected substring: \u001b[32m\"function findHeaderRowIndex(\"\u001b[39m\nReceived string:    \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  458 |     const html = await (await ctx.get(BASE_URL)).text();\n  459 |     await ctx.dispose();\n> 460 |     expect(html).toContain('function findHeaderRowIndex(');\n      |                  ^\n  461 |     expect(html).toContain('range: hdrIdx');\n  462 |   });\n  463 |\n    at /var/www/360lm/tests/tour_pg.spec.js:460:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:37:35.384Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--8fdb7-findHeaderRowIndex-function-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 460
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-4f10869e881490f3f873",
              "file": "tour_pg.spec.js",
              "line": 456,
              "column": 3
            },
            {
              "title": "cache version is v22 or later",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 98,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 79,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoMatch\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected pattern: \u001b[32m/tour-pg-v(2[2-9]|[3-9]\\d)/\u001b[39m\nReceived string:  \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoMatch\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected pattern: \u001b[32m/tour-pg-v(2[2-9]|[3-9]\\d)/\u001b[39m\nReceived string:  \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:468:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 468
                        },
                        "snippet": "  466 |     const html = await (await ctx.get(BASE_URL)).text();\n  467 |     await ctx.dispose();\n> 468 |     expect(html).toMatch(/tour-pg-v(2[2-9]|[3-9]\\d)/);\n      |                  ^\n  469 |   });\n  470 | });\n  471 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 468
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoMatch\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected pattern: \u001b[32m/tour-pg-v(2[2-9]|[3-9]\\d)/\u001b[39m\nReceived string:  \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  466 |     const html = await (await ctx.get(BASE_URL)).text();\n  467 |     await ctx.dispose();\n> 468 |     expect(html).toMatch(/tour-pg-v(2[2-9]|[3-9]\\d)/);\n      |                  ^\n  469 |   });\n  470 | });\n  471 |\n    at /var/www/360lm/tests/tour_pg.spec.js:468:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-06-24T07:37:36.594Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--c6067-che-version-is-v22-or-later-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 468
                      }
                    },
                    {
                      "workerIndex": 99,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 82,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoMatch\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected pattern: \u001b[32m/tour-pg-v(2[2-9]|[3-9]\\d)/\u001b[39m\nReceived string:  \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoMatch\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected pattern: \u001b[32m/tour-pg-v(2[2-9]|[3-9]\\d)/\u001b[39m\nReceived string:  \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n    at /var/www/360lm/tests/tour_pg.spec.js:468:18",
                        "location": {
                          "file": "/var/www/360lm/tests/tour_pg.spec.js",
                          "column": 18,
                          "line": 468
                        },
                        "snippet": "  466 |     const html = await (await ctx.get(BASE_URL)).text();\n  467 |     await ctx.dispose();\n> 468 |     expect(html).toMatch(/tour-pg-v(2[2-9]|[3-9]\\d)/);\n      |                  ^\n  469 |   });\n  470 | });\n  471 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/tour_pg.spec.js",
                            "column": 18,
                            "line": 468
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoMatch\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected pattern: \u001b[32m/tour-pg-v(2[2-9]|[3-9]\\d)/\u001b[39m\nReceived string:  \u001b[31m\"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\u001b[39m\n\u001b[31m<html><head>\u001b[39m\n\u001b[31m<title>404 Not Found</title>\u001b[39m\n\u001b[31m</head><body>\u001b[39m\n\u001b[31m<h1>Not Found</h1>\u001b[39m\n\u001b[31m<p>The requested URL was not found on this server.</p>\u001b[39m\n\u001b[31m</body></html>\u001b[39m\n\u001b[31m\"\u001b[39m\n\n  466 |     const html = await (await ctx.get(BASE_URL)).text();\n  467 |     await ctx.dispose();\n> 468 |     expect(html).toMatch(/tour-pg-v(2[2-9]|[3-9]\\d)/);\n      |                  ^\n  469 |   });\n  470 | });\n  471 |\n    at /var/www/360lm/tests/tour_pg.spec.js:468:18"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-06-24T07:37:37.821Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/tour_pg-Tour-Playground-—--c6067-che-version-is-v22-or-later-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/tour_pg.spec.js",
                        "column": 18,
                        "line": 468
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "c6527e00e898397fb4a5-f86894a2e417ced9e5ee",
              "file": "tour_pg.spec.js",
              "line": 464,
              "column": 3
            }
          ]
        }
      ]
    }
  ],
  "errors": [],
  "stats": {
    "startTime": "2026-06-24T07:29:08.476Z",
    "duration": 509540.60699999996,
    "expected": 8,
    "skipped": 0,
    "unexpected": 50,
    "flaky": 0
  }
}