# Concelier Web AirGap Prep — PREP-CONCELIER-WEB-AIRGAP-57-001 Status: Draft (2025-11-20) Owners: Concelier WebService Guild · AirGap Policy Guild Scope: Define remediation payloads and staleness plumbing for sealed-mode violations, dependent on WEB-AIRGAP-56-002. ## Dependencies - WEB-AIRGAP-56-001: mirror bundle registration + sealed-mode enforcement. - WEB-AIRGAP-56-002: staleness + bundle provenance metadata surfaces. - AirGap controller scopes (seal/unseal) and time anchor semantics from AirGap Controller/Time guilds. ## Proposed payload mapping (EGRESS blocked) - Error code: `AIRGAP_EGRESS_BLOCKED`. - Shape: ```json { "error": "AIRGAP_EGRESS_BLOCKED", "message": "Direct internet fetches disabled in sealed mode; use mirror bundle sources only.", "bundle_required": true, "staleness_seconds": 0, "remediation": [ "Import mirror bundle via /airgap/import or offline kit", "Ensure sealed mode is set with valid time anchor", "Retry with cached/mirrored sources enabled" ] } ``` - Determinism: fixed ordering of fields, remediation list sorted. ## Staleness surfacing - Staleness derived from bundle metadata supplied by 56-002 (`bundle_id`, `provenance`, `staleness_budget_seconds`). - Responses include `staleness_seconds_remaining` and `bundle_id` when available. ## Observability - Emit timeline event `concelier.airgap.egress_blocked` with `{tenant_id, bundle_id?, endpoint, request_id}`. - Metric: `concelier_airgap_egress_blocked_total` (counter) tagged by endpoint. ## Open decisions - Final error envelope format (depends on WEB-OAS-61-002 standard envelope). - Exact header name for staleness metadata (suggest `x-concelier-bundle-staleness`). - Whether to include advisory key/linkset ids in the blocked response. ## Handoff Use this as the PREP artefact for WEB-AIRGAP-57-001. Update once 56-002 and error envelope standard are finalized.