Two different seats can hold placement records naming the same pane, and nothing
detects it. --fix reports each cell repaired, seat by seat, and the collision
survives untouched.
Found by a user noticing that two seats in one team appeared to be one session:
work dispatched to two names had been arriving at the same place all along.
Counting every record on this workstation by the ref it claims, eight refs are
claimed more than once. They are two different situations and only one is a
defect:
- The same seat registered in more than one team. One person, two rows, the
same pane. Correct, and the placement guard already excludes a seat's own
record by identity.
- Different seats naming one pane. A stale record from an old team pointing
at a pane a live seat now occupies, and -- the case that prompted this -- two
seats in the same team both naming one pane.
Why the existing guard does not cover it
The guard added for #1114 refuses a write onto a pane another record claims. It
says nothing about records that already collide, and collisions are exactly what
a machine accumulates: panes are reused, teams are abandoned, seats are renamed.
Nothing sweeps.
Why --fix does not either
--fix walks seats and repairs cells within each seat. It has no cross-seat step,
so two seats can each be reported renamed_and_verified while sharing a pane. The
per-seat report is true and the fleet-level statement it implies is not.
In the case that prompted this the label route could not help: both panes had lost
their labels, so the resolution falls into the documented keep-the-record branch
and the duplicate is preserved. That branch is right on its own terms -- nothing
settled the question -- but the result is that the one command meant to make every
seat correct leaves two seats pointing at one pane and says nothing.
Proposed
Report first. A cross-seat check that names the colliding rows costs one pass over
records already being read, and turns an invisible state into a visible one. What
to do about a collision needs more thought than this issue has: for a stale row
from a dead team the answer is probably to drop it, and for two live seats it is
probably to refuse and tell the user, since guessing which one belongs there is
how the wrong pane gets written in the first place.
Worth separating from #1140 and #1131. Those repair one seat against evidence.
This is about a property that only exists between seats, which is why per-seat
repair cannot see it.
Two different seats can hold placement records naming the same pane, and nothing
detects it.
--fixreports each cell repaired, seat by seat, and the collisionsurvives untouched.
Found by a user noticing that two seats in one team appeared to be one session:
work dispatched to two names had been arriving at the same place all along.
Counting every record on this workstation by the ref it claims, eight refs are
claimed more than once. They are two different situations and only one is a
defect:
same pane. Correct, and the placement guard already excludes a seat's own
record by identity.
at a pane a live seat now occupies, and -- the case that prompted this -- two
seats in the same team both naming one pane.
Why the existing guard does not cover it
The guard added for #1114 refuses a write onto a pane another record claims. It
says nothing about records that already collide, and collisions are exactly what
a machine accumulates: panes are reused, teams are abandoned, seats are renamed.
Nothing sweeps.
Why
--fixdoes not either--fixwalks seats and repairs cells within each seat. It has no cross-seat step,so two seats can each be reported
renamed_and_verifiedwhile sharing a pane. Theper-seat report is true and the fleet-level statement it implies is not.
In the case that prompted this the label route could not help: both panes had lost
their labels, so the resolution falls into the documented keep-the-record branch
and the duplicate is preserved. That branch is right on its own terms -- nothing
settled the question -- but the result is that the one command meant to make every
seat correct leaves two seats pointing at one pane and says nothing.
Proposed
Report first. A cross-seat check that names the colliding rows costs one pass over
records already being read, and turns an invisible state into a visible one. What
to do about a collision needs more thought than this issue has: for a stale row
from a dead team the answer is probably to drop it, and for two live seats it is
probably to refuse and tell the user, since guessing which one belongs there is
how the wrong pane gets written in the first place.
Worth separating from #1140 and #1131. Those repair one seat against evidence.
This is about a property that only exists between seats, which is why per-seat
repair cannot see it.