Closes #193. Four atomic commits cleaning up follow-up points from the v2.5.5 (PR #156) review. No behaviour change visible to operators; one tiny information-disclosure tightening on the API.
What landed
test(key-options): stale docstring fixed (the test rejectedrsa+1024, notrsa+curveas the docstring claimed) + new test pins the deliberate soft-validate contract (inactive field stashed verbatim so the UI doesn't lose values on RSA <-> ECDSA toggles).fix(api): key-options validation now runs AFTER the domain scope check on the cert-create endpoint. Out-of-scope callers can no longer probe field-specific 400 messages for domains they cannot see.fix(api): per-certkey_type/key_size/elliptic_curveno longer persisted as dead state insettings.json. Renewals preserve shape via certbot's ownrenewal/<domain>.conf.refactor(settings):_SECRET_KEYSregex +_NON_SECRET_KEYSallowlist hoisted to module scope (was rebuilt per GET).
Closes #193.