PL–01 / assertion evidence
Freeze the failure.
Keep the journey moving.
A tiny Playwright fixture that captures the visual, DOM, console, and network state at each failed soft assertion—not at the end of the test.
- Local only
- Scrubbed first
- Zero runtime dependencies
01 / The evidence gap
The report shows where the test ended. You need where it broke.
A soft assertion lets a critical journey continue. That is useful—until the page changes three more times and the final trace no longer shows the broken cart, stale price, or silent JavaScript error.
- AssertRun your normal Playwright assertion.
- FreezeOn failure, scrub and capture immediately.
- ContinueRegister a soft failure; keep the journey running.
02 / Live receipt specimen
One failure. Five useful clues.
Choose a checkpoint to inspect the evidence an engineer receives. Arrow keys move between checkpoints.
Journey coordinates
Scrubbed before captureFields, selectors, query strings, and credentials stay out.
Assertion failed · evidence frozen
Cart count increments
Viewport
42 KB · maskedSignals
bounded- DOM
- data-count="0"
- ARIA
- status “0 items”
- Console
- TypeError × 1
- Network
- POST /cart · 200
Checkpoint 2 of 3: failed assertion evidence selected.
03 / Every receipt includes
Enough state to diagnose. Not enough to become a data leak.
- 01
Masked viewport
Current viewport, with every form control and configured selector covered before pixels are captured.
- 02
Scrubbed DOM + ARIA
A selected subtree with values removed, capped by bytes, paired with its accessibility shape.
- 03
Console errors
The bounded warnings and errors that led up to the assertion, with detected secrets redacted.
- 04
Network metadata
Method, redacted path, type, status, and duration. Bodies, headers, queries, and fragments never enter the file.
- 05
Assertion context
Test, project, page, timestamp, and the failure message, frozen into one portable HTML receipt.
04 / Field installation
Wrap only the assertions that matter.
Use regular expect inside receipt.soft. The helper freezes evidence, then records a real Playwright soft failure so your test can continue.
// fixtures.ts
import { createReceiptTest, expect } from 'journey-failure-receipts/playwright';
export const test = createReceiptTest({
maskSelectors: ['[data-private]'],
domSelector: 'main',
});
// journey.spec.ts
test('add to cart', async ({ page, receipt }) => {
await receipt.soft('Cart count increments', async () => {
await expect(page.getByTestId('cart-count')).toHaveText('1');
});
});
PL–05 / ready for CI
Stop rerunning journeys just to see what already happened.
Free, MIT licensed, and local by default.
No account. No upload. No lock-in.