# Verification — [ERP bug-fix] Bug from /purchase-orders — proof-only

**Result:** ❌ FAIL  `FAIL — 3 browser check(s) failed · 3 console error(s) · 3 server-5xx response(s) · 1 runtime start check(s) failed`  
**When:** 20260619T001022Z  
**URL:** http://100.121.252.85:3180/  

## Screenshots
![01-landing.png](01-landing.png)
![02-post-login.png](02-post-login.png)
![03-l2-menu-smoke-01-root.png](03-l2-menu-smoke-01-root.png)
![03-l2-menu-smoke-01-root-element.png](03-l2-menu-smoke-01-root-element.png)
![03-l2-menu-smoke-02-menu-sweep-opportunities-dashboard-projects-cost-analysis-purchase-orders.png](03-l2-menu-smoke-02-menu-sweep-opportunities-dashboard-projects-cost-analysis-purchase-orders.png)
![03-l2-menu-smoke.png](03-l2-menu-smoke.png)
![04-changed-surface-1.png](04-changed-surface-1.png)
![05-purchase-order-first-approval-00-journey-start.png](05-purchase-order-first-approval-00-journey-start.png)
![05-purchase-order-first-approval-01-navigate.png](05-purchase-order-first-approval-01-navigate.png)
![05-purchase-order-first-approval-02-input-placeholder-search-po-supplier-or-project.png](05-purchase-order-first-approval-02-input-placeholder-search-po-supplier-or-project.png)
![05-purchase-order-first-approval-02-input-placeholder-search-po-supplier-or-project-element.png](05-purchase-order-first-approval-02-input-placeholder-search-po-supplier-or-project-element.png)
![05-purchase-order-first-approval-03-data-testid-po-filter-pending-approval.png](05-purchase-order-first-approval-03-data-testid-po-filter-pending-approval.png)
![05-purchase-order-first-approval-03-data-testid-po-filter-pending-approval-element.png](05-purchase-order-first-approval-03-data-testid-po-filter-pending-approval-element.png)
![05-purchase-order-first-approval-failed.png](05-purchase-order-first-approval-failed.png)
![06-purchase-order-over-limit-auto-submits-for-approval-00-journey-start.png](06-purchase-order-over-limit-auto-submits-for-approval-00-journey-start.png)
![06-purchase-order-over-limit-auto-submits-for-approval-01-navigate.png](06-purchase-order-over-limit-auto-submits-for-approval-01-navigate.png)
![06-purchase-order-over-limit-auto-submits-for-approval-02-input-placeholder-search-po-supplier-or-project.png](06-purchase-order-over-limit-auto-submits-for-approval-02-input-placeholder-search-po-supplier-or-project.png)
![06-purchase-order-over-limit-auto-submits-for-approval-02-input-placeholder-search-po-supplier-or-project-element.png](06-purchase-order-over-limit-auto-submits-for-approval-02-input-placeholder-search-po-supplier-or-project-element.png)
![06-purchase-order-over-limit-auto-submits-for-approval-03-data-testid-po-filter-pending-approval.png](06-purchase-order-over-limit-auto-submits-for-approval-03-data-testid-po-filter-pending-approval.png)
![06-purchase-order-over-limit-auto-submits-for-approval-03-data-testid-po-filter-pending-approval-element.png](06-purchase-order-over-limit-auto-submits-for-approval-03-data-testid-po-filter-pending-approval-element.png)
![06-purchase-order-over-limit-auto-submits-for-approval-failed.png](06-purchase-order-over-limit-auto-submits-for-approval-failed.png)
![07-po-telegram-digest-excludes-requested-2026-06-16-00-journey-start.png](07-po-telegram-digest-excludes-requested-2026-06-16-00-journey-start.png)
![07-po-telegram-digest-excludes-requested-2026-06-16-01-navigate.png](07-po-telegram-digest-excludes-requested-2026-06-16-01-navigate.png)
![07-po-telegram-digest-excludes-requested-2026-06-16-02-a-href-purchase-orders.png](07-po-telegram-digest-excludes-requested-2026-06-16-02-a-href-purchase-orders.png)
![07-po-telegram-digest-excludes-requested-2026-06-16-02-a-href-purchase-orders-element.png](07-po-telegram-digest-excludes-requested-2026-06-16-02-a-href-purchase-orders-element.png)
![07-po-telegram-digest-excludes-requested-2026-06-16-03-a-href-purchase-orders.png](07-po-telegram-digest-excludes-requested-2026-06-16-03-a-href-purchase-orders.png)
![07-po-telegram-digest-excludes-requested-2026-06-16-03-a-href-purchase-orders-element.png](07-po-telegram-digest-excludes-requested-2026-06-16-03-a-href-purchase-orders-element.png)
![07-po-telegram-digest-excludes-requested-2026-06-16-04-input-placeholder-search-po-supplier-or-project.png](07-po-telegram-digest-excludes-requested-2026-06-16-04-input-placeholder-search-po-supplier-or-project.png)
![07-po-telegram-digest-excludes-requested-2026-06-16-04-input-placeholder-search-po-supplier-or-project-element.png](07-po-telegram-digest-excludes-requested-2026-06-16-04-input-placeholder-search-po-supplier-or-project-element.png)
![07-po-telegram-digest-excludes-requested-2026-06-16-05-data-testid-po-filter-pending-approval.png](07-po-telegram-digest-excludes-requested-2026-06-16-05-data-testid-po-filter-pending-approval.png)
![07-po-telegram-digest-excludes-requested-2026-06-16-05-data-testid-po-filter-pending-approval-element.png](07-po-telegram-digest-excludes-requested-2026-06-16-05-data-testid-po-filter-pending-approval-element.png)
![07-po-telegram-digest-excludes-requested-2026-06-16-06-data-testid-po-filter-pending-approval.png](07-po-telegram-digest-excludes-requested-2026-06-16-06-data-testid-po-filter-pending-approval.png)
![07-po-telegram-digest-excludes-requested-2026-06-16-06-data-testid-po-filter-pending-approval-element.png](07-po-telegram-digest-excludes-requested-2026-06-16-06-data-testid-po-filter-pending-approval-element.png)
![07-po-telegram-digest-excludes-requested-2026-06-16-07-purchase-orders.png](07-po-telegram-digest-excludes-requested-2026-06-16-07-purchase-orders.png)
![07-po-telegram-digest-excludes-requested-2026-06-16.png](07-po-telegram-digest-excludes-requested-2026-06-16.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-00-journey-start.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-00-journey-start.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-01-navigate.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-01-navigate.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-02-a-href-purchase-orders.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-02-a-href-purchase-orders.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-02-a-href-purchase-orders-element.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-02-a-href-purchase-orders-element.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-03-a-href-purchase-orders.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-03-a-href-purchase-orders.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-03-a-href-purchase-orders-element.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-03-a-href-purchase-orders-element.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-04-input-placeholder-search-po-supplier-or-project.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-04-input-placeholder-search-po-supplier-or-project.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-04-input-placeholder-search-po-supplier-or-project-element.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-04-input-placeholder-search-po-supplier-or-project-element.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-05-data-testid-po-toolbar-row.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-05-data-testid-po-toolbar-row.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-05-data-testid-po-toolbar-row-element.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-05-data-testid-po-toolbar-row-element.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-06-data-testid-purchase-orders-assemblies-button.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-06-data-testid-purchase-orders-assemblies-button.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-06-data-testid-purchase-orders-assemblies-button-element.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-06-data-testid-purchase-orders-assemblies-button-element.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-07-input-placeholder-search-assemblies.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-07-input-placeholder-search-assemblies.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-07-input-placeholder-search-assemblies-element.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-07-input-placeholder-search-assemblies-element.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-08-data-testid-po-toolbar-row.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-08-data-testid-po-toolbar-row.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-08-data-testid-po-toolbar-row-element.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-08-data-testid-po-toolbar-row-element.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-09-data-testid-purchase-orders-orders-button.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-09-data-testid-purchase-orders-orders-button.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-09-data-testid-purchase-orders-orders-button-element.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-09-data-testid-purchase-orders-orders-button-element.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-10-input-placeholder-search-po-supplier-or-project.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-10-input-placeholder-search-po-supplier-or-project.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-10-input-placeholder-search-po-supplier-or-project-element.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-10-input-placeholder-search-po-supplier-or-project-element.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-11-data-testid-po-toolbar-row.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-11-data-testid-po-toolbar-row.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-11-data-testid-po-toolbar-row-element.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-11-data-testid-po-toolbar-row-element.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-12-data-testid-po-toolbar-actions-right.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-12-data-testid-po-toolbar-actions-right.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-12-data-testid-po-toolbar-actions-right-element.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-12-data-testid-po-toolbar-actions-right-element.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-13-purchase-orders.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-13-purchase-orders.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-14-view-cancelled.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16-14-view-cancelled.png)
![08-po-toolbar-no-overlap-and-consistent-height-2026-06-16.png](08-po-toolbar-no-overlap-and-consistent-height-2026-06-16.png)
![09-suppliers-list-renders-00-journey-start.png](09-suppliers-list-renders-00-journey-start.png)
![09-suppliers-list-renders-01-a-href-suppliers.png](09-suppliers-list-renders-01-a-href-suppliers.png)
![09-suppliers-list-renders-01-a-href-suppliers-element.png](09-suppliers-list-renders-01-a-href-suppliers-element.png)
![09-suppliers-list-renders-02-input-placeholder-search-suppliers.png](09-suppliers-list-renders-02-input-placeholder-search-suppliers.png)
![09-suppliers-list-renders-02-input-placeholder-search-suppliers-element.png](09-suppliers-list-renders-02-input-placeholder-search-suppliers-element.png)
![09-suppliers-list-renders-03-suppliers.png](09-suppliers-list-renders-03-suppliers.png)
![09-suppliers-list-renders-04-manage-your-supplier-database.png](09-suppliers-list-renders-04-manage-your-supplier-database.png)
![09-suppliers-list-renders.png](09-suppliers-list-renders.png)
![10-inventory-list-renders-00-journey-start.png](10-inventory-list-renders-00-journey-start.png)
![10-inventory-list-renders-01-a-href-inventory.png](10-inventory-list-renders-01-a-href-inventory.png)
![10-inventory-list-renders-01-a-href-inventory-element.png](10-inventory-list-renders-01-a-href-inventory-element.png)
![10-inventory-list-renders-02-input-placeholder-search-items.png](10-inventory-list-renders-02-input-placeholder-search-items.png)
![10-inventory-list-renders-02-input-placeholder-search-items-element.png](10-inventory-list-renders-02-input-placeholder-search-items-element.png)
![10-inventory-list-renders-03-inventory-management.png](10-inventory-list-renders-03-inventory-management.png)
![10-inventory-list-renders-04-manage-your-inventory-items.png](10-inventory-list-renders-04-manage-your-inventory-items.png)
![10-inventory-list-renders.png](10-inventory-list-renders.png)

