# Nightly Test Summary — run of 2026-07-15→16 (IST)

**762 FAILURES — 15th consecutive mass-failure night (same "server/DB/proxy unreachable" signature); 1 CONFIRMED REGRESSION: tour_pg matrix/2-opt 502 now fails on BOTH browser projects (was 1 yesterday) — tour-pg-proxy looks genuinely broken.**

- Report: `test_reports/nightly_20260715.json` (marker `date` says 20260715 — UTC-run-start-stamped as usual; run finished 2026-07-15T23:25:45Z = **2026-07-16 04:55:45 IST**, so it belongs to 2026-07-16 IST). exit_code 1.
- **Total 1706 · Passed 795 · Failed 762 · Skipped 148 · Flaky 1**
- Prior night (07-14→15): 1706 / 797 / 761 / 148 / 0 — tonight = that run + tour_pg failing on its 2nd project + 1 new flaky.

## REGRESSIONS vs baseline

Trusted baseline (2026-06-20, `project_pwa_test_coverage.md`) is **0 failed**, so all 762 failures are nominally regressions — but 760 of them are the same known "server/DB/proxy unreachable during the nightly window" pattern documented since 2026-07-02, with per-file failing counts identical to the prior three nights.

**1. CONFIRMED regression — `tour_pg.spec.js › matrix + 2-opt path for 14 stops`** — expected HTTP 200, got **502** on all 4 attempts (2 retries × both `desktop-chrome` AND `android-chrome`, each failing in ~160–250 ms). Yesterday this failed only on desktop-chrome and passed on android-chrome, and the summary said "recurrence would suggest a real tour-pg-proxy problem." It recurred and spread. This is now a real tour-pg-proxy defect (or a durable backend outage on its route), not a transient blip. **Action: check the tour-pg-proxy service/container health.**

**2. NEW flaky — `rentveh.spec.js › submit → row lands in DB with payable amount`** [desktop-chrome] — first attempt asserted payable amount: expected **4000**, received **2200**; passed on retry. Could be stale seed data or a race in payable calculation. Watch for recurrence.

## Error signatures (per result instance, incl. retries)

888 timeouts · 380 × 404 (raw Apache HTML where manifest.json/sw.js expected) · 189 assertion mismatches · 8 × PostgREST 406 · 4 × 502 (all four = the tour_pg regression) · 56 other. **No browser-binary (`Executable doesn't exist`) errors.**

## Failing spec files (27 files, failure counts per spec)

154 fundcustodian · 78 sales_billing · 74 vendors · 68 upi_pay · 50 customers · 44 recce · 40 custodian · 32 recce_client · 32 sales · 28 safe_bottom · 26 stores · 18 counters · 18 yagya-portfolio · 14 contacts · 10 finance · 10 installation · 10 learn · 10 tour_planner · 8 hub · 8 oc_admin · 8 vrs · 6 admin · 6 smoke · 4 client · 2 debug_tour · 2 rentveh · **2 tour_pg (was 1 — REGRESSION)**

Still fully green: printing, activity, drive_consolidator, tour_pg_sharing, hr, expense, dispatch, production, vehicle, btl.

## Sample failing tests (first 20, unique)

1. tour_pg.spec.js › matrix + 2-opt path for 14 stops **(REGRESSION — 502 on both projects)**
2. admin.spec.js › client.accounts has zone and is_head columns
3. admin.spec.js › client.zones table exists and is accessible via PostgREST
4. admin.spec.js › sales.jobs has zones column (ADR-111: sales.jobs is canonical)
5. client.spec.js › manifest.json returns 200
6. client.spec.js › sw.js contains current 360client version
7. contacts.spec.js › Dexie offline DB used
8. contacts.spec.js › Top Management access control in place
9. contacts.spec.js › auth screen and app container present
10. contacts.spec.js › hub navigation button present
11. contacts.spec.js › manifest.json returns 200
12. contacts.spec.js › search and contact list elements present
13. contacts.spec.js › sw.js is versioned
14. counters.spec.js › Phase 4.0a — legacy public path blocked + signed proxy URL serves the same file
15. counters.spec.js › Phase 4.12 — admin_list_audit date range + prune RPCs gating + count
16. counters.spec.js › Phase 4.14 — admin_audit_stats: shape + supervisor gate + counts match seeded events
17. counters.spec.js › Phase 4.17 — comments modal + RPCs referenced
18. counters.spec.js › Phase 4.17 — recce comments: both directions + visibility gate + trigger fan-out
19. counters.spec.js › Phase 4.5 — admin RPCs gate non-supervisors + full create-invite-revoke chain
20. counters.spec.js › Phase 4.6 — official trigger fans out + dispatch_notify → mail_outbox + supervisor RPCs

## Note

The partial-recovery plateau (760 outage-family failures) holds for a 4th straight night — the same subset of the stack (PostgREST/DB-backed routes + several PWA vhosts) is unreachable during the ~00:15–04:55 IST window. Still needs the human/ops uptime fix. Not re-baselined. The tour_pg 502 is separate from the plateau (fast 502 responses, not timeouts/404s) and now needs its own investigation.
