On shanks and g14, node-tools stayed unapplied: its want names the digest of an earlier composition at the same fingerprint (the assigner keeps a held or unchanged want whole), the controller had since rewritten the key, and the node-engine applies only a key's latest value, so "nothing is applied until they agree" for ever, the module never turns healthy and its hold never lifts. ADR 0539's design expects the node to apply the revision its want names; the bucket keeps history and the node holds the grant to read it.
What changes:
When the key's latest composition is missing, unreadable, or carries another digest than the want names, the agent reads the key's revisions (Session.KVHistory, bounded to 10 s) and applies the newest one whose verified digest the want names. Unsigned, foreign-signed, other-digest, deleted and purged revisions are skipped. When none matches, the existing "digests disagree" path says so once and waits; nothing loops.
The composition a module was applied from is kept, so a module running an older revision is still held out of the others' applies and counts in Running.
internal/witness's runFrom waits (bounded, 5 s) until /proc//exe names the image: TestAProcessRunsFromABuildDeletedUnderIt failed once on a try reading /proc before the process showed.
Tests: TestTheRevisionAWantNamesIsAppliedFromHistory (failed first); TestNatsAKeysRevisionsAreReadBack (integration, embedded bus: revisions oldest first, delete marker, purge, a key that never was).
Tries: try-1792929068013610028 passed on 11a63579 (1010 unit, 1015 integration).
Reviewed-by: reviewer-r6m@shanks at 11a635796d
Pushed-by: lead-47@shanks
On shanks and g14, node-tools stayed unapplied: its want names the digest of an earlier composition at the same fingerprint (the assigner keeps a held or unchanged want whole), the controller had since rewritten the key, and the node-engine applies only a key's latest value, so "nothing is applied until they agree" for ever, the module never turns healthy and its hold never lifts. ADR 0539's design expects the node to apply the revision its want names; the bucket keeps history and the node holds the grant to read it.
What changes:
1. When the key's latest composition is missing, unreadable, or carries another digest than the want names, the agent reads the key's revisions (Session.KVHistory, bounded to 10 s) and applies the newest one whose verified digest the want names. Unsigned, foreign-signed, other-digest, deleted and purged revisions are skipped. When none matches, the existing "digests disagree" path says so once and waits; nothing loops.
2. The composition a module was applied from is kept, so a module running an older revision is still held out of the others' applies and counts in Running.
3. internal/witness's runFrom waits (bounded, 5 s) until /proc/<pid>/exe names the image: TestAProcessRunsFromABuildDeletedUnderIt failed once on a try reading /proc before the process showed.
Tests: TestTheRevisionAWantNamesIsAppliedFromHistory (failed first); TestNatsAKeysRevisionsAreReadBack (integration, embedded bus: revisions oldest first, delete marker, purge, a key that never was).
Tries: try-1792929068013610028 passed on 11a63579 (1010 unit, 1015 integration).
Reviewed-by: reviewer-r6m@shanks at 11a635796df96f63418af81bf2ce5fef877b3949
Pushed-by: lead-47@shanks
Deliverynovox/mesh-host@11a635796df9 — merged since 2026-10-25T12:30:42Z
Source — source.main moved to novox/mesh-host@57b553ac5a. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
Transitions
2026-10-25 11:54 (new) → proposed (announced): novox/mesh-host#139's head announced
2026-10-25 11:55 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 12:30 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-host@11a635796df9` — **merged** since 2026-10-25T12:30:42Z
**Source** — source.main moved to novox/mesh-host@57b553ac5a57. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Transitions**
- 2026-10-25 11:54 (new) → proposed (announced): novox/mesh-host#139's head announced
- 2026-10-25 11:55 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 12:30 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`.
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.
On shanks and g14, node-tools stayed unapplied: its want names the digest of an earlier composition at the same fingerprint (the assigner keeps a held or unchanged want whole), the controller had since rewritten the key, and the node-engine applies only a key's latest value, so "nothing is applied until they agree" for ever, the module never turns healthy and its hold never lifts. ADR 0539's design expects the node to apply the revision its want names; the bucket keeps history and the node holds the grant to read it.
What changes:
Tests: TestTheRevisionAWantNamesIsAppliedFromHistory (failed first); TestNatsAKeysRevisionsAreReadBack (integration, embedded bus: revisions oldest first, delete marker, purge, a key that never was).
Tries: try-1792929068013610028 passed on
11a63579(1010 unit, 1015 integration).Reviewed-by: reviewer-r6m@shanks at
11a635796dPushed-by: lead-47@shanks
Delivery
novox/mesh-host@11a635796df9— merged since 2026-10-25T12:30:42ZSource — source.main moved to novox/mesh-host@57b553ac5a. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition of this change up to its merge:git log --notes=mesh-plan.