A views reader catches up on an event it heard but did not apply, and on a consumer made after its first view (issue 1966, recovery) #174

Merged
mesh-tools merged 2 commits from fix/1966-views-durable into main 2026-11-09 07:04:18 +00:00
Member

Recovery fix (instruction recovery-fixes-merge-and-tell), issue 1966 notes 107 and 110; delivery group fix/1966-views-durable with mesh-delivery (same branch). mesh-sdk merges first.

Why. At 00:44 UTC 2026-11-09 the assigner's rules wrote every machine's node-engine want back to 411b21e4: its picture of the indexer's modules never took the 00:16:29 UTC event for c890e7e3 (proven from mesh-delivery's assigner code by lead-47). Grants missed an event the same way on 2026-11-08: the second time of a kind, fixed here for every reader.

Change (go/views follow.go, status.go; go/process event_hub.go):

  • The follower keeps the highest revision it heard per Created; an event heard before the first view or a gap heard while an ask runs is no longer dropped: the follower asks again by itself (backoff to a minute, ADR 0615 §5-6), every ask said in the log.
  • A consumer made 'from now' (ADR 0443) after the first view: EventHub.OnBound says when the bus made it, Follower.ConsumerMade marks an older picture behind and asks again. ProcessReader.Start wires it.
  • Status carries Heard, HeardCreated and Behind, written on every applied event, so the first-views read tools show the revision held and why a reader is behind; every silent return of Apply says itself.

Quick or thorough. Thorough: one place, every reader (the kind met twice). The cause of the 00:16 loss is the likeliest one, not proven (no tool reads a consumer's created time or EVENTS by subject; named as missing read tools on the issue).

Tests. New subtests in go/views fail without the change (mutation-checked by the reviewer); go vet, go vet -tags integration, go test ./... pass; -race on views and process.

Reviewed-by: mesh-code-reviewer@shanks at 38659c3937

Undo: revert this merge (and mesh-delivery's).

https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i

Recovery fix (instruction recovery-fixes-merge-and-tell), issue 1966 notes 107 and 110; delivery group fix/1966-views-durable with mesh-delivery (same branch). mesh-sdk merges first. **Why.** At 00:44 UTC 2026-11-09 the assigner's rules wrote every machine's node-engine want back to 411b21e4: its picture of the indexer's modules never took the 00:16:29 UTC event for c890e7e3 (proven from mesh-delivery's assigner code by lead-47). Grants missed an event the same way on 2026-11-08: the second time of a kind, fixed here for every reader. **Change** (go/views follow.go, status.go; go/process event_hub.go): - The follower keeps the highest revision it heard per Created; an event heard before the first view or a gap heard while an ask runs is no longer dropped: the follower asks again by itself (backoff to a minute, ADR 0615 §5-6), every ask said in the log. - A consumer made 'from now' (ADR 0443) after the first view: EventHub.OnBound says when the bus made it, Follower.ConsumerMade marks an older picture behind and asks again. ProcessReader.Start wires it. - Status carries Heard, HeardCreated and Behind, written on every applied event, so the first-views read tools show the revision held and why a reader is behind; every silent return of Apply says itself. **Quick or thorough.** Thorough: one place, every reader (the kind met twice). The cause of the 00:16 loss is the likeliest one, not proven (no tool reads a consumer's created time or EVENTS by subject; named as missing read tools on the issue). **Tests.** New subtests in go/views fail without the change (mutation-checked by the reviewer); go vet, go vet -tags integration, go test ./... pass; -race on views and process. Reviewed-by: mesh-code-reviewer@shanks at 38659c3937e74869fd513ce3b4d20fbd751de61c **Undo:** revert this merge (and mesh-delivery's). https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
mesh-tools added 2 commits 2026-11-09 01:32:47 +00:00
A follower passed over an event heard before its first view and dropped a gap heard while an ask ran, so a quiet
owner left the reader behind until a further event. It now keeps the highest revision heard and, when an ask ends
short of it, asks again on a pause of its own until it holds it. The status a read tool shows followed only the
asks, so it said a reader was behind that was not; it follows the events too.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
A reader asks again when its consumer was made after its first view, says every silent drop, and carries what it heard in its status (issue 1966)
mesh/delivery merged: source.main moved to novox/mesh-sdk@55f71b78114f
mesh/delivery-group group fix/1966-views-durable merged: every member is merged
mesh/check checking 38659c3937e7 on 55f71b78114f | novox/mesh-sdk#174 in group fix/1966-views-durable
38659c3937
A consumer is made from now (ADR 0443): an event said before it was made is never delivered to it and no later event
shows the loss. The event hub tells a part when the bus made its consumer, and a follower asked before that asks
again. Events passed over, at or below the held revision, or of a state not followed are now said in the log. The
status carries the highest revision heard and why the picture is behind it.

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

Delivery novox/mesh-sdk@38659c3937e7 — merged since 2026-11-09T07:04:20Z

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

Group fix/1966-views-durable: novox/mesh-delivery@173a7654ba, novox/mesh-sdk@38659c3937

  • composed together: fail — the checker's verdict at the members' heads (603dd79ad282): unit: git.novox.be/novox/mesh-sdk/go/catalogue.TestTheResolverForwardsToFixedUpstreamsAndNeverReadsResolvConf

Transitions

  • 2026-11-09 01:32 (new) → proposed (announced): novox/mesh-sdk#174's head announced
  • 2026-11-09 01:32 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-09 07:04 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-sdk@38659c3937e7` — **merged** since 2026-11-09T07:04:20Z **Source** — source.main moved to novox/mesh-sdk@55f71b78114f. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Group** `fix/1966-views-durable`: novox/mesh-delivery@173a7654ba61, novox/mesh-sdk@38659c3937e7 - composed together: fail — the checker's verdict at the members' heads (603dd79ad282): unit: git.novox.be/novox/mesh-sdk/go/catalogue.TestTheResolverForwardsToFixedUpstreamsAndNeverReadsResolvConf **Transitions** - 2026-11-09 01:32 (new) → proposed (announced): novox/mesh-sdk#174's head announced - 2026-11-09 01:32 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-09 07:04 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`.
Author
Member

mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.

mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
mesh-tools merged commit 55f71b7811 into main 2026-11-09 07:04:18 +00:00
mesh-tools deleted branch fix/1966-views-durable 2026-11-09 07:04:18 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-sdk#174