{
  "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": "fundcustodian.spec.js",
      "file": "fundcustodian.spec.js",
      "column": 0,
      "line": 0,
      "specs": [],
      "suites": [
        {
          "title": "Auth Gate",
          "file": "fundcustodian.spec.js",
          "line": 35,
          "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": 1841,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:48:57.896Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-3f3531e5c6f0a7eb185d",
              "file": "fundcustodian.spec.js",
              "line": 36,
              "column": 3
            },
            {
              "title": "expired session (>12h) → 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": 747,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:49:00.428Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-86b36f68a8f23d935137",
              "file": "fundcustodian.spec.js",
              "line": 42,
              "column": 3
            },
            {
              "title": "non-custodian employee → Access Restricted screen",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 0,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 851,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:49:01.232Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-d777dbfe693f198391f4",
              "file": "fundcustodian.spec.js",
              "line": 50,
              "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": 30,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 850,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:55:43.440Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-4941793c034feaa4c8d4",
              "file": "fundcustodian.spec.js",
              "line": 36,
              "column": 3
            },
            {
              "title": "expired session (>12h) → redirects to /hub/",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 30,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 930,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:55:44.549Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-be7df170420993cdf364",
              "file": "fundcustodian.spec.js",
              "line": 42,
              "column": 3
            },
            {
              "title": "non-custodian employee → Access Restricted screen",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 30,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 840,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:55:45.602Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-f857b668291e7e17d3b0",
              "file": "fundcustodian.spec.js",
              "line": 50,
              "column": 3
            }
          ]
        },
        {
          "title": "Dashboard — shambhu (non-admin)",
          "file": "fundcustodian.spec.js",
          "line": 62,
          "column": 6,
          "specs": [
            {
              "title": "balance card renders and shows shambhu name",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 0,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1014,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:49:02.113Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-21a11ed89b787d18d3dc",
              "file": "fundcustodian.spec.js",
              "line": 69,
              "column": 3
            },
            {
              "title": "no pending transfers banner shown for shambhu",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 0,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 756,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:49:03.193Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-f9f72838429f556e8a62",
              "file": "fundcustodian.spec.js",
              "line": 75,
              "column": 3
            },
            {
              "title": "outstanding advances section is visible",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 0,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6252,
                      "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-name').filter({ hasText: 'Mukesh' }).first()\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('.adv-name').filter({ hasText: 'Mukesh' }).first()\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-name').filter({ hasText: 'Mukesh' }).first()\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('.adv-name').filter({ hasText: 'Mukesh' }).first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:82:76",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 76,
                          "line": 82
                        },
                        "snippet": "  80 |     await expect(page.locator('.sec-label', { hasText: 'Outstanding Advances' })).toBeVisible();\n  81 |     // shambhu has A1 (Mukesh 5000) and A2 (Sachin, partially settled)\n> 82 |     await expect(page.locator('.adv-name', { hasText: 'Mukesh' }).first()).toBeVisible();\n     |                                                                            ^\n  83 |     await expect(page.locator('.adv-name', { hasText: 'Sachin' }).first()).toBeVisible();\n  84 |   });\n  85 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 76,
                            "line": 82
                          },
                          "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-name').filter({ hasText: 'Mukesh' }).first()\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('.adv-name').filter({ hasText: 'Mukesh' }).first()\u001b[22m\n\n\n  80 |     await expect(page.locator('.sec-label', { hasText: 'Outstanding Advances' })).toBeVisible();\n  81 |     // shambhu has A1 (Mukesh 5000) and A2 (Sachin, partially settled)\n> 82 |     await expect(page.locator('.adv-name', { hasText: 'Mukesh' }).first()).toBeVisible();\n     |                                                                            ^\n  83 |     await expect(page.locator('.adv-name', { hasText: 'Sachin' }).first()).toBeVisible();\n  84 |   });\n  85 |\n    at /var/www/360lm/tests/fundcustodian.spec.js:82:76"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:49:03.993Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--d41af-advances-section-is-visible-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--d41af-advances-section-is-visible-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 76,
                        "line": 82
                      }
                    },
                    {
                      "workerIndex": 1,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5747,
                      "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-name').filter({ hasText: 'Mukesh' }).first()\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('.adv-name').filter({ hasText: 'Mukesh' }).first()\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-name').filter({ hasText: 'Mukesh' }).first()\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('.adv-name').filter({ hasText: 'Mukesh' }).first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:82:76",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 76,
                          "line": 82
                        },
                        "snippet": "  80 |     await expect(page.locator('.sec-label', { hasText: 'Outstanding Advances' })).toBeVisible();\n  81 |     // shambhu has A1 (Mukesh 5000) and A2 (Sachin, partially settled)\n> 82 |     await expect(page.locator('.adv-name', { hasText: 'Mukesh' }).first()).toBeVisible();\n     |                                                                            ^\n  83 |     await expect(page.locator('.adv-name', { hasText: 'Sachin' }).first()).toBeVisible();\n  84 |   });\n  85 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 76,
                            "line": 82
                          },
                          "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-name').filter({ hasText: 'Mukesh' }).first()\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('.adv-name').filter({ hasText: 'Mukesh' }).first()\u001b[22m\n\n\n  80 |     await expect(page.locator('.sec-label', { hasText: 'Outstanding Advances' })).toBeVisible();\n  81 |     // shambhu has A1 (Mukesh 5000) and A2 (Sachin, partially settled)\n> 82 |     await expect(page.locator('.adv-name', { hasText: 'Mukesh' }).first()).toBeVisible();\n     |                                                                            ^\n  83 |     await expect(page.locator('.adv-name', { hasText: 'Sachin' }).first()).toBeVisible();\n  84 |   });\n  85 |\n    at /var/www/360lm/tests/fundcustodian.spec.js:82:76"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T05:49:12.134Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--d41af-advances-section-is-visible-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--d41af-advances-section-is-visible-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 76,
                        "line": 82
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-3c2e52fa6ce9b7aae36f",
              "file": "fundcustodian.spec.js",
              "line": 79,
              "column": 3
            },
            {
              "title": "admin balance grid is NOT shown for non-admin",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 2,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 632,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:49:19.326Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-b40003816c0568de9e44",
              "file": "fundcustodian.spec.js",
              "line": 86,
              "column": 3
            },
            {
              "title": "manage custodian button hidden for non-admin",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 2,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 521,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:49:20.236Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-29b36b85b84120645af2",
              "file": "fundcustodian.spec.js",
              "line": 91,
              "column": 3
            },
            {
              "title": "bottom nav has 4 tabs",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 2,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 470,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:49:20.793Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-5213ee15713230aced18",
              "file": "fundcustodian.spec.js",
              "line": 95,
              "column": 3
            },
            {
              "title": "recent transfers card loads",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 2,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 8465,
                      "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('#recent-transfers-card .ledger-row').first()\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('#recent-transfers-card .ledger-row').first()\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('#recent-transfers-card .ledger-row').first()\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('#recent-transfers-card .ledger-row').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:102:78",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 78,
                          "line": 102
                        },
                        "snippet": "  100 |   test('recent transfers card loads', async ({ page }) => {\n  101 |     // Should show at least one transfer row (shambhu has multiple)\n> 102 |     await expect(page.locator('#recent-transfers-card .ledger-row').first()).toBeVisible({ timeout: 8000 });\n      |                                                                              ^\n  103 |   });\n  104 | });\n  105 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 78,
                            "line": 102
                          },
                          "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('#recent-transfers-card .ledger-row').first()\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('#recent-transfers-card .ledger-row').first()\u001b[22m\n\n\n  100 |   test('recent transfers card loads', async ({ page }) => {\n  101 |     // Should show at least one transfer row (shambhu has multiple)\n> 102 |     await expect(page.locator('#recent-transfers-card .ledger-row').first()).toBeVisible({ timeout: 8000 });\n      |                                                                              ^\n  103 |   });\n  104 | });\n  105 |\n    at /var/www/360lm/tests/fundcustodian.spec.js:102:78"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:49:21.320Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--ea58b-recent-transfers-card-loads-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--ea58b-recent-transfers-card-loads-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 78,
                        "line": 102
                      }
                    },
                    {
                      "workerIndex": 3,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 8706,
                      "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('#recent-transfers-card .ledger-row').first()\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('#recent-transfers-card .ledger-row').first()\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('#recent-transfers-card .ledger-row').first()\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('#recent-transfers-card .ledger-row').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:102:78",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 78,
                          "line": 102
                        },
                        "snippet": "  100 |   test('recent transfers card loads', async ({ page }) => {\n  101 |     // Should show at least one transfer row (shambhu has multiple)\n> 102 |     await expect(page.locator('#recent-transfers-card .ledger-row').first()).toBeVisible({ timeout: 8000 });\n      |                                                                              ^\n  103 |   });\n  104 | });\n  105 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 78,
                            "line": 102
                          },
                          "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('#recent-transfers-card .ledger-row').first()\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('#recent-transfers-card .ledger-row').first()\u001b[22m\n\n\n  100 |   test('recent transfers card loads', async ({ page }) => {\n  101 |     // Should show at least one transfer row (shambhu has multiple)\n> 102 |     await expect(page.locator('#recent-transfers-card .ledger-row').first()).toBeVisible({ timeout: 8000 });\n      |                                                                              ^\n  103 |   });\n  104 | });\n  105 |\n    at /var/www/360lm/tests/fundcustodian.spec.js:102:78"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T05:49:30.823Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--ea58b-recent-transfers-card-loads-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--ea58b-recent-transfers-card-loads-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 78,
                        "line": 102
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-8b27d6cd9dc8e53fea06",
              "file": "fundcustodian.spec.js",
              "line": 100,
              "column": 3
            },
            {
              "title": "balance card renders and shows shambhu name",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 30,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1051,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:55:46.513Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-312b40c465c7720f813d",
              "file": "fundcustodian.spec.js",
              "line": 69,
              "column": 3
            },
            {
              "title": "no pending transfers banner shown for shambhu",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 30,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 695,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:55:47.639Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-6e731fbc13a8774e3e98",
              "file": "fundcustodian.spec.js",
              "line": 75,
              "column": 3
            },
            {
              "title": "outstanding advances section is visible",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 30,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5881,
                      "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-name').filter({ hasText: 'Mukesh' }).first()\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('.adv-name').filter({ hasText: 'Mukesh' }).first()\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-name').filter({ hasText: 'Mukesh' }).first()\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('.adv-name').filter({ hasText: 'Mukesh' }).first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:82:76",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 76,
                          "line": 82
                        },
                        "snippet": "  80 |     await expect(page.locator('.sec-label', { hasText: 'Outstanding Advances' })).toBeVisible();\n  81 |     // shambhu has A1 (Mukesh 5000) and A2 (Sachin, partially settled)\n> 82 |     await expect(page.locator('.adv-name', { hasText: 'Mukesh' }).first()).toBeVisible();\n     |                                                                            ^\n  83 |     await expect(page.locator('.adv-name', { hasText: 'Sachin' }).first()).toBeVisible();\n  84 |   });\n  85 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 76,
                            "line": 82
                          },
                          "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-name').filter({ hasText: 'Mukesh' }).first()\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('.adv-name').filter({ hasText: 'Mukesh' }).first()\u001b[22m\n\n\n  80 |     await expect(page.locator('.sec-label', { hasText: 'Outstanding Advances' })).toBeVisible();\n  81 |     // shambhu has A1 (Mukesh 5000) and A2 (Sachin, partially settled)\n> 82 |     await expect(page.locator('.adv-name', { hasText: 'Mukesh' }).first()).toBeVisible();\n     |                                                                            ^\n  83 |     await expect(page.locator('.adv-name', { hasText: 'Sachin' }).first()).toBeVisible();\n  84 |   });\n  85 |\n    at /var/www/360lm/tests/fundcustodian.spec.js:82:76"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:55:48.393Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--d41af-advances-section-is-visible-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--d41af-advances-section-is-visible-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 76,
                        "line": 82
                      }
                    },
                    {
                      "workerIndex": 31,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6299,
                      "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-name').filter({ hasText: 'Mukesh' }).first()\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('.adv-name').filter({ hasText: 'Mukesh' }).first()\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-name').filter({ hasText: 'Mukesh' }).first()\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('.adv-name').filter({ hasText: 'Mukesh' }).first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:82:76",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 76,
                          "line": 82
                        },
                        "snippet": "  80 |     await expect(page.locator('.sec-label', { hasText: 'Outstanding Advances' })).toBeVisible();\n  81 |     // shambhu has A1 (Mukesh 5000) and A2 (Sachin, partially settled)\n> 82 |     await expect(page.locator('.adv-name', { hasText: 'Mukesh' }).first()).toBeVisible();\n     |                                                                            ^\n  83 |     await expect(page.locator('.adv-name', { hasText: 'Sachin' }).first()).toBeVisible();\n  84 |   });\n  85 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 76,
                            "line": 82
                          },
                          "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-name').filter({ hasText: 'Mukesh' }).first()\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('.adv-name').filter({ hasText: 'Mukesh' }).first()\u001b[22m\n\n\n  80 |     await expect(page.locator('.sec-label', { hasText: 'Outstanding Advances' })).toBeVisible();\n  81 |     // shambhu has A1 (Mukesh 5000) and A2 (Sachin, partially settled)\n> 82 |     await expect(page.locator('.adv-name', { hasText: 'Mukesh' }).first()).toBeVisible();\n     |                                                                            ^\n  83 |     await expect(page.locator('.adv-name', { hasText: 'Sachin' }).first()).toBeVisible();\n  84 |   });\n  85 |\n    at /var/www/360lm/tests/fundcustodian.spec.js:82:76"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T05:55:56.328Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--d41af-advances-section-is-visible-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--d41af-advances-section-is-visible-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 76,
                        "line": 82
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-b638704a578a8caf5b7b",
              "file": "fundcustodian.spec.js",
              "line": 79,
              "column": 3
            },
            {
              "title": "admin balance grid is NOT shown for non-admin",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 32,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1852,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:56:05.394Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-e973e4f214bc25080cda",
              "file": "fundcustodian.spec.js",
              "line": 86,
              "column": 3
            },
            {
              "title": "manage custodian button hidden for non-admin",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 32,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1519,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:56:08.021Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-5170797acb4aa05bf1b9",
              "file": "fundcustodian.spec.js",
              "line": 91,
              "column": 3
            },
            {
              "title": "bottom nav has 4 tabs",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 32,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1293,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:56:09.685Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-9f473f3447aa3673090b",
              "file": "fundcustodian.spec.js",
              "line": 95,
              "column": 3
            },
            {
              "title": "recent transfers card loads",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 32,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 9816,
                      "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('#recent-transfers-card .ledger-row').first()\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('#recent-transfers-card .ledger-row').first()\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('#recent-transfers-card .ledger-row').first()\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('#recent-transfers-card .ledger-row').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:102:78",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 78,
                          "line": 102
                        },
                        "snippet": "  100 |   test('recent transfers card loads', async ({ page }) => {\n  101 |     // Should show at least one transfer row (shambhu has multiple)\n> 102 |     await expect(page.locator('#recent-transfers-card .ledger-row').first()).toBeVisible({ timeout: 8000 });\n      |                                                                              ^\n  103 |   });\n  104 | });\n  105 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 78,
                            "line": 102
                          },
                          "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('#recent-transfers-card .ledger-row').first()\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('#recent-transfers-card .ledger-row').first()\u001b[22m\n\n\n  100 |   test('recent transfers card loads', async ({ page }) => {\n  101 |     // Should show at least one transfer row (shambhu has multiple)\n> 102 |     await expect(page.locator('#recent-transfers-card .ledger-row').first()).toBeVisible({ timeout: 8000 });\n      |                                                                              ^\n  103 |   });\n  104 | });\n  105 |\n    at /var/www/360lm/tests/fundcustodian.spec.js:102:78"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:56:11.168Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--ea58b-recent-transfers-card-loads-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--ea58b-recent-transfers-card-loads-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 78,
                        "line": 102
                      }
                    },
                    {
                      "workerIndex": 33,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 13769,
                      "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('#recent-transfers-card .ledger-row').first()\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('#recent-transfers-card .ledger-row').first()\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('#recent-transfers-card .ledger-row').first()\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('#recent-transfers-card .ledger-row').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:102:78",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 78,
                          "line": 102
                        },
                        "snippet": "  100 |   test('recent transfers card loads', async ({ page }) => {\n  101 |     // Should show at least one transfer row (shambhu has multiple)\n> 102 |     await expect(page.locator('#recent-transfers-card .ledger-row').first()).toBeVisible({ timeout: 8000 });\n      |                                                                              ^\n  103 |   });\n  104 | });\n  105 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 78,
                            "line": 102
                          },
                          "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('#recent-transfers-card .ledger-row').first()\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('#recent-transfers-card .ledger-row').first()\u001b[22m\n\n\n  100 |   test('recent transfers card loads', async ({ page }) => {\n  101 |     // Should show at least one transfer row (shambhu has multiple)\n> 102 |     await expect(page.locator('#recent-transfers-card .ledger-row').first()).toBeVisible({ timeout: 8000 });\n      |                                                                              ^\n  103 |   });\n  104 | });\n  105 |\n    at /var/www/360lm/tests/fundcustodian.spec.js:102:78"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T05:56:29.559Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--ea58b-recent-transfers-card-loads-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--ea58b-recent-transfers-card-loads-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 78,
                        "line": 102
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-0b597b9896607af0ed81",
              "file": "fundcustodian.spec.js",
              "line": 100,
              "column": 3
            }
          ]
        },
        {
          "title": "Dashboard — harish (admin, 2 pending)",
          "file": "fundcustodian.spec.js",
          "line": 109,
          "column": 6,
          "specs": [
            {
              "title": "pending banner appears with count 2",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 4,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5666,
                      "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('.pend-banner')\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('.pend-banner')\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('.pend-banner')\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('.pend-banner')\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:118:26",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 26,
                          "line": 118
                        },
                        "snippet": "  116 |   test('pending banner appears with count 2', async ({ page }) => {\n  117 |     const banner = page.locator('.pend-banner');\n> 118 |     await expect(banner).toBeVisible();\n      |                          ^\n  119 |     await expect(banner).toContainText('2 pending transfers');\n  120 |   });\n  121 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 26,
                            "line": 118
                          },
                          "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('.pend-banner')\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('.pend-banner')\u001b[22m\n\n\n  116 |   test('pending banner appears with count 2', async ({ page }) => {\n  117 |     const banner = page.locator('.pend-banner');\n> 118 |     await expect(banner).toBeVisible();\n      |                          ^\n  119 |     await expect(banner).toContainText('2 pending transfers');\n  120 |   });\n  121 |\n    at /var/www/360lm/tests/fundcustodian.spec.js:118:26"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:49:40.788Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--c5dfb-banner-appears-with-count-2-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--c5dfb-banner-appears-with-count-2-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 26,
                        "line": 118
                      }
                    },
                    {
                      "workerIndex": 5,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5649,
                      "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('.pend-banner')\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('.pend-banner')\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('.pend-banner')\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('.pend-banner')\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:118:26",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 26,
                          "line": 118
                        },
                        "snippet": "  116 |   test('pending banner appears with count 2', async ({ page }) => {\n  117 |     const banner = page.locator('.pend-banner');\n> 118 |     await expect(banner).toBeVisible();\n      |                          ^\n  119 |     await expect(banner).toContainText('2 pending transfers');\n  120 |   });\n  121 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 26,
                            "line": 118
                          },
                          "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('.pend-banner')\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('.pend-banner')\u001b[22m\n\n\n  116 |   test('pending banner appears with count 2', async ({ page }) => {\n  117 |     const banner = page.locator('.pend-banner');\n> 118 |     await expect(banner).toBeVisible();\n      |                          ^\n  119 |     await expect(banner).toContainText('2 pending transfers');\n  120 |   });\n  121 |\n    at /var/www/360lm/tests/fundcustodian.spec.js:118:26"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T05:49:48.314Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--c5dfb-banner-appears-with-count-2-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--c5dfb-banner-appears-with-count-2-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 26,
                        "line": 118
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-0cf52fe6a4355dfb045a",
              "file": "fundcustodian.spec.js",
              "line": 116,
              "column": 3
            },
            {
              "title": "pending banner shows from-name and amount for both",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 6,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6028,
                      "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('.pend-item-who').filter({ hasText: 'Shambhu' })\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('.pend-item-who').filter({ hasText: 'Shambhu' })\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('.pend-item-who').filter({ hasText: 'Shambhu' })\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('.pend-item-who').filter({ hasText: 'Shambhu' })\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:123:74",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 74,
                          "line": 123
                        },
                        "snippet": "  121 |\n  122 |   test('pending banner shows from-name and amount for both', async ({ page }) => {\n> 123 |     await expect(page.locator('.pend-item-who', { hasText: 'Shambhu' })).toBeVisible();\n      |                                                                          ^\n  124 |     await expect(page.locator('.pend-item-who', { hasText: 'Gurpreet' })).toBeVisible();\n  125 |     const amts = page.locator('.pend-item-amt');\n  126 |     await expect(amts).toHaveCount(2);"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 74,
                            "line": 123
                          },
                          "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('.pend-item-who').filter({ hasText: 'Shambhu' })\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('.pend-item-who').filter({ hasText: 'Shambhu' })\u001b[22m\n\n\n  121 |\n  122 |   test('pending banner shows from-name and amount for both', async ({ page }) => {\n> 123 |     await expect(page.locator('.pend-item-who', { hasText: 'Shambhu' })).toBeVisible();\n      |                                                                          ^\n  124 |     await expect(page.locator('.pend-item-who', { hasText: 'Gurpreet' })).toBeVisible();\n  125 |     const amts = page.locator('.pend-item-amt');\n  126 |     await expect(amts).toHaveCount(2);\n    at /var/www/360lm/tests/fundcustodian.spec.js:123:74"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:49:55.301Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--f5e84-om-name-and-amount-for-both-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--f5e84-om-name-and-amount-for-both-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 74,
                        "line": 123
                      }
                    },
                    {
                      "workerIndex": 7,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6559,
                      "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('.pend-item-who').filter({ hasText: 'Shambhu' })\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('.pend-item-who').filter({ hasText: 'Shambhu' })\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('.pend-item-who').filter({ hasText: 'Shambhu' })\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('.pend-item-who').filter({ hasText: 'Shambhu' })\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:123:74",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 74,
                          "line": 123
                        },
                        "snippet": "  121 |\n  122 |   test('pending banner shows from-name and amount for both', async ({ page }) => {\n> 123 |     await expect(page.locator('.pend-item-who', { hasText: 'Shambhu' })).toBeVisible();\n      |                                                                          ^\n  124 |     await expect(page.locator('.pend-item-who', { hasText: 'Gurpreet' })).toBeVisible();\n  125 |     const amts = page.locator('.pend-item-amt');\n  126 |     await expect(amts).toHaveCount(2);"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 74,
                            "line": 123
                          },
                          "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('.pend-item-who').filter({ hasText: 'Shambhu' })\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('.pend-item-who').filter({ hasText: 'Shambhu' })\u001b[22m\n\n\n  121 |\n  122 |   test('pending banner shows from-name and amount for both', async ({ page }) => {\n> 123 |     await expect(page.locator('.pend-item-who', { hasText: 'Shambhu' })).toBeVisible();\n      |                                                                          ^\n  124 |     await expect(page.locator('.pend-item-who', { hasText: 'Gurpreet' })).toBeVisible();\n  125 |     const amts = page.locator('.pend-item-amt');\n  126 |     await expect(amts).toHaveCount(2);\n    at /var/www/360lm/tests/fundcustodian.spec.js:123:74"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T05:50:05.002Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--f5e84-om-name-and-amount-for-both-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--f5e84-om-name-and-amount-for-both-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 74,
                        "line": 123
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-b04a183312ba73e5a11d",
              "file": "fundcustodian.spec.js",
              "line": 122,
              "column": 3
            },
            {
              "title": "pending item has Accept and Reject buttons",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 8,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6853,
                      "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('.btn-accept').first()\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('.btn-accept').first()\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('.btn-accept').first()\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('.btn-accept').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:130:55",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 55,
                          "line": 130
                        },
                        "snippet": "  128 |\n  129 |   test('pending item has Accept and Reject buttons', async ({ page }) => {\n> 130 |     await expect(page.locator('.btn-accept').first()).toBeVisible();\n      |                                                       ^\n  131 |     await expect(page.locator('.btn-reject').first()).toBeVisible();\n  132 |   });\n  133 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 55,
                            "line": 130
                          },
                          "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('.btn-accept').first()\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('.btn-accept').first()\u001b[22m\n\n\n  128 |\n  129 |   test('pending item has Accept and Reject buttons', async ({ page }) => {\n> 130 |     await expect(page.locator('.btn-accept').first()).toBeVisible();\n      |                                                       ^\n  131 |     await expect(page.locator('.btn-reject').first()).toBeVisible();\n  132 |   });\n  133 |\n    at /var/www/360lm/tests/fundcustodian.spec.js:130:55"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:50:14.389Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--b088d-s-Accept-and-Reject-buttons-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--b088d-s-Accept-and-Reject-buttons-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 55,
                        "line": 130
                      }
                    },
                    {
                      "workerIndex": 9,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6652,
                      "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('.btn-accept').first()\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('.btn-accept').first()\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('.btn-accept').first()\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('.btn-accept').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:130:55",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 55,
                          "line": 130
                        },
                        "snippet": "  128 |\n  129 |   test('pending item has Accept and Reject buttons', async ({ page }) => {\n> 130 |     await expect(page.locator('.btn-accept').first()).toBeVisible();\n      |                                                       ^\n  131 |     await expect(page.locator('.btn-reject').first()).toBeVisible();\n  132 |   });\n  133 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 55,
                            "line": 130
                          },
                          "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('.btn-accept').first()\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('.btn-accept').first()\u001b[22m\n\n\n  128 |\n  129 |   test('pending item has Accept and Reject buttons', async ({ page }) => {\n> 130 |     await expect(page.locator('.btn-accept').first()).toBeVisible();\n      |                                                       ^\n  131 |     await expect(page.locator('.btn-reject').first()).toBeVisible();\n  132 |   });\n  133 |\n    at /var/www/360lm/tests/fundcustodian.spec.js:130:55"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T05:50:24.347Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--b088d-s-Accept-and-Reject-buttons-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--b088d-s-Accept-and-Reject-buttons-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 55,
                        "line": 130
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-d5b20c5a038fdf23fa61",
              "file": "fundcustodian.spec.js",
              "line": 129,
              "column": 3
            },
            {
              "title": "admin balance grid shows all 4 custodians",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 10,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1187,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:50:33.648Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-574735f2d7aa737c4de4",
              "file": "fundcustodian.spec.js",
              "line": 134,
              "column": 3
            },
            {
              "title": "primary badge on Pramod tile",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 10,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 798,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:50:35.230Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-97cf0bf851e91b557836",
              "file": "fundcustodian.spec.js",
              "line": 144,
              "column": 3
            },
            {
              "title": "manage custodian button visible for admin",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 10,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 933,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:50:36.091Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-8b52981cd3eb5f5965b5",
              "file": "fundcustodian.spec.js",
              "line": 149,
              "column": 3
            },
            {
              "title": "admin sees all outstanding advances (not just own)",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 10,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5931,
                      "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-name').filter({ hasText: 'Mukesh' }).first()\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('.adv-name').filter({ hasText: 'Mukesh' }).first()\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-name').filter({ hasText: 'Mukesh' }).first()\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('.adv-name').filter({ hasText: 'Mukesh' }).first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:155:76",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 76,
                          "line": 155
                        },
                        "snippet": "  153 |   test('admin sees all outstanding advances (not just own)', async ({ page }) => {\n  154 |     // Mukesh appears twice (A1 from shambhu + A5 from harish) — admin sees all custodians' advances\n> 155 |     await expect(page.locator('.adv-name', { hasText: 'Mukesh' }).first()).toBeVisible();\n      |                                                                            ^\n  156 |     await expect(page.locator('.adv-name', { hasText: 'Umashankar' })).toBeVisible();\n  157 |     const mukeshCount = await page.locator('.adv-name', { hasText: 'Mukesh' }).count();\n  158 |     expect(mukeshCount).toBe(2);"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 76,
                            "line": 155
                          },
                          "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-name').filter({ hasText: 'Mukesh' }).first()\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('.adv-name').filter({ hasText: 'Mukesh' }).first()\u001b[22m\n\n\n  153 |   test('admin sees all outstanding advances (not just own)', async ({ page }) => {\n  154 |     // Mukesh appears twice (A1 from shambhu + A5 from harish) — admin sees all custodians' advances\n> 155 |     await expect(page.locator('.adv-name', { hasText: 'Mukesh' }).first()).toBeVisible();\n      |                                                                            ^\n  156 |     await expect(page.locator('.adv-name', { hasText: 'Umashankar' })).toBeVisible();\n  157 |     const mukeshCount = await page.locator('.adv-name', { hasText: 'Mukesh' }).count();\n  158 |     expect(mukeshCount).toBe(2);\n    at /var/www/360lm/tests/fundcustodian.spec.js:155:76"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:50:37.110Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--9791e-ding-advances-not-just-own--android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--9791e-ding-advances-not-just-own--android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 76,
                        "line": 155
                      }
                    },
                    {
                      "workerIndex": 11,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6363,
                      "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-name').filter({ hasText: 'Mukesh' }).first()\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('.adv-name').filter({ hasText: 'Mukesh' }).first()\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-name').filter({ hasText: 'Mukesh' }).first()\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('.adv-name').filter({ hasText: 'Mukesh' }).first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:155:76",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 76,
                          "line": 155
                        },
                        "snippet": "  153 |   test('admin sees all outstanding advances (not just own)', async ({ page }) => {\n  154 |     // Mukesh appears twice (A1 from shambhu + A5 from harish) — admin sees all custodians' advances\n> 155 |     await expect(page.locator('.adv-name', { hasText: 'Mukesh' }).first()).toBeVisible();\n      |                                                                            ^\n  156 |     await expect(page.locator('.adv-name', { hasText: 'Umashankar' })).toBeVisible();\n  157 |     const mukeshCount = await page.locator('.adv-name', { hasText: 'Mukesh' }).count();\n  158 |     expect(mukeshCount).toBe(2);"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 76,
                            "line": 155
                          },
                          "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-name').filter({ hasText: 'Mukesh' }).first()\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('.adv-name').filter({ hasText: 'Mukesh' }).first()\u001b[22m\n\n\n  153 |   test('admin sees all outstanding advances (not just own)', async ({ page }) => {\n  154 |     // Mukesh appears twice (A1 from shambhu + A5 from harish) — admin sees all custodians' advances\n> 155 |     await expect(page.locator('.adv-name', { hasText: 'Mukesh' }).first()).toBeVisible();\n      |                                                                            ^\n  156 |     await expect(page.locator('.adv-name', { hasText: 'Umashankar' })).toBeVisible();\n  157 |     const mukeshCount = await page.locator('.adv-name', { hasText: 'Mukesh' }).count();\n  158 |     expect(mukeshCount).toBe(2);\n    at /var/www/360lm/tests/fundcustodian.spec.js:155:76"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T05:50:45.333Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--9791e-ding-advances-not-just-own--android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--9791e-ding-advances-not-just-own--android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 76,
                        "line": 155
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-a4bb90f7b065c8a0e369",
              "file": "fundcustodian.spec.js",
              "line": 153,
              "column": 3
            },
            {
              "title": "pending banner appears with count 2",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 34,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 7538,
                      "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('.pend-banner')\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('.pend-banner')\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('.pend-banner')\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('.pend-banner')\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:118:26",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 26,
                          "line": 118
                        },
                        "snippet": "  116 |   test('pending banner appears with count 2', async ({ page }) => {\n  117 |     const banner = page.locator('.pend-banner');\n> 118 |     await expect(banner).toBeVisible();\n      |                          ^\n  119 |     await expect(banner).toContainText('2 pending transfers');\n  120 |   });\n  121 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 26,
                            "line": 118
                          },
                          "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('.pend-banner')\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('.pend-banner')\u001b[22m\n\n\n  116 |   test('pending banner appears with count 2', async ({ page }) => {\n  117 |     const banner = page.locator('.pend-banner');\n> 118 |     await expect(banner).toBeVisible();\n      |                          ^\n  119 |     await expect(banner).toContainText('2 pending transfers');\n  120 |   });\n  121 |\n    at /var/www/360lm/tests/fundcustodian.spec.js:118:26"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:56:53.325Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--c5dfb-banner-appears-with-count-2-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--c5dfb-banner-appears-with-count-2-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 26,
                        "line": 118
                      }
                    },
                    {
                      "workerIndex": 35,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6985,
                      "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('.pend-banner')\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('.pend-banner')\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('.pend-banner')\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('.pend-banner')\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:118:26",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 26,
                          "line": 118
                        },
                        "snippet": "  116 |   test('pending banner appears with count 2', async ({ page }) => {\n  117 |     const banner = page.locator('.pend-banner');\n> 118 |     await expect(banner).toBeVisible();\n      |                          ^\n  119 |     await expect(banner).toContainText('2 pending transfers');\n  120 |   });\n  121 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 26,
                            "line": 118
                          },
                          "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('.pend-banner')\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('.pend-banner')\u001b[22m\n\n\n  116 |   test('pending banner appears with count 2', async ({ page }) => {\n  117 |     const banner = page.locator('.pend-banner');\n> 118 |     await expect(banner).toBeVisible();\n      |                          ^\n  119 |     await expect(banner).toContainText('2 pending transfers');\n  120 |   });\n  121 |\n    at /var/www/360lm/tests/fundcustodian.spec.js:118:26"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T05:57:08.034Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--c5dfb-banner-appears-with-count-2-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--c5dfb-banner-appears-with-count-2-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 26,
                        "line": 118
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-5721b8f6fb5dd9cea365",
              "file": "fundcustodian.spec.js",
              "line": 116,
              "column": 3
            },
            {
              "title": "pending banner shows from-name and amount for both",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 36,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6991,
                      "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('.pend-item-who').filter({ hasText: 'Shambhu' })\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('.pend-item-who').filter({ hasText: 'Shambhu' })\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('.pend-item-who').filter({ hasText: 'Shambhu' })\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('.pend-item-who').filter({ hasText: 'Shambhu' })\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:123:74",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 74,
                          "line": 123
                        },
                        "snippet": "  121 |\n  122 |   test('pending banner shows from-name and amount for both', async ({ page }) => {\n> 123 |     await expect(page.locator('.pend-item-who', { hasText: 'Shambhu' })).toBeVisible();\n      |                                                                          ^\n  124 |     await expect(page.locator('.pend-item-who', { hasText: 'Gurpreet' })).toBeVisible();\n  125 |     const amts = page.locator('.pend-item-amt');\n  126 |     await expect(amts).toHaveCount(2);"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 74,
                            "line": 123
                          },
                          "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('.pend-item-who').filter({ hasText: 'Shambhu' })\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('.pend-item-who').filter({ hasText: 'Shambhu' })\u001b[22m\n\n\n  121 |\n  122 |   test('pending banner shows from-name and amount for both', async ({ page }) => {\n> 123 |     await expect(page.locator('.pend-item-who', { hasText: 'Shambhu' })).toBeVisible();\n      |                                                                          ^\n  124 |     await expect(page.locator('.pend-item-who', { hasText: 'Gurpreet' })).toBeVisible();\n  125 |     const amts = page.locator('.pend-item-amt');\n  126 |     await expect(amts).toHaveCount(2);\n    at /var/www/360lm/tests/fundcustodian.spec.js:123:74"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:57:22.865Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--f5e84-om-name-and-amount-for-both-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--f5e84-om-name-and-amount-for-both-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 74,
                        "line": 123
                      }
                    },
                    {
                      "workerIndex": 37,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6054,
                      "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('.pend-item-who').filter({ hasText: 'Shambhu' })\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('.pend-item-who').filter({ hasText: 'Shambhu' })\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('.pend-item-who').filter({ hasText: 'Shambhu' })\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('.pend-item-who').filter({ hasText: 'Shambhu' })\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:123:74",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 74,
                          "line": 123
                        },
                        "snippet": "  121 |\n  122 |   test('pending banner shows from-name and amount for both', async ({ page }) => {\n> 123 |     await expect(page.locator('.pend-item-who', { hasText: 'Shambhu' })).toBeVisible();\n      |                                                                          ^\n  124 |     await expect(page.locator('.pend-item-who', { hasText: 'Gurpreet' })).toBeVisible();\n  125 |     const amts = page.locator('.pend-item-amt');\n  126 |     await expect(amts).toHaveCount(2);"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 74,
                            "line": 123
                          },
                          "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('.pend-item-who').filter({ hasText: 'Shambhu' })\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('.pend-item-who').filter({ hasText: 'Shambhu' })\u001b[22m\n\n\n  121 |\n  122 |   test('pending banner shows from-name and amount for both', async ({ page }) => {\n> 123 |     await expect(page.locator('.pend-item-who', { hasText: 'Shambhu' })).toBeVisible();\n      |                                                                          ^\n  124 |     await expect(page.locator('.pend-item-who', { hasText: 'Gurpreet' })).toBeVisible();\n  125 |     const amts = page.locator('.pend-item-amt');\n  126 |     await expect(amts).toHaveCount(2);\n    at /var/www/360lm/tests/fundcustodian.spec.js:123:74"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T05:57:35.474Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--f5e84-om-name-and-amount-for-both-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--f5e84-om-name-and-amount-for-both-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 74,
                        "line": 123
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-fe87a17783e6f6cbddeb",
              "file": "fundcustodian.spec.js",
              "line": 122,
              "column": 3
            },
            {
              "title": "pending item has Accept and Reject buttons",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 38,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6549,
                      "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('.btn-accept').first()\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('.btn-accept').first()\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('.btn-accept').first()\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('.btn-accept').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:130:55",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 55,
                          "line": 130
                        },
                        "snippet": "  128 |\n  129 |   test('pending item has Accept and Reject buttons', async ({ page }) => {\n> 130 |     await expect(page.locator('.btn-accept').first()).toBeVisible();\n      |                                                       ^\n  131 |     await expect(page.locator('.btn-reject').first()).toBeVisible();\n  132 |   });\n  133 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 55,
                            "line": 130
                          },
                          "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('.btn-accept').first()\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('.btn-accept').first()\u001b[22m\n\n\n  128 |\n  129 |   test('pending item has Accept and Reject buttons', async ({ page }) => {\n> 130 |     await expect(page.locator('.btn-accept').first()).toBeVisible();\n      |                                                       ^\n  131 |     await expect(page.locator('.btn-reject').first()).toBeVisible();\n  132 |   });\n  133 |\n    at /var/www/360lm/tests/fundcustodian.spec.js:130:55"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:57:44.928Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--b088d-s-Accept-and-Reject-buttons-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--b088d-s-Accept-and-Reject-buttons-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 55,
                        "line": 130
                      }
                    },
                    {
                      "workerIndex": 39,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6443,
                      "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('.btn-accept').first()\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('.btn-accept').first()\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('.btn-accept').first()\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('.btn-accept').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:130:55",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 55,
                          "line": 130
                        },
                        "snippet": "  128 |\n  129 |   test('pending item has Accept and Reject buttons', async ({ page }) => {\n> 130 |     await expect(page.locator('.btn-accept').first()).toBeVisible();\n      |                                                       ^\n  131 |     await expect(page.locator('.btn-reject').first()).toBeVisible();\n  132 |   });\n  133 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 55,
                            "line": 130
                          },
                          "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('.btn-accept').first()\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('.btn-accept').first()\u001b[22m\n\n\n  128 |\n  129 |   test('pending item has Accept and Reject buttons', async ({ page }) => {\n> 130 |     await expect(page.locator('.btn-accept').first()).toBeVisible();\n      |                                                       ^\n  131 |     await expect(page.locator('.btn-reject').first()).toBeVisible();\n  132 |   });\n  133 |\n    at /var/www/360lm/tests/fundcustodian.spec.js:130:55"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T05:57:53.836Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--b088d-s-Accept-and-Reject-buttons-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--b088d-s-Accept-and-Reject-buttons-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 55,
                        "line": 130
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-7b266c8c9bc51287a120",
              "file": "fundcustodian.spec.js",
              "line": 129,
              "column": 3
            },
            {
              "title": "admin balance grid shows all 4 custodians",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 40,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1494,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:58:06.334Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-1958f4c60f44583934fb",
              "file": "fundcustodian.spec.js",
              "line": 134,
              "column": 3
            },
            {
              "title": "primary badge on Pramod tile",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 40,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1141,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:58:08.790Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-6fdaef92560b85a800dc",
              "file": "fundcustodian.spec.js",
              "line": 144,
              "column": 3
            },
            {
              "title": "manage custodian button visible for admin",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 40,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1437,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:58:10.059Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-10340aa1573ae9c5ee45",
              "file": "fundcustodian.spec.js",
              "line": 149,
              "column": 3
            },
            {
              "title": "admin sees all outstanding advances (not just own)",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 40,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5786,
                      "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-name').filter({ hasText: 'Mukesh' }).first()\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('.adv-name').filter({ hasText: 'Mukesh' }).first()\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-name').filter({ hasText: 'Mukesh' }).first()\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('.adv-name').filter({ hasText: 'Mukesh' }).first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:155:76",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 76,
                          "line": 155
                        },
                        "snippet": "  153 |   test('admin sees all outstanding advances (not just own)', async ({ page }) => {\n  154 |     // Mukesh appears twice (A1 from shambhu + A5 from harish) — admin sees all custodians' advances\n> 155 |     await expect(page.locator('.adv-name', { hasText: 'Mukesh' }).first()).toBeVisible();\n      |                                                                            ^\n  156 |     await expect(page.locator('.adv-name', { hasText: 'Umashankar' })).toBeVisible();\n  157 |     const mukeshCount = await page.locator('.adv-name', { hasText: 'Mukesh' }).count();\n  158 |     expect(mukeshCount).toBe(2);"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 76,
                            "line": 155
                          },
                          "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-name').filter({ hasText: 'Mukesh' }).first()\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('.adv-name').filter({ hasText: 'Mukesh' }).first()\u001b[22m\n\n\n  153 |   test('admin sees all outstanding advances (not just own)', async ({ page }) => {\n  154 |     // Mukesh appears twice (A1 from shambhu + A5 from harish) — admin sees all custodians' advances\n> 155 |     await expect(page.locator('.adv-name', { hasText: 'Mukesh' }).first()).toBeVisible();\n      |                                                                            ^\n  156 |     await expect(page.locator('.adv-name', { hasText: 'Umashankar' })).toBeVisible();\n  157 |     const mukeshCount = await page.locator('.adv-name', { hasText: 'Mukesh' }).count();\n  158 |     expect(mukeshCount).toBe(2);\n    at /var/www/360lm/tests/fundcustodian.spec.js:155:76"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:58:11.665Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--9791e-ding-advances-not-just-own--desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--9791e-ding-advances-not-just-own--desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 76,
                        "line": 155
                      }
                    },
                    {
                      "workerIndex": 41,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6373,
                      "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-name').filter({ hasText: 'Mukesh' }).first()\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('.adv-name').filter({ hasText: 'Mukesh' }).first()\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-name').filter({ hasText: 'Mukesh' }).first()\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('.adv-name').filter({ hasText: 'Mukesh' }).first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:155:76",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 76,
                          "line": 155
                        },
                        "snippet": "  153 |   test('admin sees all outstanding advances (not just own)', async ({ page }) => {\n  154 |     // Mukesh appears twice (A1 from shambhu + A5 from harish) — admin sees all custodians' advances\n> 155 |     await expect(page.locator('.adv-name', { hasText: 'Mukesh' }).first()).toBeVisible();\n      |                                                                            ^\n  156 |     await expect(page.locator('.adv-name', { hasText: 'Umashankar' })).toBeVisible();\n  157 |     const mukeshCount = await page.locator('.adv-name', { hasText: 'Mukesh' }).count();\n  158 |     expect(mukeshCount).toBe(2);"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 76,
                            "line": 155
                          },
                          "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-name').filter({ hasText: 'Mukesh' }).first()\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('.adv-name').filter({ hasText: 'Mukesh' }).first()\u001b[22m\n\n\n  153 |   test('admin sees all outstanding advances (not just own)', async ({ page }) => {\n  154 |     // Mukesh appears twice (A1 from shambhu + A5 from harish) — admin sees all custodians' advances\n> 155 |     await expect(page.locator('.adv-name', { hasText: 'Mukesh' }).first()).toBeVisible();\n      |                                                                            ^\n  156 |     await expect(page.locator('.adv-name', { hasText: 'Umashankar' })).toBeVisible();\n  157 |     const mukeshCount = await page.locator('.adv-name', { hasText: 'Mukesh' }).count();\n  158 |     expect(mukeshCount).toBe(2);\n    at /var/www/360lm/tests/fundcustodian.spec.js:155:76"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T05:58:20.382Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--9791e-ding-advances-not-just-own--desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--9791e-ding-advances-not-just-own--desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 76,
                        "line": 155
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-f7ddee31989f51c705ac",
              "file": "fundcustodian.spec.js",
              "line": 153,
              "column": 3
            }
          ]
        },
        {
          "title": "Dashboard — pramod (admin, primary custodian)",
          "file": "fundcustodian.spec.js",
          "line": 165,
          "column": 6,
          "specs": [
            {
              "title": "pramod balance card is negative and shows red text",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 12,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6077,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#my-balance')\nExpected pattern: \u001b[32m/neg/\u001b[39m\nReceived string:  \u001b[31m\"bal-amount\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveClass\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#my-balance')\u001b[22m\n\u001b[2m    14 × locator resolved to <div id=\"my-balance\" class=\"bal-amount\">₹ 0.00</div>\u001b[22m\n\u001b[2m       - unexpected value \"bal-amount\"\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#my-balance')\nExpected pattern: \u001b[32m/neg/\u001b[39m\nReceived string:  \u001b[31m\"bal-amount\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveClass\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#my-balance')\u001b[22m\n\u001b[2m    14 × locator resolved to <div id=\"my-balance\" class=\"bal-amount\">₹ 0.00</div>\u001b[22m\n\u001b[2m       - unexpected value \"bal-amount\"\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:172:25",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 25,
                          "line": 172
                        },
                        "snippet": "  170 |     const balEl = page.locator('#my-balance');\n  171 |     // Negative balance → .neg class\n> 172 |     await expect(balEl).toHaveClass(/neg/);\n      |                         ^\n  173 |     const txt = await balEl.textContent();\n  174 |     expect(txt).toMatch(/₹/);\n  175 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 25,
                            "line": 172
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#my-balance')\nExpected pattern: \u001b[32m/neg/\u001b[39m\nReceived string:  \u001b[31m\"bal-amount\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveClass\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#my-balance')\u001b[22m\n\u001b[2m    14 × locator resolved to <div id=\"my-balance\" class=\"bal-amount\">₹ 0.00</div>\u001b[22m\n\u001b[2m       - unexpected value \"bal-amount\"\u001b[22m\n\n\n  170 |     const balEl = page.locator('#my-balance');\n  171 |     // Negative balance → .neg class\n> 172 |     await expect(balEl).toHaveClass(/neg/);\n      |                         ^\n  173 |     const txt = await balEl.textContent();\n  174 |     expect(txt).toMatch(/₹/);\n  175 |   });\n    at /var/www/360lm/tests/fundcustodian.spec.js:172:25"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:50:54.380Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--4488f-negative-and-shows-red-text-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--4488f-negative-and-shows-red-text-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 25,
                        "line": 172
                      }
                    },
                    {
                      "workerIndex": 13,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6621,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#my-balance')\nExpected pattern: \u001b[32m/neg/\u001b[39m\nReceived string:  \u001b[31m\"bal-amount\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveClass\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#my-balance')\u001b[22m\n\u001b[2m    14 × locator resolved to <div id=\"my-balance\" class=\"bal-amount\">₹ 0.00</div>\u001b[22m\n\u001b[2m       - unexpected value \"bal-amount\"\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#my-balance')\nExpected pattern: \u001b[32m/neg/\u001b[39m\nReceived string:  \u001b[31m\"bal-amount\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveClass\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#my-balance')\u001b[22m\n\u001b[2m    14 × locator resolved to <div id=\"my-balance\" class=\"bal-amount\">₹ 0.00</div>\u001b[22m\n\u001b[2m       - unexpected value \"bal-amount\"\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:172:25",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 25,
                          "line": 172
                        },
                        "snippet": "  170 |     const balEl = page.locator('#my-balance');\n  171 |     // Negative balance → .neg class\n> 172 |     await expect(balEl).toHaveClass(/neg/);\n      |                         ^\n  173 |     const txt = await balEl.textContent();\n  174 |     expect(txt).toMatch(/₹/);\n  175 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 25,
                            "line": 172
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#my-balance')\nExpected pattern: \u001b[32m/neg/\u001b[39m\nReceived string:  \u001b[31m\"bal-amount\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveClass\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#my-balance')\u001b[22m\n\u001b[2m    14 × locator resolved to <div id=\"my-balance\" class=\"bal-amount\">₹ 0.00</div>\u001b[22m\n\u001b[2m       - unexpected value \"bal-amount\"\u001b[22m\n\n\n  170 |     const balEl = page.locator('#my-balance');\n  171 |     // Negative balance → .neg class\n> 172 |     await expect(balEl).toHaveClass(/neg/);\n      |                         ^\n  173 |     const txt = await balEl.textContent();\n  174 |     expect(txt).toMatch(/₹/);\n  175 |   });\n    at /var/www/360lm/tests/fundcustodian.spec.js:172:25"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T05:51:03.872Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--4488f-negative-and-shows-red-text-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--4488f-negative-and-shows-red-text-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 25,
                        "line": 172
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-b2cb37c30ab55afae59f",
              "file": "fundcustodian.spec.js",
              "line": 166,
              "column": 3
            },
            {
              "title": "pramod balance card is negative and shows red text",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 42,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6129,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#my-balance')\nExpected pattern: \u001b[32m/neg/\u001b[39m\nReceived string:  \u001b[31m\"bal-amount\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveClass\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#my-balance')\u001b[22m\n\u001b[2m    13 × locator resolved to <div id=\"my-balance\" class=\"bal-amount\">₹ 0.00</div>\u001b[22m\n\u001b[2m       - unexpected value \"bal-amount\"\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#my-balance')\nExpected pattern: \u001b[32m/neg/\u001b[39m\nReceived string:  \u001b[31m\"bal-amount\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveClass\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#my-balance')\u001b[22m\n\u001b[2m    13 × locator resolved to <div id=\"my-balance\" class=\"bal-amount\">₹ 0.00</div>\u001b[22m\n\u001b[2m       - unexpected value \"bal-amount\"\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:172:25",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 25,
                          "line": 172
                        },
                        "snippet": "  170 |     const balEl = page.locator('#my-balance');\n  171 |     // Negative balance → .neg class\n> 172 |     await expect(balEl).toHaveClass(/neg/);\n      |                         ^\n  173 |     const txt = await balEl.textContent();\n  174 |     expect(txt).toMatch(/₹/);\n  175 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 25,
                            "line": 172
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#my-balance')\nExpected pattern: \u001b[32m/neg/\u001b[39m\nReceived string:  \u001b[31m\"bal-amount\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveClass\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#my-balance')\u001b[22m\n\u001b[2m    13 × locator resolved to <div id=\"my-balance\" class=\"bal-amount\">₹ 0.00</div>\u001b[22m\n\u001b[2m       - unexpected value \"bal-amount\"\u001b[22m\n\n\n  170 |     const balEl = page.locator('#my-balance');\n  171 |     // Negative balance → .neg class\n> 172 |     await expect(balEl).toHaveClass(/neg/);\n      |                         ^\n  173 |     const txt = await balEl.textContent();\n  174 |     expect(txt).toMatch(/₹/);\n  175 |   });\n    at /var/www/360lm/tests/fundcustodian.spec.js:172:25"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:58:30.807Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--4488f-negative-and-shows-red-text-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--4488f-negative-and-shows-red-text-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 25,
                        "line": 172
                      }
                    },
                    {
                      "workerIndex": 43,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6450,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#my-balance')\nExpected pattern: \u001b[32m/neg/\u001b[39m\nReceived string:  \u001b[31m\"bal-amount\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveClass\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#my-balance')\u001b[22m\n\u001b[2m    13 × locator resolved to <div id=\"my-balance\" class=\"bal-amount\">₹ 0.00</div>\u001b[22m\n\u001b[2m       - unexpected value \"bal-amount\"\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#my-balance')\nExpected pattern: \u001b[32m/neg/\u001b[39m\nReceived string:  \u001b[31m\"bal-amount\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveClass\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#my-balance')\u001b[22m\n\u001b[2m    13 × locator resolved to <div id=\"my-balance\" class=\"bal-amount\">₹ 0.00</div>\u001b[22m\n\u001b[2m       - unexpected value \"bal-amount\"\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:172:25",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 25,
                          "line": 172
                        },
                        "snippet": "  170 |     const balEl = page.locator('#my-balance');\n  171 |     // Negative balance → .neg class\n> 172 |     await expect(balEl).toHaveClass(/neg/);\n      |                         ^\n  173 |     const txt = await balEl.textContent();\n  174 |     expect(txt).toMatch(/₹/);\n  175 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 25,
                            "line": 172
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#my-balance')\nExpected pattern: \u001b[32m/neg/\u001b[39m\nReceived string:  \u001b[31m\"bal-amount\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveClass\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#my-balance')\u001b[22m\n\u001b[2m    13 × locator resolved to <div id=\"my-balance\" class=\"bal-amount\">₹ 0.00</div>\u001b[22m\n\u001b[2m       - unexpected value \"bal-amount\"\u001b[22m\n\n\n  170 |     const balEl = page.locator('#my-balance');\n  171 |     // Negative balance → .neg class\n> 172 |     await expect(balEl).toHaveClass(/neg/);\n      |                         ^\n  173 |     const txt = await balEl.textContent();\n  174 |     expect(txt).toMatch(/₹/);\n  175 |   });\n    at /var/www/360lm/tests/fundcustodian.spec.js:172:25"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T05:58:40.469Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--4488f-negative-and-shows-red-text-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--4488f-negative-and-shows-red-text-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 25,
                        "line": 172
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-a9e02f15a81841037820",
              "file": "fundcustodian.spec.js",
              "line": 166,
              "column": 3
            }
          ]
        },
        {
          "title": "Dashboard — gurpreet (new custodian, low activity)",
          "file": "fundcustodian.spec.js",
          "line": 181,
          "column": 6,
          "specs": [
            {
              "title": "gurpreet name shown in header",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 14,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1218,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:13.487Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-052bbbbb2ecdb12953d6",
              "file": "fundcustodian.spec.js",
              "line": 188,
              "column": 3
            },
            {
              "title": "positive balance shows .pos class",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 14,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6129,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#my-balance')\nExpected pattern: \u001b[32m/pos/\u001b[39m\nReceived string:  \u001b[31m\"bal-amount\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveClass\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#my-balance')\u001b[22m\n\u001b[2m    14 × locator resolved to <div id=\"my-balance\" class=\"bal-amount\">₹ 0.00</div>\u001b[22m\n\u001b[2m       - unexpected value \"bal-amount\"\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#my-balance')\nExpected pattern: \u001b[32m/pos/\u001b[39m\nReceived string:  \u001b[31m\"bal-amount\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveClass\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#my-balance')\u001b[22m\n\u001b[2m    14 × locator resolved to <div id=\"my-balance\" class=\"bal-amount\">₹ 0.00</div>\u001b[22m\n\u001b[2m       - unexpected value \"bal-amount\"\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:194:47",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 47,
                          "line": 194
                        },
                        "snippet": "  192 |   test('positive balance shows .pos class', async ({ page }) => {\n  193 |     // gurpreet expected balance: +216.44\n> 194 |     await expect(page.locator('#my-balance')).toHaveClass(/pos/);\n      |                                               ^\n  195 |   });\n  196 |\n  197 |   test('no pending transfers for gurpreet', async ({ page }) => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 47,
                            "line": 194
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#my-balance')\nExpected pattern: \u001b[32m/pos/\u001b[39m\nReceived string:  \u001b[31m\"bal-amount\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveClass\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#my-balance')\u001b[22m\n\u001b[2m    14 × locator resolved to <div id=\"my-balance\" class=\"bal-amount\">₹ 0.00</div>\u001b[22m\n\u001b[2m       - unexpected value \"bal-amount\"\u001b[22m\n\n\n  192 |   test('positive balance shows .pos class', async ({ page }) => {\n  193 |     // gurpreet expected balance: +216.44\n> 194 |     await expect(page.locator('#my-balance')).toHaveClass(/pos/);\n      |                                               ^\n  195 |   });\n  196 |\n  197 |   test('no pending transfers for gurpreet', async ({ page }) => {\n    at /var/www/360lm/tests/fundcustodian.spec.js:194:47"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:15.186Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--97d5c-ive-balance-shows-pos-class-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--97d5c-ive-balance-shows-pos-class-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 47,
                        "line": 194
                      }
                    },
                    {
                      "workerIndex": 15,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 5928,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#my-balance')\nExpected pattern: \u001b[32m/pos/\u001b[39m\nReceived string:  \u001b[31m\"bal-amount\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveClass\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#my-balance')\u001b[22m\n\u001b[2m    14 × locator resolved to <div id=\"my-balance\" class=\"bal-amount\">₹ 0.00</div>\u001b[22m\n\u001b[2m       - unexpected value \"bal-amount\"\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#my-balance')\nExpected pattern: \u001b[32m/pos/\u001b[39m\nReceived string:  \u001b[31m\"bal-amount\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveClass\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#my-balance')\u001b[22m\n\u001b[2m    14 × locator resolved to <div id=\"my-balance\" class=\"bal-amount\">₹ 0.00</div>\u001b[22m\n\u001b[2m       - unexpected value \"bal-amount\"\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:194:47",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 47,
                          "line": 194
                        },
                        "snippet": "  192 |   test('positive balance shows .pos class', async ({ page }) => {\n  193 |     // gurpreet expected balance: +216.44\n> 194 |     await expect(page.locator('#my-balance')).toHaveClass(/pos/);\n      |                                               ^\n  195 |   });\n  196 |\n  197 |   test('no pending transfers for gurpreet', async ({ page }) => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 47,
                            "line": 194
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#my-balance')\nExpected pattern: \u001b[32m/pos/\u001b[39m\nReceived string:  \u001b[31m\"bal-amount\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveClass\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#my-balance')\u001b[22m\n\u001b[2m    14 × locator resolved to <div id=\"my-balance\" class=\"bal-amount\">₹ 0.00</div>\u001b[22m\n\u001b[2m       - unexpected value \"bal-amount\"\u001b[22m\n\n\n  192 |   test('positive balance shows .pos class', async ({ page }) => {\n  193 |     // gurpreet expected balance: +216.44\n> 194 |     await expect(page.locator('#my-balance')).toHaveClass(/pos/);\n      |                                               ^\n  195 |   });\n  196 |\n  197 |   test('no pending transfers for gurpreet', async ({ page }) => {\n    at /var/www/360lm/tests/fundcustodian.spec.js:194:47"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T05:51:23.499Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--97d5c-ive-balance-shows-pos-class-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--97d5c-ive-balance-shows-pos-class-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 47,
                        "line": 194
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-549ce3e00f5551bf942d",
              "file": "fundcustodian.spec.js",
              "line": 192,
              "column": 3
            },
            {
              "title": "no pending transfers for gurpreet",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1096,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:31.602Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-facad53c5aa6536b745e",
              "file": "fundcustodian.spec.js",
              "line": 197,
              "column": 3
            },
            {
              "title": "gurpreet name shown in header",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 44,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1577,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:58:53.621Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-3c582c29aafe3d0e0ceb",
              "file": "fundcustodian.spec.js",
              "line": 188,
              "column": 3
            },
            {
              "title": "positive balance shows .pos class",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 44,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6100,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#my-balance')\nExpected pattern: \u001b[32m/pos/\u001b[39m\nReceived string:  \u001b[31m\"bal-amount\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveClass\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#my-balance')\u001b[22m\n\u001b[2m    14 × locator resolved to <div id=\"my-balance\" class=\"bal-amount\">₹ 0.00</div>\u001b[22m\n\u001b[2m       - unexpected value \"bal-amount\"\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#my-balance')\nExpected pattern: \u001b[32m/pos/\u001b[39m\nReceived string:  \u001b[31m\"bal-amount\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveClass\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#my-balance')\u001b[22m\n\u001b[2m    14 × locator resolved to <div id=\"my-balance\" class=\"bal-amount\">₹ 0.00</div>\u001b[22m\n\u001b[2m       - unexpected value \"bal-amount\"\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:194:47",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 47,
                          "line": 194
                        },
                        "snippet": "  192 |   test('positive balance shows .pos class', async ({ page }) => {\n  193 |     // gurpreet expected balance: +216.44\n> 194 |     await expect(page.locator('#my-balance')).toHaveClass(/pos/);\n      |                                               ^\n  195 |   });\n  196 |\n  197 |   test('no pending transfers for gurpreet', async ({ page }) => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 47,
                            "line": 194
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#my-balance')\nExpected pattern: \u001b[32m/pos/\u001b[39m\nReceived string:  \u001b[31m\"bal-amount\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveClass\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#my-balance')\u001b[22m\n\u001b[2m    14 × locator resolved to <div id=\"my-balance\" class=\"bal-amount\">₹ 0.00</div>\u001b[22m\n\u001b[2m       - unexpected value \"bal-amount\"\u001b[22m\n\n\n  192 |   test('positive balance shows .pos class', async ({ page }) => {\n  193 |     // gurpreet expected balance: +216.44\n> 194 |     await expect(page.locator('#my-balance')).toHaveClass(/pos/);\n      |                                               ^\n  195 |   });\n  196 |\n  197 |   test('no pending transfers for gurpreet', async ({ page }) => {\n    at /var/www/360lm/tests/fundcustodian.spec.js:194:47"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:58:56.023Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--97d5c-ive-balance-shows-pos-class-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--97d5c-ive-balance-shows-pos-class-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 47,
                        "line": 194
                      }
                    },
                    {
                      "workerIndex": 45,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6554,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#my-balance')\nExpected pattern: \u001b[32m/pos/\u001b[39m\nReceived string:  \u001b[31m\"bal-amount\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveClass\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#my-balance')\u001b[22m\n\u001b[2m    14 × locator resolved to <div id=\"my-balance\" class=\"bal-amount\">₹ 0.00</div>\u001b[22m\n\u001b[2m       - unexpected value \"bal-amount\"\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#my-balance')\nExpected pattern: \u001b[32m/pos/\u001b[39m\nReceived string:  \u001b[31m\"bal-amount\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveClass\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#my-balance')\u001b[22m\n\u001b[2m    14 × locator resolved to <div id=\"my-balance\" class=\"bal-amount\">₹ 0.00</div>\u001b[22m\n\u001b[2m       - unexpected value \"bal-amount\"\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:194:47",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 47,
                          "line": 194
                        },
                        "snippet": "  192 |   test('positive balance shows .pos class', async ({ page }) => {\n  193 |     // gurpreet expected balance: +216.44\n> 194 |     await expect(page.locator('#my-balance')).toHaveClass(/pos/);\n      |                                               ^\n  195 |   });\n  196 |\n  197 |   test('no pending transfers for gurpreet', async ({ page }) => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 47,
                            "line": 194
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#my-balance')\nExpected pattern: \u001b[32m/pos/\u001b[39m\nReceived string:  \u001b[31m\"bal-amount\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m  - Expect \"toHaveClass\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#my-balance')\u001b[22m\n\u001b[2m    14 × locator resolved to <div id=\"my-balance\" class=\"bal-amount\">₹ 0.00</div>\u001b[22m\n\u001b[2m       - unexpected value \"bal-amount\"\u001b[22m\n\n\n  192 |   test('positive balance shows .pos class', async ({ page }) => {\n  193 |     // gurpreet expected balance: +216.44\n> 194 |     await expect(page.locator('#my-balance')).toHaveClass(/pos/);\n      |                                               ^\n  195 |   });\n  196 |\n  197 |   test('no pending transfers for gurpreet', async ({ page }) => {\n    at /var/www/360lm/tests/fundcustodian.spec.js:194:47"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T05:59:07.563Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--97d5c-ive-balance-shows-pos-class-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Dashboard-—--97d5c-ive-balance-shows-pos-class-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 47,
                        "line": 194
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-363c6279abff29f714bf",
              "file": "fundcustodian.spec.js",
              "line": 192,
              "column": 3
            },
            {
              "title": "no pending transfers for gurpreet",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 839,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:59:17.533Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-e17a78787a3159fff6c8",
              "file": "fundcustodian.spec.js",
              "line": 197,
              "column": 3
            }
          ]
        },
        {
          "title": "Transfer Form",
          "file": "fundcustodian.spec.js",
          "line": 205,
          "column": 6,
          "specs": [
            {
              "title": "giver mode selected by default",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 932,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:33.080Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-ef68eb6005a875505ba7",
              "file": "fundcustodian.spec.js",
              "line": 213,
              "column": 3
            },
            {
              "title": "cash + giver mode shows pending info notice",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 913,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:34.065Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-3b24fd4ba134e6a26c56",
              "file": "fundcustodian.spec.js",
              "line": 218,
              "column": 3
            },
            {
              "title": "switching to receiver mode hides pending notice",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1085,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:35.021Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-48b5d9e149b2131e7da0",
              "file": "fundcustodian.spec.js",
              "line": 222,
              "column": 3
            },
            {
              "title": "cash mode selected by default, ref field hidden",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1056,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:36.169Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-459c826d3e9306798995",
              "file": "fundcustodian.spec.js",
              "line": 227,
              "column": 3
            },
            {
              "title": "selecting UPI shows reference field",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1001,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:37.281Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-9418cb203efc2b9176eb",
              "file": "fundcustodian.spec.js",
              "line": 232,
              "column": 3
            },
            {
              "title": "selecting NEFT shows reference field",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1038,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:38.390Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-fcc7cc3ec4a43af56054",
              "file": "fundcustodian.spec.js",
              "line": 237,
              "column": 3
            },
            {
              "title": "selecting IMPS shows reference field",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 659,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:39.547Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-e467bd64164b4bdca24c",
              "file": "fundcustodian.spec.js",
              "line": 242,
              "column": 3
            },
            {
              "title": "selecting Cheque shows reference field",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 830,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:40.252Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-961abc88669b93f590d6",
              "file": "fundcustodian.spec.js",
              "line": 247,
              "column": 3
            },
            {
              "title": "selecting RTGS shows reference field",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1076,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:41.107Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-f391141f12c24c94fc40",
              "file": "fundcustodian.spec.js",
              "line": 252,
              "column": 3
            },
            {
              "title": "UPI mode: ref label is UPI Ref No., UPI Pay button visible",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1233,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:42.256Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-482414d69303f6280cfe",
              "file": "fundcustodian.spec.js",
              "line": 257,
              "column": 3
            },
            {
              "title": "NEFT mode: ref label is UTR No., UPI Pay button hidden",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 793,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:43.516Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-22c486a234a865f79dab",
              "file": "fundcustodian.spec.js",
              "line": 263,
              "column": 3
            },
            {
              "title": "Cheque mode: shows bank and branch fields",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 614,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:44.336Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-a682193f009529ce5799",
              "file": "fundcustodian.spec.js",
              "line": 269,
              "column": 3
            },
            {
              "title": "Cash mode: cheque extra fields hidden",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 947,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:44.977Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-cc20986b6a995ac55c48",
              "file": "fundcustodian.spec.js",
              "line": 276,
              "column": 3
            },
            {
              "title": "returning to cash hides reference field again",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1119,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:45.959Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-58b9ed70f79484eba41d",
              "file": "fundcustodian.spec.js",
              "line": 282,
              "column": 3
            },
            {
              "title": "custodian select excludes self (shambhu not in list)",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 953,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:47.115Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-551ecf079ee570d8d027",
              "file": "fundcustodian.spec.js",
              "line": 289,
              "column": 3
            },
            {
              "title": "submit with no custodian shows error toast",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1154,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:48.110Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-f972700ca1e442981b79",
              "file": "fundcustodian.spec.js",
              "line": 297,
              "column": 3
            },
            {
              "title": "submit with no amount shows error toast",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1171,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:49.293Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-c66e845362f4505f2ccb",
              "file": "fundcustodian.spec.js",
              "line": 303,
              "column": 3
            },
            {
              "title": "today date is pre-filled",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1223,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:50.526Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-3a49838b38cadbcae924",
              "file": "fundcustodian.spec.js",
              "line": 309,
              "column": 3
            },
            {
              "title": "clear button resets form to defaults",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1441,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:51.823Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-1a92bf0cbe124ff4a8ef",
              "file": "fundcustodian.spec.js",
              "line": 314,
              "column": 3
            },
            {
              "title": "giver mode selected by default",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 869,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:59:18.788Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-1125987eeee3827488db",
              "file": "fundcustodian.spec.js",
              "line": 213,
              "column": 3
            },
            {
              "title": "cash + giver mode shows pending info notice",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1179,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:59:19.700Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-a3f297cc0c13547b65d2",
              "file": "fundcustodian.spec.js",
              "line": 218,
              "column": 3
            },
            {
              "title": "switching to receiver mode hides pending notice",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 2073,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:59:20.936Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-d34ad27dbae4556b0e77",
              "file": "fundcustodian.spec.js",
              "line": 222,
              "column": 3
            },
            {
              "title": "cash mode selected by default, ref field hidden",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 2058,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:59:23.139Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-d65813e414edac672519",
              "file": "fundcustodian.spec.js",
              "line": 227,
              "column": 3
            },
            {
              "title": "selecting UPI shows reference field",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1295,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:59:25.315Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-cbb8e990279bafb125c2",
              "file": "fundcustodian.spec.js",
              "line": 232,
              "column": 3
            },
            {
              "title": "selecting NEFT shows reference field",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1589,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:59:26.774Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-d8f923b25c45290b6ecc",
              "file": "fundcustodian.spec.js",
              "line": 237,
              "column": 3
            },
            {
              "title": "selecting IMPS shows reference field",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 2504,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:59:28.427Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-4bccbf499a57974c4ef9",
              "file": "fundcustodian.spec.js",
              "line": 242,
              "column": 3
            },
            {
              "title": "selecting Cheque shows reference field",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1837,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:59:31.032Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-764f1e9ac54001c4e94d",
              "file": "fundcustodian.spec.js",
              "line": 247,
              "column": 3
            },
            {
              "title": "selecting RTGS shows reference field",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 2185,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:59:32.947Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-0af5069bd0d80fa6b390",
              "file": "fundcustodian.spec.js",
              "line": 252,
              "column": 3
            },
            {
              "title": "UPI mode: ref label is UPI Ref No., UPI Pay button visible",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1996,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:59:35.250Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-d571b3f46e661c5ed8b6",
              "file": "fundcustodian.spec.js",
              "line": 257,
              "column": 3
            },
            {
              "title": "NEFT mode: ref label is UTR No., UPI Pay button hidden",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 2803,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:59:37.389Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-1040e06c8ca7dd5e9901",
              "file": "fundcustodian.spec.js",
              "line": 263,
              "column": 3
            },
            {
              "title": "Cheque mode: shows bank and branch fields",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1970,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:59:40.378Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-320f3225dbc1800baa4f",
              "file": "fundcustodian.spec.js",
              "line": 269,
              "column": 3
            },
            {
              "title": "Cash mode: cheque extra fields hidden",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1837,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:59:42.442Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-d530f230e884b8e5472b",
              "file": "fundcustodian.spec.js",
              "line": 276,
              "column": 3
            },
            {
              "title": "returning to cash hides reference field again",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1204,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:59:44.333Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-77292d8be87cc2fca380",
              "file": "fundcustodian.spec.js",
              "line": 282,
              "column": 3
            },
            {
              "title": "custodian select excludes self (shambhu not in list)",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1352,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:59:45.606Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-795c63d872974f0b0996",
              "file": "fundcustodian.spec.js",
              "line": 289,
              "column": 3
            },
            {
              "title": "submit with no custodian shows error toast",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1532,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:59:47.026Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-93553a68f921a13a1ff6",
              "file": "fundcustodian.spec.js",
              "line": 297,
              "column": 3
            },
            {
              "title": "submit with no amount shows error toast",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1466,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:59:48.616Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-c584ed83567c4d0e42a7",
              "file": "fundcustodian.spec.js",
              "line": 303,
              "column": 3
            },
            {
              "title": "today date is pre-filled",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1494,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:59:50.127Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-be22f6a44ee11b2e5370",
              "file": "fundcustodian.spec.js",
              "line": 309,
              "column": 3
            },
            {
              "title": "clear button resets form to defaults",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 2207,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:59:51.743Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-980ba8254336a5f5fb57",
              "file": "fundcustodian.spec.js",
              "line": 314,
              "column": 3
            }
          ]
        },
        {
          "title": "Advance Form",
          "file": "fundcustodian.spec.js",
          "line": 332,
          "column": 6,
          "specs": [
            {
              "title": "\"Other\" employee reveals manual name field",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1089,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:53.302Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-bd1008c75cbe58ea95cb",
              "file": "fundcustodian.spec.js",
              "line": 340,
              "column": 3
            },
            {
              "title": "selecting a named employee hides manual name field",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1331,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:54.479Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-789e7bcaff6c81f31fd9",
              "file": "fundcustodian.spec.js",
              "line": 346,
              "column": 3
            },
            {
              "title": "cash mode default, ref field hidden",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 943,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:55.874Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-1e0e9761c2c9feb7e8a1",
              "file": "fundcustodian.spec.js",
              "line": 353,
              "column": 3
            },
            {
              "title": "UPI mode shows reference field",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1017,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:56.866Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-695750155217d06b7bfc",
              "file": "fundcustodian.spec.js",
              "line": 357,
              "column": 3
            },
            {
              "title": "NEFT mode shows reference field",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 835,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:57.979Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-90edef50db895b34874c",
              "file": "fundcustodian.spec.js",
              "line": 362,
              "column": 3
            },
            {
              "title": "IMPS mode shows reference field",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 773,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:58.875Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-e5806dd79ff96a582b59",
              "file": "fundcustodian.spec.js",
              "line": 367,
              "column": 3
            },
            {
              "title": "no cheque option in advance form (transfers only)",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1161,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:51:59.671Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-5e323dab2963d2b2d4e8",
              "file": "fundcustodian.spec.js",
              "line": 372,
              "column": 3
            },
            {
              "title": "submit with no employee shows error",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 2134,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:52:00.875Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-1bd8746c11abd3c9af44",
              "file": "fundcustodian.spec.js",
              "line": 377,
              "column": 3
            },
            {
              "title": "submit with \"Other\" but empty name shows error",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1981,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:52:03.072Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-5c5748754a84c60cced3",
              "file": "fundcustodian.spec.js",
              "line": 383,
              "column": 3
            },
            {
              "title": "submit with no amount shows error",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1620,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:52:05.105Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-4680c0c0cd5c22296a37",
              "file": "fundcustodian.spec.js",
              "line": 390,
              "column": 3
            },
            {
              "title": "today date is pre-filled",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1236,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:52:06.782Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-99c525f4b3ab3f19eb0c",
              "file": "fundcustodian.spec.js",
              "line": 396,
              "column": 3
            },
            {
              "title": "\"Other\" employee reveals manual name field",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1255,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:59:54.081Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-5c6d097353ad649d8d99",
              "file": "fundcustodian.spec.js",
              "line": 340,
              "column": 3
            },
            {
              "title": "selecting a named employee hides manual name field",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1319,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:59:55.411Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-c741d11383cbe9a327bf",
              "file": "fundcustodian.spec.js",
              "line": 346,
              "column": 3
            },
            {
              "title": "cash mode default, ref field hidden",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1279,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:59:56.804Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-fbac97618131384c3c7e",
              "file": "fundcustodian.spec.js",
              "line": 353,
              "column": 3
            },
            {
              "title": "UPI mode shows reference field",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 2054,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:59:58.189Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-37b1cf276059a17862a2",
              "file": "fundcustodian.spec.js",
              "line": 357,
              "column": 3
            },
            {
              "title": "NEFT mode shows reference field",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 6852,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:00:00.351Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-fc4b459a4b26e02deacc",
              "file": "fundcustodian.spec.js",
              "line": 362,
              "column": 3
            },
            {
              "title": "IMPS mode shows reference field",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 4411,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:00:07.825Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-7292e8dca011f3e58da1",
              "file": "fundcustodian.spec.js",
              "line": 367,
              "column": 3
            },
            {
              "title": "no cheque option in advance form (transfers only)",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 2735,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:00:12.424Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-e2934f3895efc0802b02",
              "file": "fundcustodian.spec.js",
              "line": 372,
              "column": 3
            },
            {
              "title": "submit with no employee shows error",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 3038,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:00:15.379Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-27505533382af670f229",
              "file": "fundcustodian.spec.js",
              "line": 377,
              "column": 3
            },
            {
              "title": "submit with \"Other\" but empty name shows error",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 2760,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:00:18.542Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-6d7e50d815ddbc2bf4ad",
              "file": "fundcustodian.spec.js",
              "line": 383,
              "column": 3
            },
            {
              "title": "submit with no amount shows error",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1827,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:00:21.379Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-3be5bc5840d507cebb49",
              "file": "fundcustodian.spec.js",
              "line": 390,
              "column": 3
            },
            {
              "title": "today date is pre-filled",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1544,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:00:23.353Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-dede24ad6db44e6e0606",
              "file": "fundcustodian.spec.js",
              "line": 396,
              "column": 3
            }
          ]
        },
        {
          "title": "Ledger — Transfers tab",
          "file": "fundcustodian.spec.js",
          "line": 405,
          "column": 6,
          "specs": [
            {
              "title": "Transfers tab active by default",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1092,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:52:08.045Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-e57c07202882cdf3a822",
              "file": "fundcustodian.spec.js",
              "line": 413,
              "column": 3
            },
            {
              "title": "shambhu ledger shows transfer rows",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 16,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 11156,
                      "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('#transfers-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfers-list .ledger-row').first()\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('#transfers-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfers-list .ledger-row').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:420:71",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 71,
                          "line": 420
                        },
                        "snippet": "  418 |\n  419 |   test('shambhu ledger shows transfer rows', async ({ page }) => {\n> 420 |     await expect(page.locator('#transfers-list .ledger-row').first()).toBeVisible({ timeout: 10000 });\n      |                                                                       ^\n  421 |     const rowCount = await page.locator('#transfers-list .ledger-row').count();\n  422 |     expect(rowCount).toBeGreaterThan(0);\n  423 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 71,
                            "line": 420
                          },
                          "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('#transfers-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfers-list .ledger-row').first()\u001b[22m\n\n\n  418 |\n  419 |   test('shambhu ledger shows transfer rows', async ({ page }) => {\n> 420 |     await expect(page.locator('#transfers-list .ledger-row').first()).toBeVisible({ timeout: 10000 });\n      |                                                                       ^\n  421 |     const rowCount = await page.locator('#transfers-list .ledger-row').count();\n  422 |     expect(rowCount).toBeGreaterThan(0);\n  423 |   });\n    at /var/www/360lm/tests/fundcustodian.spec.js:420:71"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:52:09.221Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Tra-ab3ae--ledger-shows-transfer-rows-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Tra-ab3ae--ledger-shows-transfer-rows-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 71,
                        "line": 420
                      }
                    },
                    {
                      "workerIndex": 17,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 10927,
                      "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('#transfers-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfers-list .ledger-row').first()\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('#transfers-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfers-list .ledger-row').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:420:71",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 71,
                          "line": 420
                        },
                        "snippet": "  418 |\n  419 |   test('shambhu ledger shows transfer rows', async ({ page }) => {\n> 420 |     await expect(page.locator('#transfers-list .ledger-row').first()).toBeVisible({ timeout: 10000 });\n      |                                                                       ^\n  421 |     const rowCount = await page.locator('#transfers-list .ledger-row').count();\n  422 |     expect(rowCount).toBeGreaterThan(0);\n  423 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 71,
                            "line": 420
                          },
                          "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('#transfers-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfers-list .ledger-row').first()\u001b[22m\n\n\n  418 |\n  419 |   test('shambhu ledger shows transfer rows', async ({ page }) => {\n> 420 |     await expect(page.locator('#transfers-list .ledger-row').first()).toBeVisible({ timeout: 10000 });\n      |                                                                       ^\n  421 |     const rowCount = await page.locator('#transfers-list .ledger-row').count();\n  422 |     expect(rowCount).toBeGreaterThan(0);\n  423 |   });\n    at /var/www/360lm/tests/fundcustodian.spec.js:420:71"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T05:52:21.794Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Tra-ab3ae--ledger-shows-transfer-rows-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Tra-ab3ae--ledger-shows-transfer-rows-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 71,
                        "line": 420
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-e493735869a94e6541d7",
              "file": "fundcustodian.spec.js",
              "line": 419,
              "column": 3
            },
            {
              "title": "status badges present in transfer rows",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 18,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 9378,
                      "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('#transfers-list .badge').first()\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('#transfers-list .badge').first()\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('#transfers-list .badge').first()\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('#transfers-list .badge').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:426:66",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 66,
                          "line": 426
                        },
                        "snippet": "  424 |\n  425 |   test('status badges present in transfer rows', async ({ page }) => {\n> 426 |     await expect(page.locator('#transfers-list .badge').first()).toBeVisible({ timeout: 8000 });\n      |                                                                  ^\n  427 |   });\n  428 |\n  429 |   test('switching to Advances tab shows advances panel', async ({ page }) => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 66,
                            "line": 426
                          },
                          "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('#transfers-list .badge').first()\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('#transfers-list .badge').first()\u001b[22m\n\n\n  424 |\n  425 |   test('status badges present in transfer rows', async ({ page }) => {\n> 426 |     await expect(page.locator('#transfers-list .badge').first()).toBeVisible({ timeout: 8000 });\n      |                                                                  ^\n  427 |   });\n  428 |\n  429 |   test('switching to Advances tab shows advances panel', async ({ page }) => {\n    at /var/www/360lm/tests/fundcustodian.spec.js:426:66"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:52:34.649Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Tra-4b0cb-es-present-in-transfer-rows-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Tra-4b0cb-es-present-in-transfer-rows-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 66,
                        "line": 426
                      }
                    },
                    {
                      "workerIndex": 19,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 9328,
                      "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('#transfers-list .badge').first()\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('#transfers-list .badge').first()\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('#transfers-list .badge').first()\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('#transfers-list .badge').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:426:66",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 66,
                          "line": 426
                        },
                        "snippet": "  424 |\n  425 |   test('status badges present in transfer rows', async ({ page }) => {\n> 426 |     await expect(page.locator('#transfers-list .badge').first()).toBeVisible({ timeout: 8000 });\n      |                                                                  ^\n  427 |   });\n  428 |\n  429 |   test('switching to Advances tab shows advances panel', async ({ page }) => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 66,
                            "line": 426
                          },
                          "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('#transfers-list .badge').first()\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('#transfers-list .badge').first()\u001b[22m\n\n\n  424 |\n  425 |   test('status badges present in transfer rows', async ({ page }) => {\n> 426 |     await expect(page.locator('#transfers-list .badge').first()).toBeVisible({ timeout: 8000 });\n      |                                                                  ^\n  427 |   });\n  428 |\n  429 |   test('switching to Advances tab shows advances panel', async ({ page }) => {\n    at /var/www/360lm/tests/fundcustodian.spec.js:426:66"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T05:52:46.392Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Tra-4b0cb-es-present-in-transfer-rows-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Tra-4b0cb-es-present-in-transfer-rows-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 66,
                        "line": 426
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-6c71a1e8e23d5545818f",
              "file": "fundcustodian.spec.js",
              "line": 425,
              "column": 3
            },
            {
              "title": "switching to Advances tab shows advances panel",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 20,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1717,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:52:57.473Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-eaf76ec5b56aa7863fd6",
              "file": "fundcustodian.spec.js",
              "line": 429,
              "column": 3
            },
            {
              "title": "no custodian filter for non-admin",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 20,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1145,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:52:59.586Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-e50e79ea7c8995f141a7",
              "file": "fundcustodian.spec.js",
              "line": 436,
              "column": 3
            },
            {
              "title": "Transfers tab active by default",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1841,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:00:24.993Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-aefcde38c2032ecc1167",
              "file": "fundcustodian.spec.js",
              "line": 413,
              "column": 3
            },
            {
              "title": "shambhu ledger shows transfer rows",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 46,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 11546,
                      "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('#transfers-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfers-list .ledger-row').first()\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('#transfers-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfers-list .ledger-row').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:420:71",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 71,
                          "line": 420
                        },
                        "snippet": "  418 |\n  419 |   test('shambhu ledger shows transfer rows', async ({ page }) => {\n> 420 |     await expect(page.locator('#transfers-list .ledger-row').first()).toBeVisible({ timeout: 10000 });\n      |                                                                       ^\n  421 |     const rowCount = await page.locator('#transfers-list .ledger-row').count();\n  422 |     expect(rowCount).toBeGreaterThan(0);\n  423 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 71,
                            "line": 420
                          },
                          "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('#transfers-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfers-list .ledger-row').first()\u001b[22m\n\n\n  418 |\n  419 |   test('shambhu ledger shows transfer rows', async ({ page }) => {\n> 420 |     await expect(page.locator('#transfers-list .ledger-row').first()).toBeVisible({ timeout: 10000 });\n      |                                                                       ^\n  421 |     const rowCount = await page.locator('#transfers-list .ledger-row').count();\n  422 |     expect(rowCount).toBeGreaterThan(0);\n  423 |   });\n    at /var/www/360lm/tests/fundcustodian.spec.js:420:71"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:00:26.920Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Tra-ab3ae--ledger-shows-transfer-rows-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Tra-ab3ae--ledger-shows-transfer-rows-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 71,
                        "line": 420
                      }
                    },
                    {
                      "workerIndex": 47,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 12576,
                      "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('#transfers-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfers-list .ledger-row').first()\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('#transfers-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfers-list .ledger-row').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:420:71",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 71,
                          "line": 420
                        },
                        "snippet": "  418 |\n  419 |   test('shambhu ledger shows transfer rows', async ({ page }) => {\n> 420 |     await expect(page.locator('#transfers-list .ledger-row').first()).toBeVisible({ timeout: 10000 });\n      |                                                                       ^\n  421 |     const rowCount = await page.locator('#transfers-list .ledger-row').count();\n  422 |     expect(rowCount).toBeGreaterThan(0);\n  423 |   });"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 71,
                            "line": 420
                          },
                          "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('#transfers-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfers-list .ledger-row').first()\u001b[22m\n\n\n  418 |\n  419 |   test('shambhu ledger shows transfer rows', async ({ page }) => {\n> 420 |     await expect(page.locator('#transfers-list .ledger-row').first()).toBeVisible({ timeout: 10000 });\n      |                                                                       ^\n  421 |     const rowCount = await page.locator('#transfers-list .ledger-row').count();\n  422 |     expect(rowCount).toBeGreaterThan(0);\n  423 |   });\n    at /var/www/360lm/tests/fundcustodian.spec.js:420:71"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T06:00:44.440Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Tra-ab3ae--ledger-shows-transfer-rows-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Tra-ab3ae--ledger-shows-transfer-rows-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 71,
                        "line": 420
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-71d6b8b8ae9059fe8bf2",
              "file": "fundcustodian.spec.js",
              "line": 419,
              "column": 3
            },
            {
              "title": "status badges present in transfer rows",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 48,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 9322,
                      "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('#transfers-list .badge').first()\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('#transfers-list .badge').first()\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('#transfers-list .badge').first()\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('#transfers-list .badge').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:426:66",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 66,
                          "line": 426
                        },
                        "snippet": "  424 |\n  425 |   test('status badges present in transfer rows', async ({ page }) => {\n> 426 |     await expect(page.locator('#transfers-list .badge').first()).toBeVisible({ timeout: 8000 });\n      |                                                                  ^\n  427 |   });\n  428 |\n  429 |   test('switching to Advances tab shows advances panel', async ({ page }) => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 66,
                            "line": 426
                          },
                          "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('#transfers-list .badge').first()\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('#transfers-list .badge').first()\u001b[22m\n\n\n  424 |\n  425 |   test('status badges present in transfer rows', async ({ page }) => {\n> 426 |     await expect(page.locator('#transfers-list .badge').first()).toBeVisible({ timeout: 8000 });\n      |                                                                  ^\n  427 |   });\n  428 |\n  429 |   test('switching to Advances tab shows advances panel', async ({ page }) => {\n    at /var/www/360lm/tests/fundcustodian.spec.js:426:66"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:01:04.848Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Tra-4b0cb-es-present-in-transfer-rows-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Tra-4b0cb-es-present-in-transfer-rows-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 66,
                        "line": 426
                      }
                    },
                    {
                      "workerIndex": 49,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 9822,
                      "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('#transfers-list .badge').first()\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('#transfers-list .badge').first()\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('#transfers-list .badge').first()\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('#transfers-list .badge').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:426:66",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 66,
                          "line": 426
                        },
                        "snippet": "  424 |\n  425 |   test('status badges present in transfer rows', async ({ page }) => {\n> 426 |     await expect(page.locator('#transfers-list .badge').first()).toBeVisible({ timeout: 8000 });\n      |                                                                  ^\n  427 |   });\n  428 |\n  429 |   test('switching to Advances tab shows advances panel', async ({ page }) => {"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 66,
                            "line": 426
                          },
                          "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('#transfers-list .badge').first()\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('#transfers-list .badge').first()\u001b[22m\n\n\n  424 |\n  425 |   test('status badges present in transfer rows', async ({ page }) => {\n> 426 |     await expect(page.locator('#transfers-list .badge').first()).toBeVisible({ timeout: 8000 });\n      |                                                                  ^\n  427 |   });\n  428 |\n  429 |   test('switching to Advances tab shows advances panel', async ({ page }) => {\n    at /var/www/360lm/tests/fundcustodian.spec.js:426:66"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T06:01:18.005Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Tra-4b0cb-es-present-in-transfer-rows-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Tra-4b0cb-es-present-in-transfer-rows-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 66,
                        "line": 426
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-335a7b8c0c60f9928824",
              "file": "fundcustodian.spec.js",
              "line": 425,
              "column": 3
            },
            {
              "title": "switching to Advances tab shows advances panel",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 50,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 2119,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:01:30.645Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-2d71cb941d942a192eac",
              "file": "fundcustodian.spec.js",
              "line": 429,
              "column": 3
            },
            {
              "title": "no custodian filter for non-admin",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 50,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1106,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:01:33.293Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-07916bfb4aab00ca5be7",
              "file": "fundcustodian.spec.js",
              "line": 436,
              "column": 3
            }
          ]
        },
        {
          "title": "Ledger — admin (harish) with custodian filter",
          "file": "fundcustodian.spec.js",
          "line": 444,
          "column": 6,
          "specs": [
            {
              "title": "admin sees custodian filter dropdown",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 20,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1217,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:53:00.854Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-a59d920e2132ee7fefea",
              "file": "fundcustodian.spec.js",
              "line": 445,
              "column": 3
            },
            {
              "title": "admin sees custodian filter dropdown",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 50,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1447,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:01:34.486Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-c12a16483317dcc85e8c",
              "file": "fundcustodian.spec.js",
              "line": 445,
              "column": 3
            }
          ]
        },
        {
          "title": "Ledger — Advances tab data",
          "file": "fundcustodian.spec.js",
          "line": 460,
          "column": 6,
          "specs": [
            {
              "title": "advances show status badges (outstanding / partially_settled / settled)",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 20,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 12033,
                      "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('#advances-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#advances-list .ledger-row').first()\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('#advances-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#advances-list .ledger-row').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:466:70",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 70,
                          "line": 466
                        },
                        "snippet": "  464 |     await page.locator('#nav-ledger').click();\n  465 |     await page.locator('#tab-advances').click();\n> 466 |     await expect(page.locator('#advances-list .ledger-row').first()).toBeVisible({ timeout: 10000 });\n      |                                                                      ^\n  467 |     // Should see at least outstanding and partially_settled badges\n  468 |     const badges = await page.locator('#advances-list .badge').allTextContents();\n  469 |     const statuses = badges.join(' ');"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 70,
                            "line": 466
                          },
                          "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('#advances-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#advances-list .ledger-row').first()\u001b[22m\n\n\n  464 |     await page.locator('#nav-ledger').click();\n  465 |     await page.locator('#tab-advances').click();\n> 466 |     await expect(page.locator('#advances-list .ledger-row').first()).toBeVisible({ timeout: 10000 });\n      |                                                                      ^\n  467 |     // Should see at least outstanding and partially_settled badges\n  468 |     const badges = await page.locator('#advances-list .badge').allTextContents();\n  469 |     const statuses = badges.join(' ');\n    at /var/www/360lm/tests/fundcustodian.spec.js:466:70"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:53:02.159Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Adv-d5daa--partially-settled-settled--android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Adv-d5daa--partially-settled-settled--android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 70,
                        "line": 466
                      }
                    },
                    {
                      "workerIndex": 21,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 12281,
                      "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('#advances-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#advances-list .ledger-row').first()\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('#advances-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#advances-list .ledger-row').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:466:70",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 70,
                          "line": 466
                        },
                        "snippet": "  464 |     await page.locator('#nav-ledger').click();\n  465 |     await page.locator('#tab-advances').click();\n> 466 |     await expect(page.locator('#advances-list .ledger-row').first()).toBeVisible({ timeout: 10000 });\n      |                                                                      ^\n  467 |     // Should see at least outstanding and partially_settled badges\n  468 |     const badges = await page.locator('#advances-list .badge').allTextContents();\n  469 |     const statuses = badges.join(' ');"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 70,
                            "line": 466
                          },
                          "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('#advances-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#advances-list .ledger-row').first()\u001b[22m\n\n\n  464 |     await page.locator('#nav-ledger').click();\n  465 |     await page.locator('#tab-advances').click();\n> 466 |     await expect(page.locator('#advances-list .ledger-row').first()).toBeVisible({ timeout: 10000 });\n      |                                                                      ^\n  467 |     // Should see at least outstanding and partially_settled badges\n  468 |     const badges = await page.locator('#advances-list .badge').allTextContents();\n  469 |     const statuses = badges.join(' ');\n    at /var/www/360lm/tests/fundcustodian.spec.js:466:70"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T05:53:18.472Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Adv-d5daa--partially-settled-settled--android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Adv-d5daa--partially-settled-settled--android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 70,
                        "line": 466
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-bf6b30ae3c42f031b684",
              "file": "fundcustodian.spec.js",
              "line": 461,
              "column": 3
            },
            {
              "title": "partially settled advance shows outstanding amount",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 22,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 7040,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoContainText\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' })\nExpected substring: \u001b[32m\"1,500.00\"\u001b[39m\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toContainText\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' })\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoContainText\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' })\nExpected substring: \u001b[32m\"1,500.00\"\u001b[39m\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toContainText\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' })\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:481:27",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 27,
                          "line": 481
                        },
                        "snippet": "  479 |     // A2: Sachin 2500 partially settled, outstanding 1500\n  480 |     const partRow = page.locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' });\n> 481 |     await expect(partRow).toContainText('1,500.00');\n      |                           ^\n  482 |   });\n  483 | });\n  484 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 27,
                            "line": 481
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoContainText\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' })\nExpected substring: \u001b[32m\"1,500.00\"\u001b[39m\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toContainText\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' })\u001b[22m\n\n\n  479 |     // A2: Sachin 2500 partially settled, outstanding 1500\n  480 |     const partRow = page.locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' });\n> 481 |     await expect(partRow).toContainText('1,500.00');\n      |                           ^\n  482 |   });\n  483 | });\n  484 |\n    at /var/www/360lm/tests/fundcustodian.spec.js:481:27"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:53:35.355Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Adv-8f04d-ce-shows-outstanding-amount-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Adv-8f04d-ce-shows-outstanding-amount-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 27,
                        "line": 481
                      }
                    },
                    {
                      "workerIndex": 23,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 6699,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoContainText\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' })\nExpected substring: \u001b[32m\"1,500.00\"\u001b[39m\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toContainText\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' })\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoContainText\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' })\nExpected substring: \u001b[32m\"1,500.00\"\u001b[39m\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toContainText\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' })\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:481:27",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 27,
                          "line": 481
                        },
                        "snippet": "  479 |     // A2: Sachin 2500 partially settled, outstanding 1500\n  480 |     const partRow = page.locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' });\n> 481 |     await expect(partRow).toContainText('1,500.00');\n      |                           ^\n  482 |   });\n  483 | });\n  484 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 27,
                            "line": 481
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoContainText\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' })\nExpected substring: \u001b[32m\"1,500.00\"\u001b[39m\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toContainText\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' })\u001b[22m\n\n\n  479 |     // A2: Sachin 2500 partially settled, outstanding 1500\n  480 |     const partRow = page.locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' });\n> 481 |     await expect(partRow).toContainText('1,500.00');\n      |                           ^\n  482 |   });\n  483 | });\n  484 |\n    at /var/www/360lm/tests/fundcustodian.spec.js:481:27"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T05:53:44.917Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Adv-8f04d-ce-shows-outstanding-amount-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Adv-8f04d-ce-shows-outstanding-amount-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 27,
                        "line": 481
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-05263987a6087fa1405e",
              "file": "fundcustodian.spec.js",
              "line": 473,
              "column": 3
            },
            {
              "title": "advances show status badges (outstanding / partially_settled / settled)",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 50,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 12039,
                      "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('#advances-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#advances-list .ledger-row').first()\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('#advances-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#advances-list .ledger-row').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:466:70",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 70,
                          "line": 466
                        },
                        "snippet": "  464 |     await page.locator('#nav-ledger').click();\n  465 |     await page.locator('#tab-advances').click();\n> 466 |     await expect(page.locator('#advances-list .ledger-row').first()).toBeVisible({ timeout: 10000 });\n      |                                                                      ^\n  467 |     // Should see at least outstanding and partially_settled badges\n  468 |     const badges = await page.locator('#advances-list .badge').allTextContents();\n  469 |     const statuses = badges.join(' ');"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 70,
                            "line": 466
                          },
                          "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('#advances-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#advances-list .ledger-row').first()\u001b[22m\n\n\n  464 |     await page.locator('#nav-ledger').click();\n  465 |     await page.locator('#tab-advances').click();\n> 466 |     await expect(page.locator('#advances-list .ledger-row').first()).toBeVisible({ timeout: 10000 });\n      |                                                                      ^\n  467 |     // Should see at least outstanding and partially_settled badges\n  468 |     const badges = await page.locator('#advances-list .badge').allTextContents();\n  469 |     const statuses = badges.join(' ');\n    at /var/www/360lm/tests/fundcustodian.spec.js:466:70"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:01:36.055Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Adv-d5daa--partially-settled-settled--desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Adv-d5daa--partially-settled-settled--desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 70,
                        "line": 466
                      }
                    },
                    {
                      "workerIndex": 51,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 12363,
                      "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('#advances-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#advances-list .ledger-row').first()\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('#advances-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#advances-list .ledger-row').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:466:70",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 70,
                          "line": 466
                        },
                        "snippet": "  464 |     await page.locator('#nav-ledger').click();\n  465 |     await page.locator('#tab-advances').click();\n> 466 |     await expect(page.locator('#advances-list .ledger-row').first()).toBeVisible({ timeout: 10000 });\n      |                                                                      ^\n  467 |     // Should see at least outstanding and partially_settled badges\n  468 |     const badges = await page.locator('#advances-list .badge').allTextContents();\n  469 |     const statuses = badges.join(' ');"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 70,
                            "line": 466
                          },
                          "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('#advances-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#advances-list .ledger-row').first()\u001b[22m\n\n\n  464 |     await page.locator('#nav-ledger').click();\n  465 |     await page.locator('#tab-advances').click();\n> 466 |     await expect(page.locator('#advances-list .ledger-row').first()).toBeVisible({ timeout: 10000 });\n      |                                                                      ^\n  467 |     // Should see at least outstanding and partially_settled badges\n  468 |     const badges = await page.locator('#advances-list .badge').allTextContents();\n  469 |     const statuses = badges.join(' ');\n    at /var/www/360lm/tests/fundcustodian.spec.js:466:70"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T06:01:50.133Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Adv-d5daa--partially-settled-settled--desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Adv-d5daa--partially-settled-settled--desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 70,
                        "line": 466
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-fbe477291331dbb17c6e",
              "file": "fundcustodian.spec.js",
              "line": 461,
              "column": 3
            },
            {
              "title": "partially settled advance shows outstanding amount",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 52,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 9221,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoContainText\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' })\nExpected substring: \u001b[32m\"1,500.00\"\u001b[39m\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toContainText\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' })\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoContainText\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' })\nExpected substring: \u001b[32m\"1,500.00\"\u001b[39m\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toContainText\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' })\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:481:27",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 27,
                          "line": 481
                        },
                        "snippet": "  479 |     // A2: Sachin 2500 partially settled, outstanding 1500\n  480 |     const partRow = page.locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' });\n> 481 |     await expect(partRow).toContainText('1,500.00');\n      |                           ^\n  482 |   });\n  483 | });\n  484 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 27,
                            "line": 481
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoContainText\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' })\nExpected substring: \u001b[32m\"1,500.00\"\u001b[39m\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toContainText\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' })\u001b[22m\n\n\n  479 |     // A2: Sachin 2500 partially settled, outstanding 1500\n  480 |     const partRow = page.locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' });\n> 481 |     await expect(partRow).toContainText('1,500.00');\n      |                           ^\n  482 |   });\n  483 | });\n  484 |\n    at /var/www/360lm/tests/fundcustodian.spec.js:481:27"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:02:09.058Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Adv-8f04d-ce-shows-outstanding-amount-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Adv-8f04d-ce-shows-outstanding-amount-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 27,
                        "line": 481
                      }
                    },
                    {
                      "workerIndex": 53,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 7973,
                      "error": {
                        "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoContainText\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' })\nExpected substring: \u001b[32m\"1,500.00\"\u001b[39m\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toContainText\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' })\u001b[22m\n",
                        "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoContainText\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' })\nExpected substring: \u001b[32m\"1,500.00\"\u001b[39m\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toContainText\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' })\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:481:27",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 27,
                          "line": 481
                        },
                        "snippet": "  479 |     // A2: Sachin 2500 partially settled, outstanding 1500\n  480 |     const partRow = page.locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' });\n> 481 |     await expect(partRow).toContainText('1,500.00');\n      |                           ^\n  482 |   });\n  483 | });\n  484 |"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 27,
                            "line": 481
                          },
                          "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoContainText\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' })\nExpected substring: \u001b[32m\"1,500.00\"\u001b[39m\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toContainText\" with timeout 5000ms\u001b[22m\n\u001b[2m  - waiting for locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' })\u001b[22m\n\n\n  479 |     // A2: Sachin 2500 partially settled, outstanding 1500\n  480 |     const partRow = page.locator('#advances-list .ledger-row').filter({ hasText: 'Sachin' });\n> 481 |     await expect(partRow).toContainText('1,500.00');\n      |                           ^\n  482 |   });\n  483 | });\n  484 |\n    at /var/www/360lm/tests/fundcustodian.spec.js:481:27"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T06:02:25.730Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Adv-8f04d-ce-shows-outstanding-amount-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Ledger-—-Adv-8f04d-ce-shows-outstanding-amount-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 27,
                        "line": 481
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-0a704304aab8aaebf84a",
              "file": "fundcustodian.spec.js",
              "line": 473,
              "column": 3
            }
          ]
        },
        {
          "title": "Manage Custodians (admin only)",
          "file": "fundcustodian.spec.js",
          "line": 488,
          "column": 6,
          "specs": [
            {
              "title": "custodian list loads all 4 custodians",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 24,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1321,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:53:54.795Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-24a5ba9ed0bb01036ea0",
              "file": "fundcustodian.spec.js",
              "line": 498,
              "column": 3
            },
            {
              "title": "primary custodian shows ⭐ Primary badge",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 24,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1169,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:53:56.521Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-d0c9ca9097e82f4d314d",
              "file": "fundcustodian.spec.js",
              "line": 504,
              "column": 3
            },
            {
              "title": "add custodian form — empty ID shows error",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 24,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1415,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:53:57.822Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-39d6c9c5dd6eed803eb7",
              "file": "fundcustodian.spec.js",
              "line": 509,
              "column": 3
            },
            {
              "title": "add custodian form — empty name shows error",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 24,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1541,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:53:59.330Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-d10e902cdd4122cdb627",
              "file": "fundcustodian.spec.js",
              "line": 515,
              "column": 3
            },
            {
              "title": "back button returns to dashboard",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 24,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 3167,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:54:00.964Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-0b06a2728ba51186727f",
              "file": "fundcustodian.spec.js",
              "line": 521,
              "column": 3
            },
            {
              "title": "non-admin cannot reach manage screen via nav",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 24,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1376,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:54:04.249Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-d2ff9d722362f27be951",
              "file": "fundcustodian.spec.js",
              "line": 526,
              "column": 3
            },
            {
              "title": "custodian list loads all 4 custodians",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 54,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 2469,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:02:37.875Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-93c2ee71dd3329528b9d",
              "file": "fundcustodian.spec.js",
              "line": 498,
              "column": 3
            },
            {
              "title": "primary custodian shows ⭐ Primary badge",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 54,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1977,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:02:41.131Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-53baee608415d70d0402",
              "file": "fundcustodian.spec.js",
              "line": 504,
              "column": 3
            },
            {
              "title": "add custodian form — empty ID shows error",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 54,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 2723,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:02:43.253Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-af2638cfeeb8c5dda02e",
              "file": "fundcustodian.spec.js",
              "line": 509,
              "column": 3
            },
            {
              "title": "add custodian form — empty name shows error",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 54,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 3318,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:02:46.053Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-297b829ff49d7f5eec1e",
              "file": "fundcustodian.spec.js",
              "line": 515,
              "column": 3
            },
            {
              "title": "back button returns to dashboard",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 54,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 2775,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:02:49.562Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-7e5e194816d8d75cc7d8",
              "file": "fundcustodian.spec.js",
              "line": 521,
              "column": 3
            },
            {
              "title": "non-admin cannot reach manage screen via nav",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 54,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 2435,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:02:52.567Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-96b51e50ce4e2d6578c7",
              "file": "fundcustodian.spec.js",
              "line": 526,
              "column": 3
            }
          ]
        },
        {
          "title": "Reject Transfer Modal",
          "file": "fundcustodian.spec.js",
          "line": 537,
          "column": 6,
          "specs": [
            {
              "title": "clicking reject button opens reject modal",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 24,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 10965,
                      "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('.btn-reject').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('.btn-reject').first()\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('.btn-reject').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('.btn-reject').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:541:55",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 55,
                          "line": 541
                        },
                        "snippet": "  539 |     await injectSession(page, SESSION.harish);\n  540 |     await page.goto(BASE_URL);\n> 541 |     await expect(page.locator('.btn-reject').first()).toBeVisible({ timeout: 10000 });\n      |                                                       ^\n  542 |     await page.locator('.btn-reject').first().click();\n  543 |     await expect(page.locator('#reject-modal')).toHaveClass(/open/);\n  544 |     await expect(page.locator('.reject-sheet h3')).toContainText('Reject Transfer');"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 55,
                            "line": 541
                          },
                          "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('.btn-reject').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('.btn-reject').first()\u001b[22m\n\n\n  539 |     await injectSession(page, SESSION.harish);\n  540 |     await page.goto(BASE_URL);\n> 541 |     await expect(page.locator('.btn-reject').first()).toBeVisible({ timeout: 10000 });\n      |                                                       ^\n  542 |     await page.locator('.btn-reject').first().click();\n  543 |     await expect(page.locator('#reject-modal')).toHaveClass(/open/);\n  544 |     await expect(page.locator('.reject-sheet h3')).toContainText('Reject Transfer');\n    at /var/www/360lm/tests/fundcustodian.spec.js:541:55"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:54:05.780Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Reject-Trans-537e3-t-button-opens-reject-modal-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Reject-Trans-537e3-t-button-opens-reject-modal-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 55,
                        "line": 541
                      }
                    },
                    {
                      "workerIndex": 25,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 11075,
                      "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('.btn-reject').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('.btn-reject').first()\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('.btn-reject').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('.btn-reject').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:541:55",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 55,
                          "line": 541
                        },
                        "snippet": "  539 |     await injectSession(page, SESSION.harish);\n  540 |     await page.goto(BASE_URL);\n> 541 |     await expect(page.locator('.btn-reject').first()).toBeVisible({ timeout: 10000 });\n      |                                                       ^\n  542 |     await page.locator('.btn-reject').first().click();\n  543 |     await expect(page.locator('#reject-modal')).toHaveClass(/open/);\n  544 |     await expect(page.locator('.reject-sheet h3')).toContainText('Reject Transfer');"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 55,
                            "line": 541
                          },
                          "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('.btn-reject').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('.btn-reject').first()\u001b[22m\n\n\n  539 |     await injectSession(page, SESSION.harish);\n  540 |     await page.goto(BASE_URL);\n> 541 |     await expect(page.locator('.btn-reject').first()).toBeVisible({ timeout: 10000 });\n      |                                                       ^\n  542 |     await page.locator('.btn-reject').first().click();\n  543 |     await expect(page.locator('#reject-modal')).toHaveClass(/open/);\n  544 |     await expect(page.locator('.reject-sheet h3')).toContainText('Reject Transfer');\n    at /var/www/360lm/tests/fundcustodian.spec.js:541:55"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T05:54:20.496Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Reject-Trans-537e3-t-button-opens-reject-modal-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Reject-Trans-537e3-t-button-opens-reject-modal-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 55,
                        "line": 541
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-c0f89785aa80f2dc2453",
              "file": "fundcustodian.spec.js",
              "line": 538,
              "column": 3
            },
            {
              "title": "cancel button closes reject modal",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 26,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 11330,
                      "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('.btn-reject').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('.btn-reject').first()\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('.btn-reject').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('.btn-reject').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:550:55",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 55,
                          "line": 550
                        },
                        "snippet": "  548 |     await injectSession(page, SESSION.harish);\n  549 |     await page.goto(BASE_URL);\n> 550 |     await expect(page.locator('.btn-reject').first()).toBeVisible({ timeout: 10000 });\n      |                                                       ^\n  551 |     await page.locator('.btn-reject').first().click();\n  552 |     await page.locator('.reject-btns .btn-s').click();\n  553 |     await expect(page.locator('#reject-modal')).not.toHaveClass(/open/);"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 55,
                            "line": 550
                          },
                          "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('.btn-reject').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('.btn-reject').first()\u001b[22m\n\n\n  548 |     await injectSession(page, SESSION.harish);\n  549 |     await page.goto(BASE_URL);\n> 550 |     await expect(page.locator('.btn-reject').first()).toBeVisible({ timeout: 10000 });\n      |                                                       ^\n  551 |     await page.locator('.btn-reject').first().click();\n  552 |     await page.locator('.reject-btns .btn-s').click();\n  553 |     await expect(page.locator('#reject-modal')).not.toHaveClass(/open/);\n    at /var/www/360lm/tests/fundcustodian.spec.js:550:55"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:54:34.894Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Reject-Trans-9dcda--button-closes-reject-modal-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Reject-Trans-9dcda--button-closes-reject-modal-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 55,
                        "line": 550
                      }
                    },
                    {
                      "workerIndex": 27,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 10920,
                      "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('.btn-reject').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('.btn-reject').first()\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('.btn-reject').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('.btn-reject').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:550:55",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 55,
                          "line": 550
                        },
                        "snippet": "  548 |     await injectSession(page, SESSION.harish);\n  549 |     await page.goto(BASE_URL);\n> 550 |     await expect(page.locator('.btn-reject').first()).toBeVisible({ timeout: 10000 });\n      |                                                       ^\n  551 |     await page.locator('.btn-reject').first().click();\n  552 |     await page.locator('.reject-btns .btn-s').click();\n  553 |     await expect(page.locator('#reject-modal')).not.toHaveClass(/open/);"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 55,
                            "line": 550
                          },
                          "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('.btn-reject').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('.btn-reject').first()\u001b[22m\n\n\n  548 |     await injectSession(page, SESSION.harish);\n  549 |     await page.goto(BASE_URL);\n> 550 |     await expect(page.locator('.btn-reject').first()).toBeVisible({ timeout: 10000 });\n      |                                                       ^\n  551 |     await page.locator('.btn-reject').first().click();\n  552 |     await page.locator('.reject-btns .btn-s').click();\n  553 |     await expect(page.locator('#reject-modal')).not.toHaveClass(/open/);\n    at /var/www/360lm/tests/fundcustodian.spec.js:550:55"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T05:54:49.482Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Reject-Trans-9dcda--button-closes-reject-modal-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Reject-Trans-9dcda--button-closes-reject-modal-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 55,
                        "line": 550
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-9f82e9d3279becc0f6d4",
              "file": "fundcustodian.spec.js",
              "line": 547,
              "column": 3
            },
            {
              "title": "clicking reject button opens reject modal",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 54,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 10830,
                      "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('.btn-reject').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('.btn-reject').first()\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('.btn-reject').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('.btn-reject').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:541:55",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 55,
                          "line": 541
                        },
                        "snippet": "  539 |     await injectSession(page, SESSION.harish);\n  540 |     await page.goto(BASE_URL);\n> 541 |     await expect(page.locator('.btn-reject').first()).toBeVisible({ timeout: 10000 });\n      |                                                       ^\n  542 |     await page.locator('.btn-reject').first().click();\n  543 |     await expect(page.locator('#reject-modal')).toHaveClass(/open/);\n  544 |     await expect(page.locator('.reject-sheet h3')).toContainText('Reject Transfer');"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 55,
                            "line": 541
                          },
                          "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('.btn-reject').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('.btn-reject').first()\u001b[22m\n\n\n  539 |     await injectSession(page, SESSION.harish);\n  540 |     await page.goto(BASE_URL);\n> 541 |     await expect(page.locator('.btn-reject').first()).toBeVisible({ timeout: 10000 });\n      |                                                       ^\n  542 |     await page.locator('.btn-reject').first().click();\n  543 |     await expect(page.locator('#reject-modal')).toHaveClass(/open/);\n  544 |     await expect(page.locator('.reject-sheet h3')).toContainText('Reject Transfer');\n    at /var/www/360lm/tests/fundcustodian.spec.js:541:55"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:02:55.136Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Reject-Trans-537e3-t-button-opens-reject-modal-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Reject-Trans-537e3-t-button-opens-reject-modal-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 55,
                        "line": 541
                      }
                    },
                    {
                      "workerIndex": 55,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 10969,
                      "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('.btn-reject').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('.btn-reject').first()\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('.btn-reject').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('.btn-reject').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:541:55",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 55,
                          "line": 541
                        },
                        "snippet": "  539 |     await injectSession(page, SESSION.harish);\n  540 |     await page.goto(BASE_URL);\n> 541 |     await expect(page.locator('.btn-reject').first()).toBeVisible({ timeout: 10000 });\n      |                                                       ^\n  542 |     await page.locator('.btn-reject').first().click();\n  543 |     await expect(page.locator('#reject-modal')).toHaveClass(/open/);\n  544 |     await expect(page.locator('.reject-sheet h3')).toContainText('Reject Transfer');"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 55,
                            "line": 541
                          },
                          "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('.btn-reject').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('.btn-reject').first()\u001b[22m\n\n\n  539 |     await injectSession(page, SESSION.harish);\n  540 |     await page.goto(BASE_URL);\n> 541 |     await expect(page.locator('.btn-reject').first()).toBeVisible({ timeout: 10000 });\n      |                                                       ^\n  542 |     await page.locator('.btn-reject').first().click();\n  543 |     await expect(page.locator('#reject-modal')).toHaveClass(/open/);\n  544 |     await expect(page.locator('.reject-sheet h3')).toContainText('Reject Transfer');\n    at /var/www/360lm/tests/fundcustodian.spec.js:541:55"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T06:03:08.529Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Reject-Trans-537e3-t-button-opens-reject-modal-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Reject-Trans-537e3-t-button-opens-reject-modal-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 55,
                        "line": 541
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-17feaf856c6481abb7a8",
              "file": "fundcustodian.spec.js",
              "line": 538,
              "column": 3
            },
            {
              "title": "cancel button closes reject modal",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 56,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 11410,
                      "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('.btn-reject').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('.btn-reject').first()\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('.btn-reject').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('.btn-reject').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:550:55",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 55,
                          "line": 550
                        },
                        "snippet": "  548 |     await injectSession(page, SESSION.harish);\n  549 |     await page.goto(BASE_URL);\n> 550 |     await expect(page.locator('.btn-reject').first()).toBeVisible({ timeout: 10000 });\n      |                                                       ^\n  551 |     await page.locator('.btn-reject').first().click();\n  552 |     await page.locator('.reject-btns .btn-s').click();\n  553 |     await expect(page.locator('#reject-modal')).not.toHaveClass(/open/);"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 55,
                            "line": 550
                          },
                          "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('.btn-reject').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('.btn-reject').first()\u001b[22m\n\n\n  548 |     await injectSession(page, SESSION.harish);\n  549 |     await page.goto(BASE_URL);\n> 550 |     await expect(page.locator('.btn-reject').first()).toBeVisible({ timeout: 10000 });\n      |                                                       ^\n  551 |     await page.locator('.btn-reject').first().click();\n  552 |     await page.locator('.reject-btns .btn-s').click();\n  553 |     await expect(page.locator('#reject-modal')).not.toHaveClass(/open/);\n    at /var/www/360lm/tests/fundcustodian.spec.js:550:55"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:03:25.411Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Reject-Trans-9dcda--button-closes-reject-modal-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Reject-Trans-9dcda--button-closes-reject-modal-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 55,
                        "line": 550
                      }
                    },
                    {
                      "workerIndex": 57,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 10823,
                      "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('.btn-reject').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('.btn-reject').first()\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('.btn-reject').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('.btn-reject').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:550:55",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 55,
                          "line": 550
                        },
                        "snippet": "  548 |     await injectSession(page, SESSION.harish);\n  549 |     await page.goto(BASE_URL);\n> 550 |     await expect(page.locator('.btn-reject').first()).toBeVisible({ timeout: 10000 });\n      |                                                       ^\n  551 |     await page.locator('.btn-reject').first().click();\n  552 |     await page.locator('.reject-btns .btn-s').click();\n  553 |     await expect(page.locator('#reject-modal')).not.toHaveClass(/open/);"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 55,
                            "line": 550
                          },
                          "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('.btn-reject').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('.btn-reject').first()\u001b[22m\n\n\n  548 |     await injectSession(page, SESSION.harish);\n  549 |     await page.goto(BASE_URL);\n> 550 |     await expect(page.locator('.btn-reject').first()).toBeVisible({ timeout: 10000 });\n      |                                                       ^\n  551 |     await page.locator('.btn-reject').first().click();\n  552 |     await page.locator('.reject-btns .btn-s').click();\n  553 |     await expect(page.locator('#reject-modal')).not.toHaveClass(/open/);\n    at /var/www/360lm/tests/fundcustodian.spec.js:550:55"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T06:03:39.014Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Reject-Trans-9dcda--button-closes-reject-modal-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Reject-Trans-9dcda--button-closes-reject-modal-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 55,
                        "line": 550
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-21e56049a73a4b288c61",
              "file": "fundcustodian.spec.js",
              "line": 547,
              "column": 3
            }
          ]
        },
        {
          "title": "Bottom Navigation",
          "file": "fundcustodian.spec.js",
          "line": 560,
          "column": 6,
          "specs": [
            {
              "title": "nav → Transfer shows transfer screen",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 28,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 2336,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:55:04.876Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-1fe5c51479cb627e6017",
              "file": "fundcustodian.spec.js",
              "line": 567,
              "column": 3
            },
            {
              "title": "nav → Advance shows advance screen",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 28,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1851,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:55:08.045Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-d6cf3c3e21a7d3674ed1",
              "file": "fundcustodian.spec.js",
              "line": 574,
              "column": 3
            },
            {
              "title": "nav → Ledger shows ledger screen",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 28,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1480,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:55:10.050Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-b6162d87517fdb5f7f64",
              "file": "fundcustodian.spec.js",
              "line": 580,
              "column": 3
            },
            {
              "title": "nav → Dashboard returns home",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 28,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1862,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:55:11.663Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-551b6bf70781ebd5731f",
              "file": "fundcustodian.spec.js",
              "line": 586,
              "column": 3
            },
            {
              "title": "Hub button is visible on every screen",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 28,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1563,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:55:13.611Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-db2bab9ebcfa601ddfc3",
              "file": "fundcustodian.spec.js",
              "line": 593,
              "column": 3
            },
            {
              "title": "nav → Transfer shows transfer screen",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 58,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1209,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:03:55.003Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-1403f351436cbb8d6daa",
              "file": "fundcustodian.spec.js",
              "line": 567,
              "column": 3
            },
            {
              "title": "nav → Advance shows advance screen",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 58,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 880,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:03:56.764Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-efea879496cabf15649a",
              "file": "fundcustodian.spec.js",
              "line": 574,
              "column": 3
            },
            {
              "title": "nav → Ledger shows ledger screen",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 58,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 900,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:03:57.671Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-567dd23c0791430f34c0",
              "file": "fundcustodian.spec.js",
              "line": 580,
              "column": 3
            },
            {
              "title": "nav → Dashboard returns home",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 58,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1041,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:03:58.621Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-e4a4288e8881ff9d44df",
              "file": "fundcustodian.spec.js",
              "line": 586,
              "column": 3
            },
            {
              "title": "Hub button is visible on every screen",
              "ok": true,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 58,
                      "parallelIndex": 0,
                      "status": "passed",
                      "duration": 1340,
                      "errors": [],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:03:59.732Z",
                      "annotations": [],
                      "attachments": []
                    }
                  ],
                  "status": "expected"
                }
              ],
              "id": "1caa50027b536c34a40f-df6b398b147755b5374a",
              "file": "fundcustodian.spec.js",
              "line": 593,
              "column": 3
            }
          ]
        },
        {
          "title": "Status Badge Rendering",
          "file": "fundcustodian.spec.js",
          "line": 604,
          "column": 6,
          "specs": [
            {
              "title": "admin ledger shows all expected transfer statuses",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "android-chrome",
                  "projectName": "android-chrome",
                  "results": [
                    {
                      "workerIndex": 28,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 10618,
                      "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('#transfers-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfers-list .ledger-row').first()\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('#transfers-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfers-list .ledger-row').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:609:71",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 71,
                          "line": 609
                        },
                        "snippet": "  607 |     await page.goto(BASE_URL);\n  608 |     await page.locator('#nav-ledger').click();\n> 609 |     await expect(page.locator('#transfers-list .ledger-row').first()).toBeVisible({ timeout: 10000 });\n      |                                                                       ^\n  610 |     const badgeTexts = await page.locator('#transfers-list .badge').allTextContents();\n  611 |     const flattened = badgeTexts.join(' ');\n  612 |     // Test data includes all statuses across the full ledger"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 71,
                            "line": 609
                          },
                          "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('#transfers-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfers-list .ledger-row').first()\u001b[22m\n\n\n  607 |     await page.goto(BASE_URL);\n  608 |     await page.locator('#nav-ledger').click();\n> 609 |     await expect(page.locator('#transfers-list .ledger-row').first()).toBeVisible({ timeout: 10000 });\n      |                                                                       ^\n  610 |     const badgeTexts = await page.locator('#transfers-list .badge').allTextContents();\n  611 |     const flattened = badgeTexts.join(' ');\n  612 |     // Test data includes all statuses across the full ledger\n    at /var/www/360lm/tests/fundcustodian.spec.js:609:71"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T05:55:15.250Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Status-Badge-a6816--expected-transfer-statuses-android-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Status-Badge-a6816--expected-transfer-statuses-android-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 71,
                        "line": 609
                      }
                    },
                    {
                      "workerIndex": 29,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 11739,
                      "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('#transfers-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfers-list .ledger-row').first()\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('#transfers-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfers-list .ledger-row').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:609:71",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 71,
                          "line": 609
                        },
                        "snippet": "  607 |     await page.goto(BASE_URL);\n  608 |     await page.locator('#nav-ledger').click();\n> 609 |     await expect(page.locator('#transfers-list .ledger-row').first()).toBeVisible({ timeout: 10000 });\n      |                                                                       ^\n  610 |     const badgeTexts = await page.locator('#transfers-list .badge').allTextContents();\n  611 |     const flattened = badgeTexts.join(' ');\n  612 |     // Test data includes all statuses across the full ledger"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 71,
                            "line": 609
                          },
                          "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('#transfers-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfers-list .ledger-row').first()\u001b[22m\n\n\n  607 |     await page.goto(BASE_URL);\n  608 |     await page.locator('#nav-ledger').click();\n> 609 |     await expect(page.locator('#transfers-list .ledger-row').first()).toBeVisible({ timeout: 10000 });\n      |                                                                       ^\n  610 |     const badgeTexts = await page.locator('#transfers-list .badge').allTextContents();\n  611 |     const flattened = badgeTexts.join(' ');\n  612 |     // Test data includes all statuses across the full ledger\n    at /var/www/360lm/tests/fundcustodian.spec.js:609:71"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T05:55:29.465Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Status-Badge-a6816--expected-transfer-statuses-android-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Status-Badge-a6816--expected-transfer-statuses-android-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 71,
                        "line": 609
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-23285101eada7bb8d05b",
              "file": "fundcustodian.spec.js",
              "line": 605,
              "column": 3
            },
            {
              "title": "admin ledger shows all expected transfer statuses",
              "ok": false,
              "tags": [],
              "tests": [
                {
                  "timeout": 30000,
                  "annotations": [],
                  "expectedStatus": "passed",
                  "projectId": "desktop-chrome",
                  "projectName": "desktop-chrome",
                  "results": [
                    {
                      "workerIndex": 58,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 11792,
                      "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('#transfers-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfers-list .ledger-row').first()\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('#transfers-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfers-list .ledger-row').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:609:71",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 71,
                          "line": 609
                        },
                        "snippet": "  607 |     await page.goto(BASE_URL);\n  608 |     await page.locator('#nav-ledger').click();\n> 609 |     await expect(page.locator('#transfers-list .ledger-row').first()).toBeVisible({ timeout: 10000 });\n      |                                                                       ^\n  610 |     const badgeTexts = await page.locator('#transfers-list .badge').allTextContents();\n  611 |     const flattened = badgeTexts.join(' ');\n  612 |     // Test data includes all statuses across the full ledger"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 71,
                            "line": 609
                          },
                          "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('#transfers-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfers-list .ledger-row').first()\u001b[22m\n\n\n  607 |     await page.goto(BASE_URL);\n  608 |     await page.locator('#nav-ledger').click();\n> 609 |     await expect(page.locator('#transfers-list .ledger-row').first()).toBeVisible({ timeout: 10000 });\n      |                                                                       ^\n  610 |     const badgeTexts = await page.locator('#transfers-list .badge').allTextContents();\n  611 |     const flattened = badgeTexts.join(' ');\n  612 |     // Test data includes all statuses across the full ledger\n    at /var/www/360lm/tests/fundcustodian.spec.js:609:71"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 0,
                      "startTime": "2026-05-29T06:04:01.165Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Status-Badge-a6816--expected-transfer-statuses-desktop-chrome/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Status-Badge-a6816--expected-transfer-statuses-desktop-chrome/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 71,
                        "line": 609
                      }
                    },
                    {
                      "workerIndex": 59,
                      "parallelIndex": 0,
                      "status": "failed",
                      "duration": 11135,
                      "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('#transfers-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfers-list .ledger-row').first()\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('#transfers-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfers-list .ledger-row').first()\u001b[22m\n\n    at /var/www/360lm/tests/fundcustodian.spec.js:609:71",
                        "location": {
                          "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                          "column": 71,
                          "line": 609
                        },
                        "snippet": "  607 |     await page.goto(BASE_URL);\n  608 |     await page.locator('#nav-ledger').click();\n> 609 |     await expect(page.locator('#transfers-list .ledger-row').first()).toBeVisible({ timeout: 10000 });\n      |                                                                       ^\n  610 |     const badgeTexts = await page.locator('#transfers-list .badge').allTextContents();\n  611 |     const flattened = badgeTexts.join(' ');\n  612 |     // Test data includes all statuses across the full ledger"
                      },
                      "errors": [
                        {
                          "location": {
                            "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                            "column": 71,
                            "line": 609
                          },
                          "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('#transfers-list .ledger-row').first()\nExpected: visible\nTimeout: 10000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m  - Expect \"toBeVisible\" with timeout 10000ms\u001b[22m\n\u001b[2m  - waiting for locator('#transfers-list .ledger-row').first()\u001b[22m\n\n\n  607 |     await page.goto(BASE_URL);\n  608 |     await page.locator('#nav-ledger').click();\n> 609 |     await expect(page.locator('#transfers-list .ledger-row').first()).toBeVisible({ timeout: 10000 });\n      |                                                                       ^\n  610 |     const badgeTexts = await page.locator('#transfers-list .badge').allTextContents();\n  611 |     const flattened = badgeTexts.join(' ');\n  612 |     // Test data includes all statuses across the full ledger\n    at /var/www/360lm/tests/fundcustodian.spec.js:609:71"
                        }
                      ],
                      "stdout": [],
                      "stderr": [],
                      "retry": 1,
                      "startTime": "2026-05-29T06:04:16.322Z",
                      "annotations": [],
                      "attachments": [
                        {
                          "name": "screenshot",
                          "contentType": "image/png",
                          "path": "/var/www/360lm/test-results/fundcustodian-Status-Badge-a6816--expected-transfer-statuses-desktop-chrome-retry1/test-failed-1.png"
                        },
                        {
                          "name": "error-context",
                          "contentType": "text/markdown",
                          "path": "/var/www/360lm/test-results/fundcustodian-Status-Badge-a6816--expected-transfer-statuses-desktop-chrome-retry1/error-context.md"
                        }
                      ],
                      "errorLocation": {
                        "file": "/var/www/360lm/tests/fundcustodian.spec.js",
                        "column": 71,
                        "line": 609
                      }
                    }
                  ],
                  "status": "unexpected"
                }
              ],
              "id": "1caa50027b536c34a40f-6d6b62b2b820568852bd",
              "file": "fundcustodian.spec.js",
              "line": 605,
              "column": 3
            }
          ]
        }
      ]
    }
  ],
  "errors": [],
  "stats": {
    "startTime": "2026-05-29T05:48:55.089Z",
    "duration": 932961.955,
    "expected": 116,
    "skipped": 0,
    "unexpected": 30,
    "flaky": 0
  }
}
