✔ old business response is discarded when the active membership changes (1.698792ms) ✔ private calls carry business context but session discovery can detect another-tab switch (0.295833ms) ✔ failed write retains retry id, while an account switch clears it (3.801667ms) ✔ portal requests are independent of staff context changes (1.251792ms) ✔ private image response is discarded across an account switch (0.701041ms) ✔ private image lease is revoked on context change and release is idempotent (2.287417ms) ✔ staff switch does not revoke a customer portal image (0.665542ms) ✔ upload retry identity includes bytes, not just endpoint (4.949ms) ✔ opening another preview does not announce an account switch; login does (1.089417ms) ✔ private PDF arriving after a customer session switch is discarded before download (0.219791ms) ✔ private PDF uses business context and only downloads confirmed PDF responses (13.501292ms) ✔ customer CSV cannot download after an owner business switch (0.175208ms) ✔ customer CSV enforces type and downloads the safe filename with credentials and business scope (0.3525ms) ✔ Week and day navigation cross months, years and UK clocks without shifting dates (6.424583ms) ✔ Midnight endings are exclusive while all-day end dates are inclusive (0.09ms) ✔ Repeated UK hour shows distinguishable summer and winter clock labels (27.824625ms) ✔ matching contacts never select identity; inactive records cannot be transfer choices (1.79325ms) ✔ confirmation uses the exact preview rather than later selection and preserves false acknowledgement (0.079167ms) ✔ export filter is encoded and completion rows contain only explicitly selected exact evidence (0.1455ms) ✔ fractional lines round half up in integer pence before subtotal and VAT (1.015292ms) ✔ percentage deposit rounds half up and leaves the exact remaining pence (0.456542ms) ✔ invalid deposit percentages and sub-penny deposits are rejected (0.582417ms) ✔ stage editing cannot silently drop or add a penny (0.341208ms) ✔ selection rejects unsafe names, empty and oversized files but accepts supported size boundaries (1.340667ms) ✔ selection checks image signatures instead of trusting extensions or declared MIME (0.785625ms) ✔ visitor sends without cookies; a successful result exposes no receipt or private references (3.532292ms) ✔ concurrent clicks coalesce into one logical request (0.613916ms) ✔ lost response retains exact payload/key; edits are blocked until the unchanged retry succeeds (1.687125ms) ✔ a stalled request times out and retries the identical logical enquiry (11.699834ms) ✔ ambiguous HTTP 408 retains the logical operation (1.715709ms) ✔ ambiguous HTTP 500 retains the logical operation (0.407125ms) ✔ ambiguous HTTP 503 retains the logical operation (0.266583ms) ✔ malformed success is uncertain and never produces a successful-looking enquiry (0.568667ms) ✔ validation error allows correction without discarding the selected files or date (0.219042ms) ✔ a deliberately separate matching-contact enquiry has a new operation identity (0.131292ms) ✔ public permission defaults to no projection and no rating (0.685166ms) ✔ approved statement retains exact customer text (0.071167ms) ✔ approval requires explicit boolean and nonempty exact fields (1.647833ms) ✔ projection bounds are enforced (0.155541ms) ✔ unconfirmed response does not produce a payload (0.306708ms) ✔ response keeps private answers separate from optional publication (0.129458ms) ✔ all four ratings and recommendation require a deliberate valid choice (0.382125ms) ✔ publication uses the exact current approved preview hash and version (0.112916ms) ✔ the repeated autumn hour requires the selected actual offset (25.077792ms) ✔ spring clock gap and seasonally incorrect offsets are rejected (0.418291ms) ✔ London date and intervals remain the same on a computer in another timezone (0.504583ms) ✔ incomplete, reversed and zero-duration correction inputs are rejected before saving (0.411542ms) ✔ customer price starts blank and no private source details become a document line (0.08ms) ✔ timer display permits long captures but never negative elapsed time (0.075375ms) ✔ quoted commas, multiline text, escaped quotes, CRLF and blank lines (1.772584ms) ✔ auto mapping and preview require explicit valid prices; no NaN/default repairs (0.817542ms) ✔ column mapping, row limits, reviewed price overrides and invalid costs (1.303167ms) ✔ reopened saved rows and reordered object fields are clean (0.597041ms) ✔ equivalent valid price and quantity spellings do not create unsaved changes (0.597625ms) ✔ every catalogue edit is protected and reverting to saved values is clean (0.184584ms) ✔ blank optional prices, zero and invalid numeric input remain distinct (0.146792ms) ✔ job selection, purchasing dates, notes and applied previous-price values are protected (0.135083ms) ✔ supplier reference edits, additions and removals are protected (0.144042ms) ✔ catalogue selection and CSV mapping or programmatic overrides are protected (0.187917ms) ✔ a persisted changed price becomes a clean reopened baseline (0.062333ms) ✔ comparison pairs render before then after without changing stored order (0.71ms) ✔ reorder preserves identity and bounds (0.131417ms) ✔ public drafts and selected photos start with fresh public text (2.468584ms) ✔ response binds to displayed version and saved snapshot with deliberate confirmation (1.652542ms) ✔ expired quote cannot produce a response payload (0.15275ms) ✔ superseded quote cannot produce a response payload (0.727667ms) ✔ draft quote cannot produce a response payload (0.102458ms) ✔ already accepted quote cannot produce a response payload (0.110209ms) ✔ declined quote cannot produce a response payload (0.28425ms) ✔ missing snapshot review is rejected (0.1065ms) ✔ PDF links remain private and scoped to exact document or stage (0.097542ms) ✔ a preview never requests private draft content without valid matching owner access (2.846792ms) ✔ draft preview loads once under exact owner access; valid checks do not replace its saved content (2.180875ms) ✔ owner context changes clear a loaded preview while customer context changes do not (1.000792ms) ✔ preview invalidates changed owner context slug (0.84975ms) ✔ preview invalidates changed owner context role (0.839833ms) ✔ preview invalidates changed owner context membership_id (0.854375ms) ✔ preview invalidates changed owner context csrf (0.723375ms) ✔ unavailable preview validation clears access and does not reload draft content (0.697834ms) ✔ logout during an initial draft load prevents its late response from exposing content (0.662834ms) ✔ preview deadline fails closed, coalesces checks and ignores late success (0.570667ms) ✔ closing a preview cancels listeners and ignores a pending load without reporting lost access (0.51575ms) ✔ feedback validation is request-only and valid checks never replace draft inputs (1.977167ms) ✔ contact, transfer and feedback changes revalidate without broadcasting codes or private answers (1.589833ms) ✔ feedback validation failure 401 clears only the request view (0.731959ms) ✔ feedback validation failure 404 clears only the request view (0.521041ms) ✔ feedback validation failure 503 clears only the request view (0.505708ms) ✔ feedback checks coalesce, time out closed and cannot revive a view with a late result (0.53ms) ✔ stopped feedback checks ignore a late rejection and release all timers and listeners (0.480834ms) ✔ portal 401 clears private context and image leases, rejects old work and preserves staff access (0.9465ms) ✔ public credential errors and another customer document 404 do not end a valid portal context (0.518333ms) ✔ focus, visibility and visible periodic checks preserve a valid context without resetting forms (0.589125ms) ✔ owner revoke, reissue, contact update and legacy rotation revalidate without blindly signing out (1.166042ms) ✔ another-tab access notice checks the active account and clears it only when validation fails (0.676084ms) ✔ customer identity changes clear old content even if the browser cookie now authenticates successfully (0.519125ms) ✔ business identity changes clear old content even if the browser cookie now authenticates successfully (0.438542ms) ✔ unreachable validation fails closed and overlapping focus checks coalesce (0.485875ms) ✔ validation deadline clears content and a late successful response cannot restore it (0.430459ms) ✔ stopping a watcher removes its deadline and ignores a late successful identity result (0.419708ms) ✔ apiImage clears current portal content on 401 but an old response cannot clear a newer session (0.3865ms) ✔ downloadPrivate clears current portal content on 401 but an old response cannot clear a newer session (0.361833ms) ✔ switching between week and month rules keeps valid explicit choices (1.609167ms) ✔ all-day conversion clears incompatible clock inputs (0.090416ms) ✔ single visit proposal retains original identity and requires fresh acknowledgement (0.064375ms) ✔ booking edits send booleans and exclude server and history fields (0.084458ms) ✔ suggested window is inclusive and bounded through DST (0.077041ms) ✔ month views include leap days and cross-year navigation (0.151083ms) ✔ range rejects reversed or over-62-day windows (0.100584ms) ✔ weekly windows and DST remain London calendar dates (0.05875ms) ✔ excluded placeholder can propose a reviewed single-date override without assuming a booking (0.097834ms) ✔ new request, edited filter, context change and unmount reject late success and failure (2.85725ms) ✔ drills use exact customer/resource IDs and one metric, never matching names or allocating money (0.315334ms) ✔ supporting row pages disclose full totals and do not lose the final partial page (0.190708ms) ✔ exports bind applied filters and exact snapshot, not draft input; time displays exact minutes (0.92ms) ✔ service enquiry uses only the exact published business service and keeps its canonical title (0.4305ms) ✔ reordering is bounded, preserves identities and leaves the saved array untouched (0.3435ms) ✔ new page starts unpublished with independent editable content (2.043292ms) ✔ page and service routes resolve exactly and links retain the business prefix (0.099292ms) ✔ light and dark branding retain a contrasting button text colour (0.09075ms) ✔ ready reviews exclude closed, snoozed and ineligible history (0.378666ms) ✔ snooze expiry uses the server effective state (0.074334ms) ✔ only preparation writes a draft and only snooze writes its date (0.084709ms) ✔ review confirmation is not inferred from a filled draft (0.399375ms) ✔ tag input retains duplicates for server validation (0.359375ms) ✔ all established workspace labels remain reachable alongside new sections (0.074875ms) ℹ tests 125 ℹ suites 0 ℹ pass 125 ℹ fail 0 ℹ cancelled 0 ℹ skipped 0 ℹ todo 0 ℹ duration_ms 169.877167