fae039eba6d01ad08accf690fb8c28fb4206fd6e
autocert keeps its account key at one fixed name, `acme_account+key`, in whatever directory it is given, and reuses it for ever. That is right while the authority stays the same and silently wrong the moment it does not. Re-initialising the internal CA makes a new authority with a new root: it has never heard of the account in the cache, rejects every use of it, and autocert has no path back from that. Nothing is re-registered, no order ever reaches the CA, and issuance stops with nothing saying why — until somebody guesses that deleting the cache directory by hand is the answer. Name the directory after the authority instead of sharing one between all of them: a digest of the ACME directory URL and the root this proxy was told to verify it with. A re-initialised CA has a new root, the mesh delivers it as a changed bundle, the proxy restarts on that file and lands in a directory with no account in it, so autocert registers afresh and orders again. The healing is that "is this account still valid" never has to be asked — an account is only ever found where it is still valid, which needs no error codes, no probe at startup and no network call that can itself fail. It closes a latent one of the same shape: pointing ACME_DIRECTORY at production after testing against staging reused the staging account, because the cache had no idea the two were different. Trailing whitespace around the delivered root is not a new authority — the mesh writes that file, and a newline coming or going must not throw away an account. Old directories are left on disk, unused: they hold the only copy of certificates that may still be valid, and this program is not the thing that should decide a certificate is finished with. A proxy already holding certificates orders them once more on the first start after this, because its account moves. Free against the lab's own CA and against staging; one issuance per name against a public authority. novox/hq ADR 0056 Claude-Session: https://claude.ai/code/session_01LrgweAeERJYBg88c5cKDzF
Description
Novox Mesh — networking: the route-proxy module, which serves the mesh's names and routes, moved out of the controller's repository (issue 1126).
1.2 MiB
Languages
Go
100%