A node says when it composes again, says what a long pass waits on, and composes on request (issue 774) #185

Merged
mesh-tools merged 3 commits from fix/compose-retries-transient into main 2026-10-31 00:21:33 +00:00
Member

Issue 774 (L3). On 2026-10-31 00:43 ace's node-engine failed a pass on the vault's deadline, retried at 00:45:50, then ran five minutes without a line before composing at 00:51; its haves never said a retry was coming, and no tool could make a node compose. Group fix/compose-retries-transient, mesh-sdk first:

  • mesh-sdk: the optional node-engine seat verb compose (module optional) in the contract.
  • mesh-host: a pass refused because a seat or read did not answer says "; the node composes again at HH:MM:SS (try N)" (same backoff 5s..5m, now in the composer); a journal line before each retry and every minute a pass runs ("has run for X and waits on "); verb compose: a pass now, bounded (a pass ended under 5 s ago is answered, not repeated; tries not reset), refusing when the node applies the controller's compositions; with module, retries only a failed apply that is not held (never releases a backup hold, never re-applies a running module).
    Quick vs thorough: quick = the retry words and journal lines; thorough (chosen) = plus the recovery verb, so a recovery needs no restart (tools-are-how-a-module-is-spoken-to). The verb needs the grants part to grant its subject (being fixed separately, as for composition).
    Tests: rows in existing tests; -race clean on selfcompose, agent, link, cmd/mesh-host. mesh-host pins mesh-sdk dfd5d82 exactly.

Reviewed-by: rev-compose@shanks at b0d6684d37

Issue 774 (L3). On 2026-10-31 00:43 ace's node-engine failed a pass on the vault's deadline, retried at 00:45:50, then ran five minutes without a line before composing at 00:51; its haves never said a retry was coming, and no tool could make a node compose. Group fix/compose-retries-transient, mesh-sdk first: - mesh-sdk: the optional node-engine seat verb compose (module optional) in the contract. - mesh-host: a pass refused because a seat or read did not answer says "; the node composes again at HH:MM:SS (try N)" (same backoff 5s..5m, now in the composer); a journal line before each retry and every minute a pass runs ("has run for X and waits on <what>"); verb compose: a pass now, bounded (a pass ended under 5 s ago is answered, not repeated; tries not reset), refusing when the node applies the controller's compositions; with module, retries only a failed apply that is not held (never releases a backup hold, never re-applies a running module). Quick vs thorough: quick = the retry words and journal lines; thorough (chosen) = plus the recovery verb, so a recovery needs no restart (tools-are-how-a-module-is-spoken-to). The verb needs the grants part to grant its subject (being fixed separately, as for composition). Tests: rows in existing tests; -race clean on selfcompose, agent, link, cmd/mesh-host. mesh-host pins mesh-sdk dfd5d82 exactly. Reviewed-by: rev-compose@shanks at b0d6684d373192a7b55a9407e368d7ada14f82d0
mesh-tools added 3 commits 2026-10-31 00:12:21 +00:00
On 2026-10-31 ace's route-proxy said only that the vault could not be asked, and ace said nothing for five minutes
while a pass waited after the vault restarted; the retry that already existed was invisible. A refusal for a seat or
a read that did not answer now says when the node composes again ("the node composes again at HH:MM:SS (try N)"), a
retry pass says it starts, a pass that runs on says every minute what it waits on, and the node-engine's verb
compose makes a pass now and says how it went, so a person recovers without a restart.
Retry only a failed apply that is not held, answer a repeated compose from the last pass, and say the try the refusal named (issue 774, review round 1)
mesh/delivery merged: source.main moved to novox/mesh-host@3d1465606bed
mesh/delivery-group group fix/compose-retries-transient merged: every member is merged
mesh/check being carried to b0d6684d3731 on 91fb323ce0cf | from mesh-sdk dec3bfe7a8cb | novox/mesh-host#185 in group fix/compose-retries-transient
b0d6684d37
The verb compose has no warrant (ADR 0563 §2): Agent.Retry released a module held for a failed backup and re-applied
one already running its want. RetryFailed tries again only a failed apply not held, and refuses in words otherwise.
A hand ask no longer restarts the growing bound, and a pass less than askedWithin old is the answer, so a caller in a
loop drives no passes against the vault. A composer whose loop ended refuses at once. The retry line said try N+1.
The test's first shadow now ends before slowAfter is set, a race the race detector found under the new timing.
Author
Member

Delivery novox/mesh-host@b0d6684d3731 — merged since 2026-10-31T00:21:37Z

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

Group fix/compose-retries-transient: novox/mesh-host@b0d6684d37, novox/mesh-sdk@dfd5d8295e

  • composed together: pass — the checker's verdict at the members' heads (4295264dfd90)

Transitions

  • 2026-10-31 00:12 (new) → proposed (announced): novox/mesh-host#185's head announced
  • 2026-10-31 00:12 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-31 00: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-host@b0d6684d3731` — **merged** since 2026-10-31T00:21:37Z **Source** — source.main moved to novox/mesh-host@3d1465606bed. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Group** `fix/compose-retries-transient`: novox/mesh-host@b0d6684d3731, novox/mesh-sdk@dfd5d8295e0a - composed together: pass — the checker's verdict at the members' heads (4295264dfd90) **Transitions** - 2026-10-31 00:12 (new) → proposed (announced): novox/mesh-host#185's head announced - 2026-10-31 00:12 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-31 00: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-tools merged commit 3d1465606b into main 2026-10-31 00:21:33 +00:00
mesh-tools deleted branch fix/compose-retries-transient 2026-10-31 00:21:33 +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-host#185