✔ old business response is discarded when the active membership changes (2.085041ms) ✔ private calls carry business context but session discovery can detect another-tab switch (0.227042ms) ✔ failed write retains retry id, while an account switch clears it (5.162125ms) ✔ portal requests are independent of staff context changes (0.168084ms) ✔ private image response is discarded across an account switch (1.241875ms) ✔ private image lease is revoked on context change and release is idempotent (0.54625ms) ✔ staff switch does not revoke a customer portal image (0.15375ms) ✔ upload retry identity includes bytes, not just endpoint (4.316167ms) ✔ opening another preview does not announce an account switch; login does (1.822125ms) ✔ private PDF arriving after a customer session switch is discarded before download (0.221542ms) ✔ private PDF uses business context and only downloads confirmed PDF responses (27.716667ms) ✔ Week and day navigation cross months, years and UK clocks without shifting dates (6.843292ms) ✔ Midnight endings are exclusive while all-day end dates are inclusive (0.222917ms) ✔ Repeated UK hour shows distinguishable summer and winter clock labels (34.568416ms) ✔ fractional lines round half up in integer pence before subtotal and VAT (1.117458ms) ✔ percentage deposit rounds half up and leaves the exact remaining pence (0.661792ms) ✔ invalid deposit percentages and sub-penny deposits are rejected (0.690709ms) ✔ stage editing cannot silently drop or add a penny (0.395667ms) ✔ public permission defaults to no projection and no rating (1.33025ms) ✔ approved statement retains exact customer text (0.084459ms) ✔ approval requires explicit boolean and nonempty exact fields (0.116292ms) ✔ projection bounds are enforced (0.103917ms) ✔ unconfirmed response does not produce a payload (0.135416ms) ✔ response keeps private answers separate from optional publication (0.167875ms) ✔ all four ratings and recommendation require a deliberate valid choice (0.182416ms) ✔ publication uses the exact current approved preview hash and version (0.142417ms) ✔ the repeated autumn hour requires the selected actual offset (41.867542ms) ✔ spring clock gap and seasonally incorrect offsets are rejected (0.614875ms) ✔ London date and intervals remain the same on a computer in another timezone (1.076958ms) ✔ incomplete, reversed and zero-duration correction inputs are rejected before saving (0.945333ms) ✔ customer price starts blank and no private source details become a document line (0.174792ms) ✔ timer display permits long captures but never negative elapsed time (0.093708ms) ✔ quoted commas, multiline text, escaped quotes, CRLF and blank lines (2.01125ms) ✔ auto mapping and preview require explicit valid prices; no NaN/default repairs (0.910042ms) ✔ column mapping, row limits, reviewed price overrides and invalid costs (1.010916ms) ✔ reopened saved rows and reordered object fields are clean (1.154542ms) ✔ equivalent valid price and quantity spellings do not create unsaved changes (0.695459ms) ✔ every catalogue edit is protected and reverting to saved values is clean (0.283709ms) ✔ blank optional prices, zero and invalid numeric input remain distinct (0.19425ms) ✔ job selection, purchasing dates, notes and applied previous-price values are protected (0.1965ms) ✔ supplier reference edits, additions and removals are protected (0.164042ms) ✔ catalogue selection and CSV mapping or programmatic overrides are protected (0.142791ms) ✔ a persisted changed price becomes a clean reopened baseline (0.063458ms) ✔ comparison pairs render before then after without changing stored order (0.838125ms) ✔ reorder preserves identity and bounds (0.095125ms) ✔ public drafts and selected photos start with fresh public text (1.929875ms) ✔ response binds to displayed version and saved snapshot with deliberate confirmation (0.84125ms) ✔ expired quote cannot produce a response payload (0.069083ms) ✔ superseded quote cannot produce a response payload (0.485958ms) ✔ draft quote cannot produce a response payload (0.044417ms) ✔ already accepted quote cannot produce a response payload (0.048208ms) ✔ declined quote cannot produce a response payload (0.03625ms) ✔ missing snapshot review is rejected (0.078042ms) ✔ PDF links remain private and scoped to exact document or stage (0.079875ms) ✔ switching between week and month rules keeps valid explicit choices (1.763291ms) ✔ all-day conversion clears incompatible clock inputs (0.112875ms) ✔ single visit proposal retains original identity and requires fresh acknowledgement (0.108666ms) ✔ booking edits send booleans and exclude server and history fields (0.133042ms) ✔ suggested window is inclusive and bounded through DST (0.098333ms) ✔ month views include leap days and cross-year navigation (0.169625ms) ✔ range rejects reversed or over-62-day windows (0.102041ms) ✔ weekly windows and DST remain London calendar dates (0.062833ms) ✔ excluded placeholder can propose a reviewed single-date override without assuming a booking (0.099041ms) ✔ reordering is bounded, preserves identities and leaves the saved array untouched (0.6715ms) ✔ new page starts unpublished with independent editable content (2.614334ms) ✔ page and service routes resolve exactly and links retain the business prefix (0.105958ms) ✔ light and dark branding retain a contrasting button text colour (0.092167ms) ℹ tests 67 ℹ suites 0 ℹ pass 67 ℹ fail 0 ℹ cancelled 0 ℹ skipped 0 ℹ todo 0 ℹ duration_ms 143.087917