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.
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
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.
Deliverynovox/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.
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`.
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.
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.
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'.
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
e32d777530Delivery
novox/mesh-sdk@e32d77753024— merged since 2026-10-27T22:44:11ZSource — source.main moved to novox/mesh-sdk@47b1dcf08f. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Group
fix/1126-shadow-all: novox/mesh-host@4636261435, novox/mesh-sdk@e32d777530Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition of this change up to its merge:git log --notes=mesh-plan.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.