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
|
recordOpen = { [weak self] id in
|
||||||
MainActor.assumeIsolated { self?.openedCards.append(id) }
|
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 {
|
deinit {
|
||||||
|
|||||||
Reference in New Issue
Block a user