Skip to main content

The licensing lifecycle

A System9 license is a signed offline trust artifact, not a call home. An Ed25519-signed key, verified against a CA public key compiled into the build, whose private half never leaves an HSM, carries the organization's identity, its tier, its deployment posture, its entitlement limits, and its feature flags. From that one artifact the platform derives two independent things: what the cell may do (capabilities) and how the cell behaves as the license ages (enforcement). Both derivations run with no network, so the license works identically in the connected cloud and behind the air gap.

Two rules make the whole lifecycle safe to depend on:

  • Overage is billed, never blocked. Exceeding an included allowance emits a billing sample; it does not refuse the request.
  • The enforcement SDK never raises. A cap check returns a decision object; a service hot path translates a miss into a 402, never an exception.

This page is the arc from a signed key to a running, enforced cell, and the two ways capacity is bought over it, metered by default, or prepaid per node. For the identity the license is issued to, see the entity model; for how metered work becomes a verifiable bill, see Metering, FinOps & tokenomics.

License → capability → enforcement​

Activation is the one chokepoint: a single builder registers the complete runtime key set, so no install path can leave the cell holding a subset of the license state. From the activated license, capability configuration and enforcement resolution proceed independently.

Figure L1: from a signed key to an enforced cell. The green stages are cryptographically verified (offline signature check, then the single activation chokepoint); the two derivations run independently from the activated license. The amber gate is where refusal can happen; a cyan included-overage is billed and the request proceeds, while a red hard-cap miss returns a 402. Ceiling: enforcement grading is implemented and wired; the operator-facing offline-status surface it feeds is owed.

Table equivalent

FromRelationshipToMeaning
Signed license keyverified offline, thenActivate (one chokepoint)verified (green): Ed25519 vs compiled-in CA key
ActivatederivesCapability tier mappingMilitary only when the ITAR conjunction holds, else Enterprise
Capability tier mappingconfiguresCapability registryholds the tier, or None when unlicensed
Capability registryyieldsEnabled capability modulesthe empty set when unlicensed (fail-closed)
ActivatederivesLadder gradingexpiry, offline-since-sync, and chain integrity all grade into one ladder
Ladder gradingresolves toPermission-bit assignmentthe single place every permission bit is set
Permission-bit assignmentdrivesBorn-enforced write gate + cap checkrefusal happens here (amber)
Gateon included overageOverage accountantbilled, request proceeds (cyan)
Gateon hard-cap miss402 responsedenied; "activate to unlock" (red)

Capability tiers​

There is deliberately one rung per issuable tier, and no lesser third rung. A cell with no valid license holds no tier, represented as none, which resolves to the empty set of capability modules. Fail-closed is the default, not a mode.

TierGranted whenAdds, cumulatively
(none)no valid licensenothing: the empty module set
Enterpriseany valid license that is not a qualifying military licensethe base modules plus the enterprise security modules
Militarya military license and a sovereign or tactical posture and an ITAR-eligible class: the ITAR conjunctioneverything Enterprise has, plus the defense modules

Tiers are cumulative: Military includes everything Enterprise grants, which includes the base modules that are always on for any licensed cell. A military license that fails the ITAR conjunction does not fall to nothing, it maps down to Enterprise (a commercial-defense posture), because a signature that verifies is still a real entitlement.

Capability modules are grouped by the tier that unlocks them:

  • Base (every licensed tier): detection, alerting, compliance, posture, event ingest, and the security graph.
  • Enterprise adds: behavioral analytics, data-loss prevention, orchestrated response, threat intelligence, supply-chain assurance, agents, and the advanced network-defense modules.
  • Military adds: cyber operations, counter-threat, red-team and adversary modeling, self-healing, battlefield operations, tactical-edge, and radio integration.

The tier is a capability axis and is not the ITAR gate itself: ITAR-gated routes are enforced independently on every request. Deployment posture (commercial, sovereign, tactical) is a third axis again, independent of tier.

Entitlements: the short-lived offline grant​

