The harness waits for the masonry it aims at — sixty settle turns before the first click
Under parallel-build load the six-turn settle let the first click land before the masonry's measurement passes did, on the empty-space layer instead of a card — which the dragless layer holds forever in a sterile queue, reading as a dead click. Bisect-verified environmental (same failure at every commit back to the suite's birth); with the settle, click → selection in 41 ms. Claude-Session: https://claude.ai/code/session_014PtZdPwqZuqEDLc6wZMtEy
This commit is contained in:
@@ -145,7 +145,13 @@ private final class HostedBoard {
|
||||
recordOpen = { [weak self] id in
|
||||
MainActor.assumeIsolated { self?.openedCards.append(id) }
|
||||
}
|
||||
settle()
|
||||
// A generous settle, and not politeness: the masonry places cards only after measurement
|
||||
// round-trips, and until those land a click at `cardPoint` hits the *empty-space layer*
|
||||
// instead of a card — which the dragless layer holds forever in this sterile queue,
|
||||
// poisoning the process's held-event machinery (see the suite note above). Six turns
|
||||
// sufficed on an idle machine; under parallel-build load it reproducibly did not
|
||||
// (2026-08-08). The turns are cheap; the misfire is not.
|
||||
settle(turns: 60)
|
||||
}
|
||||
|
||||
deinit {
|
||||
|
||||
Reference in New Issue
Block a user