## Proof plan
- **Level:** 2
- **Task browser checks:** 7
- **API checks:** 0
- **task_browser_checks_present:** PASS — Worker must declare task-specific browser_checks in .orch-done.json.
- **task_browser_checks_substantive:** PASS — Browser checks must target changed feature routes and specific selectors/text/actions.
- **browser_checks_grounded:** PASS — Browser checks must use concrete routes and stable user-facing selectors.
- **level2_scope_bounded:** PASS — Level 2 browser checks must stay focused (40 actions max per check). Split broad regression journeys into separate focused checks or Level 3 recipes.
- **level2_entry_to_target_flow:** PASS — Level 2 requires an entry-to-target browser-flow check that starts at entry/login and navigates by visible controls. (For pure render assertions, set kind: static_render on each check.)
- **level2_user_actions:** PASS — Level 2 requires safe user actions such as click, fill, upload, select, or press. (For pure render assertions, set kind: static_render on each check.)
- **level2_assertions:** PASS — Level 2 requires selector/text assertions proving the changed UI state.
- **level2_expected_result:** PASS — Level 2 requires expected_result/success_criteria explaining what success looks like.
- **level2_positive_assertion:** PASS — Level 2 requires at least one POSITIVE assertion — a concrete assert_text value (e.g. the corrected £ total) or that a specific element is present. Absence-only checks (assert_no_text) do not prove the fix; they pass on an empty or wrong page.

