Amends decision 3 of 0076 (wave 3 owns
the licensing row of 0077).
Context
Pro packages and on-prem installs need licences that expire, carry seat and machine limits, and can work offline. The owner’s answers PK8, PK13, PK15 and EN6 (mem L458–461, L679, 2026-10-20) chose Keygen for the licence store and a small verifier that we write ourselves.Decision
- Keygen holds licences. Keygen holds the licences, the entitlements, the seat and machine limits, the expiry, and the signed offline licence files.
- We write two things.
@stackra/licensingis the verifier. A billing-to-Keygen webhook keeps licences in step with the subscription. The signing key is held in Infisical KMS. - Lifecycle (PK8). Billing webhooks create, renew and revoke licences from the first customer.
- Soft enforcement (PK13). An expired licence gives a warning, then a read-only admin mode after a grace period. Data is never lost.
- No phone-home (PK15). Installs never call home. A connected on-prem install may opt in. Compliance is a periodic signed report.
- On-prem entitlement (EN6). On-prem reads its entitlements from the licence file.
Consequences
- The licence is a file an on-prem customer can verify without a network.
- A revoked licence stops new seats, but it never deletes data.
Enforcement
planned —@stackra/licensing verifies signatures and expiry in its tests; the billing webhook is covered by a contract test.
Alternatives
- Our own licence store: rejected; Keygen covers it.
- Phone-home checks: rejected by PK15.
Supersedes and sources
Supersedes: none. Amends: 0076 decision 3. Sources: owner answers PK8, PK13, PK15, EN6 (stackra-decisions-2026-10-19.md
L458–461, L679, 2026-10-20). Closes gap B35.