From 96bdffa9bc481daffd94bb9e7d1b0789a70dfda0 Mon Sep 17 00:00:00 2001 From: jochen Date: Tue, 29 Sep 2026 22:33:40 +0200 Subject: [PATCH] Two records were numbered 127; the second becomes 149, and is resolved A number identifies a record, and two were given 127 on 2026-09-27. The one three documents and three source files cite by number keeps it; the other becomes 149, says so in its own heading, and its two inbound references are repointed. It is also resolved: an empty declaration is sent carrying owns_nothing rather than skipped, and the host refuses an empty body that does not carry it, so emptiness cannot be read as a truncated declaration. --- ...s-a-unit-back-the-state-it-was-found-in.md | 2 +- .../00-report.md | 2 +- .../00-report.md | 25 ++++++++++++++++--- 3 files changed, 24 insertions(+), 5 deletions(-) rename 04-ISSUES/{127-a-declaration-that-shrinks-to-empty-is-skipped-not-sent => 149-a-declaration-that-shrinks-to-empty-is-skipped-not-sent}/00-report.md (57%) diff --git a/02-DECISIONS/0118-undeclaring-gives-a-unit-back-the-state-it-was-found-in.md b/02-DECISIONS/0118-undeclaring-gives-a-unit-back-the-state-it-was-found-in.md index 317ec90..c5958f1 100644 --- a/02-DECISIONS/0118-undeclaring-gives-a-unit-back-the-state-it-was-found-in.md +++ b/02-DECISIONS/0118-undeclaring-gives-a-unit-back-the-state-it-was-found-in.md @@ -12,7 +12,7 @@ extends: 0102-the-mesh-writes-into-a-shared-file-never-over-it.md ## Context When a resource stops being declared — its module unassigned, the node sent a -deliberately-empty declaration ([issue 127](../04-ISSUES/127-a-declaration-that-shrinks-to-empty-is-skipped-not-sent/00-report.md)), +deliberately-empty declaration ([issue 149](../04-ISSUES/149-a-declaration-that-shrinks-to-empty-is-skipped-not-sent/00-report.md)), or a new catalogue version renaming its id — the host undoes it. The host's own code states the rule it means to follow: **it removes what it made and leaves what it merely configured.** For almost every resource it does exactly that: diff --git a/04-ISSUES/130-undeclaring-a-service-stops-it/00-report.md b/04-ISSUES/130-undeclaring-a-service-stops-it/00-report.md index b9ea3ec..431a3f8 100644 --- a/04-ISSUES/130-undeclaring-a-service-stops-it/00-report.md +++ b/04-ISSUES/130-undeclaring-a-service-stops-it/00-report.md @@ -16,7 +16,7 @@ found that the host's `remove` path stops every `service` resource that is no lo delete". `store.Orphans` matches by id alone. So any of these stops the unit: - the module is unassigned — by mistake, or to switch it for another; -- the node is sent a deliberately-empty declaration ([issue 127](../127-a-declaration-that-shrinks-to-empty-is-skipped-not-sent/00-report.md)); +- the node is sent a deliberately-empty declaration ([issue 149](../149-a-declaration-that-shrinks-to-empty-is-skipped-not-sent/00-report.md)); - a later catalogue version renames the resource's `id`. That is right for a service the mesh brought into being. It is wrong for a unit the mesh diff --git a/04-ISSUES/127-a-declaration-that-shrinks-to-empty-is-skipped-not-sent/00-report.md b/04-ISSUES/149-a-declaration-that-shrinks-to-empty-is-skipped-not-sent/00-report.md similarity index 57% rename from 04-ISSUES/127-a-declaration-that-shrinks-to-empty-is-skipped-not-sent/00-report.md rename to 04-ISSUES/149-a-declaration-that-shrinks-to-empty-is-skipped-not-sent/00-report.md index 9a57cb6..b5d797b 100644 --- a/04-ISSUES/127-a-declaration-that-shrinks-to-empty-is-skipped-not-sent/00-report.md +++ b/04-ISSUES/149-a-declaration-that-shrinks-to-empty-is-skipped-not-sent/00-report.md @@ -1,10 +1,15 @@ --- -status: located +status: resolved opened: 2026-09-27 -located-in: [mesh-controller cmd/mesh-controller/push.go] +located-in: [mesh-controller cmd/mesh-controller/push.go, mesh-controller cmd/mesh-controller/sendable.go] +fixed-by: mesh-controller sendable.go and push.go — an empty declaration is sent carrying `owns_nothing`, and the host refuses an empty body that does not carry it --- -# A declaration that shrinks to empty is skipped, so the node keeps what it should drop +# 149 — a declaration that shrinks to empty is skipped, so the node keeps what it should drop + +*Opened as 127 and renumbered on 2026-09-29: two records were given that number on the same day.* +*The other kept it, because three documents and three source files cite it by number and nothing +cited this one but a decision and a sibling issue, both corrected with this move.* ## What was observed @@ -37,3 +42,17 @@ mean "own nothing", which the host already applies correctly when it receives on On ace, one command drops it permanently (the corrected controller never re-composes it): `sudo ufw delete allow 5671`. At ace's converge it would clear on its own. + +## Closed + +*2026-09-29, in a grooming pass.* Both halves are on `main` and both name this issue. + +- The control plane **sends** it: a declaration that composes to no resources goes out with + `owns_nothing`, and `push` says *sent, not skipped*. +- The host **refuses an empty body that does not carry it**, so a truncated or mis-composed + declaration can never be read as "own nothing" — which is the failure the fix had to avoid while + making the empty case expressible. + +Closed by reading the code rather than by watching a machine let go of a stray resource; the record +says so rather than implying a run. +