The license is the durable artifact; between check-ins, enforcement rides on a short-lived, Ed25519-signed entitlement token. It carries the tier, features, limits, a validity window, and a monotonic epoch so a token cannot be replayed after it is superseded. The token has its own temporal states, not-yet-valid, valid, grace, expired, classified purely from its window, and it is audience-bound: the token's organization must equal the deployment's organization or enforcement drops to the pre-license posture. A monotonic epoch ratchet, scoped per deployment organization, defends against clock rollback: a token from an epoch below the ratchet floor is refused.

The four-stage expiry ladder​

Nothing goes dark on day one. Expiry is a single degradation ladder for the whole platform, and a license carries its own grace and read-only windows (30 days and 30 days by default). The doctrine is fixed in three phrases: born enforced (no entitlement is the pre-license Provisional rung, never fail-open), degrade the workload, never the senses (reads, export, and the essential internal writes (audit, telemetry, attestation, metering) stay on in every state), and never brick (Grace keeps workloads running and blocks only new provisioning).

Figure L2: the expiry state machine, read left to right as severity climbs. Provisional (amber) is the pre-license rung a cell is born into; Active (green) is full function; Grace (cyan) is the never-brick rung that keeps workloads running; Read-Only and Suspended shed function while the senses stay on. Three graders, expiry, time-since-sync, and audit-chain integrity, each grade into this one ladder and the most severe wins; a grader can only escalate, never relax. Ceiling: windows are per-license (30/30 by default); a license may set a zero grace window for a hard-stop trial.

Table equivalent

StateReached whenWritesNew resourcesComputeReads / export / essential writes
Provisionalno entitlement yetnononoalways yes
Activea valid license is activeyesyesyesyes
Gracepast expiry, within the grace windowyesnoyesyes
Read-Onlygrace window elapsednononoyes
Suspendedread-only window elapsed, or revokednononoyes (admin + export)

The essential-writes floor (audit, telemetry, attestation, and metering) is not tunable: no state can turn it off. That is what "degrade the workload, never the senses" means in the permission bits.

Installing, renewing or rotating a key

This page is the model. Applying a license is the operational half: the five install paths, what each rejection code means, how a renewal fans out across a node's cells, and how all of it works air-gapped.

For the second grader in the ladder above, time since the last verified sync, and what happens across a long disconnection, see when the meter cannot report.

Overage is billed, never blocked​

Included allowances (included_* limits) define what the base plan covers. Exceeding one is billed, not refused. The overage accountant reads durable consumption totals, advances a high-water mark first so a concurrent writer cannot double-bill, and only then emits the billable delta as a usage sample on a cost-bearing dimension; pricing is attached downstream by rate cards. An included limit of zero means unlimited, no charge. By construction, edge-origin work contributes zero compute units, so it can never push an organization into overage.

Infrastructure count is free on every axis: cells, nodes, and service groups are unlimited and unmetered. You are never charged for the shape of your deployment, split into twenty cells across five regions for residency and resilience and the topology costs nothing; only actual work does.

The enforcement SDK never raises​

Usage caps are enforced by a check that never throws. It returns an outcome object, allowed or not, with what was used, the limit, and, when denied, a ready-made 402 problem-detail body, so a service hot path is never forced to handle an exception on a cap miss. The rules it applies:

  • No license → fail-open (development and test), so an unlicensed dev cell is not bricked by the cap layer; enforcement of the ladder still governs writes.
  • License present, no hard cap for the resource → allowed; any included overage is billed downstream, not blocked here.
  • A hard cap is set and exceeded → the outcome is not allowed with a 402 whose remediation points to activation, not to an upgrade page, both tiers are arranged with you directly.

Reported used and limit values are only ever what was actually measured; the check never fabricates a zero. In a multi-cell estate the check consults an authoritative global counter through a proxy first and falls back to the local counter, so a hard cap is a fleet-wide ceiling rather than a per-cell one.

Two ways to buy capacity: metered by default, or prepaid per node​