## Task-specific browser checks
- **l2-menu-smoke:** `/` — selectors: (none); text: (none); actions: 2
- **changed-surface-1:** `/purchase-orders` — selectors: a[href='/purchase-orders'], input[placeholder='Search PO, supplier or project...'], [data-testid='po-toolbar-row'], [data-testid='po-toolbar-actions-right'], [data-testid='purchase-orders-orders-button'], [data-testid='purchase-orders-assemblies-button'], input[placeholder='Search assemblies...']; text: (none); actions: 0
- **purchase-order-first-approval:** `/purchase-orders` — selectors: (none); text: (none); actions: 13
- **purchase-order-over-limit-auto-submits-for-approval:** `/purchase-orders` — selectors: (none); text: (none); actions: 5
- **po-telegram-digest-excludes-requested-2026-06-16:** `/purchase-orders` — selectors: (none); text: (none); actions: 7
- **po-toolbar-no-overlap-and-consistent-height-2026-06-16:** `/purchase-orders` — selectors: (none); text: (none); actions: 14
- **suppliers-list-renders:** `/suppliers` — selectors: (none); text: (none); actions: 4
- **inventory-list-renders:** `/inventory` — selectors: (none); text: (none); actions: 4

## Runtime start checks
- **frontend_http:** PASS — http://100.121.252.85:3180/ returned HTTP 200 (text/html; charset=utf-8); body starts '<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><link rel="icon" type='
- **backend_health:** FAIL — 100.121.252.85 http://127.0.0.1:8002/health failed: <urlopen error [Errno 111] Connection refused>
- **pm2_backend-dev:** PASS — backend-dev status=online
- **pm2_frontend-dev:** PASS — frontend-dev status=online

