Shadow answers name every refusal, carry old-form builds as they run, and compare a deleted placement (issue 1126, group fix/1126-shadow-all) #110

Merged
mesh-tools merged 3 commits from fix/1126-shadow-all into main 2026-10-27 22:44:08 +00:00
Member

Delivery group fix/1126-shadow-all with mesh-host. Issue 1126 (L2 of design 47), ADR 0549, ADR 0559.

The placement seed (#525) is live since 22:02Z: all four nodes compose their own modules, equal to what runs. Its shadow check answered wrongly: it stopped at the first refusal, refused modules running at an old-form build, and answered a deleted placement as 'everything removed'.

  • frombus.Answer names every refusal: a module whose build cannot be read or taken in, or that the composition refuses, is composed as a stub and named, so the rest still composes and is compared. Stubs reach only the answer, never an applied composition.
  • A module running at an old-form build is carried exactly as it runs (compose.Node.RunsOwn, frombus.Scope.Running), so the node's own composition is byte-for-byte what runs.
  • 'reaches no artifact store' says which nodes the composition holds and where the store is placed (cause of tonight's shadow-only refusal not found; made visible).
  • delivery: CandidateAnswer.Returns for a head that deletes a node's placement, with Same/Differs/Added/Removed compared; never with a refusal. HaveNode.Composes/ComposesWhy.

Quick or thorough: thorough (every refusal named and the old-form fold, not one instance per seed round).

Tests: rows in TestInput (answer_rows_test.go) and delivery placement_test, each failing without its fix; no new test functions (budget).

Review: round 1 CHANGES (read error flipped owner; deleted placement answered 'same' unread; two new test functions), round 2 APPROVED.

Reviewed-by: review-shadow@shanks at e32d777530

Delivery group fix/1126-shadow-all with mesh-host. Issue 1126 (L2 of design 47), ADR 0549, ADR 0559. The placement seed (#525) is live since 22:02Z: all four nodes compose their own modules, equal to what runs. Its shadow check answered wrongly: it stopped at the first refusal, refused modules running at an old-form build, and answered a deleted placement as 'everything removed'. - frombus.Answer names every refusal: a module whose build cannot be read or taken in, or that the composition refuses, is composed as a stub and named, so the rest still composes and is compared. Stubs reach only the answer, never an applied composition. - A module running at an old-form build is carried exactly as it runs (compose.Node.RunsOwn, frombus.Scope.Running), so the node's own composition is byte-for-byte what runs. - 'reaches no artifact store' says which nodes the composition holds and where the store is placed (cause of tonight's shadow-only refusal not found; made visible). - delivery: CandidateAnswer.Returns for a head that deletes a node's placement, with Same/Differs/Added/Removed compared; never with a refusal. HaveNode.Composes/ComposesWhy. Quick or thorough: thorough (every refusal named and the old-form fold, not one instance per seed round). Tests: rows in TestInput (answer_rows_test.go) and delivery placement_test, each failing without its fix; no new test functions (budget). Review: round 1 CHANGES (read error flipped owner; deleted placement answered 'same' unread; two new test functions), round 2 APPROVED. Reviewed-by: review-shadow@shanks at e32d777530247a7f8fda33dcfd3920d7a3982eea
mesh-tools added 3 commits 2026-10-27 22:40:13 +00:00
The seed's shadow answers named the first refusal only (ace: baserow's archive,
novox: de-spiegel), so each round showed one more. A build that cannot be read or
taken in, and a module the composition refuses, are now each composed as a stub
and named. A module folded into the node's own composition whose manifest names a
build (de-spiegel, nats, photos, systemd-resolved: haves naming a build-... id)
runs a build only the controller holds: it is composed as a stub and its
resources are carried as the node runs them.
The check of the seed's revert (mesh-catalog #526) failed on 'would stop
running node': the shadow answered a deleted placement as everything removed,
while the node keeps what runs. HaveNode.Composes and ComposesWhy say whether a
node applies its own compositions or the controller's; CandidateAnswer.Returns
answers a deleted placement, verdict same, naming nothing composed.
A deleting head's answer compares the controller's compositions with what runs, and is refused only without returning; fold the shadow's tests into TestInput (issue 1126, review of the shadow, round 1)
mesh/delivery merged: source.main moved to novox/mesh-sdk@47b1dcf08f85
mesh/delivery-group group fix/1126-shadow-all merged: every member is merged
mesh/check checking e32d77753024 on d48365aed010 | novox/mesh-sdk#110 in group fix/1126-shadow-all
e32d777530
Author
Member

Delivery novox/mesh-sdk@e32d77753024 — merged since 2026-10-27T22:44:11Z

Source — source.main moved to novox/mesh-sdk@47b1dcf08f. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.

Group fix/1126-shadow-all: novox/mesh-host@4636261435, novox/mesh-sdk@e32d777530

Transitions

  • 2026-10-27 22:40 (new) → proposed (announced): novox/mesh-sdk#110's head announced
  • 2026-10-27 22:40 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false)
  • 2026-10-27 22:44 ready → merged (merged): on the trunk its modules follow: merged there

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@e32d77753024` — **merged** since 2026-10-27T22:44:11Z **Source** — source.main moved to novox/mesh-sdk@47b1dcf08f85. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Group** `fix/1126-shadow-all`: novox/mesh-host@463626143567, novox/mesh-sdk@e32d77753024 **Transitions** - 2026-10-27 22:40 (new) → proposed (announced): novox/mesh-sdk#110's head announced - 2026-10-27 22:40 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false) - 2026-10-27 22:44 ready → merged (merged): on the trunk its modules follow: merged there The commit's note under `refs/notes/mesh-plan` keeps every transition of this change up to its merge: `git log --notes=mesh-plan`.
Author
Member

mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.

mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
mesh-tools merged commit 47b1dcf08f into main 2026-10-27 22:44:08 +00:00
mesh-tools deleted branch fix/1126-shadow-all 2026-10-27 22:44:09 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-sdk#110