#438: Remove licence — clean downgrade to the free tier #440

Merged
Cordy merged 4 commits from license-remove-438 into main 2026-09-06 04:10:48 +00:00
Owner

Closes #438. Built per the approved license-remove mockup (full-page placement + confirm variants).

  • Manager.RemoveKey (TDD, compile-red witnessed): clears key, label and every licence flag — including a pending revoked watch — persists, and keeps seat history and the drop/restore trail. Keyless means no phone-home, ever; no card or warning remains after removal. A key supplied via config/CAIRN_LICENSE_KEY re-installs at the next boot (documented).
  • DELETE /api/v1/license: admin-gated like the rest of the surface, 409 when nothing is installed, audited as license-remove (verb added to the audit inventory comment).
  • Frontend: the Licence facts card gains a footer — audit note left, quiet "Remove licence…" right, rendered only while a key is installed. Confirm dialog with the live-computed seat line: fits-the-free-tier, or amber over-50 in the #437 dropcard's calm wording. No typing ritual. 11 i18n keys ×4 locales.
  • Docs: CHANGELOG v0.6.134, licensing-faq "How do I downgrade to the free tier?", ARCHITECTURE admin-surface row.
Closes #438. Built per the approved license-remove mockup (full-page placement + confirm variants). - **Manager.RemoveKey** (TDD, compile-red witnessed): clears key, label and every licence flag — including a pending revoked watch — persists, and keeps seat history and the drop/restore trail. Keyless means no phone-home, ever; no card or warning remains after removal. A key supplied via config/`CAIRN_LICENSE_KEY` re-installs at the next boot (documented). - **`DELETE /api/v1/license`**: admin-gated like the rest of the surface, 409 when nothing is installed, audited as `license-remove` (verb added to the audit inventory comment). - **Frontend**: the Licence facts card gains a footer — audit note left, quiet "Remove licence…" right, rendered only while a key is installed. Confirm dialog with the live-computed seat line: fits-the-free-tier, or amber over-50 in the #437 dropcard's calm wording. No typing ritual. 11 i18n keys ×4 locales. - **Docs**: CHANGELOG v0.6.134, licensing-faq "How do I downgrade to the free tier?", ARCHITECTURE admin-surface row.
Compile-red against main: RemoveKey does not exist. Removing the key
returns the instance to the free tier immediately, clears every
licence-related flag (including a pending revoked watch), silences
phone-home for good, persists, and keeps the seat history and the
drop/restore trail — removing a key is not amnesia.
#438: Remove licence - clean downgrade to the free tier
All checks were successful
ci / test-and-build (pull_request) Successful in 41s
00bf40984e
Manager.RemoveKey clears the key, label and every licence flag (including a pending revoked watch), persists, and keeps seat history and the drop/restore trail; keyless means no phone-home ever. DELETE /api/v1/license (admin-gated, 409 when nothing is installed) audited as license-remove. Frontend per the approved mockup: facts-card footer with audit note and a quiet Remove licence action, confirm dialog with the live-computed seat line (fits vs over-50 in the dropcard's calm wording), 11 i18n keys x4. CHANGELOG v0.6.134, licensing-faq downgrade question, ARCHITECTURE admin-surface row.

TDD: RemoveKey witnessed compile-red on the runner; all green after splice.
Cordy merged commit 6772517298 into main 2026-09-06 04:10:48 +00:00
Cordy deleted branch license-remove-438 2026-09-06 04:10:51 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Cordy/Cairn#440
No description provided.