The indexer takes in a registered module whose repository became readable, and serves indexer_take_in (issue 1945) #71

Merged
mesh-tools merged 2 commits from fix/indexer-takes-in into main 2026-10-26 13:39:14 +00:00
Member

Issue 1945 (the grants part's take-over of the bus user list). The take-over is refused while the grants part's list differs from the loaded one; it differs for ace.node-tools because the indexer holds no manifest of car-hunter and snake (modules registered from outside the indexed repositories). Their repositories answered 404 until 13:48, when the forge account began reading every repository (mesh-catalog #495), but the indexer reads a registered module only at its start and on a new build record of that module, so it never tried again.

  • A failed read marks the module unread; RetryUnread reads unread modules again in one background goroutine (kickRetry: single-flight, a kick during a run makes it go round once more), kicked on each new source revision and each merged message. Handlers return at once; stamping follows through srcOf when the module is written. A module read or held leaves the unread set.
  • Tool mesh-delivery-indexer.indexer_take_in {module, why?} (tools-are-how-a-module-is-spoken-to): a new tools bundle writes an ask to the indexer's new state takeins; the indexer takes the module in now and answers what it stored and from where, or why not (held, no registration, the forge's error, no manifest, another module's manifest). On a slow forge the tool says the take-in still runs and where its answer lands. Same path as builder_ask_again: no new bus account, no controller change.

Tests: the existing TestAForgeThatCannotSayLeavesTheModuleUnwrittenAndAsksAgain as a six-row table (start, new source revision, merged message, take-in after a 404 and after a timeout); the revision and merge rows fail without the change. Unit suite with -race and go vet -tags integration ./... clean. Try try-1793020277598994641 passed.

After delivery: the indexer's restart alone takes car-hunter and snake in; grants_user_list's compare then shows no user differing.

Reviewed-by: review-takein@shanks at 907e092abc

Issue 1945 (the grants part's take-over of the bus user list). The take-over is refused while the grants part's list differs from the loaded one; it differs for ace.node-tools because the indexer holds no manifest of car-hunter and snake (modules registered from outside the indexed repositories). Their repositories answered 404 until 13:48, when the forge account began reading every repository (mesh-catalog #495), but the indexer reads a registered module only at its start and on a new build record of that module, so it never tried again. - A failed read marks the module unread; `RetryUnread` reads unread modules again in one background goroutine (`kickRetry`: single-flight, a kick during a run makes it go round once more), kicked on each new source revision and each merged message. Handlers return at once; stamping follows through `srcOf` when the module is written. A module read or held leaves the unread set. - Tool `mesh-delivery-indexer.indexer_take_in {module, why?}` (tools-are-how-a-module-is-spoken-to): a new tools bundle writes an ask to the indexer's new state `takeins`; the indexer takes the module in now and answers what it stored and from where, or why not (held, no registration, the forge's error, no manifest, another module's manifest). On a slow forge the tool says the take-in still runs and where its answer lands. Same path as builder_ask_again: no new bus account, no controller change. Tests: the existing TestAForgeThatCannotSayLeavesTheModuleUnwrittenAndAsksAgain as a six-row table (start, new source revision, merged message, take-in after a 404 and after a timeout); the revision and merge rows fail without the change. Unit suite with -race and `go vet -tags integration ./...` clean. Try try-1793020277598994641 passed. After delivery: the indexer's restart alone takes car-hunter and snake in; grants_user_list's compare then shows no user differing. Reviewed-by: review-takein@shanks at 907e092abc45fb7609f876c74683862beefb7195
mesh-tools added 2 commits 2026-10-26 13:15:12 +00:00
A registered module whose repository the forge answered 404 (car-hunter, snake, before the forge's account could read
them) was read again only when the indexer started again or the controller wrote a new build record of it, so the grants
part's composed user list stayed short of their subjects and the take-over was refused. A failed read now keeps the
module as unread, read again on the next source revision and the next merged message (no timer of its own), and the new
tool indexer_take_in (the tools bundle mesh-delivery-indexer-tools, through the indexer's takeins state, as the
builder's builder_ask_again) takes one in now and answers what it stored or why not.
mesh-delivery-indexer reads unread registered modules again in one background run, so a forge timeout holds no merged message or source revision past its ack wait (issue 1945, review round 1)
mesh/delivery merged: source.main moved to novox/mesh-delivery@b3a4b09f5b6f
mesh/check being carried to 907e092abc45 on b3a4b09f5b6f
907e092abc
The take-in tool's bound now says the take-in is still running and where its answer will be.
Author
Member

Delivery novox/mesh-delivery@907e092abc45 — merged since 2026-10-26T13:39:16Z

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

Transitions

  • 2026-10-26 13:15 (new) → proposed (announced): novox/mesh-delivery#71's head announced
  • 2026-10-26 13:15 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-10-26 13:39 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@907e092abc45` — **merged** since 2026-10-26T13:39:16Z **Source** — source.main moved to novox/mesh-delivery@b3a4b09f5b6f. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Transitions** - 2026-10-26 13:15 (new) → proposed (announced): novox/mesh-delivery#71's head announced - 2026-10-26 13:15 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-10-26 13:39 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 b3a4b09f5b into main 2026-10-26 13:39:14 +00:00
mesh-tools deleted branch fix/indexer-takes-in 2026-10-26 13:39:14 +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#71