AirGap Controller
Pointer stub. The canonical AirGap module dossier lives in
../airgap/. This directory holds only the controller’s HTTP contract; read it alongside the dossier for sealed-mode architecture.
docs/modules/airgap-controller/ contains the openapi/ source spec (v1.json) and the api-reference.mdthat is auto-generated from it. The reference covers all six declared operations of the controller’s HTTP surface:
POST /system/airgap/seal— seal the tenant (records policy hash, time anchor, staleness budget; requiresairgap:seal).POST /system/airgap/unseal— unseal the tenant (requiresairgap:seal).GET /system/airgap/status— current seal state, staleness, and content-budget freshness (requiresairgap:status:read).POST /system/airgap/verify— verify state against a supplied policy hash and replay evidence (requiresairgap:status:read— see note below).GET /buildinfo.jsonand its aliasGET /api/v1/buildinfo— image build provenance for drift detection.
The controller source lives under src/AirGap/StellaOps.AirGap.Controller/. It is one of four service components of the AirGap module — alongside StellaOps.AirGap.Importer, StellaOps.AirGap.Policy, and StellaOps.AirGap.Time — which build on the module’s shared libraries under src/AirGap/__Libraries/ (StellaOps.AirGap.Persistence, StellaOps.AirGap.Bundle, StellaOps.AirGap.Sync).
Scope note:
POST /system/airgap/verifyrequiresairgap:status:read, not a distinct verify scope. TheAirGap.Verifypolicy is registered againstStellaOpsScopes.AirgapStatusRead(StellaOps.AirGap.Controller/Program.cs:59-69) because verification is a read-only integrity check — it mirrors how the Attestor verify surface collapses toattest:read. The canonical catalogStellaOps.Auth.Abstractions/StellaOpsScopes.csdefines exactly three AirGap scopes (airgap:seal,airgap:import,airgap:status:read); the historicalairgap:verifyliteral was never catalogued, was granted to no client, and no longer exists in the code.Generator source reconciled (2026-07-12): the operation
descriptionstrings inopenapi/v1.jsonand the generatedapi-reference.mdare sourced fromsrc/AirGap/StellaOps.AirGap.Controller/Translations/en-US.airgap.json. Itsairgap.verify.descriptionvalue previously ended “Requires airgap:verify scope”; it has now been corrected in source toairgap:status:read, so regenerating the OpenAPI/reference no longer regresses the scope string. (SPRINT_20260712_009 CLO-7.)
For sealed-mode architecture, the staleness state machine, bundle import, and time anchors, see the AirGap module dossier.
