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.
2.4 KiB
opened
| opened |
|---|
| 2026-10-05 |
258. Every machine bound the mesh's resolver to itself
Symptom
After the mesh moved to one resolver (ADR 0194, 0196), the seat mesh-dns-resolver was recorded as
held on the anchor, and each other machine was pinned to it for wildcard-resolution. Each machine
was then pushed. The anchor's resolver configuration named its own private address first. Every
other machine's did too: each named its own private address, not the anchor's.
Nothing broke, because each machine still ran a resolver of its own while the move was under way. But the mesh had decided on one resolver, recorded who held it and pinned every machine to it, and no machine used it.
Cause
The controller binds a requirement in one of two branches:
- Answered here, when a module on the same machine provides it.
- Answered elsewhere, when one on another machine does.
Only the second branch read the seat's holder (ADR 0110) and a pin. The first took the local provider, and read a pin only to choose between two local ones. Every machine still had its own resolver assigned, so every machine took the first branch.
The seat's own definition says the requirement "resolves to the holder wherever it is placed". The code did not.
Fix
For a mesh-wide provision, a pin naming another machine, or the seat's holder on another machine, wins over a provider on this one. With neither, the local provider answers as before.
This is checked by three resolve tests in mesh-controller:
- the holder elsewhere answers;
- a pin elsewhere answers;
- a holder here still answers here.
The tests fail without the fix.
The fix broke something else (issue 273). It applied to every seat that delivers a provision, and the store's seat delivers the relational database. Its first push re-bound every database consumer on a machine running its own store to the store holding the seat. Each was made an empty database there, and nothing said so for twenty hours. ADR 0232 limits this rule to provisions that keep nothing of their consumers'. For one that keeps data, only a pin moves a consumer away from a provider beside it.
Verified
2026-10-05, after the fix rolled out: all four machines' resolver configuration names the anchor's resolver first and the public one second. Each resolves the mesh's machine names, a wildcard name under a machine, and a public name.