## Notes
- Verification level 2
- ✓ task proof plan L2: 7 task browser check(s), 0 API check(s)
- Playwright MCP required for level 2+ UI proof; validating worker-declared MCP-backed checks.
- ✓ readiness gate: app ready after 1 probe(s) (status 200)
- Logged in as claude-dev@arcontrols.internal
- ✓ selector present: #root > *
- ✓ smoke_text present: Dashboard
- ✓ l2-menu-smoke: step 1 #root *
- ✓ l2-menu-smoke: step 2 menu_sweep: Opportunities, Dashboard, Projects, Cost Analysis, Purchase Orders
- ✓ changed-surface-1: selector present: a[href='/purchase-orders']
- ✓ changed-surface-1: selector present: input[placeholder='Search PO, supplier or project...']
- ✓ changed-surface-1: selector present: [data-testid='po-toolbar-row']
- ✓ changed-surface-1: selector present: [data-testid='po-toolbar-actions-right']
- ✓ changed-surface-1: selector present: [data-testid='purchase-orders-orders-button']
- ✓ changed-surface-1: selector present: [data-testid='purchase-orders-assemblies-button']
- ✗ changed-surface-1: selector missing: input[placeholder='Search assemblies...']
- Browser flow 'purchase-order-first-approval' started at /; target is /purchase-orders. Navigation must use visible UI actions from here.
- ✓ purchase-order-first-approval: step 1 navigate
- ✓ purchase-order-first-approval: step 2 input[placeholder="Search PO, supplier or project..."]
- ✓ purchase-order-first-approval: step 3 [data-testid="po-filter-pending-approval"]
- ✗ browser check 'purchase-order-first-approval' failed: Page.wait_for_selector: Timeout 30000ms exceeded.
Call log:
  - waiting for locator("tr:has-text(\"Pending Approval\"):has([data-testid^=\"po-view-\"])") to be visible

