2 REGRESSIONS in rentveh (Record Payment button flow, both browsers) — 1760 total, 860 passed, 758 failed, 142 skipped, 0 flaky

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

## Totals
**1760 total, 860 passed, 758 failed, 142 skipped, 0 flaky** (duration ~4h44m)

Baseline for comparison: test_reports/nightly_20260728.json (2026-07-28→29 IST) — 1760 total, 863 passed, 754 failed, 142 skipped, 1 flaky (see `project_pwa_test_coverage.md`).

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

`rentveh.spec.js` grew from its known 2 pre-existing failures to 6 (+4 instances / 2 new unique tests), on **both** android-chrome and desktop-chrome:

1. **`regular user (not TM/custodian) sees no Record Payment button`** — `Test timeout of 30000ms exceeded` (both browsers)
2. **`TM/custodian: Record Payment → custodian transfer prefilled (party, amount, CTH, narration)`** — `Test timeout of 30000ms exceeded` (both browsers)

`rentveh/index.html` has an uncommitted local change (`git status` shows `M rentveh/index.html`, plus stray `.bak-20260729-131315` / `.bak-20260729-173229` backup files in the same directory) — very likely the cause of these two new timeouts. Needs investigation before that file is committed/deployed.

Pre-existing failure, unchanged (not a regression, routine test-maintenance item, open since 2026-07-16→17):
- `SW cache version matches CACHE_VER in app` — spec still checks for `'rentveh-v3'`, shipped `sw.js` is `'rentveh-v5'` (both browsers)

## 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 |
| smoke.spec.js | 6 |
| client.spec.js | 4 |
| debug_tour.spec.js | 2 |
| hr.spec.js | 2 |
| **rentveh.spec.js** | **6 (was 2)** |

Every file above matches the established 20-night plateau exactly (byte-identical failure counts to 07-28→29) **except rentveh.spec.js**, which grew 2 → 6 failures (see REGRESSIONS above). `dispatch.spec.js` (14 failures) is unchanged — still the pre-existing `HUB_JWT_SECRET not set in environment` env gap, unfixed for a 3rd night. The 1 flaky test from 07-28→29 (dispatch claude_oauth phone-number test) did not recur tonight.

## Verdict detail

2 new unique test failures in rentveh.spec.js, both timeouts on the Record Payment button flow, on both browsers — flagged as regressions because they correlate with an uncommitted, in-progress local edit to `rentveh/index.html` (not yet part of any commit). All 26 other failing spec files are byte-identical in count to the prior night's plateau (20th consecutive night, root cause still the ~00:15–05:00 IST dev-stack unreachability, not yet ops-fixed).

## Action items
- Fix `HUB_JWT_SECRET` sourcing for `dispatch.spec.js` in the nightly runner (3rd night open).
- Bump `rentveh.spec.js`'s `SW_VER` constant from `v3` to `v5` (routine maintenance, long open).
- **NEW:** Investigate the uncommitted `rentveh/index.html` change — correlates with 2 new Record-Payment-button test timeouts on both browsers.
- Ops: confirm dev stack (server/DB/proxy) stays up through the ~00:15–05:00 IST nightly window — root cause of the 20-night failure plateau, still not fixed.

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