A group try hears its events: the grants part adds a manifest's new event types, and no open tries is an answer (issue 1921) #157

Merged
mesh-tools merged 6 commits from fix/1921-try-live into main 2026-11-05 21:04:28 +00:00
Member

The first live group try (try-1793908525626556582) wrote no candidate, so its composition was never judged (issue 1921 note 43). Two causes, both fixed here:

  • No open tries is an answer. The checker answered checker_tries with {"tries": null} when no try was open, and the indexer refused it, so its recovery at start never succeeded. The checker now answers [], and the indexer takes null as none; a missing tries key or a wrong shape is still refused.
  • The grants part adds a manifest's new event types, and only adds (ADR 0640, accepted; the operator, 2026-11-05: "yes, add new event types automatically"). The checker's stream on the bus was created before try.* existed, and the grants part never changed a held stream, so try.started could not be said and the indexer's consumer never heard it. Now a held stream gains the subjects its manifest adds, and a held consumer the filters its module's consumes adds, keeping every other setting, the delivery position and the stored messages; nothing is removed, narrowed, limited differently or recreated. Each addition is said once in the journal and in the event asserted (ADR 0547 §5 as of its 2026-11-05 insight); a refusal is said once and tried again at every pass. The grants part gets $JS.API.STREAM.UPDATE.<stream> for declared streams, and every composed consumer its create-or-update grant (one with a single filter included). The texts that said a held stream is never changed now say it only ever gains.

Tested: unit rows in the grants part, the checker and the indexer, and a row of the grants part's whole-module test against an embedded bus running the real updates (limits, retention, created time, sequences, the consumer's delivered sequence and ack floor unchanged). No test function added (mesh-delivery is over its budget). No manifest changed.

After delivery the stream CHECKS and the indexer's consumer on it gain the try events by themselves, with no hand act; then the registry group's try runs again.

Reviewed-by: mesh-code-reviewer@shanks at 39285c95bd

https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i

The first live group try (try-1793908525626556582) wrote no candidate, so its composition was never judged (issue 1921 note 43). Two causes, both fixed here: - **No open tries is an answer.** The checker answered `checker_tries` with `{"tries": null}` when no try was open, and the indexer refused it, so its recovery at start never succeeded. The checker now answers `[]`, and the indexer takes `null` as none; a missing `tries` key or a wrong shape is still refused. - **The grants part adds a manifest's new event types, and only adds** (ADR 0640, accepted; the operator, 2026-11-05: "yes, add new event types automatically"). The checker's stream on the bus was created before `try.*` existed, and the grants part never changed a held stream, so `try.started` could not be said and the indexer's consumer never heard it. Now a held stream gains the subjects its manifest adds, and a held consumer the filters its module's `consumes` adds, keeping every other setting, the delivery position and the stored messages; nothing is removed, narrowed, limited differently or recreated. Each addition is said once in the journal and in the event `asserted` (ADR 0547 §5 as of its 2026-11-05 insight); a refusal is said once and tried again at every pass. The grants part gets `$JS.API.STREAM.UPDATE.<stream>` for declared streams, and every composed consumer its create-or-update grant (one with a single filter included). The texts that said a held stream is never changed now say it only ever gains. Tested: unit rows in the grants part, the checker and the indexer, and a row of the grants part's whole-module test against an embedded bus running the real updates (limits, retention, created time, sequences, the consumer's delivered sequence and ack floor unchanged). No test function added (mesh-delivery is over its budget). No manifest changed. After delivery the stream CHECKS and the indexer's consumer on it gain the try events by themselves, with no hand act; then the registry group's try runs again. Reviewed-by: mesh-code-reviewer@shanks at 39285c95bdaeed797e07f36988d12cac0cc1f18c https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
mesh-tools added 6 commits 2026-11-05 20:59:16 +00:00
Author
Member

Delivery novox/mesh-delivery@39285c95bdae — merged since 2026-11-05T21:04:30Z

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

Transitions

  • 2026-11-05 20:59 (new) → proposed (announced): novox/mesh-delivery#157's head announced
  • 2026-11-05 20:59 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-05 21:04 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-delivery@39285c95bdae` — **merged** since 2026-11-05T21:04:30Z **Source** — source.main moved to novox/mesh-delivery@fab533dfd0cd. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Transitions** - 2026-11-05 20:59 (new) → proposed (announced): novox/mesh-delivery#157's head announced - 2026-11-05 20:59 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-05 21:04 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 fab533dfd0 into main 2026-11-05 21:04:28 +00:00
mesh-tools deleted branch fix/1921-try-live 2026-11-05 21:04:28 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-delivery#157