- Browser flow 'purchase-order-over-limit-auto-submits-for-approval' started at /; target is /purchase-orders. Navigation must use visible UI actions from here.
- ✓ purchase-order-over-limit-auto-submits-for-approval: step 1 navigate
- ✓ purchase-order-over-limit-auto-submits-for-approval: step 2 input[placeholder="Search PO, supplier or project..."]
- ✓ purchase-order-over-limit-auto-submits-for-approval: step 3 [data-testid="po-filter-pending-approval"]
- ✗ browser check 'purchase-order-over-limit-auto-submits-for-approval' failed: Page.wait_for_selector: Timeout 30000ms exceeded.
Call log:
  - waiting for locator("tr:has-text(\"Pending Approval\")") to be visible

- Browser flow 'po-telegram-digest-excludes-requested-2026-06-16' started at /; target is /purchase-orders. Navigation must use visible UI actions from here.
- ✓ po-telegram-digest-excludes-requested-2026-06-16: step 1 navigate
- ✓ po-telegram-digest-excludes-requested-2026-06-16: step 2 a[href="/purchase-orders"]
- ✓ po-telegram-digest-excludes-requested-2026-06-16: step 3 a[href="/purchase-orders"]
- ✓ po-telegram-digest-excludes-requested-2026-06-16: step 4 input[placeholder="Search PO, supplier or project..."]
- ✓ po-telegram-digest-excludes-requested-2026-06-16: step 5 [data-testid="po-filter-pending-approval"]
- ✓ po-telegram-digest-excludes-requested-2026-06-16: step 6 [data-testid="po-filter-pending-approval"]
- ✓ po-telegram-digest-excludes-requested-2026-06-16: step 7 Purchase Orders
- ✓ po-telegram-digest-excludes-requested-2026-06-16: browser flow reached target path /purchase-orders
- Browser flow 'po-toolbar-no-overlap-and-consistent-height-2026-06-16' started at /; target is /purchase-orders. Navigation must use visible UI actions from here.
- ✓ po-toolbar-no-overlap-and-consistent-height-2026-06-16: step 1 navigate
- ✓ po-toolbar-no-overlap-and-consistent-height-2026-06-16: step 2 a[href="/purchase-orders"]
- ✓ po-toolbar-no-overlap-and-consistent-height-2026-06-16: step 3 a[href="/purchase-orders"]
- ✓ po-toolbar-no-overlap-and-consistent-height-2026-06-16: step 4 input[placeholder="Search PO, supplier or project..."]
- ✓ po-toolbar-no-overlap-and-consistent-height-2026-06-16: step 5 [data-testid="po-toolbar-row"]
- ✓ po-toolbar-no-overlap-and-consistent-height-2026-06-16: step 6 [data-testid="purchase-orders-assemblies-button"]
- ✓ po-toolbar-no-overlap-and-consistent-height-2026-06-16: step 7 input[placeholder="Search assemblies..."]
- ✓ po-toolbar-no-overlap-and-consistent-height-2026-06-16: step 8 [data-testid="po-toolbar-row"]
- ✓ po-toolbar-no-overlap-and-consistent-height-2026-06-16: step 9 [data-testid="purchase-orders-orders-button"]
- ✓ po-toolbar-no-overlap-and-consistent-height-2026-06-16: step 10 input[placeholder="Search PO, supplier or project..."]
- ✓ po-toolbar-no-overlap-and-consistent-height-2026-06-16: step 11 [data-testid="po-toolbar-row"]
- ✓ po-toolbar-no-overlap-and-consistent-height-2026-06-16: step 12 [data-testid="po-toolbar-actions-right"]
- ✓ po-toolbar-no-overlap-and-consistent-height-2026-06-16: step 13 Purchase Orders
- ✓ po-toolbar-no-overlap-and-consistent-height-2026-06-16: step 14 View Cancelled
- ✓ po-toolbar-no-overlap-and-consistent-height-2026-06-16: browser flow reached target path /purchase-orders
- Browser flow 'suppliers-list-renders' started at /; target is /suppliers. Navigation must use visible UI actions from here.
- ✓ suppliers-list-renders: step 1 a[href="/suppliers"]
- ✓ suppliers-list-renders: step 2 input[placeholder="Search suppliers..."]
- ✓ suppliers-list-renders: step 3 Suppliers
- ✓ suppliers-list-renders: step 4 Manage your supplier database
- ✓ suppliers-list-renders: browser flow reached target path /suppliers
- Browser flow 'inventory-list-renders' started at /; target is /inventory. Navigation must use visible UI actions from here.
- ✓ inventory-list-renders: step 1 a[href="/inventory"]
- ✓ inventory-list-renders: step 2 input[placeholder="Search items..."]
- ✓ inventory-list-renders: step 3 Inventory Management
- ✓ inventory-list-renders: step 4 Manage your inventory items
- ✓ inventory-list-renders: browser flow reached target path /inventory
- Ignored 28 aborted background fetch console error(s); task browser checks, API checks, and runtime checks decide this proof.

