On nats 2.10.29 a JetStream consumer with more than one filter subject is sometimes moved past a matching message without delivering it. Nothing is left pending and nothing is redelivered. The controller's events consumer has seven filters, and on 2026-10-06 a merge announcement on the stream never reached it (hq issue 266).
The image is pinned to nats:2.11.17-alpine by its multi-arch index digest (sha256:e4bf19f1…). The Dockerfile now states the release, because a digest does not.
TestAConsumerWithSeveralFiltersIsHandedEveryMessage reproduces the skip with the controller's exact consumer config under mesh-shaped traffic. It fails on 2.10.29 ("5 of 354 followed events were never handed to the consumer… nothing pending") and passes on 2.11.17. I ran it 4 times in a row.
TestTheImageIsTheServerTestedHere keeps the Dockerfile's release equal to the tested nats-server version in go.mod.
The composed controller config (broker golden) parses on 2.11.17. Moving 2.10 → 2.11 is a one-way upgrade of the stream store, so roll it out when the bus can restart.
Checks: gofmt -l (clean), go vet ./..., go test ./... in modules/nats.
On nats 2.10.29 a JetStream consumer with more than one filter subject is sometimes moved past a matching message without delivering it. Nothing is left pending and nothing is redelivered. The controller's events consumer has seven filters, and on 2026-10-06 a merge announcement on the stream never reached it (hq issue 266).
- The image is pinned to `nats:2.11.17-alpine` by its multi-arch index digest (`sha256:e4bf19f1…`). The Dockerfile now states the release, because a digest does not.
- `TestAConsumerWithSeveralFiltersIsHandedEveryMessage` reproduces the skip with the controller's exact consumer config under mesh-shaped traffic. It fails on 2.10.29 ("5 of 354 followed events were never handed to the consumer… nothing pending") and passes on 2.11.17. I ran it 4 times in a row.
- `TestTheImageIsTheServerTestedHere` keeps the Dockerfile's release equal to the tested nats-server version in go.mod.
The composed controller config (broker golden) parses on 2.11.17. Moving 2.10 → 2.11 is a one-way upgrade of the stream store, so roll it out when the bus can restart.
Checks: gofmt -l (clean), go vet ./..., go test ./... in modules/nats.
On 2.10.29 such a consumer was moved past a message now and then without
handing it over; the controller's events consumer has seven filters, and a
merge on the stream never reached it. The test reproduces the skip on 2.10.29
and keeps the image's release equal to the server it tests.
Deliverynovox/mesh-catalog@cc2f19123a49 — held since 2026-10-06T23:05:28Z
Held for a person: merged without a passing check: only a person decides that it goes on — mesh-delivery.release with why lets it go on.
Delivery plan — builds nats, sent nowhere; a bus step; 1 wait(s) for a person
tier 0: nats
novox: waits for a person: nats
a planned bus step: the bus is upgraded by bus upgrade, never by an ordinary send
nats provides mesh-bus: its consumers are sent again after it
nats keeps data (ADR 0233): what it holds is backed up before it moves
Transitions
2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#81 merged; its head was not heard by this owner, so it is made from the forge's word
2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on
The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-catalog@cc2f19123a49` — **held** since 2026-10-06T23:05:28Z
Held for a person: merged without a passing check: only a person decides that it goes on — `mesh-delivery.release` with why lets it go on.
**Delivery plan** — builds nats, sent nowhere; a bus step; 1 wait(s) for a person
- tier 0: nats
- novox: waits for a person: nats
- a planned bus step: the bus is upgraded by `bus upgrade`, never by an ordinary send
- nats provides mesh-bus: its consumers are sent again after it
- nats keeps data (ADR 0233): what it holds is backed up before it moves
**Transitions**
- 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#81 merged; its head was not heard by this owner, so it is made from the forge's word
- 2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on
The commit's note under `refs/notes/mesh-plan` keeps every transition: `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.
On nats 2.10.29 a JetStream consumer with more than one filter subject is sometimes moved past a matching message without delivering it. Nothing is left pending and nothing is redelivered. The controller's events consumer has seven filters, and on 2026-10-06 a merge announcement on the stream never reached it (hq issue 266).
nats:2.11.17-alpineby its multi-arch index digest (sha256:e4bf19f1…). The Dockerfile now states the release, because a digest does not.TestAConsumerWithSeveralFiltersIsHandedEveryMessagereproduces the skip with the controller's exact consumer config under mesh-shaped traffic. It fails on 2.10.29 ("5 of 354 followed events were never handed to the consumer… nothing pending") and passes on 2.11.17. I ran it 4 times in a row.TestTheImageIsTheServerTestedHerekeeps the Dockerfile's release equal to the tested nats-server version in go.mod.The composed controller config (broker golden) parses on 2.11.17. Moving 2.10 → 2.11 is a one-way upgrade of the stream store, so roll it out when the bus can restart.
Checks: gofmt -l (clean), go vet ./..., go test ./... in modules/nats.
Delivery
novox/mesh-catalog@cc2f19123a49— held since 2026-10-06T23:05:28ZHeld for a person: merged without a passing check: only a person decides that it goes on —
mesh-delivery.releasewith why lets it go on.Delivery plan — builds nats, sent nowhere; a bus step; 1 wait(s) for a person
bus upgrade, never by an ordinary sendTransitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.