A placement change is answered by the nodes it places: the candidate contract, composing a given placement, and replicated seats in the placement check (issue 1126, ADR 0559)
#106
Merged
mesh-toolsmerged 7 commits from feat/1126-l2b into main2026-10-27 07:21:03 +00:00
Milestone L2b of design 47 (issue 1126, notes 19-21), ADR 0559. Delivery group feat/1126-l2b with mesh-host, mesh-delivery, mesh-catalog, hq.
CheckPlacements lets a replicated mesh seat (mesh-dns-resolver) be held on several nodes; the placement seed of the live export now passes (dry run wrote all four files).
Candidate contract: a catalogue pull message may carry its placement files; state placement-candidates keyed .; CandidateAnswer in HaveNode.Candidates (same / differs / added / removed / refusals, Revision 0 = no key of the node's own, judged by head); HaveNode.Sealed; CompositionUnanswered.
frombus composes a given placement (Placed, Scope.Placements, Case.Placements); CompareComposed; CompositionsShadow; frombus.Answer asks the vault only for consumer keys of modules the node runs (an added module is answered as added, not refused).
NodeComposeReads grants a node a read of every candidate key.
Quick vs thorough (S7): quick = a guard applying nothing that differs at a node's first switch; thorough chosen = the nodes answer every placement change before it merges (covers every later placement PR, closes A2).
Tests: whole untagged suite, go vet -tags integration pass; no new test functions (rows in existing tables).
Milestone L2b of design 47 (issue 1126, notes 19-21), ADR 0559. Delivery group feat/1126-l2b with mesh-host, mesh-delivery, mesh-catalog, hq.
- CheckPlacements lets a replicated mesh seat (mesh-dns-resolver) be held on several nodes; the placement seed of the live export now passes (dry run wrote all four files).
- Candidate contract: a catalogue pull message may carry its placement files; state `placement-candidates` keyed <group>.<node>; `CandidateAnswer` in `HaveNode.Candidates` (same / differs / added / removed / refusals, Revision 0 = no key of the node's own, judged by head); `HaveNode.Sealed`; `CompositionUnanswered`.
- frombus composes a given placement (`Placed`, `Scope.Placements`, `Case.Placements`); `CompareComposed`; `CompositionsShadow`; `frombus.Answer` asks the vault only for consumer keys of modules the node runs (an added module is answered as added, not refused).
- `NodeComposeReads` grants a node a read of every candidate key.
Quick vs thorough (S7): quick = a guard applying nothing that differs at a node's first switch; thorough chosen = the nodes answer every placement change before it merges (covers every later placement PR, closes A2).
Tests: whole untagged suite, go vet -tags integration pass; no new test functions (rows in existing tables).
Reviewed-by: review-l2b@shanks at cadd7b1b2f8fa3499e40287c69972a1880f6f6a5
Deliverynovox/mesh-sdk@cadd7b1b2f8f — merged since 2026-10-27T07:21:05Z
Source — source.main moved to novox/mesh-sdk@56de5ba840. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
2026-10-27 01:49 (new) → proposed (announced): novox/mesh-sdk#106's head announced
2026-10-27 01:49 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 07:21 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@cadd7b1b2f8f` — **merged** since 2026-10-27T07:21:05Z
**Source** — source.main moved to novox/mesh-sdk@56de5ba84010. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Group** `feat/1126-l2b`: novox/hq@043f8ecf9cfa, novox/mesh-catalog@2ac511ce6b19, novox/mesh-delivery@06d4f45e1885, novox/mesh-host@1803d25c3a67, novox/mesh-sdk@cadd7b1b2f8f
**Transitions**
- 2026-10-27 01:49 (new) → proposed (announced): novox/mesh-sdk#106's head announced
- 2026-10-27 01:49 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 07:21 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.
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-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.
Milestone L2b of design 47 (issue 1126, notes 19-21), ADR 0559. Delivery group feat/1126-l2b with mesh-host, mesh-delivery, mesh-catalog, hq.
placement-candidateskeyed .;CandidateAnswerinHaveNode.Candidates(same / differs / added / removed / refusals, Revision 0 = no key of the node's own, judged by head);HaveNode.Sealed;CompositionUnanswered.Placed,Scope.Placements,Case.Placements);CompareComposed;CompositionsShadow;frombus.Answerasks the vault only for consumer keys of modules the node runs (an added module is answered as added, not refused).NodeComposeReadsgrants a node a read of every candidate key.Quick vs thorough (S7): quick = a guard applying nothing that differs at a node's first switch; thorough chosen = the nodes answer every placement change before it merges (covers every later placement PR, closes A2).
Tests: whole untagged suite, go vet -tags integration pass; no new test functions (rows in existing tables).
Reviewed-by: review-l2b@shanks at
cadd7b1b2fDelivery
novox/mesh-sdk@cadd7b1b2f8f— merged since 2026-10-27T07:21:05ZSource — source.main moved to novox/mesh-sdk@56de5ba840. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Group
feat/1126-l2b: novox/hq@043f8ecf9c, novox/mesh-catalog@2ac511ce6b, novox/mesh-delivery@06d4f45e18, novox/mesh-host@1803d25c3a, novox/mesh-sdk@cadd7b1b2fTransitions
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.
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.