Fixes hq issue 204 (diagnosis in hq PR to follow). Two faults produced the stale declaration of 2026-10-02 21:29:
The sequence went on at send time, after composing. Every path composed first and numbered as it sent; a multi-machine send composes all machines before sending any, so a declaration composed before an assignment changed and sent after a fresher one carried the higher number, and the host — which refuses only lower numbers — applied the older content as the newest word. Now every path allots the sequence before composing (composeEach takes an allotter; the rollout allots before planFor), so what was composed earlier is numbered lower whatever order the sends happen in, and the host's existing refusal does its job.
The send record was written on the sender's context, after the send. A controller replaced in that second was cancelled between telling the machine and writing the record. recordSent now writes on context.WithoutCancel with a 10 s bound; the raw declare command records its send too.
Tests: compositions in one order and sends in the other keep numbers in composition order; a failing allotter is a refusal, not a compose; a send is recorded after the sender's context is cancelled (store-backed). go build, go vet, go test ./... green with Postgres and NATS.
Open for HQ (in the diagnosis): showing the last sent sequence in status; whether a sender's hold should cover the assignment verbs.
Fixes hq issue 204 (diagnosis in hq PR to follow). Two faults produced the stale declaration of 2026-10-02 21:29:
1. **The sequence went on at send time, after composing.** Every path composed first and numbered as it sent; a multi-machine send composes all machines before sending any, so a declaration composed before an assignment changed and sent after a fresher one carried the higher number, and the host — which refuses only lower numbers — applied the older content as the newest word. Now every path allots the sequence **before** composing (`composeEach` takes an allotter; the rollout allots before `planFor`), so what was composed earlier is numbered lower whatever order the sends happen in, and the host's existing refusal does its job.
2. **The send record was written on the sender's context, after the send.** A controller replaced in that second was cancelled between telling the machine and writing the record. `recordSent` now writes on `context.WithoutCancel` with a 10 s bound; the raw `declare` command records its send too.
Tests: compositions in one order and sends in the other keep numbers in composition order; a failing allotter is a refusal, not a compose; a send is recorded after the sender's context is cancelled (store-backed). `go build`, `go vet`, `go test ./...` green with Postgres and NATS.
Open for HQ (in the diagnosis): showing the last sent sequence in `status`; whether a sender's hold should cover the assignment verbs.
On 2026-10-02 a runtime assigned and applied on two machines was undone two seconds later by a
declaration that had the assignments of a minute earlier. Every path composes from the records at
compose time and holds the machines it sends — but the number went on at SEND time, after
composing, so a declaration composed before an assignment changed and sent after a newer one
carried the higher number, and the host, which rightly refuses a lower number, took the older
content as the mesh's newest word. The record of that send was never written either: it is written
after the declaration is away, on the sender's context, and the controller sending it was being
replaced in that very second — status read "applied, current" over a machine just told otherwise.
Now the number is taken before the composition reads anything, in every path, so what was composed
earlier is numbered lower however late it goes out and the host's refusal does what it is for; and
what was sent is written down on a context that outlives the sender, bounded, so a dying controller
still records what it told a machine. The `declare` command — a declaration a person sends by hand —
records its send too. Proven: compositions in one order and sends in the other keep the numbers in
composition order; a send is recorded after the sender's context is cancelled.
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.
Fixes hq issue 204 (diagnosis in hq PR to follow). Two faults produced the stale declaration of 2026-10-02 21:29:
composeEachtakes an allotter; the rollout allots beforeplanFor), so what was composed earlier is numbered lower whatever order the sends happen in, and the host's existing refusal does its job.recordSentnow writes oncontext.WithoutCancelwith a 10 s bound; the rawdeclarecommand records its send too.Tests: compositions in one order and sends in the other keep numbers in composition order; a failing allotter is a refusal, not a compose; a send is recorded after the sender's context is cancelled (store-backed).
go build,go vet,go test ./...green with Postgres and NATS.Open for HQ (in the diagnosis): showing the last sent sequence in
status; whether a sender's hold should cover the assignment verbs.