From b58d789e83d08b2215fc11d64daae7df8542fa5e Mon Sep 17 00:00:00 2001 From: jochen Date: Tue, 10 Nov 2026 23:44:03 +0100 Subject: [PATCH] Design 47: the watchman's take-in seed ends waits the indexer no longer holds 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 --- 03-DESIGN/01-to-be/47-delivery-from-commit-to-delivered.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/03-DESIGN/01-to-be/47-delivery-from-commit-to-delivered.md b/03-DESIGN/01-to-be/47-delivery-from-commit-to-delivered.md index 91c9e7e1..aba7df40 100644 --- a/03-DESIGN/01-to-be/47-delivery-from-commit-to-delivered.md +++ b/03-DESIGN/01-to-be/47-delivery-from-commit-to-delivered.md @@ -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