Never put a module whose want names its own composition into the node's own, and read a re-registered module's fingerprint from the indexer (issue 1945) #461

Merged
mesh-tools merged 1 commits from fix/r6-own-composition-dupes into main 2026-10-25 13:37:34 +00:00
Member

Since 12:43 on 2026-10-25 the controller raised apply-failing on all four machines: the node-engine refused '2 resources declare X' for node-env, power, restic, ssh-client, zsh and more, so no provisioner file of theirs was written.

Root cause: a catalogue merge that leaves a module's sources alone re-registers it at the merge commit from the same builder key; its build record (keyBuildID) already exists at the earlier commit and chainRecordBuild keeps it, so the new commit has no build. currentFingerprints (grants.go) then misses the module, and compositionsOf moved it into .node while its want still names its own src2 composition; the node-engine joined both.

What changes:

  1. grants.go: fingerprintsAt falls back to the fingerprint the indexer's trunk value names at that commit (current value or the key's history); an indexer error fails the read instead of leaving a module out silently. The same gap also left these modules out of the grants written for the assigner.
  2. composed_writer.go, composed_live.go: a module whose node want or have names a src2 fingerprint is never also put into the node's own composition, resources and filled paths alike; the modules left out are said.

Tests (each seen failing first): fingerprints_at_test.go (1945/AC15), TestAModuleItsWantNamesIsNeverInTheNodesOwnComposition (1945/AC16). Criteria in issue 1945 note 21.

Not fixed here: the build chain still keeps one record per key and revision with a single commit; direct BuildOf callers at built_from are not covered by the fallback.

Tries: try-1792933866452123122 passed on ac34bce4 (966 unit, 1625 integration).
Reviewed-by: reviewer-r6m@shanks at ac34bce49f
Pushed-by: lead-47@shanks

Since 12:43 on 2026-10-25 the controller raised apply-failing on all four machines: the node-engine refused '2 resources declare X' for node-env, power, restic, ssh-client, zsh and more, so no provisioner file of theirs was written. Root cause: a catalogue merge that leaves a module's sources alone re-registers it at the merge commit from the same builder key; its build record (keyBuildID) already exists at the earlier commit and chainRecordBuild keeps it, so the new commit has no build. currentFingerprints (grants.go) then misses the module, and compositionsOf moved it into <node>.node while its want still names its own src2 composition; the node-engine joined both. What changes: 1. grants.go: fingerprintsAt falls back to the fingerprint the indexer's trunk value names at that commit (current value or the key's history); an indexer error fails the read instead of leaving a module out silently. The same gap also left these modules out of the grants written for the assigner. 2. composed_writer.go, composed_live.go: a module whose node want or have names a src2 fingerprint is never also put into the node's own composition, resources and filled paths alike; the modules left out are said. Tests (each seen failing first): fingerprints_at_test.go (1945/AC15), TestAModuleItsWantNamesIsNeverInTheNodesOwnComposition (1945/AC16). Criteria in issue 1945 note 21. Not fixed here: the build chain still keeps one record per key and revision with a single commit; direct BuildOf callers at built_from are not covered by the fallback. Tries: try-1792933866452123122 passed on ac34bce4 (966 unit, 1625 integration). Reviewed-by: reviewer-r6m@shanks at ac34bce49f581c3a0759e05d2f7abb886a2ac7e4 Pushed-by: lead-47@shanks
mesh-tools added 1 commit 2026-10-25 13:28:20 +00:00
Take a module's fingerprint from the indexer when its commit has no build, and never compose a module its want names into the node's own (issue 1945)
mesh/check pass ac34bce49f58 on 2bcd85d2df4c | unit 966 run, 171 kept, 2 skipped | integration 1625 run, 232 kept, 7 skipped | over bound: integration…
mesh/delivery merged: source.main moved to novox/mesh-controller@2bcd85d2df4c
ac34bce49f
A catalogue merge that leaves a module's sources alone registers it at the new
commit from the same done key, whose build record stands at its first commit,
so the commit had no build and the module no fingerprint of the new form: it
went into the node's own composition while its want named its own, and every
node declared its files twice. currentFingerprints now reads the indexer's
trunk value at the commit when no build points at it (1945/AC15), and a module
a want or have names by its own composition is left out of the node's own
(1945/AC16).
Author
Member

Delivery novox/mesh-controller@ac34bce49f58 — merged since 2026-10-25T13:37:35Z

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

Transitions

  • 2026-10-25 13:28 (new) → proposed (announced): novox/mesh-controller#461's head announced
  • 2026-10-25 13:36 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
  • 2026-10-25 13:37 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-controller@ac34bce49f58` — **merged** since 2026-10-25T13:37:35Z **Source** — source.main moved to novox/mesh-controller@2bcd85d2df4c. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Transitions** - 2026-10-25 13:28 (new) → proposed (announced): novox/mesh-controller#461's head announced - 2026-10-25 13:36 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 - 2026-10-25 13:37 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-tools merged commit 2bcd85d2df into main 2026-10-25 13:37:34 +00:00
mesh-tools deleted branch fix/r6-own-composition-dupes 2026-10-25 13:37:34 +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-controller#461