2.0 KiB
status, opened, located-in, fixed-by, amended-design
| status | opened | located-in | fixed-by | amended-design | |
|---|---|---|---|---|---|
| resolved | 2026-10-05 |
|
novox/mesh-controller#64 (002d5e5) | 03-DESIGN/01-to-be/30-the-mesh-updates-itself-on-a-push.md |
259. A push to one machine sent every machine
Symptom
A change to the resolver modules was merged with the upgrade policy record, so that each machine
would get it only when pushed. The plan was to go one machine at a time: the anchor first, then each
of the others, each checked before the next.
push <anchor> sent all four machines, each a new declaration carrying the change. A later
push <laptop> did the same. A further fault in the change (issue 260) was therefore met on every
machine at once, not on one.
Cause
A named push ends by flushing every other machine whose declaration differs from what it was last
sent (issue 057, ADR 0083). This was meant for consequences of the push, such as a provider's grant
list after a consumer was assigned. It cannot tell a consequence from a change the upgrade policy is
holding back. Under record, every machine running the module differs, so every machine is flushed.
Issue 249 met the same confusion for the machine holding the bus, and narrowed that check to the user list alone. The flush has no such narrowing.
What it costs
record is the policy for a change that must be walked through the mesh by hand. A named push cannot
do that, so the policy does not hold the change back from anything but the merge. The command's name
says one machine, and the command's output is the only place that says otherwise.
Open
- Should the flush send a machine only what changed as a consequence: grants, user lists and bound facts, not module versions held by a policy?
- Or should it list such machines as behind and leave them, as
push --behindwould find them?
Verified
2026-10-05: after the fix, a named push sent only the machine named. Upgrades held by a policy were
then sent with push --behind, as ADR 0221 has it.