Transfers silently stalled Network assumptions | A secondary drifted behind the signer | Port 5353 is multicast DNS and was swallowed leaving the VMs | Transfer route moved to 8053 | Probe every new route from the server that will use it |
|---|
False DNS failures after retiring an address Network assumptions | Readiness fell to 0 of 35; cluster cards out of sync | Three checks still queried the retired public address | One endpoint rule: LAN, then route, then public | Sweep every query target when an address is retired |
|---|
New VM had no network Network assumptions | No address after first boot | Copied settings let the hypervisor regenerate the MAC address | Static MAC matched to the first-boot network settings | Identity is explicit in every build |
|---|
External router faults Network assumptions | Agent flapping; router admin page crashed | Consumer router at a remote site | Treated as an external dependency and monitored (open) | Watch every external dependency; never assume it |
|---|
Hidden two-or-three-server limits Hidden coupling | A fourth server failed to join, step by step | Assumptions scattered through the code | Membership generalised to any number | Membership rules live in one place |
|---|
Address uniqueness clash Hidden coupling | A second server could not be built at one site | Public address treated as unique per server | Uniqueness by hostname and LAN address; build queue still to align (open) | One rule, applied everywhere it is checked |
|---|
Standby could not run Platform portability | The cloned VM refused to start | An ARM VM was copied to an Intel host | Portable encrypted replica, rebuilt per architecture | Check the architecture first; state travels as data, not disk images |
|---|
A standby could still be started Platform portability | Masking services silently failed | Unit files sat where the mask had to go | A do-not-start-while-standby rule tied to one marker | Promotion is removing one file |
|---|
Signing keys on public servers Safety design | Found reviewing the key mirror | Keys were mirrored to every secondary | Keys only on hidden standby signers | No private key on a published server |
|---|
Split brain: two signers Safety design | Found in design review, before it happened | Each side able to act alone when cut off | Witness plus two checks; isolation hold; epoch fencing | No side acts without independent agreement |
|---|
False Steward down Check validity | The watcher saw Steward down while it was up | A request method the server does not implement | A real request; only a missing backend counts as down | Test every check against reality before it can act |
|---|
Standby user IDs differed from home Platform portability | The routing gate refused at the standby | Users created with whatever numbers were free; settings store numbers | Standby IDs match home by construction | Explicit identity, the same at every site |
|---|
Forced promotion had no signing profile Hidden coupling | The new signer refused to configure | The profile normally travels in the old signer’s fence receipt | Profile recorded every minute and checked before a drill | A forced move ends confirmed, as a planned one does |
|---|
A finished build agent held the signer’s database Hidden coupling | Promotion could not install its database | The commissioning agent kept running for 15 days | Agent stopped; to close its database and exit after joining | Never install a database beside another’s journal |
|---|
Signer’s LAN address missing as a notify source Network assumptions | A secondary ignored changes until it polled | The member record held only the public address | LAN address added at every member and Steward | Sweep every query target when an address retires |
|---|
Catalog left frozen after a forced move Hidden coupling | New zones would not have propagated | The forced path froze catalogs but never thawed them | Each follower thaws its catalog | A forced move ends confirmed, as a planned one does |
|---|
Notifications refused at forwarded ports Network assumptions | Secondaries caught up only by polling, since 4.22 | A primary configured as address:port never matches the sender | Each secondary trusts its primary’s own addresses; signed notifies only | Probe every new route from the server that will use it |
|---|
Database installed beside another’s journal Safety design | Steward refused a damaged database; recovered intact | Replica applied without removing the old write-ahead journal | Old journals removed before any database is installed | Never install a database beside another’s journal |
|---|
Forced records never closed Hidden coupling | A planned handover could not start afterwards | The forced path had no confirm step | force-confirm closes every member’s record | A forced move ends confirmed, as a planned one does |
|---|
Diagnostics held a running handover Check validity | A handover paused as if Steward had restarted | A status check started a second handover worker | Status read from the gate or the page; never the module | Observe before acting; diagnostics never act |
|---|
Handover probe assumed the old shape Network assumptions | The handover held at its baseline | Probe used a retired address and a same-site destination | Hidden servers probed through their routes; same-site read directly | Sweep every query target when an address retires |
|---|
A patch shadowed a variable Check validity | The corrected probe still failed | Test covered part of the file, not the whole function | Tests run the whole function on the exact source | Test every check against reality before it can act |
|---|
Handover check sized for three members Check validity | Repointing stopped after the first secondary | With three members only one secondary was ever untouched | Repointed members measured as repointed | Membership rules in one place, for any number |
|---|
Weekly serial tick sent no notification Network assumptions | Secondaries lagged after Thursday 00:00 UTC | The served serial changes with the week; nothing notifies | Signer notifies every zone after the tick (release 7.2) (open) | Every serial change is notified |
|---|