#437: revoked is a watch, not a verdict — transient refusals self-heal, and the drop explains itself #439
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "license-drop-437"
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?
Closes #437.
The August incident, closed end to end:
Backend (TDD, red witnessed on the runner): a 403 revoked/unknown still drops the licence to the free tier immediately, but now starts a 14-day revoked watch — daily check-ins continue and the first 200 restores the licence with no admin action. Past the watch the instance goes quiet for good. Legacy revoked state re-enters the watch on load. The state file records a capped drop/restore transition history with reasons (refused/grace/expired) — the forensic trail the incident lacked. Status API adds
inactiveReason/inactiveSince/retryUntil/licSeats.TestForbiddenRevokedStillStopsasserted the incident-causing behaviour and becameTestForbiddenRevokedEntersWatch.Observability:
/metricsgainscairn_license_installed/cairn_license_licensed/cairn_license_seat_cap(absent when unwired) — installed=1 with licensed=0 is the silent free-tier fallback and becomes alertable (homelab-config rule follows separately).Frontend (per the approved license-inactive-states mockup): one state-driven dropcard on the Licence page for the three inactive states, shared calm line, Check in now action; the seat meter dims and names the suspended cap; the bell renders license-dropped/license-restored transitions (admin-only, click lands on Licensing); 20 i18n keys ×4 locales.
Docs: CHANGELOG v0.6.133; licensing-faq and ARCHITECTURE revoked wording updated to the watch semantics.