A cancelled tour on the leasing rail

Gera: “People like this, they cancelled the tour but we don’t see that in the leasing progress… it should go to like the small little line saying tour cancelled.”

PR #6533 · rendered from the real ProspectDetailClient with fixture prospects — no data source, no live records.

What you are looking at

Three prospects, same component, rendered in Chromium. The first is the case Gera described: booked a tour, cancelled it, then applied. The third is the control — a lead who never toured — which is what stops the fix from quietly becoming “always reached”.

Three leasing progress rails: booked-cancelled-applied, cancelled at the tour stage, and a control that never toured
Top: Tour reads Reached Jun 28 with its own red Cancelled marker. Middle: the same marker before the prospect moves on. Bottom: no marker, Tour still reads Not yet.

Two defects these pixels caught

The rail contradicted itself. Before the fix, the top case rendered a grey “Tour · Not yet” bar with a red “Cancelled” marker immediately beside it. Cancelling nulls tourId, and resolveForwardStage deliberately keeps an already-advanced prospect at their current stage, so every input to the reach rule said “never toured”. A cancelled tour is evidence the journey passed the milestone — TOUR_STAGES has always agreed.

The word was being painted over. The marker shipped at the full stage type size with the full stage pill gutter (12px each side) inside a column half a stage wide. “Cancelled” came out 89px of label in a ~48px lane, reaching 21px into the next step’s box — and when that step was the current one, its opaque selected pill covered the end of the word. The rail read “Cancelle”, for exactly the prospect the marker exists for. No test could see it; the screenshot could.

Measured, not eyeballed

Read off live layout in the same browser run, per case:

CaseTour node fillTour metaCancelled marker
Booked → cancelled → appliedbrandReached Jun 28yes
Cancelled, still at TourbrandReached Jun 28yes
CONTROL — never touredneutralNot yetno

Label-box overlap with the next step fell from 21px to 3px — and the 3px that remain are the neighbour’s own padding, not its text or its painted pill.

What is fixture, and why that matters

Every prospect here is synthetic: one placeholder name, one 555 number, one unit. Nothing was captured from a live data source, so there is no chain of custody to stamp and no real person in the frame. That is a deliberate trade — this artifact proves component behaviour under known inputs, which is what the two defects above were. It does not prove anything about production data.

PropFlow Docs