KV_mesh-build-go_steps filled to its 64 MiB cap (67,089,975 bytes, 27,371 keys, no age): every step writes a new key and none is ever removed. mesh-controller #465's check passed but its end was refused ('maximum bytes exceeded', 18:42:04). The catalogue fix gives steps a 2-day age; the node's pause key lived in the same bucket and would silently end after the age, so it moves to a state of its own.
What
delivery.PausesState = "pauses"; Puller.PausePut writes the pause there (Put stays the fallback when nil).
An unreadable pause no longer ends the puller: logged once ('the pause of cannot be read: ...; pulling as not paused'), then it pulls. Rule (lead's decision): a puller that stops silently is the worse failure; a node kept from building is held by capacity 0, not a pause. Also covers Pull reaching restore before Serve.
Order
Merge FIRST, with a merge commit: mesh-catalog fix/steps-bucket-ages pins this head (518dae5ec9). After both merges, the controller's next start (mesh-controller #465's delivery) raises the pauses bucket and the steps age, which frees the full bucket.
Tests
TestPullPauseOutlivesARestart extended (a Load that errors still takes an ask; fails on the old code). No new top-level test. gofmt, go vet with and without -tags integration, go test pass. Recovery mode: no try; merge by hand.
Issue: issue 1945 note 37 (second of issue 501's kind).
## Why
KV_mesh-build-go_steps filled to its 64 MiB cap (67,089,975 bytes, 27,371 keys, no age): every step writes a new key and none is ever removed. mesh-controller #465's check passed but its end was refused ('maximum bytes exceeded', 18:42:04). The catalogue fix gives steps a 2-day age; the node's pause key lived in the same bucket and would silently end after the age, so it moves to a state of its own.
## What
- delivery.PausesState = "pauses"; Puller.PausePut writes the pause there (Put stays the fallback when nil).
- An unreadable pause no longer ends the puller: logged once ('the pause of <node> cannot be read: ...; pulling as not paused'), then it pulls. Rule (lead's decision): a puller that stops silently is the worse failure; a node kept from building is held by capacity 0, not a pause. Also covers Pull reaching restore before Serve.
## Order
Merge FIRST, with a merge commit: mesh-catalog fix/steps-bucket-ages pins this head (518dae5ec9c8). After both merges, the controller's next start (mesh-controller #465's delivery) raises the pauses bucket and the steps age, which frees the full bucket.
## Tests
TestPullPauseOutlivesARestart extended (a Load that errors still takes an ask; fails on the old code). No new top-level test. gofmt, go vet with and without -tags integration, go test pass. Recovery mode: no try; merge by hand.
Issue: issue 1945 note 37 (second of issue 501's kind).
Reviewed-by: reviewer-puller@shanks at 518dae5ec9c88c96906961a3314c901361a394c5
The steps state of the build modules filled to the bus's 64 MiB cap (27,370 keys of mesh-build-go,
none ever removed) and refused a passed check's end. Its keys get an age in the catalogue; the
pause key lived among them and would then have ended by itself. Puller.PausePut writes it to
delivery.PausesState instead; Put stays the fallback for a module not yet moved.
mesh/delivery-group group fix/steps-bucket-ages held: a member is held: novox/mesh-sdk@518dae5ec9c8 (merged without a passing check: only a person decides what…
A Load error ended Pull, and the modules run it in a goroutine whose error nobody reads: every
build node would stop pulling when the new pauses state could not be read (or when Pull reached
restore before Serve). A node kept from building is held by capacity 0, not by a pause.
Deliverynovox/mesh-sdk@518dae5ec9c8 — held since 2026-10-25T18:06:34Z
Held for a person: merged without a passing check: only a person decides what follows — the merge reached the trunk without a passing check.
Source — source.main moved to novox/mesh-sdk@7f89cb51de. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
composed together: fail — the checker's verdict at the members' heads (3636b5efb454): shanks
Transitions
2026-10-25 17:59 (new) → proposed (announced): novox/mesh-sdk#81's head announced
2026-10-25 18:01 proposed → rejected (refused): a verdict names this commit and the trunk's head as its trunk commit, and the gate failed or could not run, or the repository's own check failed
2026-10-25 18:06 rejected → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides what follows
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@518dae5ec9c8` — **held** since 2026-10-25T18:06:34Z
Held for a person: merged without a passing check: only a person decides what follows — the merge reached the trunk without a passing check.
**Source** — source.main moved to novox/mesh-sdk@7f89cb51de15. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Group** `fix/steps-bucket-ages`: novox/mesh-catalog@4e82a824be7a, novox/mesh-sdk@518dae5ec9c8
- composed together: fail — the checker's verdict at the members' heads (3636b5efb454): shanks
**Transitions**
- 2026-10-25 17:59 (new) → proposed (announced): novox/mesh-sdk#81's head announced
- 2026-10-25 18:01 proposed → rejected (refused): a verdict names this commit and the trunk's head as its trunk commit, and the gate failed or could not run, or the repository's own check failed
- 2026-10-25 18:06 rejected → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides what follows
The commit's note under `refs/notes/mesh-plan` keeps every transition of this change up to its merge: `git log --notes=mesh-plan`.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Why
KV_mesh-build-go_steps filled to its 64 MiB cap (67,089,975 bytes, 27,371 keys, no age): every step writes a new key and none is ever removed. mesh-controller #465's check passed but its end was refused ('maximum bytes exceeded', 18:42:04). The catalogue fix gives steps a 2-day age; the node's pause key lived in the same bucket and would silently end after the age, so it moves to a state of its own.
What
Order
Merge FIRST, with a merge commit: mesh-catalog fix/steps-bucket-ages pins this head (
518dae5ec9). After both merges, the controller's next start (mesh-controller #465's delivery) raises the pauses bucket and the steps age, which frees the full bucket.Tests
TestPullPauseOutlivesARestart extended (a Load that errors still takes an ask; fails on the old code). No new top-level test. gofmt, go vet with and without -tags integration, go test pass. Recovery mode: no try; merge by hand.
Issue: issue 1945 note 37 (second of issue 501's kind).
Reviewed-by: reviewer-puller@shanks at
518dae5ec9Delivery
novox/mesh-sdk@518dae5ec9c8— held since 2026-10-25T18:06:34ZHeld for a person: merged without a passing check: only a person decides what follows — the merge reached the trunk without a passing check.
Source — source.main moved to novox/mesh-sdk@7f89cb51de. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Group
fix/steps-bucket-ages: novox/mesh-catalog@4e82a824be, novox/mesh-sdk@518dae5ec9Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition of this change up to its merge:git log --notes=mesh-plan.