## Console errors
- `[error] Error fetching tasks: TypeError: Failed to fetch
    at o (http://100.121.252.85:3180/static/js/872.89f56c8c.chunk.js:1:20462)`
- `[error] Error fetching staff comms: TypeError: Failed to fetch
    at g (http://100.121.252.85:3180/static/js/872.89f56c8c.chunk.js:1:36764)`
- `[error] Failed to fetch HR settings: TypeError: Failed to fetch
    at http://100.121.252.85:3180/static/js/9627.6c769993.chunk.js:1:1868`
- `[error] Error fetching budget warnings: TypeError: Failed to fetch
    at x (http://100.121.252.85:3180/static/js/872.89f56c8c.chunk.js:1:23348)`
- `[error] Error fetching PO requests: TypeError: Failed to fetch
    at d (http://100.121.252.85:3180/static/js/872.89f56c8c.chunk.js:1:45670)`
- `[error] Error fetching projects: TypeError: Failed to fetch
    at x (http://100.121.252.85:3180/static/js/872.89f56c8c.chunk.js:1:15247)`
- `[error] Failed to check timesheet compliance: TypeError: Failed to fetch
    at u (http://100.121.252.85:3180/static/js/9627.6c769993.chunk.js:1:14135)`
- `[error] Error fetching batch widget data: TypeError: Failed to fetch
    at P (http://100.121.252.85:3180/static/js/872.89f56c8c.chunk.js:1:67040)`
- `[error] Error fetching checklist settings: TypeError: Failed to fetch
    at h (http://100.121.252.85:3180/static/js/9627.6c769993.chunk.js:1:16839)`
- `[error] Failed to fetch new task count: TypeError: Failed to fetch
    at e (http://100.121.252.85:3180/static/js/9627.6c769993.chunk.js:1:1521)`
- `[error] Error fetching approval requests: TypeError: Failed to fetch
    at x (http://100.121.252.85:3180/static/js/872.89f56c8c.chunk.js:1:48850)`
- `[error] 🔔 NotificationsDropdown: Error fetching notification summary: TypeError: Failed to fetch
    at T (http://100.121.252.85:3180/static/js/505.03a7c875.chunk.js:1:76319)`
