1 REGRESSION — tour_pg 502 is back (previously resolved for 3 nights) — 1760 total, 858 passed, 760 failed, 142 skipped, 0 flaky

## Run identification
- Source: test_reports/nightly_20260730.json
- Marker: test_reports/nightly_marker.json → `date: 20260730`, `finished_at: 2026-07-30T23:32:39Z` = **2026-07-31 05:02:39 IST** — this is tonight's (2026-07-31 IST) run. The marker `date` field is UTC-run-start-stamped, not IST (known, longstanding labeling quirk).

## Totals
**1760 total, 858 passed, 760 failed, 142 skipped, 0 flaky** (duration ~4h47m)

Baseline for comparison: test_reports/nightly_20260729.json (2026-07-29→30 IST) — 1760 total, 860 passed, 758 failed, 142 skipped, 0 flaky (see `project_pwa_test_coverage.md`).

## REGRESSIONS (new vs baseline — not part of the known outage plateau)

**`tour_pg.spec.js › matrix + 2-opt path for 14 stops`** — 502 on both `android-chrome` and `desktop-chrome`. This bug was first confirmed 2026-07-15→16, held through 2026-07-17→18, then showed **0 failures for 3 straight nights** (07-27→28, 07-28→29, 07-29→30) and was being watched as "possibly fixed." Tonight it recurred on both browsers — treat as a durable re-regression in tour-pg-proxy, not a one-off blip.

Pre-existing failures, unchanged (not new tonight):
- `dispatch.spec.js` — 14 failures, still `HUB_JWT_SECRET not set in environment` (4th night open).
- `rentveh.spec.js` — 6 failures, still the stale `SW_VER` (`v3` vs shipped `v5`) plus the 2 Record-Payment-button timeouts first seen 07-29→30, correlating with the still-uncommitted local edit to `rentveh/index.html` (git status still shows it modified tonight).

## Failures by spec file (tonight)

| File | Failed |
|---|---|
| fundcustodian.spec.js | 154 |
| sales_billing.spec.js | 78 |
| vendors.spec.js | 74 |
| upi_pay.spec.js | 68 |
| customers.spec.js | 50 |
| custodian.spec.js | 40 |
| recce_client.spec.js | 32 |
| recce.spec.js | 32 |
| sales.spec.js | 32 |
| safe_bottom.spec.js | 28 |
| stores.spec.js | 26 |
| counters.spec.js | 18 |
| yagya-portfolio.spec.js | 18 |
| contacts.spec.js | 14 |
| dispatch.spec.js | 14 |
| finance.spec.js | 10 |
| installation.spec.js | 10 |
| tour_planner.spec.js | 10 |
| hub.spec.js | 8 |
| oc_admin.spec.js | 8 |
| vrs.spec.js | 8 |
| admin.spec.js | 6 |
| rentveh.spec.js | 6 |
| smoke.spec.js | 6 |
| client.spec.js | 4 |
| **tour_pg.spec.js** | **2 (was 0)** |
| debug_tour.spec.js | 2 |
| hr.spec.js | 2 |

Every file above matches the established plateau exactly (byte-identical to 07-29→30) **except tour_pg.spec.js**, which went 0 → 2 (both projects) — see REGRESSIONS above.

## Verdict detail

Delta vs last night is fully explained by the tour_pg re-regression: -2 passed, +2 failed, all 27 other spec files flat. Root cause of the underlying ~760-failure plateau is unchanged: the "server/DB/proxy partially unreachable" signature (`manifest.json returns 200` → 404 raw HTML, PostgREST checks → 406, dashboards timing out) during the ~00:15–05:00 IST nightly window — 21st consecutive night, still not ops-fixed.

## Action items
- **NEW:** Investigate tour-pg-proxy 502 — recurred tonight after 3 clean nights; do not mark as fixed again without confirming 2+ more clean nights.
- Fix `HUB_JWT_SECRET` sourcing for `dispatch.spec.js` in the nightly runner (4th night open).
- Bump `rentveh.spec.js`'s `SW_VER` constant from `v3` to `v5` (routine maintenance, long open).
- Investigate the still-uncommitted `rentveh/index.html` change before it's committed (correlates with 2 Record-Payment-button test timeouts, open since 07-29→30).
- Ops: confirm dev stack (server/DB/proxy) stays up through the ~00:15–05:00 IST nightly window — root cause of the 21-night failure plateau, still not fixed.

Full previous-night context: test_reports/nightly_summary_20260729.md.
