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:
2026-08-08 10:25:31 -04:00
parent ce8a446658
commit 6d1872ad8b
+7 -1
View File
@@ -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 {