The work-order label names a group, not a row. This is what the page shows instead of picking one at random.
23 Oct 2026 · branch fix/wo-displayid-collision-chooser · captured against propflow-stage · at 420fb3e9b80+local
Data note. Every name and balance below comes from propflow-stage, which is anonymized by construction (ADR-0097/0110 — phones in the impossible +1000 NPA, emails @example.test). The identical capture against prod would carry real tenants' names and balances and is not safe to attach anywhere, which is why the generator refuses to run against one.
The worst collision on the mirror: seven work orders on one service request, all raised the same day, in the same home, with the same status. Before this change the page silently showed one of them and nothing said the other six existed.
This capture is also why the build spec's clip budget was wrong. The spec said to reuse WORK_ORDER_TITLE_MAX_CHARS (60). These seven rows share their first 60 characters, so at 60 the chooser renders seven identical rows — the defect it exists to remove. The numbered tails below only appear because the budget is now 180.
Asserted in the captured DOM — work orders share this number · Pick the one you mean. · 2. Heat register in bathroom · 7. Bathroom sink faucet does not flow, just sprays. · 1. Broken toilet seat. Both numbered tails sit past character 60, so a 60-char clip cannot render them. Their presence IS the clip-budget evidence.
The common shape, and why the list is oldest-first rather than by home. These four rows are one ceiling repair across three weeks: the air conditioner, the ceiling bubbling, the second coat of mud, the third. Every multi-row group on the mirror shares one home, so sorting by home ordered nothing.
Each date renders through TimeText in the building's zone, passed explicitly because this page mounts no timezone provider.
Asserted in the captured DOM — work orders share this number · Pick the one you mean. · Air Conditioner · Second coat of mud on ceiling · 3rd coat of mud. The four lines in the order the page renders them. A newest-first list would read the repair backwards.
The chooser's fourth link, followed. This is the half that could not be split from the chooser: the detail page re-polls every five seconds and every write button posts to a door that resolves by the label, so without the row threaded through all eleven of them this page would have shown the third coat of mud and then quietly become the first job about five seconds later — and Mark complete would have closed that first job instead.
The page here is the ordinary work-order detail view, unchanged, for the row that was picked.
Asserted in the captured DOM — MORS-5931. The chosen row's own detail page. The label in the header is unchanged — the ruling kept it, and no URL breaks.
The control that makes the three captures above mean something. This label names exactly one work order, so it must render the ordinary detail page and no chooser — same building, same company, same reader. If the chooser appeared here, the collision test would be matching something other than a collision.
Asserted in the captured DOM — MORS-5635 · Air Conditioner. A capture that cannot fail is not evidence: this route must NOT show the chooser copy, and the two sibling routes above must.
Round 1 — the clip budget. Every unit test passed with the build spec's 60-character clip, because the fixtures had descriptions that differed in their first few words. Seven real rows do not: they share a 60-character prefix and differ only after it. At 60 this page rendered seven identical choices — the defect it exists to remove, restored one layer up. Measured after the change: 7 distinct lines of 7, against 1 of 7 before.
Round 1 — the sort key. Sorting by home read fine against a fixture with one row per home. On the mirror every multi-row group shares a home, so the home sorted nothing and the repair sequence came out scrambled. Oldest-first turns the four-row group above back into the story it is: the air conditioner, the ceiling bubbling, the second coat of mud, the third.
Round 2 — the placeholder that led every row. The first capture rendered the em-dash placeholder as each row's PRIMARY line, with the row's real words in small grey underneath. On a group where no row carries canonical issue text — every row of the seven-way group, three of the four — the page then led each choice with a bare dash, so its visual hierarchy announced nothing above the only words a reader can choose by. Every assertion passed through it; it took looking. There is now one text line per row, and an em dash appears only where a row genuinely has nothing to say.
All three were found before review, by looking. Captured against the anonymized propflow-stage mirror (ADR-0097 / ADR-0110), which carries 1,012 real collision groups — 990 of two rows, 13 of three, 5 of four, 2 of six, one of seven and one of eight. No production read, and no write anywhere.