row 269 (264b, #1774): BUILD.md drops the planned bindLaunch session-running refusal. Two old tests bind a second unended run to one session and expect the claim refusal (threads.test.mjs:88-89, sessions.test.mjs:119-120), so the broker half of the fence is the existing per-session claim, thread-already-held (broker.mjs:4815)

This commit is contained in:
jason.woltje committed 2026-10-22 09:50:49 -05:00
1 parent 04676f57b9
commit f684317eb0
1 file changed
+6 -3
+6 -3
View File
@@ -146,9 +146,12 @@ with `id` = the thread id (3k-3l.sql:50-51). The rule reads only an immutable ro
`#threadRows` joins `sessions` in place of `session_defaults` (broker.mjs:868-896).
- `threadIdle(record)`: same keys. The row is the one for the session the run was bound to
(`#runs` entry, broker.mjs:927), so a run is idled against its own session.
- `bindLaunch`: a new run on a session that another unended run in this broker is bound to refuses
`session-running`. That's the broker half of the fence for two launcher processes. A rebind of an
existing run (`recover()`) skips the check, as it skips the harness check now.
- `bindLaunch`: no new refusal. It already takes `session` and puts it in the body (broker.mjs:945).
The broker half of the single-writer fence is the per-session claim that exists now:
a second claim on a held session refuses `thread-already-held` (broker.mjs:4815). A
`session-running` refusal at bind would break two old tests that bind a second unended run to one
session and then expect the claim refusal (threads.test.mjs:88-89, sessions.test.mjs:119-120).
The launcher's registry check and the workspace lock are the host halves.
### Seat