- Introduce safeClose() helper that ignores 'Target page, context or
browser has been closed' errors. When Hostinger LiteSpeed aborts a
connection (net::ERR_ABORTED), Playwright internally marks the context
as closed; the previous bare context.close() threw from inside catch,
propagating out and killing setup before remaining retries ran.
- MAX_ATTEMPTS 3 → 5 for more tolerance of burst throttle windows.
- Backoff changed from flat 15 s → exponential 5/10/20/40 s (75 s total).
- Worst-case timing: 5 × 90 s nav + 75 s backoff = ~525 s < 900 s job limit.
- Final-failure message explicitly names the LiteSpeed throttle hypothesis.
- Version bump 1.2.0 → 1.3.0.
Agent-Session: engineer-e2e-authfix-20260612
Merged ahead of the v0.19.3 dossier fix so staging smoke gates it.
QA: APPROVE qa-reviews/peptide-e2e/2026-06-12-0c5c301.md (re-head after conflict resolution)
Agent-Session: cto-dossier-403-hotfix-20260612
Guards the submenu-before-parent 404 class in the deploy gate.
QA: APPROVE-W-P2 qa-reviews/peptide-e2e/2026-06-12-113bb17.md
Agent-Session: cto-board-404-hotfix-merge-20260612