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-toolsmerged 2 commits from fix/1126-switch-safe into main2026-10-27 23:52:28 +00:00
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.
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
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.
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.
Deliverynovox/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.
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`.
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.
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).
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
a6e53a4858Delivery
novox/mesh-host@a6e53a485813— merged since 2026-10-27T23:52:30ZSource — source.main moved to novox/mesh-host@449cda1b00. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Group
fix/1126-switch-safe: novox/mesh-delivery@663c9cbc34, novox/mesh-host@a6e53a4858, novox/mesh-sdk@7359d187dbTransitions
The commit's note under
refs/notes/mesh-plankeeps every transition of this change up to its merge:git log --notes=mesh-plan.