A take-in wait ends whoever learnt of it: taken under every key, and the watchman's seed ends what the indexer no longer holds (issue 1966) #202

Merged
mesh-tools merged 4 commits from fix/1966-take-in-ends-every-wait into main 2026-11-10 22:50:33 +00:00
Member

Issue 1966 notes 195 (cause), 196 (design lines, what exists today, AC195-1..4) and 197 (AC195-5).

Two take-in-waits conditions stood with nothing waiting (delivery.m.…3424 since 2026-11-08, delivery.m.…3752 since 2026-11-10 08:35 UTC): the watchman learnt of waits the indexer never said pending (its seed from indexer_pending; the own-build-unknown pending), the indexer said take-in.taken only for waits it marked Said, and the watchman kept the finding across restarts.

Design 47, Taken in by the indexer it names, bullet 'A wait is bounded, said and recoverable' (hq main 000a35d5, hq #538, the operator's answer 2026-11-10):

  • the indexer says take-in.taken for every merge it takes in, under each key indexer_pending named it by and the wait it was said under, no key twice (pending.go takenWaits); drops unchanged ('a drop of a merge never said pending emits none');
  • the watchman's seed ends every take-in wait, signal and finding whose key indexer_pending no longer names, only when indexer_pending answered (watch/takein.go SeedTakeIn; cmd seedTakeIn).

Quick vs thorough: no quick fix clears a stale condition without a hand act; the thorough fix ends the kind (a wait whose end was never heard) for every path.

Tests (each failing first on an assertion): indexer T7, T8 (behind-group wait ends under its own key), T9/T11, the 1585 group subtest and the AC195-2/3 subtest; watchman findings_test AC195-4 (guard) and AC195-5; watchman cmd main_test AC195-5 unanswered seed. Locally green: gofmt, go vet (also -tags integration), unit suites of both modules, integration tests of the indexer cmd and watchman cmd packages against an embedded bus. No new test function; no module.json change.

Live acceptance: at the watchman's next start after this delivery both conditions clear.

Reviewed-by: mesh-code-reviewer@shanks at e82da39d29
Pushed-by: lead-47@shanks

https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ

Issue 1966 notes 195 (cause), 196 (design lines, what exists today, AC195-1..4) and 197 (AC195-5). Two take-in-waits conditions stood with nothing waiting (delivery.m.…3424 since 2026-11-08, delivery.m.…3752 since 2026-11-10 08:35 UTC): the watchman learnt of waits the indexer never said pending (its seed from indexer_pending; the own-build-unknown pending), the indexer said take-in.taken only for waits it marked Said, and the watchman kept the finding across restarts. Design 47, *Taken in by the indexer it names*, bullet 'A wait is bounded, said and recoverable' (hq main 000a35d5, hq #538, the operator's answer 2026-11-10): - the indexer says take-in.taken for every merge it takes in, under each key indexer_pending named it by and the wait it was said under, no key twice (pending.go takenWaits); drops unchanged ('a drop of a merge never said pending emits none'); - the watchman's seed ends every take-in wait, signal and finding whose key indexer_pending no longer names, only when indexer_pending answered (watch/takein.go SeedTakeIn; cmd seedTakeIn). Quick vs thorough: no quick fix clears a stale condition without a hand act; the thorough fix ends the kind (a wait whose end was never heard) for every path. Tests (each failing first on an assertion): indexer T7, T8 (behind-group wait ends under its own key), T9/T11, the 1585 group subtest and the AC195-2/3 subtest; watchman findings_test AC195-4 (guard) and AC195-5; watchman cmd main_test AC195-5 unanswered seed. Locally green: gofmt, go vet (also -tags integration), unit suites of both modules, integration tests of the indexer cmd and watchman cmd packages against an embedded bus. No new test function; no module.json change. Live acceptance: at the watchman's next start after this delivery both conditions clear. Reviewed-by: mesh-code-reviewer@shanks at e82da39d299910a442375adbb76778ec01cf3817 Pushed-by: lead-47@shanks https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
mesh-tools added 4 commits 2026-11-10 22:49:32 +00:00
A merge taken in with no take-in.pending said for it (read from indexer_pending at a
watchman restart, or said pending by the own-build-unknown path) ended with no taken
event, so the watchman raised take-in-waits for a wait nothing held. takeInWholeBy now
says taken for each wait WaitsOf names for the claimed entries (a revision by its oldest
merge's key, a group by its g. key) as well as for its said waits, without saying a key
twice. Drops are unchanged.

Builds: design 47 "Taken in by the indexer it names" (A wait is bounded, said and recoverable); 1966/AC195-1, AC195-2, AC195-3, AC195-4

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
SeedTakeIn, run once indexer_pending answered and after the findings of a previous run were read,
ends every take-in wait, held wait and take-in-waits finding whose key the answer does not name, as a
take-in.taken would. A seed that could not ask is not run, so ends nothing.

Builds: design 47 "Taken in by the indexer it names" (A wait is bounded, said and recoverable: "At its start the watchman seeds its 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"); 1966/AC195-5

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
A merge waiting behind a gathered group is named by indexer_pending under its own key; when the
group ends it joins the group's revision under the oldest member's key, so its own key was never
said taken. takenWaits now also says every claimed entry's key, no key twice. T8 checks the merge
behind the group ends under its own key.

Builds: design 47 "Taken in by the indexer it names" (A wait is bounded, said and recoverable); 1966/AC195-1, AC195-3

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Test that a seed indexer_pending could not answer ends nothing (issue 1966, note 197)
mesh/check checking e82da39d2999 on 532e4d740fdd
mesh/delivery merged: source.main moved to novox/mesh-delivery@532e4d740fdd
e82da39d29
seedTakeIn with a failing call and with an unreadable answer leaves a previous run's take-in-waits finding
and a held wait standing; it fails if the error path seeded an empty answer.

Builds: design 47 "Taken in by the indexer it names" (A wait is bounded, said and recoverable); 1966/AC195-5

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Author
Member

Delivery novox/mesh-delivery@e82da39d2999 — merged since 2026-11-10T22:50:36Z

Source — source.main moved to novox/mesh-delivery@532e4d740f. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.

Transitions

  • 2026-11-10 22:49 (new) → proposed (announced): novox/mesh-delivery#202's head announced
  • 2026-11-10 22:49 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false)
  • 2026-11-10 22:50 ready → merged (merged): on the trunk its modules follow: merged there

The commit's note under refs/notes/mesh-plan keeps every transition of this change up to its merge: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-delivery@e82da39d2999` — **merged** since 2026-11-10T22:50:36Z **Source** — source.main moved to novox/mesh-delivery@532e4d740fdd. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Transitions** - 2026-11-10 22:49 (new) → proposed (announced): novox/mesh-delivery#202's head announced - 2026-11-10 22:49 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false) - 2026-11-10 22:50 ready → merged (merged): on the trunk its modules follow: merged there The commit's note under `refs/notes/mesh-plan` keeps every transition of this change up to its merge: `git log --notes=mesh-plan`.
mesh-tools merged commit 532e4d740f into main 2026-11-10 22:50:33 +00:00
mesh-tools deleted branch fix/1966-take-in-ends-every-wait 2026-11-10 22:50:33 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-delivery#202