Consumption is denominated in compute units (CU), the internal unit of account, cost_units in the meter. There are two purchasing shapes over the same metering, and a deployment can use either:

  • Metered by default (organization post-paid). The default. Work accrues CU against the organization's included allowances, and an overage is billed, not blocked (above). This is the model the rest of this page describes.
  • Prepaid capacity blocks (per node). A node can instead hold a prepaid block of capacity, a fixed quantity of CU purchased ahead of use, sized to the node. Blocks come on a ladder from a small base block up through a doubling progression to the largest (roughly a 1→2048 range of capacity), and a capacity sizer recommends a block from an expected workload. A node draws down its block as it works; a block is a per-node ceiling, not an organization-wide one.

Prepaid blocks are built for the sovereign and disconnected corners: grading runs offline and air-gapped, so a node knows how much of its block remains with no call home, and a block's cap can be lifted live ("hot cap-lift") without restarting the node when a workload needs more headroom. As everywhere on this page, edge-native inference is off-meter by policy, edge-origin work draws no CU against either shape.

Figure L3: the two purchasing shapes over one metering. Work is denominated in compute units; an organization can run metered (post-paid, overage billed) or a node can hold a prepaid capacity block off a sized ladder, drawn down as it works, with a hot cap-lift and offline/air-gapped grading. Edge-native inference is off-meter by policy under either shape. Ceiling: CU is the unit of account, not a cost of goods; no money moves in the platform, pricing and settlement are attached downstream by rate cards (see Metering, FinOps & tokenomics).

Table equivalent

ShapeScopeHow it is paidDraw-down
Metered (default)OrganizationPost-paid; overage billed, never blockedAccrues against included allowances
Prepaid capacity blockPer nodeBought ahead off a sized ladderNode draws its block down; cap can be lifted live
Edge-native inferenceEitherOff-meter by policy0 CU: never draws from either

Across the deployment matrix​

Every derivation on this page runs offline, which is what lets the license hold across the full single-cell/multi-cell, cloud/air-gapped matrix:

  • Sovereign / air-gapped. Verification uses only the compiled-in CA key; the entitlement token carries the offline grant between check-ins; an air-gap addendum extends the offline window, and a wall-clock retreat forces Suspended rather than silently trusting a rolled-back clock. Signed offline metering bundles carry usage back out without a live connection.
  • Multi-cell. A fleet projection materializes the same ladder from stored license state without probing thousands of cells, it composes the same grading primitives rather than re-implementing them, and is a deliberate lower bound (it never reports a degraded cell as healthy). Metering is delivered through a proxy, and a cell's identity key is derived, so a failover is not misread as a key rotation.
Design status

Capability tiers, the license-to-capability mapping, entitlement tokens, the four-stage ladder, overage accrual, the never-raising cap enforcer, and the per-node prepaid capacity-block model (the block ladder, the capacity sizer, the hot cap-lift, and offline/air-gapped grading) are all implemented; the overage accountant and cap enforcer are additionally wired into the live meter-flush and request-enforcement paths. The offline-status surface that the grader feeds is owed work, the grading itself is done.

In the console and portal​

Licensing has surfaces on both administration surfaces.

In the operator console, the node license lives at /settings/license and the fleet rollup at /admin/org/licenses, both gated on org.license.read. The node page shows the entitlement, the enforcement state as a text-and-glyph badge over the same five-stage ladder this page describes (provisional → active → grace → read_only → suspended, never colour alone), a per-cell enforcement rollup, the telemetry / phone-home posture, and usage-versus-included bars. Applying a key uses a two-phase validate then apply dialog: a verify-only decode first, then the session-authed apply. The fleet page is exceptions-first, summary tiles (cells, nodes, needing attention, expiring, offline, revoked) over a fleet-exceptions table.

In the administrator portal, an org sees its own licenses at /licenses and /licenses/[id] (org-scoped), including the raw signed s9lic artifact and the air-gap addendum; resending a signed license to the billing address is a billing-role action (canManageBilling) and is audit-logged.

The portal entitlement gate is not load-bearing

The portal can derive feature visibility from a license class (show / tease / hidden) through its capability-manifest mechanism, but that gate is built and tested and not wired into any portal page yet. See Administration & Configuration.