{
  "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"
      ]
    ],
    "reportSlowTests": {
      "max": 5,
      "threshold": 300000
    },
    "shard": null,
    "tags": [],
    "updateSnapshots": "missing",
    "updateSourceMethod": "patch",
    "version": "1.60.0",
    "workers": 1,
    "webServer": null
  },
  "suites": [
    {
      "title": "custodian.spec.js",
      "file": "custodian.spec.js",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "Fund Custodian — Access Control",
          "file": "custodian.spec.js",
          "line": 18,
          "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": 0,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1835,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:23:51.262Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "e1e49def2648bf8aa609-7c3909eeb38a71365cfc",
              "file": "custodian.spec.js",
              "line": 19,
              "column": 3
            },
            {
              "title": "non-custodian user → access denied screen",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 0,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6728,
                      "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('text=Access Denied')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('text=Access Denied')\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('text=Access Denied')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('text=Access Denied')\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:27:54",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 54,
                          "line": 27
                        },
                        "snippet": "  25 |     await injectSession(page, 'mukesh', 'Mukesh');\n  26 |     await page.goto(BASE_URL);\n> 27 |     await expect(page.locator('text=Access Denied')).toBeVisible({ timeout: 6000 });\n     |                                                      ^\n  28 |   });\n  29 | });\n  30 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 54,
                            "line": 27
                          },
                          "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('text=Access Denied')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('text=Access Denied')\u001b[22m\n\n\n  25 |     await injectSession(page, 'mukesh', 'Mukesh');\n  26 |     await page.goto(BASE_URL);\n> 27 |     await expect(page.locator('text=Access Denied')).toBeVisible({ timeout: 6000 });\n     |                                                      ^\n  28 |   });\n  29 | });\n  30 |\n    at /var/www/360lm/tests/custodian.spec.js:27:54"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:23:54.995Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-2fad3-user-→-access-denied-screen-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-2fad3-user-→-access-denied-screen-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 54,
                        "line": 27
                      }
                    },
                    {
                      "workerIndex": 1,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6675,
                      "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('text=Access Denied')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('text=Access Denied')\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('text=Access Denied')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('text=Access Denied')\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:27:54",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 54,
                          "line": 27
                        },
                        "snippet": "  25 |     await injectSession(page, 'mukesh', 'Mukesh');\n  26 |     await page.goto(BASE_URL);\n> 27 |     await expect(page.locator('text=Access Denied')).toBeVisible({ timeout: 6000 });\n     |                                                      ^\n  28 |   });\n  29 | });\n  30 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 54,
                            "line": 27
                          },
                          "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('text=Access Denied')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('text=Access Denied')\u001b[22m\n\n\n  25 |     await injectSession(page, 'mukesh', 'Mukesh');\n  26 |     await page.goto(BASE_URL);\n> 27 |     await expect(page.locator('text=Access Denied')).toBeVisible({ timeout: 6000 });\n     |                                                      ^\n  28 |   });\n  29 | });\n  30 |\n    at /var/www/360lm/tests/custodian.spec.js:27:54"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-19T13:24:03.307Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-2fad3-user-→-access-denied-screen-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-2fad3-user-→-access-denied-screen-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 54,
                        "line": 27
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e1e49def2648bf8aa609-76b7ea23a2b3b195859e",
              "file": "custodian.spec.js",
              "line": 24,
              "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": 20,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 553,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:28:43.533Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "e1e49def2648bf8aa609-c6f22316cb8cac2d41a0",
              "file": "custodian.spec.js",
              "line": 19,
              "column": 3
            },
            {
              "title": "non-custodian user → access denied screen",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 20,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6346,
                      "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('text=Access Denied')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('text=Access Denied')\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('text=Access Denied')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('text=Access Denied')\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:27:54",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 54,
                          "line": 27
                        },
                        "snippet": "  25 |     await injectSession(page, 'mukesh', 'Mukesh');\n  26 |     await page.goto(BASE_URL);\n> 27 |     await expect(page.locator('text=Access Denied')).toBeVisible({ timeout: 6000 });\n     |                                                      ^\n  28 |   });\n  29 | });\n  30 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 54,
                            "line": 27
                          },
                          "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('text=Access Denied')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('text=Access Denied')\u001b[22m\n\n\n  25 |     await injectSession(page, 'mukesh', 'Mukesh');\n  26 |     await page.goto(BASE_URL);\n> 27 |     await expect(page.locator('text=Access Denied')).toBeVisible({ timeout: 6000 });\n     |                                                      ^\n  28 |   });\n  29 | });\n  30 |\n    at /var/www/360lm/tests/custodian.spec.js:27:54"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:28:44.255Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-2fad3-user-→-access-denied-screen-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-2fad3-user-→-access-denied-screen-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 54,
                        "line": 27
                      }
                    },
                    {
                      "workerIndex": 21,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6466,
                      "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('text=Access Denied')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('text=Access Denied')\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('text=Access Denied')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('text=Access Denied')\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:27:54",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 54,
                          "line": 27
                        },
                        "snippet": "  25 |     await injectSession(page, 'mukesh', 'Mukesh');\n  26 |     await page.goto(BASE_URL);\n> 27 |     await expect(page.locator('text=Access Denied')).toBeVisible({ timeout: 6000 });\n     |                                                      ^\n  28 |   });\n  29 | });\n  30 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 54,
                            "line": 27
                          },
                          "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('text=Access Denied')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('text=Access Denied')\u001b[22m\n\n\n  25 |     await injectSession(page, 'mukesh', 'Mukesh');\n  26 |     await page.goto(BASE_URL);\n> 27 |     await expect(page.locator('text=Access Denied')).toBeVisible({ timeout: 6000 });\n     |                                                      ^\n  28 |   });\n  29 | });\n  30 |\n    at /var/www/360lm/tests/custodian.spec.js:27:54"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-19T13:28:51.522Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-2fad3-user-→-access-denied-screen-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-2fad3-user-→-access-denied-screen-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 54,
                        "line": 27
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e1e49def2648bf8aa609-f5e93d358190122d1341",
              "file": "custodian.spec.js",
              "line": 24,
              "column": 3
            }
          ]
        },
        {
          "title": "Fund Custodian — Dashboard (Shambhu)",
          "file": "custodian.spec.js",
          "line": 31,
          "column": 6,
          "specs": [
            {
              "title": "dashboard loads with wallet card",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 2,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5616,
                      "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('#my-bal')\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('#my-bal')\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('#my-bal')\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('#my-bal')\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:39:43",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 43,
                          "line": 39
                        },
                        "snippet": "  37 |     await page.goto(BASE_URL);\n  38 |     await expect(page.locator('#s-dash')).toBeVisible({ timeout: 8000 });\n> 39 |     await expect(page.locator('#my-bal')).toBeVisible();\n     |                                           ^\n  40 |   });\n  41 |\n  42 |   test('admin-only balance grid hidden for shambhu', async ({ page }) => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 43,
                            "line": 39
                          },
                          "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('#my-bal')\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('#my-bal')\u001b[22m\n\n\n  37 |     await page.goto(BASE_URL);\n  38 |     await expect(page.locator('#s-dash')).toBeVisible({ timeout: 8000 });\n> 39 |     await expect(page.locator('#my-bal')).toBeVisible();\n     |                                           ^\n  40 |   });\n  41 |\n  42 |   test('admin-only balance grid hidden for shambhu', async ({ page }) => {\n    at /var/www/360lm/tests/custodian.spec.js:39:43"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:24:11.150Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-99228-oard-loads-with-wallet-card-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-99228-oard-loads-with-wallet-card-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 43,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 3,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5573,
                      "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('#my-bal')\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('#my-bal')\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('#my-bal')\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('#my-bal')\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:39:43",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 43,
                          "line": 39
                        },
                        "snippet": "  37 |     await page.goto(BASE_URL);\n  38 |     await expect(page.locator('#s-dash')).toBeVisible({ timeout: 8000 });\n> 39 |     await expect(page.locator('#my-bal')).toBeVisible();\n     |                                           ^\n  40 |   });\n  41 |\n  42 |   test('admin-only balance grid hidden for shambhu', async ({ page }) => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 43,
                            "line": 39
                          },
                          "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('#my-bal')\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('#my-bal')\u001b[22m\n\n\n  37 |     await page.goto(BASE_URL);\n  38 |     await expect(page.locator('#s-dash')).toBeVisible({ timeout: 8000 });\n> 39 |     await expect(page.locator('#my-bal')).toBeVisible();\n     |                                           ^\n  40 |   });\n  41 |\n  42 |   test('admin-only balance grid hidden for shambhu', async ({ page }) => {\n    at /var/www/360lm/tests/custodian.spec.js:39:43"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-19T13:24:17.911Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-99228-oard-loads-with-wallet-card-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-99228-oard-loads-with-wallet-card-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 43,
                        "line": 39
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e1e49def2648bf8aa609-d28e463f4ff46d6de5db",
              "file": "custodian.spec.js",
              "line": 36,
              "column": 3
            },
            {
              "title": "admin-only balance grid hidden for shambhu",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 4,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 533,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:24:24.692Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "e1e49def2648bf8aa609-d636578ec1ff232ef82a",
              "file": "custodian.spec.js",
              "line": 42,
              "column": 3
            },
            {
              "title": "bottom nav shows 4 tabs (no Manage for non-admin)",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 4,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 371,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:24:25.412Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "e1e49def2648bf8aa609-67be5038fab0607b365c",
              "file": "custodian.spec.js",
              "line": 47,
              "column": 3
            },
            {
              "title": "dashboard loads with wallet card",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 22,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5628,
                      "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('#my-bal')\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('#my-bal')\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('#my-bal')\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('#my-bal')\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:39:43",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 43,
                          "line": 39
                        },
                        "snippet": "  37 |     await page.goto(BASE_URL);\n  38 |     await expect(page.locator('#s-dash')).toBeVisible({ timeout: 8000 });\n> 39 |     await expect(page.locator('#my-bal')).toBeVisible();\n     |                                           ^\n  40 |   });\n  41 |\n  42 |   test('admin-only balance grid hidden for shambhu', async ({ page }) => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 43,
                            "line": 39
                          },
                          "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('#my-bal')\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('#my-bal')\u001b[22m\n\n\n  37 |     await page.goto(BASE_URL);\n  38 |     await expect(page.locator('#s-dash')).toBeVisible({ timeout: 8000 });\n> 39 |     await expect(page.locator('#my-bal')).toBeVisible();\n     |                                           ^\n  40 |   });\n  41 |\n  42 |   test('admin-only balance grid hidden for shambhu', async ({ page }) => {\n    at /var/www/360lm/tests/custodian.spec.js:39:43"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:28:59.018Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-99228-oard-loads-with-wallet-card-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-99228-oard-loads-with-wallet-card-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 43,
                        "line": 39
                      }
                    },
                    {
                      "workerIndex": 23,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5582,
                      "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('#my-bal')\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('#my-bal')\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('#my-bal')\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('#my-bal')\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:39:43",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 43,
                          "line": 39
                        },
                        "snippet": "  37 |     await page.goto(BASE_URL);\n  38 |     await expect(page.locator('#s-dash')).toBeVisible({ timeout: 8000 });\n> 39 |     await expect(page.locator('#my-bal')).toBeVisible();\n     |                                           ^\n  40 |   });\n  41 |\n  42 |   test('admin-only balance grid hidden for shambhu', async ({ page }) => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 43,
                            "line": 39
                          },
                          "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('#my-bal')\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('#my-bal')\u001b[22m\n\n\n  37 |     await page.goto(BASE_URL);\n  38 |     await expect(page.locator('#s-dash')).toBeVisible({ timeout: 8000 });\n> 39 |     await expect(page.locator('#my-bal')).toBeVisible();\n     |                                           ^\n  40 |   });\n  41 |\n  42 |   test('admin-only balance grid hidden for shambhu', async ({ page }) => {\n    at /var/www/360lm/tests/custodian.spec.js:39:43"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-19T13:29:05.808Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-99228-oard-loads-with-wallet-card-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-99228-oard-loads-with-wallet-card-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 43,
                        "line": 39
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e1e49def2648bf8aa609-3753408551cf8b109029",
              "file": "custodian.spec.js",
              "line": 36,
              "column": 3
            },
            {
              "title": "admin-only balance grid hidden for shambhu",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 24,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 528,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:29:12.452Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "e1e49def2648bf8aa609-218b131998c2126cbfee",
              "file": "custodian.spec.js",
              "line": 42,
              "column": 3
            },
            {
              "title": "bottom nav shows 4 tabs (no Manage for non-admin)",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 24,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 389,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:29:13.175Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "e1e49def2648bf8aa609-740ed99accc5c8df08f3",
              "file": "custodian.spec.js",
              "line": 47,
              "column": 3
            }
          ]
        },
        {
          "title": "Fund Custodian — Dashboard (Harish / Admin)",
          "file": "custodian.spec.js",
          "line": 54,
          "column": 6,
          "specs": [
            {
              "title": "all-balances grid visible for admin",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 4,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 8468,
                      "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('#all-balances-wrap')\nExpected: visible\nTimeout: 8000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 8000ms\u001b[22m\n\u001b[2m  - waiting for locator('#all-balances-wrap')\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('#all-balances-wrap')\nExpected: visible\nTimeout: 8000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 8000ms\u001b[22m\n\u001b[2m  - waiting for locator('#all-balances-wrap')\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:61:54",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 54,
                          "line": 61
                        },
                        "snippet": "  59 |   test('all-balances grid visible for admin', async ({ page }) => {\n  60 |     await page.goto(BASE_URL);\n> 61 |     await expect(page.locator('#all-balances-wrap')).toBeVisible({ timeout: 8000 });\n     |                                                      ^\n  62 |   });\n  63 |\n  64 |   test('5 bottom nav tabs including Manage for admin', async ({ page }) => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 54,
                            "line": 61
                          },
                          "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('#all-balances-wrap')\nExpected: visible\nTimeout: 8000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 8000ms\u001b[22m\n\u001b[2m  - waiting for locator('#all-balances-wrap')\u001b[22m\n\n\n  59 |   test('all-balances grid visible for admin', async ({ page }) => {\n  60 |     await page.goto(BASE_URL);\n> 61 |     await expect(page.locator('#all-balances-wrap')).toBeVisible({ timeout: 8000 });\n     |                                                      ^\n  62 |   });\n  63 |\n  64 |   test('5 bottom nav tabs including Manage for admin', async ({ page }) => {\n    at /var/www/360lm/tests/custodian.spec.js:61:54"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:24:25.813Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-33388-nces-grid-visible-for-admin-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-33388-nces-grid-visible-for-admin-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 54,
                        "line": 61
                      }
                    },
                    {
                      "workerIndex": 5,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 8727,
                      "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('#all-balances-wrap')\nExpected: visible\nTimeout: 8000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 8000ms\u001b[22m\n\u001b[2m  - waiting for locator('#all-balances-wrap')\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('#all-balances-wrap')\nExpected: visible\nTimeout: 8000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 8000ms\u001b[22m\n\u001b[2m  - waiting for locator('#all-balances-wrap')\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:61:54",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 54,
                          "line": 61
                        },
                        "snippet": "  59 |   test('all-balances grid visible for admin', async ({ page }) => {\n  60 |     await page.goto(BASE_URL);\n> 61 |     await expect(page.locator('#all-balances-wrap')).toBeVisible({ timeout: 8000 });\n     |                                                      ^\n  62 |   });\n  63 |\n  64 |   test('5 bottom nav tabs including Manage for admin', async ({ page }) => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 54,
                            "line": 61
                          },
                          "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('#all-balances-wrap')\nExpected: visible\nTimeout: 8000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 8000ms\u001b[22m\n\u001b[2m  - waiting for locator('#all-balances-wrap')\u001b[22m\n\n\n  59 |   test('all-balances grid visible for admin', async ({ page }) => {\n  60 |     await page.goto(BASE_URL);\n> 61 |     await expect(page.locator('#all-balances-wrap')).toBeVisible({ timeout: 8000 });\n     |                                                      ^\n  62 |   });\n  63 |\n  64 |   test('5 bottom nav tabs including Manage for admin', async ({ page }) => {\n    at /var/www/360lm/tests/custodian.spec.js:61:54"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-19T13:24:35.694Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-33388-nces-grid-visible-for-admin-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-33388-nces-grid-visible-for-admin-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 54,
                        "line": 61
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e1e49def2648bf8aa609-db35bc75689672a903bf",
              "file": "custodian.spec.js",
              "line": 59,
              "column": 3
            },
            {
              "title": "5 bottom nav tabs including Manage for admin",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 6,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5633,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveCount\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator:  locator('.bnav-btn')\nExpected: \u001b[32m5\u001b[39m\nReceived: \u001b[31m4\u001b[39m\nTimeout:  5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveCount\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('.bnav-btn')\u001b[22m\n\u001b[2m    14 × locator resolved to 4 elements\u001b[22m\n\u001b[2m       - unexpected value \"4\"\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveCount\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator:  locator('.bnav-btn')\nExpected: \u001b[32m5\u001b[39m\nReceived: \u001b[31m4\u001b[39m\nTimeout:  5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveCount\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('.bnav-btn')\u001b[22m\n\u001b[2m    14 × locator resolved to 4 elements\u001b[22m\n\u001b[2m       - unexpected value \"4\"\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:67:27",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 27,
                          "line": 67
                        },
                        "snippet": "  65 |     await page.goto(BASE_URL);\n  66 |     const navBtns = page.locator('.bnav-btn');\n> 67 |     await expect(navBtns).toHaveCount(5);\n     |                           ^\n  68 |   });\n  69 | });\n  70 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 27,
                            "line": 67
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveCount\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator:  locator('.bnav-btn')\nExpected: \u001b[32m5\u001b[39m\nReceived: \u001b[31m4\u001b[39m\nTimeout:  5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveCount\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('.bnav-btn')\u001b[22m\n\u001b[2m    14 × locator resolved to 4 elements\u001b[22m\n\u001b[2m       - unexpected value \"4\"\u001b[22m\n\n\n  65 |     await page.goto(BASE_URL);\n  66 |     const navBtns = page.locator('.bnav-btn');\n> 67 |     await expect(navBtns).toHaveCount(5);\n     |                           ^\n  68 |   });\n  69 | });\n  70 |\n    at /var/www/360lm/tests/custodian.spec.js:67:27"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:24:45.889Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-9f63d--including-Manage-for-admin-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-9f63d--including-Manage-for-admin-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 27,
                        "line": 67
                      }
                    },
                    {
                      "workerIndex": 7,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5552,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveCount\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator:  locator('.bnav-btn')\nExpected: \u001b[32m5\u001b[39m\nReceived: \u001b[31m4\u001b[39m\nTimeout:  5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveCount\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('.bnav-btn')\u001b[22m\n\u001b[2m    14 × locator resolved to 4 elements\u001b[22m\n\u001b[2m       - unexpected value \"4\"\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveCount\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator:  locator('.bnav-btn')\nExpected: \u001b[32m5\u001b[39m\nReceived: \u001b[31m4\u001b[39m\nTimeout:  5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveCount\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('.bnav-btn')\u001b[22m\n\u001b[2m    14 × locator resolved to 4 elements\u001b[22m\n\u001b[2m       - unexpected value \"4\"\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:67:27",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 27,
                          "line": 67
                        },
                        "snippet": "  65 |     await page.goto(BASE_URL);\n  66 |     const navBtns = page.locator('.bnav-btn');\n> 67 |     await expect(navBtns).toHaveCount(5);\n     |                           ^\n  68 |   });\n  69 | });\n  70 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 27,
                            "line": 67
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveCount\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator:  locator('.bnav-btn')\nExpected: \u001b[32m5\u001b[39m\nReceived: \u001b[31m4\u001b[39m\nTimeout:  5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveCount\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('.bnav-btn')\u001b[22m\n\u001b[2m    14 × locator resolved to 4 elements\u001b[22m\n\u001b[2m       - unexpected value \"4\"\u001b[22m\n\n\n  65 |     await page.goto(BASE_URL);\n  66 |     const navBtns = page.locator('.bnav-btn');\n> 67 |     await expect(navBtns).toHaveCount(5);\n     |                           ^\n  68 |   });\n  69 | });\n  70 |\n    at /var/www/360lm/tests/custodian.spec.js:67:27"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-19T13:24:52.708Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-9f63d--including-Manage-for-admin-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-9f63d--including-Manage-for-admin-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 27,
                        "line": 67
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e1e49def2648bf8aa609-1fff34ada96199f8662d",
              "file": "custodian.spec.js",
              "line": 64,
              "column": 3
            },
            {
              "title": "all-balances grid visible for admin",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 24,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 8316,
                      "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('#all-balances-wrap')\nExpected: visible\nTimeout: 8000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 8000ms\u001b[22m\n\u001b[2m  - waiting for locator('#all-balances-wrap')\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('#all-balances-wrap')\nExpected: visible\nTimeout: 8000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 8000ms\u001b[22m\n\u001b[2m  - waiting for locator('#all-balances-wrap')\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:61:54",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 54,
                          "line": 61
                        },
                        "snippet": "  59 |   test('all-balances grid visible for admin', async ({ page }) => {\n  60 |     await page.goto(BASE_URL);\n> 61 |     await expect(page.locator('#all-balances-wrap')).toBeVisible({ timeout: 8000 });\n     |                                                      ^\n  62 |   });\n  63 |\n  64 |   test('5 bottom nav tabs including Manage for admin', async ({ page }) => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 54,
                            "line": 61
                          },
                          "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('#all-balances-wrap')\nExpected: visible\nTimeout: 8000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 8000ms\u001b[22m\n\u001b[2m  - waiting for locator('#all-balances-wrap')\u001b[22m\n\n\n  59 |   test('all-balances grid visible for admin', async ({ page }) => {\n  60 |     await page.goto(BASE_URL);\n> 61 |     await expect(page.locator('#all-balances-wrap')).toBeVisible({ timeout: 8000 });\n     |                                                      ^\n  62 |   });\n  63 |\n  64 |   test('5 bottom nav tabs including Manage for admin', async ({ page }) => {\n    at /var/www/360lm/tests/custodian.spec.js:61:54"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:29:13.610Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-33388-nces-grid-visible-for-admin-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-33388-nces-grid-visible-for-admin-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 54,
                        "line": 61
                      }
                    },
                    {
                      "workerIndex": 25,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 8557,
                      "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('#all-balances-wrap')\nExpected: visible\nTimeout: 8000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 8000ms\u001b[22m\n\u001b[2m  - waiting for locator('#all-balances-wrap')\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('#all-balances-wrap')\nExpected: visible\nTimeout: 8000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 8000ms\u001b[22m\n\u001b[2m  - waiting for locator('#all-balances-wrap')\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:61:54",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 54,
                          "line": 61
                        },
                        "snippet": "  59 |   test('all-balances grid visible for admin', async ({ page }) => {\n  60 |     await page.goto(BASE_URL);\n> 61 |     await expect(page.locator('#all-balances-wrap')).toBeVisible({ timeout: 8000 });\n     |                                                      ^\n  62 |   });\n  63 |\n  64 |   test('5 bottom nav tabs including Manage for admin', async ({ page }) => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 54,
                            "line": 61
                          },
                          "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('#all-balances-wrap')\nExpected: visible\nTimeout: 8000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 8000ms\u001b[22m\n\u001b[2m  - waiting for locator('#all-balances-wrap')\u001b[22m\n\n\n  59 |   test('all-balances grid visible for admin', async ({ page }) => {\n  60 |     await page.goto(BASE_URL);\n> 61 |     await expect(page.locator('#all-balances-wrap')).toBeVisible({ timeout: 8000 });\n     |                                                      ^\n  62 |   });\n  63 |\n  64 |   test('5 bottom nav tabs including Manage for admin', async ({ page }) => {\n    at /var/www/360lm/tests/custodian.spec.js:61:54"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-19T13:29:22.826Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-33388-nces-grid-visible-for-admin-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-33388-nces-grid-visible-for-admin-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 54,
                        "line": 61
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e1e49def2648bf8aa609-779f2bdd5fcfe079b014",
              "file": "custodian.spec.js",
              "line": 59,
              "column": 3
            },
            {
              "title": "5 bottom nav tabs including Manage for admin",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 26,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5541,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveCount\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator:  locator('.bnav-btn')\nExpected: \u001b[32m5\u001b[39m\nReceived: \u001b[31m4\u001b[39m\nTimeout:  5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveCount\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('.bnav-btn')\u001b[22m\n\u001b[2m    14 × locator resolved to 4 elements\u001b[22m\n\u001b[2m       - unexpected value \"4\"\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveCount\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator:  locator('.bnav-btn')\nExpected: \u001b[32m5\u001b[39m\nReceived: \u001b[31m4\u001b[39m\nTimeout:  5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveCount\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('.bnav-btn')\u001b[22m\n\u001b[2m    14 × locator resolved to 4 elements\u001b[22m\n\u001b[2m       - unexpected value \"4\"\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:67:27",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 27,
                          "line": 67
                        },
                        "snippet": "  65 |     await page.goto(BASE_URL);\n  66 |     const navBtns = page.locator('.bnav-btn');\n> 67 |     await expect(navBtns).toHaveCount(5);\n     |                           ^\n  68 |   });\n  69 | });\n  70 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 27,
                            "line": 67
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveCount\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator:  locator('.bnav-btn')\nExpected: \u001b[32m5\u001b[39m\nReceived: \u001b[31m4\u001b[39m\nTimeout:  5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveCount\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('.bnav-btn')\u001b[22m\n\u001b[2m    14 × locator resolved to 4 elements\u001b[22m\n\u001b[2m       - unexpected value \"4\"\u001b[22m\n\n\n  65 |     await page.goto(BASE_URL);\n  66 |     const navBtns = page.locator('.bnav-btn');\n> 67 |     await expect(navBtns).toHaveCount(5);\n     |                           ^\n  68 |   });\n  69 | });\n  70 |\n    at /var/www/360lm/tests/custodian.spec.js:67:27"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:29:32.418Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-9f63d--including-Manage-for-admin-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-9f63d--including-Manage-for-admin-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 27,
                        "line": 67
                      }
                    },
                    {
                      "workerIndex": 27,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5474,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveCount\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator:  locator('.bnav-btn')\nExpected: \u001b[32m5\u001b[39m\nReceived: \u001b[31m4\u001b[39m\nTimeout:  5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveCount\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('.bnav-btn')\u001b[22m\n\u001b[2m    14 × locator resolved to 4 elements\u001b[22m\n\u001b[2m       - unexpected value \"4\"\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveCount\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator:  locator('.bnav-btn')\nExpected: \u001b[32m5\u001b[39m\nReceived: \u001b[31m4\u001b[39m\nTimeout:  5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveCount\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('.bnav-btn')\u001b[22m\n\u001b[2m    14 × locator resolved to 4 elements\u001b[22m\n\u001b[2m       - unexpected value \"4\"\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:67:27",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 27,
                          "line": 67
                        },
                        "snippet": "  65 |     await page.goto(BASE_URL);\n  66 |     const navBtns = page.locator('.bnav-btn');\n> 67 |     await expect(navBtns).toHaveCount(5);\n     |                           ^\n  68 |   });\n  69 | });\n  70 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 27,
                            "line": 67
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveCount\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator:  locator('.bnav-btn')\nExpected: \u001b[32m5\u001b[39m\nReceived: \u001b[31m4\u001b[39m\nTimeout:  5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveCount\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('.bnav-btn')\u001b[22m\n\u001b[2m    14 × locator resolved to 4 elements\u001b[22m\n\u001b[2m       - unexpected value \"4\"\u001b[22m\n\n\n  65 |     await page.goto(BASE_URL);\n  66 |     const navBtns = page.locator('.bnav-btn');\n> 67 |     await expect(navBtns).toHaveCount(5);\n     |                           ^\n  68 |   });\n  69 | });\n  70 |\n    at /var/www/360lm/tests/custodian.spec.js:67:27"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-19T13:29:39.000Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-9f63d--including-Manage-for-admin-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-9f63d--including-Manage-for-admin-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 27,
                        "line": 67
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e1e49def2648bf8aa609-7db11270cd2777426c92",
              "file": "custodian.spec.js",
              "line": 64,
              "column": 3
            }
          ]
        },
        {
          "title": "Fund Custodian — Transfer Form",
          "file": "custodian.spec.js",
          "line": 71,
          "column": 6,
          "specs": [
            {
              "title": "direction picker shown before transfer form",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 8,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6662,
                      "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('#transfer-dir-wrap')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfer-dir-wrap')\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('#transfer-dir-wrap')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfer-dir-wrap')\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:79:54",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 54,
                          "line": 79
                        },
                        "snippet": "  77 |     await page.goto(BASE_URL);\n  78 |     await page.click('#nav-transfer');\n> 79 |     await expect(page.locator('#transfer-dir-wrap')).toBeVisible({ timeout: 6000 });\n     |                                                      ^\n  80 |     await expect(page.locator('#transfer-form-wrap')).toBeHidden();\n  81 |   });\n  82 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 54,
                            "line": 79
                          },
                          "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('#transfer-dir-wrap')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfer-dir-wrap')\u001b[22m\n\n\n  77 |     await page.goto(BASE_URL);\n  78 |     await page.click('#nav-transfer');\n> 79 |     await expect(page.locator('#transfer-dir-wrap')).toBeVisible({ timeout: 6000 });\n     |                                                      ^\n  80 |     await expect(page.locator('#transfer-form-wrap')).toBeHidden();\n  81 |   });\n  82 |\n    at /var/www/360lm/tests/custodian.spec.js:79:54"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:24:59.256Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-24f52--shown-before-transfer-form-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-24f52--shown-before-transfer-form-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 54,
                        "line": 79
                      }
                    },
                    {
                      "workerIndex": 9,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6700,
                      "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('#transfer-dir-wrap')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfer-dir-wrap')\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('#transfer-dir-wrap')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfer-dir-wrap')\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:79:54",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 54,
                          "line": 79
                        },
                        "snippet": "  77 |     await page.goto(BASE_URL);\n  78 |     await page.click('#nav-transfer');\n> 79 |     await expect(page.locator('#transfer-dir-wrap')).toBeVisible({ timeout: 6000 });\n     |                                                      ^\n  80 |     await expect(page.locator('#transfer-form-wrap')).toBeHidden();\n  81 |   });\n  82 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 54,
                            "line": 79
                          },
                          "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('#transfer-dir-wrap')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfer-dir-wrap')\u001b[22m\n\n\n  77 |     await page.goto(BASE_URL);\n  78 |     await page.click('#nav-transfer');\n> 79 |     await expect(page.locator('#transfer-dir-wrap')).toBeVisible({ timeout: 6000 });\n     |                                                      ^\n  80 |     await expect(page.locator('#transfer-form-wrap')).toBeHidden();\n  81 |   });\n  82 |\n    at /var/www/360lm/tests/custodian.spec.js:79:54"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-19T13:25:07.154Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-24f52--shown-before-transfer-form-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-24f52--shown-before-transfer-form-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 54,
                        "line": 79
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e1e49def2648bf8aa609-b26283f15c502252bb2f",
              "file": "custodian.spec.js",
              "line": 76,
              "column": 3
            },
            {
              "title": "pick \"I am Giving\" reveals transfer form",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 10,
                      "parallelIndex": 0,
                      "status": "timedOut",
                      "duration": 30297,
                      "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/custodian.spec.js",
                            "column": 16,
                            "line": 86
                          },
                          "message": "Error: page.click: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m  - waiting for locator('#btn-dir-give')\u001b[22m\n\n\n  84 |     await page.goto(BASE_URL);\n  85 |     await page.click('#nav-transfer');\n> 86 |     await page.click('#btn-dir-give');\n     |                ^\n  87 |     await expect(page.locator('#transfer-form-wrap')).toBeVisible({ timeout: 4000 });\n  88 |   });\n  89 |\n    at /var/www/360lm/tests/custodian.spec.js:86:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:25:15.421Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-22025-iving-reveals-transfer-form-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-22025-iving-reveals-transfer-form-android-chrome/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 11,
                      "parallelIndex": 0,
                      "status": "timedOut",
                      "duration": 30161,
                      "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/custodian.spec.js",
                            "column": 16,
                            "line": 86
                          },
                          "message": "Error: page.click: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m  - waiting for locator('#btn-dir-give')\u001b[22m\n\n\n  84 |     await page.goto(BASE_URL);\n  85 |     await page.click('#nav-transfer');\n> 86 |     await page.click('#btn-dir-give');\n     |                ^\n  87 |     await expect(page.locator('#transfer-form-wrap')).toBeVisible({ timeout: 4000 });\n  88 |   });\n  89 |\n    at /var/www/360lm/tests/custodian.spec.js:86:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-19T13:25:47.057Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-22025-iving-reveals-transfer-form-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-22025-iving-reveals-transfer-form-android-chrome-retry1/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e1e49def2648bf8aa609-8e88f10ef942850c0cbf",
              "file": "custodian.spec.js",
              "line": 83,
              "column": 3
            },
            {
              "title": "submit with no amount shows validation error",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 12,
                      "parallelIndex": 0,
                      "status": "timedOut",
                      "duration": 30114,
                      "error": {
                        "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m",
                        "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                      },
                      "errors": [
                        {
                          "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m"
                        },
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 16,
                            "line": 93
                          },
                          "message": "Error: page.click: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m  - waiting for locator('#btn-dir-give')\u001b[22m\n\n\n  91 |     await page.goto(BASE_URL);\n  92 |     await page.click('#nav-transfer');\n> 93 |     await page.click('#btn-dir-give');\n     |                ^\n  94 |     await page.click('#btn-save-transfer');\n  95 |     await expect(page.locator('#t-err')).toBeVisible({ timeout: 4000 });\n  96 |   });\n    at /var/www/360lm/tests/custodian.spec.js:93:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:26:18.290Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-aa305-ount-shows-validation-error-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-aa305-ount-shows-validation-error-android-chrome/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 13,
                      "parallelIndex": 0,
                      "status": "timedOut",
                      "duration": 30196,
                      "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/custodian.spec.js",
                            "column": 16,
                            "line": 93
                          },
                          "message": "Error: page.click: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m  - waiting for locator('#btn-dir-give')\u001b[22m\n\n\n  91 |     await page.goto(BASE_URL);\n  92 |     await page.click('#nav-transfer');\n> 93 |     await page.click('#btn-dir-give');\n     |                ^\n  94 |     await page.click('#btn-save-transfer');\n  95 |     await expect(page.locator('#t-err')).toBeVisible({ timeout: 4000 });\n  96 |   });\n    at /var/www/360lm/tests/custodian.spec.js:93:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-19T13:26:49.634Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-aa305-ount-shows-validation-error-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-aa305-ount-shows-validation-error-android-chrome-retry1/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e1e49def2648bf8aa609-886d4ae55092eb281909",
              "file": "custodian.spec.js",
              "line": 90,
              "column": 3
            },
            {
              "title": "direction picker shown before transfer form",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 28,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6637,
                      "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('#transfer-dir-wrap')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfer-dir-wrap')\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('#transfer-dir-wrap')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfer-dir-wrap')\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:79:54",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 54,
                          "line": 79
                        },
                        "snippet": "  77 |     await page.goto(BASE_URL);\n  78 |     await page.click('#nav-transfer');\n> 79 |     await expect(page.locator('#transfer-dir-wrap')).toBeVisible({ timeout: 6000 });\n     |                                                      ^\n  80 |     await expect(page.locator('#transfer-form-wrap')).toBeHidden();\n  81 |   });\n  82 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 54,
                            "line": 79
                          },
                          "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('#transfer-dir-wrap')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfer-dir-wrap')\u001b[22m\n\n\n  77 |     await page.goto(BASE_URL);\n  78 |     await page.click('#nav-transfer');\n> 79 |     await expect(page.locator('#transfer-dir-wrap')).toBeVisible({ timeout: 6000 });\n     |                                                      ^\n  80 |     await expect(page.locator('#transfer-form-wrap')).toBeHidden();\n  81 |   });\n  82 |\n    at /var/www/360lm/tests/custodian.spec.js:79:54"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:29:45.556Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-24f52--shown-before-transfer-form-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-24f52--shown-before-transfer-form-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 54,
                        "line": 79
                      }
                    },
                    {
                      "workerIndex": 29,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6916,
                      "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('#transfer-dir-wrap')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfer-dir-wrap')\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('#transfer-dir-wrap')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfer-dir-wrap')\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:79:54",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 54,
                          "line": 79
                        },
                        "snippet": "  77 |     await page.goto(BASE_URL);\n  78 |     await page.click('#nav-transfer');\n> 79 |     await expect(page.locator('#transfer-dir-wrap')).toBeVisible({ timeout: 6000 });\n     |                                                      ^\n  80 |     await expect(page.locator('#transfer-form-wrap')).toBeHidden();\n  81 |   });\n  82 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 54,
                            "line": 79
                          },
                          "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('#transfer-dir-wrap')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfer-dir-wrap')\u001b[22m\n\n\n  77 |     await page.goto(BASE_URL);\n  78 |     await page.click('#nav-transfer');\n> 79 |     await expect(page.locator('#transfer-dir-wrap')).toBeVisible({ timeout: 6000 });\n     |                                                      ^\n  80 |     await expect(page.locator('#transfer-form-wrap')).toBeHidden();\n  81 |   });\n  82 |\n    at /var/www/360lm/tests/custodian.spec.js:79:54"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-19T13:29:53.425Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-24f52--shown-before-transfer-form-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-24f52--shown-before-transfer-form-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 54,
                        "line": 79
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e1e49def2648bf8aa609-7146c70b5a29cc15a3ca",
              "file": "custodian.spec.js",
              "line": 76,
              "column": 3
            },
            {
              "title": "pick \"I am Giving\" reveals transfer form",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 30,
                      "parallelIndex": 0,
                      "status": "timedOut",
                      "duration": 30348,
                      "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/custodian.spec.js",
                            "column": 16,
                            "line": 86
                          },
                          "message": "Error: page.click: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m  - waiting for locator('#btn-dir-give')\u001b[22m\n\n\n  84 |     await page.goto(BASE_URL);\n  85 |     await page.click('#nav-transfer');\n> 86 |     await page.click('#btn-dir-give');\n     |                ^\n  87 |     await expect(page.locator('#transfer-form-wrap')).toBeVisible({ timeout: 4000 });\n  88 |   });\n  89 |\n    at /var/www/360lm/tests/custodian.spec.js:86:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:30:03.195Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-22025-iving-reveals-transfer-form-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-22025-iving-reveals-transfer-form-desktop-chrome/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 31,
                      "parallelIndex": 0,
                      "status": "timedOut",
                      "duration": 30109,
                      "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/custodian.spec.js",
                            "column": 16,
                            "line": 86
                          },
                          "message": "Error: page.click: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m  - waiting for locator('#btn-dir-give')\u001b[22m\n\n\n  84 |     await page.click('#nav-transfer');\n  85 |     await expect(page.locator('#role-giver')).toHaveClass(/sel/);\n> 86 |   });\n     |      ^\n  87 |\n  88 |   test('clicking role-receiver switches selection', async ({ page }) => {\n  89 |     await page.goto(BASE_URL);\n    at /var/www/360lm/tests/custodian.spec.js:86:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-19T13:30:35.561Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-22025-iving-reveals-transfer-form-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-22025-iving-reveals-transfer-form-desktop-chrome-retry1/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e1e49def2648bf8aa609-52e21e0bee9981bc5280",
              "file": "custodian.spec.js",
              "line": 83,
              "column": 3
            },
            {
              "title": "submit with no amount shows validation error",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 32,
                      "parallelIndex": 0,
                      "status": "timedOut",
                      "duration": 30167,
                      "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/custodian.spec.js",
                            "column": 16,
                            "line": 93
                          },
                          "message": "Error: page.click: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m  - waiting for locator('#btn-dir-give')\u001b[22m\n\n\n  91 |     await page.click('#role-receiver');\n  92 |     await expect(page.locator('#role-receiver')).toHaveClass(/sel/);\n> 93 |     await expect(page.locator('#role-giver')).not.toHaveClass(/sel/);\n     |                ^\n  94 |   });\n  95 |\n  96 |   test('submit with no amount shows validation toast', async ({ page }) => {\n    at /var/www/360lm/tests/custodian.spec.js:93:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:31:06.870Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-aa305-ount-shows-validation-error-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-aa305-ount-shows-validation-error-desktop-chrome/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 33,
                      "parallelIndex": 0,
                      "status": "timedOut",
                      "duration": 30220,
                      "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/custodian.spec.js",
                            "column": 16,
                            "line": 93
                          },
                          "message": "Error: page.click: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m  - waiting for locator('#btn-dir-give')\u001b[22m\n\n\n  91 |     await page.click('#role-receiver');\n  92 |     await expect(page.locator('#role-receiver')).toHaveClass(/sel/);\n> 93 |     await expect(page.locator('#role-giver')).not.toHaveClass(/sel/);\n     |                ^\n  94 |   });\n  95 |\n  96 |   test('submit with no amount shows validation toast', async ({ page }) => {\n    at /var/www/360lm/tests/custodian.spec.js:93:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-19T13:31:38.708Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-aa305-ount-shows-validation-error-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-aa305-ount-shows-validation-error-desktop-chrome-retry1/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e1e49def2648bf8aa609-deee51fe9c0c6d718aca",
              "file": "custodian.spec.js",
              "line": 90,
              "column": 3
            }
          ]
        },
        {
          "title": "Fund Custodian — Advance Form",
          "file": "custodian.spec.js",
          "line": 99,
          "column": 6,
          "specs": [
            {
              "title": "advance screen loads with employee list",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 14,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6776,
                      "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('#adv-employee')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('#adv-employee')\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('#adv-employee')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('#adv-employee')\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:107:49",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 49,
                          "line": 107
                        },
                        "snippet": "  105 |     await page.goto(BASE_URL);\n  106 |     await page.click('#nav-advance');\n> 107 |     await expect(page.locator('#adv-employee')).toBeVisible({ timeout: 6000 });\n      |                                                 ^\n  108 |     const opts = page.locator('#adv-employee option');\n  109 |     await expect(opts).toHaveCount.greaterThan ? null : true; // at least default + employees\n  110 |     await expect(opts.first()).toBeVisible();"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 49,
                            "line": 107
                          },
                          "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('#adv-employee')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('#adv-employee')\u001b[22m\n\n\n  105 |     await page.goto(BASE_URL);\n  106 |     await page.click('#nav-advance');\n> 107 |     await expect(page.locator('#adv-employee')).toBeVisible({ timeout: 6000 });\n      |                                                 ^\n  108 |     const opts = page.locator('#adv-employee option');\n  109 |     await expect(opts).toHaveCount.greaterThan ? null : true; // at least default + employees\n  110 |     await expect(opts.first()).toBeVisible();\n    at /var/www/360lm/tests/custodian.spec.js:107:49"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:27:21.306Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-551e6-en-loads-with-employee-list-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-551e6-en-loads-with-employee-list-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 49,
                        "line": 107
                      }
                    },
                    {
                      "workerIndex": 15,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6725,
                      "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('#adv-employee')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('#adv-employee')\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('#adv-employee')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('#adv-employee')\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:107:49",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 49,
                          "line": 107
                        },
                        "snippet": "  105 |     await page.goto(BASE_URL);\n  106 |     await page.click('#nav-advance');\n> 107 |     await expect(page.locator('#adv-employee')).toBeVisible({ timeout: 6000 });\n      |                                                 ^\n  108 |     const opts = page.locator('#adv-employee option');\n  109 |     await expect(opts).toHaveCount.greaterThan ? null : true; // at least default + employees\n  110 |     await expect(opts.first()).toBeVisible();"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 49,
                            "line": 107
                          },
                          "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('#adv-employee')\nExpected: visible\nTimeout: 6000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 6000ms\u001b[22m\n\u001b[2m  - waiting for locator('#adv-employee')\u001b[22m\n\n\n  105 |     await page.goto(BASE_URL);\n  106 |     await page.click('#nav-advance');\n> 107 |     await expect(page.locator('#adv-employee')).toBeVisible({ timeout: 6000 });\n      |                                                 ^\n  108 |     const opts = page.locator('#adv-employee option');\n  109 |     await expect(opts).toHaveCount.greaterThan ? null : true; // at least default + employees\n  110 |     await expect(opts.first()).toBeVisible();\n    at /var/www/360lm/tests/custodian.spec.js:107:49"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-19T13:27:29.297Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-551e6-en-loads-with-employee-list-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-551e6-en-loads-with-employee-list-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 49,
                        "line": 107
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e1e49def2648bf8aa609-9ac4909190e25dc40094",
              "file": "custodian.spec.js",
              "line": 104,
              "column": 3
            },
            {
              "title": "submit with no amount shows validation error",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "timedOut",
                      "duration": 30117,
                      "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/custodian.spec.js",
                            "column": 41,
                            "line": 116
                          },
                          "message": "Error: locator.selectOption: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m  - waiting for locator('#adv-employee')\u001b[22m\n\n\n  114 |     await page.goto(BASE_URL);\n  115 |     await page.click('#nav-advance');\n> 116 |     await page.locator('#adv-employee').selectOption('mukesh');\n      |                                         ^\n  117 |     await page.click('#btn-save-advance');\n  118 |     await expect(page.locator('#t-err')).toBeVisible({ timeout: 4000 });\n  119 |   });\n    at /var/www/360lm/tests/custodian.spec.js:116:41"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:27:37.396Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-43c7c-ount-shows-validation-error-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-43c7c-ount-shows-validation-error-android-chrome/error-context.md"
                        }
                      ]
                    },
                    {
                      "workerIndex": 17,
                      "parallelIndex": 0,
                      "status": "timedOut",
                      "duration": 30113,
                      "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/custodian.spec.js",
                            "column": 41,
                            "line": 116
                          },
                          "message": "Error: locator.selectOption: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m  - waiting for locator('#adv-employee')\u001b[22m\n\n\n  114 |     await page.goto(BASE_URL);\n  115 |     await page.click('#nav-advance');\n> 116 |     await page.locator('#adv-employee').selectOption('mukesh');\n      |                                         ^\n  117 |     await page.click('#btn-save-advance');\n  118 |     await expect(page.locator('#t-err')).toBeVisible({ timeout: 4000 });\n  119 |   });\n    at /var/www/360lm/tests/custodian.spec.js:116:41"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-19T13:28:08.741Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-43c7c-ount-shows-validation-error-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-43c7c-ount-shows-validation-error-android-chrome-retry1/error-context.md"
                        }
                      ]
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e1e49def2648bf8aa609-1ff4bf75514dfb809a2e",
              "file": "custodian.spec.js",
              "line": 113,
              "column": 3
            },
            {
              "title": "advance screen loads with employee list",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": -1,
                      "parallelIndex": -1,
                      "status": "failed",
                      "duration": 0,
                      "error": {
                        "message": "Test not found in the worker process. Make sure test title does not change."
                      },
                      "errors": [
                        {
                          "message": "Test not found in the worker process. Make sure test title does not change."
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:32:10.703Z",
                      "annotations": [],
                      "attachments": []
                    },
                    {
                      "workerIndex": -1,
                      "parallelIndex": -1,
                      "status": "failed",
                      "duration": 0,
                      "error": {
                        "message": "Test not found in the worker process. Make sure test title does not change."
                      },
                      "errors": [
                        {
                          "message": "Test not found in the worker process. Make sure test title does not change."
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-19T13:32:12.197Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e1e49def2648bf8aa609-185253e423f0743cc565",
              "file": "custodian.spec.js",
              "line": 104,
              "column": 3
            },
            {
              "title": "submit with no amount shows validation error",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": -1,
                      "parallelIndex": -1,
                      "status": "failed",
                      "duration": 0,
                      "error": {
                        "message": "Test not found in the worker process. Make sure test title does not change."
                      },
                      "errors": [
                        {
                          "message": "Test not found in the worker process. Make sure test title does not change."
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:32:10.703Z",
                      "annotations": [],
                      "attachments": []
                    },
                    {
                      "workerIndex": -1,
                      "parallelIndex": -1,
                      "status": "failed",
                      "duration": 0,
                      "error": {
                        "message": "Test not found in the worker process. Make sure test title does not change."
                      },
                      "errors": [
                        {
                          "message": "Test not found in the worker process. Make sure test title does not change."
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-19T13:32:12.197Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e1e49def2648bf8aa609-c871bbb2e14a3f891346",
              "file": "custodian.spec.js",
              "line": 113,
              "column": 3
            }
          ]
        },
        {
          "title": "Fund Custodian — Offline",
          "file": "custodian.spec.js",
          "line": 122,
          "column": 6,
          "specs": [
            {
              "title": "cached shell loads offline",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 18,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 698,
                      "error": {
                        "message": "Error: page.reload: net::ERR_INTERNET_DISCONNECTED\nCall log:\n\u001b[2m  - waiting for navigation until \"load\"\u001b[22m\n",
                        "stack": "Error: page.reload: net::ERR_INTERNET_DISCONNECTED\nCall log:\n\u001b[2m  - waiting for navigation until \"load\"\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:128:16",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 16,
                          "line": 128
                        },
                        "snippet": "  126 |     await expect(page.locator('#s-dash')).toBeVisible({ timeout: 8000 });\n  127 |     await context.setOffline(true);\n> 128 |     await page.reload();\n      |                ^\n  129 |     await expect(page.locator('body')).toBeVisible({ timeout: 6000 });\n  130 |     await context.setOffline(false);\n  131 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 16,
                            "line": 128
                          },
                          "message": "Error: page.reload: net::ERR_INTERNET_DISCONNECTED\nCall log:\n\u001b[2m  - waiting for navigation until \"load\"\u001b[22m\n\n\n  126 |     await expect(page.locator('#s-dash')).toBeVisible({ timeout: 8000 });\n  127 |     await context.setOffline(true);\n> 128 |     await page.reload();\n      |                ^\n  129 |     await expect(page.locator('body')).toBeVisible({ timeout: 6000 });\n  130 |     await context.setOffline(false);\n  131 |   });\n    at /var/www/360lm/tests/custodian.spec.js:128:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:28:39.954Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-cff28--cached-shell-loads-offline-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-cff28--cached-shell-loads-offline-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 16,
                        "line": 128
                      }
                    },
                    {
                      "workerIndex": 19,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 680,
                      "error": {
                        "message": "Error: page.reload: net::ERR_INTERNET_DISCONNECTED\nCall log:\n\u001b[2m  - waiting for navigation until \"load\"\u001b[22m\n",
                        "stack": "Error: page.reload: net::ERR_INTERNET_DISCONNECTED\nCall log:\n\u001b[2m  - waiting for navigation until \"load\"\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:128:16",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 16,
                          "line": 128
                        },
                        "snippet": "  126 |     await expect(page.locator('#s-dash')).toBeVisible({ timeout: 8000 });\n  127 |     await context.setOffline(true);\n> 128 |     await page.reload();\n      |                ^\n  129 |     await expect(page.locator('body')).toBeVisible({ timeout: 6000 });\n  130 |     await context.setOffline(false);\n  131 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 16,
                            "line": 128
                          },
                          "message": "Error: page.reload: net::ERR_INTERNET_DISCONNECTED\nCall log:\n\u001b[2m  - waiting for navigation until \"load\"\u001b[22m\n\n\n  126 |     await expect(page.locator('#s-dash')).toBeVisible({ timeout: 8000 });\n  127 |     await context.setOffline(true);\n> 128 |     await page.reload();\n      |                ^\n  129 |     await expect(page.locator('body')).toBeVisible({ timeout: 6000 });\n  130 |     await context.setOffline(false);\n  131 |   });\n    at /var/www/360lm/tests/custodian.spec.js:128:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-19T13:28:41.779Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-cff28--cached-shell-loads-offline-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-cff28--cached-shell-loads-offline-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 16,
                        "line": 128
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e1e49def2648bf8aa609-5c786afb8b6a7e06f0f1",
              "file": "custodian.spec.js",
              "line": 123,
              "column": 3
            },
            {
              "title": "cached shell loads offline",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 36,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 1199,
                      "error": {
                        "message": "Error: page.reload: net::ERR_INTERNET_DISCONNECTED\nCall log:\n\u001b[2m  - waiting for navigation until \"load\"\u001b[22m\n",
                        "stack": "Error: page.reload: net::ERR_INTERNET_DISCONNECTED\nCall log:\n\u001b[2m  - waiting for navigation until \"load\"\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:143:16",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 16,
                          "line": 143
                        },
                        "snippet": "  141 |     await expect(page.locator('#s-dash')).toBeVisible({ timeout: 8000 });\n  142 |     await context.setOffline(true);\n> 143 |     await page.reload();\n      |                ^\n  144 |     await expect(page.locator('body')).toBeVisible({ timeout: 6000 });\n  145 |     await context.setOffline(false);\n  146 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 16,
                            "line": 143
                          },
                          "message": "Error: page.reload: net::ERR_INTERNET_DISCONNECTED\nCall log:\n\u001b[2m  - waiting for navigation until \"load\"\u001b[22m\n\n\n  141 |     await expect(page.locator('#s-dash')).toBeVisible({ timeout: 8000 });\n  142 |     await context.setOffline(true);\n> 143 |     await page.reload();\n      |                ^\n  144 |     await expect(page.locator('body')).toBeVisible({ timeout: 6000 });\n  145 |     await context.setOffline(false);\n  146 |   });\n    at /var/www/360lm/tests/custodian.spec.js:143:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-19T13:32:13.776Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-cff28--cached-shell-loads-offline-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-cff28--cached-shell-loads-offline-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 16,
                        "line": 143
                      }
                    },
                    {
                      "workerIndex": 37,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 1502,
                      "error": {
                        "message": "Error: page.reload: net::ERR_INTERNET_DISCONNECTED\nCall log:\n\u001b[2m  - waiting for navigation until \"load\"\u001b[22m\n",
                        "stack": "Error: page.reload: net::ERR_INTERNET_DISCONNECTED\nCall log:\n\u001b[2m  - waiting for navigation until \"load\"\u001b[22m\n\n    at /var/www/360lm/tests/custodian.spec.js:143:16",
                        "location": {
                          "file": "/var/www/360lm/tests/custodian.spec.js",
                          "column": 16,
                          "line": 143
                        },
                        "snippet": "  141 |     await expect(page.locator('#s-dash')).toBeVisible({ timeout: 8000 });\n  142 |     await context.setOffline(true);\n> 143 |     await page.reload();\n      |                ^\n  144 |     await expect(page.locator('body')).toBeVisible({ timeout: 6000 });\n  145 |     await context.setOffline(false);\n  146 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/custodian.spec.js",
                            "column": 16,
                            "line": 143
                          },
                          "message": "Error: page.reload: net::ERR_INTERNET_DISCONNECTED\nCall log:\n\u001b[2m  - waiting for navigation until \"load\"\u001b[22m\n\n\n  141 |     await expect(page.locator('#s-dash')).toBeVisible({ timeout: 8000 });\n  142 |     await context.setOffline(true);\n> 143 |     await page.reload();\n      |                ^\n  144 |     await expect(page.locator('body')).toBeVisible({ timeout: 6000 });\n  145 |     await context.setOffline(false);\n  146 |   });\n    at /var/www/360lm/tests/custodian.spec.js:143:16"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-19T13:32:17.557Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-cff28--cached-shell-loads-offline-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/custodian-Fund-Custodian-—-cff28--cached-shell-loads-offline-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/custodian.spec.js",
                        "column": 16,
                        "line": 143
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "e1e49def2648bf8aa609-d1b117f8bfa836422544",
              "file": "custodian.spec.js",
              "line": 123,
              "column": 3
            }
          ]
        }
      ]
    }
  ],
  "errors": [],
  "stats": {
    "startTime": "2026-05-19T13:23:49.518Z",
    "duration": 510270.99899999995,
    "expected": 6,
    "skipped": 0,
    "unexpected": 20,
    "flaky": 0
  }
}
