Payment Failure Recovery Patterns
Retry Review
A static retry payment review shows INV-2048, $24.00, Retry not started, and Review only status.
Program
Retry payment reviews should show invoice, amount, and attempt state before a retry starts.
retry_payment_review.html
Visuals: captured from real browser rendering
<section class="retry-review" aria-labelledby="retry-review-title"><h2 id="retry-review-title">Retry payment review</h2><dl>
<div><dt>Invoice</dt><dd>INV-2048</dd></div>
<div><dt>Amount</dt><dd>$24.00</dd></div><div><dt>Attempt</dt><dd>Retry not started</dd></div>
<div><dt>Status</dt><dd><span class="badge">Review only</span></dd></div></dl>
<p class="check">Learner check: the retry details are visible before any retry begins.</p>
<p class="note">Static retry review only; no payment processor, billing API, card charge, retry queue, invoice mutation, storage, route, API, network, script, form submit, analytics, timers, or live retry runs.</p></section>
<style>
.retry-review { display: grid; gap: 10px; max-width: 38rem; border: 1px solid #1d4ed8; padding: 12px; background: #eff6ff; }
.retry-review dl { display: grid; gap: 8px; margin: 0; }
.retry-review dl div { display: grid; grid-template-columns: 8rem 1fr; gap: 8px; }
.retry-review dt { color: #475569; }
.retry-review dd, .check, .note { margin: 0; }
.badge { border-radius: 999px; background: #dbeafe; padding: 2px 8px; }
.note { color: #475569; }
</style>
Label the retry review.

The section is labelled by its visible heading. Show invoice row.

The invoice id is exact pinned data. Show amount and attempt.

The amount and attempt state are exact pinned data. Render review-only status.

The status badge says this is review only. Check retry readback.

The check says retry details are visible before any retry begins. Check retry honesty.

Invoice, amount, attempt, status, and no live retry.
step flow
step(1) labels the source, step(2) shows the invoice, step(3) shows amount and attempt, step(4) shows review-only status, step(5) checks the retry readback, and step(6) checks the honesty note.
retry readback
The section heading names the retry payment review surface.
retry rows
Invoice, Amount, Attempt, and Status values are exact pinned data.
no live retry
The lesson should not imply payment processors, billing APIs, card charges, retry queues, invoice mutations, storage, routes, APIs, networks, scripts, form submits, analytics, timers, or live retry.