Files
hq/04-ISSUES/269-the-controller-cannot-write-a-work-queues-cancelled-set/00-report.md
T
jochen daa9f171ae
mesh/merge-gate pass: the change touches no module of the mesh's graph
mesh/repo-check pass: its merge-check.sh passed
mesh/delivery delivered
Issue reports carry only opened: the tracker holds every status, so no copy can drift
The import of slice 3 (ADR 0275) was checked against every folder: no report changed since the
commit it read, and the tracker holds each report's status, owner, fix, design amendment, replay
and closing day. The keys are removed from all 361 reports, cycle.py refuses them in any report,
and the playbooks, skills and READMEs that still pointed at them name the tracker instead.
2026-10-10 17:44:18 +02:00

2.2 KiB

opened
opened
2026-10-06

269. The controller cannot write a work queue's cancelled set

Symptom

Found while granting the controller the buckets of to-be 45 Phase 0, not seen on the live mesh. A bus server was given exactly the user list the controller composes for itself, and the controller, connected as itself, asked to mark a build cancelled:

asserting the cancelled set of the build seat     → succeeded
putting an ask's id into it                        → context deadline exceeded (3 s)

The same put into the controller's own new buckets succeeded once their subjects were granted, and timed out the same way before.

Cause

ADR 0219's cancel writes the ask's id into the seat's cancelled set before it deletes the ask, so a holder taking it in that moment ends it. Writing a key into a bucket is a publish to the bucket's own subject. The controller's grant reaches the bus's management interface, which creates the bucket, and does not reach the bucket's subject, which writes it. The server refuses the publish; the client waits for an acknowledgement that never comes.

So cancel and clear cannot complete. No test composes the controller's grant and writes the set as the controller: the queue's tests write it with an unrestricted connection.

Fix

The controller's publish grant names each cancelled set it writes, as it now names its own buckets, and a test writes the set as the controller, against a server holding the controller's composed grant. The installer's first user list says the same.

Pull requests: novox/mesh-controller#78 and novox/mesh-host#32 — open, not merged. Checked against a server holding the controller's composed grant: the put that timed out succeeds.

How it is checked

Live: cancel of a waiting ask answers that it was cancelled, and a holder taking that ask ends it.

Resolved — 2026-10-08

Both pull requests named under Fix are merged (2026-10-06) and live: the controller's publish grant names each cancelled set it writes, and the installer's first user list says the same.