Context
Figentra OS is sold in three deploy modes (0075), and Stackra packages are sold on their own. A package that hard-depends on a cloud service, or checks a licence online, cannot ship on-prem or air-gapped. Retrofitting that later means rewriting every package that assumed the cloud. Identity and IAM will also be offered as hosted Figentra OS services, so the packages must leave room for a remote implementation without building it now.Decision
- Three deploy modes: SaaS (hosted by Figentra), on-prem (customer infrastructure with network access) and air-gapped (no outbound network).
- Every package works in all three. A capability that a cloud service provides sits behind a driver with a self-hosted alternative. Examples: queue on Postgres, scheduler on a local timer with an advisory lock, cache on Redis or Valkey, realtime on a self-hosted driver.
- No package calls home. Pro access is gated at install (0077), and a future
@stackra/licensingverifies a signed licence file offline. - Every spec’s Impact questionnaire answers the deploy mode: SaaS, on-prem, air-gapped, each with how the change works there. This adds an item to 0067 decision 3.
- Every driver package ships a conformance suite that each of its drivers passes.
- An air-gapped CI job runs the conformance suites with outbound network blocked.
- Hosted capabilities are driver-based. Identity, IAM and similar packages have a local driver now. A remote driver that calls the Figentra OS service is designed with the contract now and built later. Contracts never assume the local driver. For example, no caller relies on sharing a database transaction with the driver.
Consequences
- Every new dependency is reviewed for an offline path. A vendor SDK with no self-hosted alternative can only be one driver among several.
- Contracts carry the cost of a network seam (errors, latency, idempotency) even while only the local driver exists.
- The CI pipeline gains a job with network egress denied. Its provider must support that.
Enforcement
Planned: the Impact-section check of 0067 fails a spec without the deploy-mode answers. The air-gapped job runs each package’s conformance suite from its__tests__ folder, wired in runway (0068). Nothing checks this today.