Recovery fix, member of the group fix/1966-views-page-time (mesh-sdk, mesh-tools, mesh-host), merged as one group.
Cause
Live on 2026-11-09 from 07:48 UTC: novox's want for distribution names src2:6e1dfaa8… (self, put, hold), and the indexer holds that fp with a done build. Yet node-engine.composition answers "the bucket holds no composition of distribution at src2:6e1dfaa8…", node-engine.compose answers handed 0 with nothing held or refused, and the journal says nothing.
takeWant drops a want it cannot take, with no line.
The handed-digest memory is never reset for an agent that lacks the composition.
frombus's skipped list is discarded.
A module with no done build is composed from its manifest, silently.
The agent's wait for its own composition says nothing.
The cause of this live case is not yet proven; this change makes it readable. This follows nothing-moved-in-five-minutes: make it visible.
Quick or thorough
Quick: a hand restart of the engine. Not taken: it proves nothing and is not allowed.
Thorough, chosen:
Pass.Unmade names every wanted module not composed at its want's fp (or composed from its manifest for want of a done build), with why. It is in node-engine.compose's answer and a journal line, once per module and reason.
The agent's wait says itself once per want, in the journal and in the composition read.
The agent's first wait tells the composer, which forgets the digest it believed it handed and composes again (never for a key it never handed, so this cannot loop).
Evidence
No new test functions: the cases are folded into TestTheNodesOwnCompositionIsAppliedWhenItDiffersAndARecordMoveWaitsForAYes and TestTheNodeComposesItsWantsFromTheBus. Each part fails a test when taken out.
The unit suite, go vet and go vet -tags integration pass, and so does -race -count=3 of agent and selfcompose.
Note
selfcompose.go:250, the doc of Pass.Unmade, still reads as if it lists only modules with no composition. It also lists those composed from the manifest; to be fixed with the next change there.
Undo
Revert the group's merges.
Reviewed-by: mesh-code-reviewer@shanks (for fix-1965) at 6bde46cb00, two rounds.
Recovery fix, member of the group fix/1966-views-page-time (mesh-sdk, mesh-tools, mesh-host), merged as one group.
## Cause
Live on 2026-11-09 from 07:48 UTC: novox's want for distribution names src2:6e1dfaa8… (self, put, hold), and the indexer holds that fp with a done build. Yet node-engine.composition answers "the bucket holds no composition of distribution at src2:6e1dfaa8…", node-engine.compose answers handed 0 with nothing held or refused, and the journal says nothing.
A reading of 9b55bcb found five silent paths:
- takeWant drops a want it cannot take, with no line.
- The handed-digest memory is never reset for an agent that lacks the composition.
- frombus's skipped list is discarded.
- A module with no done build is composed from its manifest, silently.
- The agent's wait for its own composition says nothing.
The cause of this live case is not yet proven; this change makes it readable. This follows nothing-moved-in-five-minutes: make it visible.
## Quick or thorough
- Quick: a hand restart of the engine. Not taken: it proves nothing and is not allowed.
- Thorough, chosen:
- Pass.Unmade names every wanted module not composed at its want's fp (or composed from its manifest for want of a done build), with why. It is in node-engine.compose's answer and a journal line, once per module and reason.
- The agent's wait says itself once per want, in the journal and in the composition read.
- The agent's first wait tells the composer, which forgets the digest it believed it handed and composes again (never for a key it never handed, so this cannot loop).
## Evidence
- No new test functions: the cases are folded into TestTheNodesOwnCompositionIsAppliedWhenItDiffersAndARecordMoveWaitsForAYes and TestTheNodeComposesItsWantsFromTheBus. Each part fails a test when taken out.
- The unit suite, go vet and go vet -tags integration pass, and so does -race -count=3 of agent and selfcompose.
## Note
selfcompose.go:250, the doc of Pass.Unmade, still reads as if it lists only modules with no composition. It also lists those composed from the manifest; to be fixed with the next change there.
## Undo
Revert the group's merges.
Reviewed-by: mesh-code-reviewer@shanks (for fix-1965) at 6bde46cb0084a672e1e74729f496af3494c66369, two rounds.
https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
Every pass names each wanted module it made no composition of, with why (Pass.Unmade, the verb compose, one journal line per
change); a want not taken is said; the agent says once per want that it waits for the composer and why, and tells it, so a
composition the composer believed handed is handed again.
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
The said-once keys no longer hold where the indexer's picture stands; a module composed from the manifest for want of a done
build is named in Pass.Unmade; the agent's wait is told once per want and again after the composition was there; the two tests
are folded into existing ones.
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
Deliverynovox/mesh-host@6bde46cb0084 — merged since 2026-11-09T08:13:22Z
Source — source.main moved to novox/mesh-host@25d677d20c. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
2026-11-09 08:12 (new) → proposed (announced): novox/mesh-host#216's head announced
2026-11-09 08: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-11-09 08:13 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@6bde46cb0084` — **merged** since 2026-11-09T08:13:22Z
**Source** — source.main moved to novox/mesh-host@25d677d20c93. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Group** `fix/1966-views-page-time`: novox/mesh-host@6bde46cb0084, novox/mesh-sdk@833cffdc9bdf, novox/mesh-tools@2135fed6cf1f
**Transitions**
- 2026-11-09 08:12 (new) → proposed (announced): novox/mesh-host#216's head announced
- 2026-11-09 08: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-11-09 08:13 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.
Recovery fix, member of the group fix/1966-views-page-time (mesh-sdk, mesh-tools, mesh-host), merged as one group.
Cause
Live on 2026-11-09 from 07:48 UTC: novox's want for distribution names src2:6e1dfaa8… (self, put, hold), and the indexer holds that fp with a done build. Yet node-engine.composition answers "the bucket holds no composition of distribution at src2:6e1dfaa8…", node-engine.compose answers handed 0 with nothing held or refused, and the journal says nothing.
A reading of
9b55bcbfound five silent paths:The cause of this live case is not yet proven; this change makes it readable. This follows nothing-moved-in-five-minutes: make it visible.
Quick or thorough
Evidence
Note
selfcompose.go:250, the doc of Pass.Unmade, still reads as if it lists only modules with no composition. It also lists those composed from the manifest; to be fixed with the next change there.
Undo
Revert the group's merges.
Reviewed-by: mesh-code-reviewer@shanks (for fix-1965) at
6bde46cb00, two rounds.https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
Delivery
novox/mesh-host@6bde46cb0084— merged since 2026-11-09T08:13:22ZSource — source.main moved to novox/mesh-host@25d677d20c. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Group
fix/1966-views-page-time: novox/mesh-host@6bde46cb00, novox/mesh-sdk@833cffdc9b, novox/mesh-tools@2135fed6cfTransitions
The commit's note under
refs/notes/mesh-plankeeps every transition of this change up to its merge:git log --notes=mesh-plan.