An update of any inbuxa:Relay with replaceLinkCa, sent on its own, acts on the link CA every relay shares: start makes the next CA, finish makes it the link CA, cancel drops it. Every relay shows linkCaReplacing and its own linkCa (current, both, or old: it needs a new join). While one is under way, each node pushes the next CA's pin as nextLinkCaPin, and the relay trusts both, listing them in status.linkCaPins. Once every enabled, joined relay says both, the link service finishes it (relay.link-ca-replaced, event 659): each node takes a certificate from the new CA and links again. Its push of nextLinkCaPin: null, from a link on the next CA, makes that CA the relay's only one: saved in its identity, every link on the old CA ended, and relay.link-ca-replaced recorded. From the current CA, null is a cancel; a link on the next CA can't name another. The link service now sends settings it has cleared as null: the relay merges a push, so one left out stayed as it was. That also fixes a certificate removed here staying on the relay. A join whose token named a CA since replaced shows linkCa old. Tested: the relay's end to end test (both CAs trusted, the refusals, the promotion, the old CA's link cut and refused), the server's relay link test against the real relay binary (start, finished by itself, the relay's identity on the new CA, still joined), relay_tests, and a unit test of the linkCa states.