Research 072 piece moved: the composer reacts (milestone 2), config heard as events from mesh-config's bucket instead of a pass.
Why
A kept (older) composition was never composed again when config changed (composed_writer.go: 'an older one is never written again'), so any rollback silently reverted every config value: on 2026-10-25 g14's mesh-build-go capacity fell back to 0 although mesh-config resolved 2.
What
A durable consumer mesh-controller-config-follow on KV_mesh-config_resolved (deliver last per subject: each value once when made, then each write), gathered 1 s, acked after the touched node and the touched modules' kept compositions are composed; refused 30 s on failure, at once on stop; config-not-followed raised and cleared.
followKept composes every kept fingerprint from its own build's manifest with today's inputs; writeComposed writes only a changed digest; per-write node lock; stops on the controller's stop.
Its delivery group member mesh-delivery (same branch) makes the assigner follow a kept composition's new digest.
Also
This branch carries mesh-controller #465's commits (merged); a merge of it gives a NEW controller fingerprint, so its build is a new ask (the build of #465 at 9fe60d08 is stuck as a dead-lettered ask since the steps bucket was full).
Tests
go test -race ./... and go vet -tags integration ./... pass; test functions 1765 -> 1764. Recovery mode: no try; merge by hand.
Research 072 piece moved: the composer reacts (milestone 2), config heard as events from mesh-config's bucket instead of a pass.
## Why
A kept (older) composition was never composed again when config changed (composed_writer.go: 'an older one is never written again'), so any rollback silently reverted every config value: on 2026-10-25 g14's mesh-build-go capacity fell back to 0 although mesh-config resolved 2.
## What
- A durable consumer `mesh-controller-config-follow` on KV_mesh-config_resolved (deliver last per subject: each value once when made, then each write), gathered 1 s, acked after the touched node and the touched modules' kept compositions are composed; refused 30 s on failure, at once on stop; `config-not-followed` raised and cleared.
- followKept composes every kept fingerprint from its own build's manifest with today's inputs; writeComposed writes only a changed digest; per-write node lock; stops on the controller's stop.
- Its delivery group member mesh-delivery (same branch) makes the assigner follow a kept composition's new digest.
## Also
This branch carries mesh-controller #465's commits (merged); a merge of it gives a NEW controller fingerprint, so its build is a new ask (the build of #465 at 9fe60d08 is stuck as a dead-lettered ask since the steps bucket was full).
## Tests
go test -race ./... and go vet -tags integration ./... pass; test functions 1765 -> 1764. Recovery mode: no try; merge by hand.
Issue: issue 1945.
Reviewed-by: reviewer-kept2@shanks at ff3cc47027e04e7d558259447fdf6f9620f9a552
The controller composed a module only at the fingerprint it is registered at,
so each of the up to five compositions kept for going back carried the config
of the moment it was made: a want back to an earlier mesh-build-go on g14 put
its capacity back to 0. Nothing composed a node when mesh-config's resolved
values changed, either.
Now a write of mesh-config_resolved (<node>.<module>.<key>), heard from that
bucket's watch and gathered for a second, drops the controller's 5 s reading
of the values, composes the node, and composes every kept fingerprint of the
touched modules on that node again from its own build's manifest with today's
inputs, writing only the compositions whose digest differs. A starting
controller does it once for every node, for a change no controller heard.
The two replaced-controller tests are one table test with the kept cases.
Research 072: milestone 2, the composer reacting to the change of an input.
The start composed every kept composition of every module on every node, each a
whole node composed in memory under the node's lock: 10 to 50 minutes at a
start, holding take-ins back. Now the writes of mesh-config_resolved are read
from the durable consumer mesh-controller-config-follow, acknowledged once the
change is composed, so a restart composes again only what was written since
the last change handled, and a first start nothing it did not hear. The node's
lock is taken for each write alone. A consumer that cannot be made or read
raises config-not-followed and is tried again a minute later, cleared once it
reads. The controller's account is granted that consumer's acknowledgements
where mesh-config serves, as its verb is.
Research 072: milestone 2, the composer reacting to the change of an input.
The config consumer delivered new writes only, and mesh-config never writes an
unchanged value again: g14's mesh-build-go capacity of 2, set before this
release, would never reach its kept compositions carrying 0. A newly made
durable now reads each key's last value once, through the same gather,
per-write lock and acknowledgement; its deliver policy is set before its first
delivery. Acknowledgements are synchronous and sent past the stop, and one the
bus refuses is said by its key.
Research 072: milestone 2, the composer reacting to the change of an input.
mesh/delivery-group group fix/1945-kept-compositions-follow-config held: a member is held: novox/mesh-controller@ff3cc47027e0 (merged without a passing check: …
followKept went on composing every kept key, and the config consumer every
touched node, after the controller was told to stop. Both now check the stop
before each key and each node; the writes of an unfinished batch are refused
at once, so the next controller takes them.
Research 072: milestone 2, the composer reacting to the change of an input.
Deliverynovox/mesh-controller@ff3cc47027e0 — held since 2026-10-25T18:38:00Z
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-controller@40034be479. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
2026-10-25 18:37 (new) → proposed (announced): novox/mesh-controller#466's head announced
2026-10-25 18:38 proposed → 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-controller@ff3cc47027e0` — **held** since 2026-10-25T18:38:00Z
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-controller@40034be479f8. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Group** `fix/1945-kept-compositions-follow-config`: novox/mesh-controller@ff3cc47027e0, novox/mesh-delivery@73779a5dd180
**Transitions**
- 2026-10-25 18:37 (new) → proposed (announced): novox/mesh-controller#466's head announced
- 2026-10-25 18:38 proposed → 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.
Research 072 piece moved: the composer reacts (milestone 2), config heard as events from mesh-config's bucket instead of a pass.
Why
A kept (older) composition was never composed again when config changed (composed_writer.go: 'an older one is never written again'), so any rollback silently reverted every config value: on 2026-10-25 g14's mesh-build-go capacity fell back to 0 although mesh-config resolved 2.
What
mesh-controller-config-followon KV_mesh-config_resolved (deliver last per subject: each value once when made, then each write), gathered 1 s, acked after the touched node and the touched modules' kept compositions are composed; refused 30 s on failure, at once on stop;config-not-followedraised and cleared.Also
This branch carries mesh-controller #465's commits (merged); a merge of it gives a NEW controller fingerprint, so its build is a new ask (the build of #465 at 9fe60d08 is stuck as a dead-lettered ask since the steps bucket was full).
Tests
go test -race ./... and go vet -tags integration ./... pass; test functions 1765 -> 1764. Recovery mode: no try; merge by hand.
Issue: issue 1945.
Reviewed-by: reviewer-kept2@shanks at
ff3cc47027Delivery
novox/mesh-controller@ff3cc47027e0— held since 2026-10-25T18:38:00ZHeld 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-controller@40034be479. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Group
fix/1945-kept-compositions-follow-config: novox/mesh-controller@ff3cc47027, novox/mesh-delivery@73779a5dd1Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition of this change up to its merge:git log --notes=mesh-plan.