18th consecutive mass failure — plateau holds exactly, no regressions, no changes vs last night.

## Verdict
NO REGRESSIONS — 826 passed, 742 failed, 140 skipped (1708 total), numerically identical to the 2026-07-17→18 run. Same known "server/DB/proxy unreachable" failure family, plus the two known persistent issues (tour_pg 502, rentveh stale SW_VER), both still present and unchanged.

## Run info
- Report file: test_reports/nightly_20260718.json
- Marker: date field `20260718` (UTC-run-start-stamped, as every prior night) — run started 2026-07-18T18:45:04.914Z, finished ~2026-07-19T04:54 IST. This is the expected nightly run for 2026-07-19 IST.
- Stats: expected (passed) 826, skipped 140, unexpected (failed) 742, flaky 0, total 1708.

## Comparison vs baseline
Baseline is the 2026-06-20 clean run in `project_pwa_test_coverage.md`: ~1220+ tests, 186 skipped, **0 failed**. Tonight's 742 failures are part of the same ongoing outage-signature plateau documented every night since 2026-07-02 (18 consecutive nights) — **not** re-baselined; the 2026-06-20 numbers remain the trusted regression baseline per the memory file's explicit instruction.

Compared to the immediately preceding night (2026-07-17→18: 826 passed / 742 failed / 140 skipped / 1708 total): **zero change** in every count. Per-file failure counts are also identical:

fundcustodian 154, sales_billing 78, vendors 74, upi_pay 68, customers 50, custodian 40, recce_client 32, recce 32, sales 32, safe_bottom 28, stores 26, counters 18, yagya-portfolio 18, contacts 14, finance 10, installation 10, tour_planner 10, hub 8, oc_admin 8, vrs 8, admin 6, smoke 6, client 4, debug_tour 2, hr 2, rentveh 2, tour_pg 2.

No new failing spec files, no newly-fixed spec files. Green set unchanged: printing, activity, drive_consolidator, hr (app tests), expense, dispatch, production, vehicle, btl, tour_pg_sharing.

## Known persistent issues (unchanged, still present)
1. `tour_pg.spec.js › matrix + 2-opt path for 14 stops` — still fails on both desktop-chrome and android-chrome (`toBe` equality mismatch), 6th night running.
2. `rentveh.spec.js › SW cache version matches CACHE_VER in app` — still fails on both projects (`toContain` mismatch, stale `SW_VER` constant `v3` vs shipped `v5`), routine test-maintenance item, still pending.

## Top error signatures (failure-instance counts, not unique tests)
- 312 × `toContain` assertion mismatch
- 244 × `toBeVisible()` mismatch
- 220 × `toBe` equality mismatch
- 204 × timeout (30000ms) in `beforeEach` hook
- 140 × timeout (30000ms) in test body
- 76 × `toContainText` mismatch
- 40 × `toHaveClass` mismatch
- 40 × `not.toHaveText` mismatch
- 32 × `page.waitForSelector` timeout (8000ms)
- 28 × `toMatch` mismatch
- 20 × `toBeGreaterThanOrEqual` mismatch
- 20 × `toHaveCount` mismatch
- 16 × `TypeError: Cannot read properties of undefined (reading 'status')`
- 12 × `toBeTruthy()` mismatch
- 8 × `toEqual` mismatch

Failure signatures match the established "server/DB/proxy unreachable during the ~00:15–05:00 IST window" pattern (manifest.json/sw.js returning raw HTML instead of the app shell, PostgREST checks failing) documented on every one of the prior 17 nights.

## Failing spec files (27, first 20 unique failing test titles)
- admin.spec.js — client.zones table exists and is accessible via PostgREST
- admin.spec.js — client.accounts has zone and is_head columns
- admin.spec.js — sales.jobs has zones column (ADR-111: sales.jobs is canonical)
- client.spec.js — manifest.json returns 200
- client.spec.js — sw.js contains current 360client version
- contacts.spec.js — manifest.json returns 200
- contacts.spec.js — sw.js is versioned
- contacts.spec.js — auth screen and app container present
- contacts.spec.js — hub navigation button present
- contacts.spec.js — search and contact list elements present
- contacts.spec.js — Dexie offline DB used
- contacts.spec.js — Top Management access control in place
- counters.spec.js — Phase 4.17 — comments modal + RPCs referenced
- counters.spec.js — Phase 4.5 — admin RPCs gate non-supervisors + full create-invite-revoke chain
- counters.spec.js — Phase 4.0a — legacy public path blocked + signed proxy URL serves the same file
- counters.spec.js — Phase 4.6 — official trigger fans out + dispatch_notify → mail_outbox + supervisor RPCs
- counters.spec.js — Phase 4.7 — audit log: consume_invite logs login, client_log_view logs view, client_set_response logs response, supervisor RPC gated + filterable
- counters.spec.js — Phase 4.8 — sessions: list_my_sessions / revoke_my_session / revoke_all_other_sessions / admin_list_sessions / admin_revoke_session
- counters.spec.js — Phase 4.12 — admin_list_audit date range + prune RPCs gating + count
- counters.spec.js — Phase 4.14 — admin_audit_stats: shape + supervisor gate + counts match seeded events

(371 unique failing tests total across 27 spec files, spread across desktop-chrome/android-chrome projects — full list omitted per max-20 instruction.)

## Baseline memory file
No update made — pass/fail counts are unchanged vs the last recorded entry (2026-07-17→18), so nothing new to append per the "only update if counts changed" rule. The ongoing-outage narrative in `project_pwa_test_coverage.md` already covers this pattern through last night; a fresh append documenting this exact-plateau night is optional and was skipped to avoid a duplicate no-op entry.
