Licensing: "Remove licence" button — clean downgrade to the free tier (after #437's state cards) #438
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Nikola, 2026-09-06, while approving the #437 inactive-state cards: an operator who deliberately downgrades to the free tier should be able to remove the key — today a key can only be replaced, never removed; it lingers until expiry or revocation.
Behaviour (all falls out of existing design once the key is cleared):
license-remove) for symmetry withseat-release.Sequencing: after the #437 cards land (the button belongs on/near that surface). UI change → confirm-dialog mockup first, house rule — the dialog should state the three consequences above in one honest sentence each, seat-release style. Reinstalling later is just pasting the key again; nothing is lost server-side.
Shipped in v0.6.134 (PR #440, merged; dogfoods live,
build_info v0.6.134, enc licence untouched).Decision record (per the approved license-remove mockup):
Manager.RemoveKey: clears key, label and every licence flag including a pending revoked watch; persists; keeps seat history and the drop/restore trail (removing a key is not amnesia). Keyless = no phone-home, ever. A config/CAIRN_LICENSE_KEYkey re-installs at the next boot — the FAQ documents removing it from config to make the downgrade stick.DELETE /api/v1/license: admin-gated, 409 when nothing is installed, audited aslicense-remove.TDD:
TestRemoveKeyReturnsToFreeTierwitnessed compile-red on the runner; full suite green after the splice (covers revoked-state cleanup, persistence across reload, trail survival, double-removal, and the no-phone-home guarantee).