From 9638aa02c51c772dfd2fa34e061685ab88c9ad87 Mon Sep 17 00:00:00 2001 From: jochen Date: Wed, 2 Sep 2026 01:06:12 +0200 Subject: [PATCH] =?UTF-8?q?031=20=E2=80=94=20a=20machine=20becomes=20each?= =?UTF-8?q?=20thing=20it=20was=20told,=20in=20turn?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Declarations queue and the host applies all of them, oldest first, so a machine pushed five things in a minute spends five applies becoming the last one. Correct every step — each declaration is the whole machine — and wasted in all but the final step. Only visible since a report names its declaration: the reports arriving were about ever-older ones, while timestamp comparisons used to happen to pass. The fix is consumption order, not the queue; the open question is what a superseded declaration's report should say, because silence reads as disobedience and "applied" would be a lie. --- .../00-report.md | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 04-ISSUES/031-a-machine-becomes-each-thing-it-was-told-in-turn/00-report.md diff --git a/04-ISSUES/031-a-machine-becomes-each-thing-it-was-told-in-turn/00-report.md b/04-ISSUES/031-a-machine-becomes-each-thing-it-was-told-in-turn/00-report.md new file mode 100644 index 0000000..97ee87c --- /dev/null +++ b/04-ISSUES/031-a-machine-becomes-each-thing-it-was-told-in-turn/00-report.md @@ -0,0 +1,42 @@ +--- +status: open +opened: 2026-09-02 +located-in: [mesh-host] +fixed-by: +amended-design: +--- + +# 031 — A machine becomes each thing it was told, in turn + +## Symptom + +A machine that was pushed several declarations in quick succession applies every one of them, +oldest first, at the better part of a minute each. Under the lab's suite — twenty-odd pushes in +fifteen minutes — the anchor machine ran minutes behind the newest declaration, and a test that +waited for it honestly timed out while the machine was busy becoming things nobody wanted any +more. + +Only visible since caught-up became an equality: each report now names the declaration it applied, +and the reports arriving were about ever-older ones. Before that, the same backlog hid inside +timestamp comparisons that happened to pass. + +## Why it is wrong, and why it is also right + +Each declaration is complete — the whole machine, not a delta — so applying an old one is never +*incorrect*, only wasted: the machine converges to a state the mesh has already moved past, then +does it again. The queue keeps a disconnected machine's instructions safe, which is right. What +is wrong is only the order of consumption: **a machine asked to be five successive things should +become the last one.** + +## The shape of a fix + +On waking with a queue, drain it and apply only the newest declaration; acknowledge the +superseded ones without applying them. Whether a superseded declaration deserves a report — and +what its outcome should be called — is the real question for the link's vocabulary: silence reads +as a machine that ignored an instruction, and "applied" would be a lie. + +## What it costs today + +Nothing on a real mesh at rest: pushes are far apart. It costs the lab about a doubling of one +test's wait, and it will cost a real mesh exactly when things are busiest — a flurry of changes is +when a machine can least afford to replay history.