Design 47: the watchman's take-in seed ends waits the indexer no longer holds
mesh/delivery merged: source.main moved to novox/hq@000a35d5cfce
mesh/check checking b58d789e83d0 on 000a35d5cfce

The operator's answer to the design question of issue 1966 note 195: a take-in
wait whose taken event was never heard stood for ever; the indexer's pending
state is what waits. Also says the indexer's taken event covers every key its
pending tool named.

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
This commit is contained in:
2026-11-10 23:44:03 +01:00
parent e65d0f8f2b
commit b58d789e83
@@ -2511,7 +2511,11 @@ timer. A group's merges arrive together.
`refused` (ADR 0633 §1, §5). The watchman writes the finding `take-in-waits` when no `take-in.taken` follows
within 60 minutes for a revision or 30 minutes for a group, and the condition keeper raises the condition from
it and clears it on `take-in.taken` (ADR 0564 §2 as ADR 0590 §2 changes it). At its start the watchman seeds its
open waits from `indexer_pending`; the bounds only raise the condition, and nothing is taken in on a timer. The hand acts, each said in the journal and the audit, are the indexer's `indexer_take_in_pending`
open waits from `indexer_pending`, and ends every take-in wait and `take-in-waits` finding it holds whose key
`indexer_pending` no longer names, as a `take-in.taken` would: the indexer's pending state is what waits, so a wait
whose end was never heard is not kept (the operator, 2026-11-10; issue 1966 note 195). The indexer says
`take-in.taken` for every merge it takes in, under each key `indexer_pending` named it by as well as under the wait
it was said under. The bounds only raise the condition, and nothing is taken in on a timer. The hand acts, each said in the journal and the audit, are the indexer's `indexer_take_in_pending`
(take the pending revisions, or a group gathered so far, in with the running indexer, when the named indexer can
never run or the group's end never comes) and `indexer_drop_pending` (drop a pending merge a later one replaced),
and the forge bridge's `bridge_groups` (read the groups it holds open) and `bridge_group_end_again` (publish a