- `[error] Error fetching POs: TypeError: Failed to fetch
    at d (http://100.121.252.85:3180/static/js/872.89f56c8c.chunk.js:1:18190)`
- `[error] 🔔 NotificationsDropdown: Error fetching notification summary: TypeError: Failed to fetch
    at T (http://100.121.252.85:3180/static/js/505.03a7c875.chunk.js:1:76319)`
- `[error] Failed to fetch new task count: TypeError: Failed to fetch
    at e (http://100.121.252.85:3180/static/js/9627.6c769993.chunk.js:1:1521)`
- `[error] Failed to check projects due date: TypeError: Failed to fetch
    at http://100.121.252.85:3180/static/js/872.89f56c8c.chunk.js:1:89576`
- `[error] 🔔 NotificationsDropdown: Error fetching notification summary: TypeError: Failed to fetch
    at T (http://100.121.252.85:3180/static/js/505.03a7c875.chunk.js:1:76319)`
- `[error] Failed to fetch HR settings: TypeError: Failed to fetch
    at http://100.121.252.85:3180/static/js/9627.6c769993.chunk.js:1:1868`
- `[error] 🔔 NotificationsDropdown: Error fetching notification summary: TypeError: Failed to fetch
    at T (http://100.121.252.85:3180/static/js/505.03a7c875.chunk.js:1:76319)`
- `[error] Error fetching pending QA checks: TypeError: Failed to fetch
    at g (http://100.121.252.85:3180/static/js/9627.6c769993.chunk.js:1:17127)`

## Network issues
- `GET http://100.121.252.85:3180/api/notifications/stream?access_token=[redacted] — net::ERR_ABORTED`
- `GET http://100.121.252.85:3180/api/notifications/stream?access_token=[redacted] — net::ERR_ABORTED`
- `GET http://100.121.252.85:3180/api/notifications/stream?access_token=[redacted] — net::ERR_ABORTED`
- `GET http://100.121.252.85:3180/api/notifications/stream?access_token=[redacted] — net::ERR_ABORTED`
- `GET http://100.121.252.85:3180/api/notifications/stream?access_token=[redacted] — net::ERR_ABORTED`
- `GET http://100.121.252.85:3180/api/notifications/stream?access_token=[redacted] — net::ERR_ABORTED`
- `GET http://100.121.252.85:3180/api/notifications/stream?access_token=[redacted] — net::ERR_ABORTED`
- `GET http://100.121.252.85:3180/api/notifications/stream?access_token=[redacted] — net::ERR_ABORTED`
- `GET http://100.121.252.85:3180/api/notifications/stream?access_token=[redacted] — net::ERR_ABORTED`
- `GET http://100.121.252.85:3180/api/notifications/stream?access_token=[redacted] — net::ERR_ABORTED`
- `GET http://100.121.252.85:3180/api/notifications/stream?access_token=[redacted] — net::ERR_ABORTED`
- `GET http://100.121.252.85:3180/api/notifications/stream?access_token=[redacted] — net::ERR_ABORTED`
- `GET http://100.121.252.85:3180/api/notifications/stream?access_token=[redacted] — net::ERR_ABORTED`
- `GET http://100.121.252.85:3180/api/notifications/stream?access_token=[redacted] — net::ERR_ABORTED`
- `GET http://100.121.252.85:3180/api/notifications/stream?access_token=[redacted] — net::ERR_ABORTED`
- `GET http://100.121.252.85:3180/api/notifications/stream?access_token=[redacted] — net::ERR_ABORTED`
- `GET http://100.121.252.85:3180/api/dashboard/widgets/task-allocations — net::ERR_ABORTED`
- `GET http://100.121.252.85:3180/api/dashboard/widgets/staff-comms — net::ERR_ABORTED`
- `GET http://100.121.252.85:3180/api/employees/my-file — net::ERR_ABORTED`
- `GET http://100.121.252.85:3180/api/notifications/stream?access_token=[redacted] — net::ERR_ABORTED`
