Files
hq/04-ISSUES/269-the-controller-cannot-write-a-work-queues-cancelled-set/00-report.md
T
jschoubben 418261213c
mesh/merge-gate pass: the change touches no module of the mesh's graph
mesh/repo-check pass: THE CHANGE ALTERS ITS OWN CHECK (merge-check.sh): main's version judged it; the change's judges the pull requests after it merges; it…
mesh/delivery superseded: a newer head of the same pull request
Remove the decision records and research efforts, which the knowledge base now holds whole (issue 426)
ADR 0290 rule 9: once the import is checked record by record, hq keeps no copy.
The records and efforts are removed; every link or path to them reads "ADR NNNN" or
"research NNN"; a design's decisions: lists "ADR NNNN". 02-DECISIONS keeps a pointer
README with the reading order's six topics, which the knowledge base reads through the
records module; 01-RESEARCH keeps a pointer README. The checks drop the rules that
judged records (the knowledge base holds each at propose; checks/README.md says where)
and refuse a record written here again. Playbooks 01 and 02 and the skills write and
read records with the knowledge base's verbs.
2026-10-11 12:56:09 +02:00

51 lines
2.1 KiB
Markdown

---
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](../../03-DESIGN/01-to-be/45-a-core-that-cannot-fail-silently.md) 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.