Node agent: a switch never marks the new run's modules, a failed read or a bus pause keeps what runs, stale composer marks clear (issue 1126, group fix/1126-switch-safe) #155

Merged
mesh-tools merged 2 commits from fix/1126-switch-safe into main 2026-10-27 23:52:28 +00:00
Member

Delivery group fix/1126-switch-safe with mesh-sdk and mesh-delivery; pins mesh-sdk 7359d18 exactly. Issue 1126 (L2 of design 47).

Tonight (notes 40-44) two placement seeds made the node agents compose their own and fail every module; the way back worked, but a cancelled own-composition pass marked the NEW run's modules failed (current.get()), and those marks stay (ace 25, shanks 18).

  • Each run's composer hooks and shadow are bound to its own agent and context; an ended run writes nothing (ctx checked at each loop pass).
  • A pass whose context ended refuses nothing.
  • NotComposed tells an absent have from an unreadable one, re-reads 1 s and 2 s, marks nothing it cannot read, and marks over a have only when it says running, nothing, or is a composer's mark: an apply failure, applying or held keeps its own cause.
  • 'jetstream not enabled' and 'no responders' (the ~3.5 s pause at a bus reload) are retried 1/2/4 s before any mark.
  • At start, a composer's mark whose build and digest equal the want is rewritten as running and nothing is applied, so tonight's stale marks clear; a real apply failure is applied again.

Quick or thorough per item: on issue 1126 note 44; thorough throughout.

Known after delivery: shanks.openrazer (failed before tonight) carries an old composer mark; its phase will read running, its health stays failed from its own check.

Tests: rows in the agent and selfcompose tables (each fails without its fix, mutation-checked by the reviewer); H8 extended; TestNats* pass. Review: round 1 CHANGES (apply failure masked; ended run wrote marks), round 2 APPROVED.

Reviewed-by: review-switch@shanks at a6e53a4858

Delivery group fix/1126-switch-safe with mesh-sdk and mesh-delivery; pins mesh-sdk 7359d18 exactly. Issue 1126 (L2 of design 47). Tonight (notes 40-44) two placement seeds made the node agents compose their own and fail every module; the way back worked, but a cancelled own-composition pass marked the NEW run's modules failed (current.get()), and those marks stay (ace 25, shanks 18). - Each run's composer hooks and shadow are bound to its own agent and context; an ended run writes nothing (ctx checked at each loop pass). - A pass whose context ended refuses nothing. - NotComposed tells an absent have from an unreadable one, re-reads 1 s and 2 s, marks nothing it cannot read, and marks over a have only when it says running, nothing, or is a composer's mark: an apply failure, applying or held keeps its own cause. - 'jetstream not enabled' and 'no responders' (the ~3.5 s pause at a bus reload) are retried 1/2/4 s before any mark. - At start, a composer's mark whose build and digest equal the want is rewritten as running and nothing is applied, so tonight's stale marks clear; a real apply failure is applied again. Quick or thorough per item: on issue 1126 note 44; thorough throughout. Known after delivery: shanks.openrazer (failed before tonight) carries an old composer mark; its phase will read running, its health stays failed from its own check. Tests: rows in the agent and selfcompose tables (each fails without its fix, mutation-checked by the reviewer); H8 extended; TestNats* pass. Review: round 1 CHANGES (apply failure masked; ended run wrote marks), round 2 APPROVED. Reviewed-by: review-switch@shanks at a6e53a485813bd039e536d61fd44eb2e47d9b977
mesh-tools added 2 commits 2026-10-27 23:43:09 +00:00
Live 2026-10-28: the own run's last pass, failing on its run's end, marked
every module of the controller-mode agent that replaced it (ace 60, shanks 63),
and the marks dropped the build and digest because the have read failed in the
bus's reload pause. Now: the refusal hook is bound to the run's agent and ctx;
a pass whose context ended returns nothing; JetStream not enabled or no
responders are tried again after 1, 2 and 4 s before any mark; NotComposed reads
the have again while the bus does not answer and marks nothing it cannot read;
baseline takes a have a composer marked as what runs, so a mark it did not make
clears; each run's shadow lives with the run.
A composer's mark never covers another cause, and a run that ended marks and clears nothing (issue 1126, review of the switch, round 1)
mesh/delivery merged: source.main moved to novox/mesh-host@449cda1b003e
mesh/delivery-group group fix/1126-switch-safe merged: every member is merged
mesh/check pass a6e53a485813 on 199f6b48b1df | unit 2992 run, 1008 kept, 36 skipped | integration 3025 run, 1102 kept, 29 skipped | over bound: unit (…
a6e53a4858
NotComposed marked from a read have whatever its phase: an apply that failed,
naming the want's build and digest, became a composer's mark, which baseline
then took for what runs, and never applied again. It now marks only a have that
runs, says nothing, or is a composer's mark already. And its loop, whose reads
can take seconds, checks the run's context at each module, so a run that ended
writes no have.
Author
Member

Delivery novox/mesh-host@a6e53a485813 — merged since 2026-10-27T23:52:30Z

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

Group fix/1126-switch-safe: novox/mesh-delivery@663c9cbc34, novox/mesh-host@a6e53a4858, novox/mesh-sdk@7359d187db

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

Transitions

  • 2026-10-27 23:43 (new) → proposed (announced): novox/mesh-host#155's head announced
  • 2026-10-27 23:43 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 23:52 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@a6e53a485813` — **merged** since 2026-10-27T23:52:30Z **Source** — source.main moved to novox/mesh-host@449cda1b003e. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Group** `fix/1126-switch-safe`: novox/mesh-delivery@663c9cbc348d, novox/mesh-host@a6e53a485813, novox/mesh-sdk@7359d187db8d - composed together: pass — the checker's verdict at the members' heads (e69dbbe0ea51) **Transitions** - 2026-10-27 23:43 (new) → proposed (announced): novox/mesh-host#155's head announced - 2026-10-27 23:43 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 23:52 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 449cda1b00 into main 2026-10-27 23:52:28 +00:00
mesh-tools deleted branch fix/1126-switch-safe 2026-10-27 23:52:29 +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#155