Offline and Air-Gap Advisory Implementation Roadmap

Source advisory: 14-Dec-2025 — Offline and Air-Gap Technical Reference Document version: 1.0 Last updated: 2025-12-15


Executive summary

This document is the implementation roadmap for gaps identified between the 14-Dec-2025 Offline and Air-Gap Technical Reference advisory and the Stella Ops codebase. The work is organized into five sprints (0338–0342) spanning security-critical, high-priority, and enhancement-level improvements.

Status: planning artifact. Sprint IDs (0338–0342) and the source advisory live in the implementation-plan repo; the links below resolve there, not in the published docs tree.


Implementation Overview

Sprint Summary

SprintTopicPriorityGapsEffortDependencies
0338AirGap Importer CoreP0G6, G7MediumNone
0339CLI Offline CommandsP1G4Medium0338
0340Scanner Offline ConfigP2G5Medium0338
0341Observability & AuditP1–P2G11–G14Medium0338
0342Evidence ReconciliationP3G10High0338, 0340

Dependency Graph

            ┌─────────────────────────────────────────────┐
            │                                             │
            │   Sprint 0338: AirGap Importer Core (P0)   │
            │   - Monotonicity enforcement (G6)           │
            │   - Quarantine handling (G7)                │
            │                                             │
            └──────────────────┬──────────────────────────┘
                               │
         ┌─────────────────────┼─────────────────────┐
         │                     │                     │
         ▼                     ▼                     ▼
┌────────────────┐   ┌────────────────┐   ┌────────────────┐
│ Sprint 0339    │   │ Sprint 0340    │   │ Sprint 0341    │
│ CLI Commands   │   │ Scanner Config │   │ Observability  │
│ (P1)           │   │ (P2)           │   │ (P1-P2)        │
│ - G4           │   │ - G5           │   │ - G11-G14      │
└────────────────┘   └───────┬────────┘   └────────────────┘
                             │
                             ▼
                    ┌────────────────┐
                    │ Sprint 0342    │
                    │ Evidence Recon │
                    │ (P3)           │
                    │ - G10          │
                    └────────────────┘

Gap-to-Sprint Mapping

P0 - Critical (Must Implement First)

Gap IDDescriptionSprintRationale
G6Monotonicity enforcement0338Rollback prevention is security-critical; prevents replay attacks
G7Quarantine directory handling0338Essential for forensic analysis of failed imports

P1 - High Priority

Gap IDDescriptionSprintRationale
G4CLI offline command group0339Primary operator interface; competitive parity
G11Prometheus metrics0341Operational visibility in air-gap environments
G13Error reason codes0341Automation and troubleshooting

P2 - Important

Gap IDDescriptionSprintRationale
G5Scanner offline config surface0340Enterprise trust anchor management
G12Structured logging fields0341Log aggregation and correlation
G14Audit schema enhancement0341Compliance and chain-of-custody

P3 - Lower Priority

Gap IDDescriptionSprintRationale
G10Evidence reconciliation algorithm0342Complex but valuable; VEX-first decisioning

Deferred (Not Implementing)

Gap IDDescriptionRationale
G9YAML verification policy schemaOver-engineering; existing JSON/code config sufficient

Technical Architecture

New Components

src/AirGap/
├── StellaOps.AirGap.Importer/
│   ├── Versioning/
│   │   ├── BundleVersion.cs                 # Sprint 0338
│   │   ├── IVersionMonotonicityChecker.cs   # Sprint 0338
│   │   └── IBundleVersionStore.cs           # Sprint 0338
│   ├── Quarantine/
│   │   ├── IQuarantineService.cs            # Sprint 0338
│   │   ├── FileSystemQuarantineService.cs   # Sprint 0338
│   │   └── QuarantineOptions.cs             # Sprint 0338
│   ├── Telemetry/
│   │   ├── OfflineKitMetrics.cs             # Sprint 0341
│   │   ├── OfflineKitLogFields.cs           # Sprint 0341
│   │   └── OfflineKitLogScopes.cs           # Sprint 0341
│   ├── Reconciliation/
│   │   ├── ArtifactIndex.cs                 # Sprint 0342
│   │   ├── EvidenceCollector.cs             # Sprint 0342
│   │   ├── DocumentNormalizer.cs            # Sprint 0342
│   │   ├── PrecedenceLattice.cs             # Sprint 0342
│   │   └── EvidenceGraphEmitter.cs          # Sprint 0342
src/Scanner/
├── __Libraries/StellaOps.Scanner.Core/
│   ├── Configuration/
│   │   ├── OfflineKitOptions.cs             # Sprint 0340
│   │   ├── TrustAnchorConfig.cs             # Sprint 0340
│   │   └── OfflineKitOptionsValidator.cs    # Sprint 0340
│   └── TrustAnchors/
│       ├── PurlPatternMatcher.cs            # Sprint 0340
│       ├── ITrustAnchorRegistry.cs          # Sprint 0340
│       └── TrustAnchorRegistry.cs           # Sprint 0340

src/Cli/
├── StellaOps.Cli/
│   ├── Commands/
│       ├── Offline/
│       │   ├── OfflineCommandGroup.cs       # Sprint 0339
│       │   ├── OfflineImportHandler.cs      # Sprint 0339
│       │   ├── OfflineStatusHandler.cs      # Sprint 0339
│       │   └── OfflineExitCodes.cs          # Sprint 0339
│       └── Verify/
│           └── VerifyOfflineHandler.cs      # Sprint 0339
│   └── Output/
│       └── OfflineKitReasonCodes.cs         # Sprint 0341

src/Authority/
├── __Libraries/StellaOps.Authority.Storage.Postgres/
│   └── Migrations/
│       └── 004_offline_kit_audit.sql        # Sprint 0341

Database Changes

TableSchemaSprintPurpose
airgap.bundle_versionsNew0338Track active bundle versions per tenant/type
airgap.bundle_version_historyNew0338Version history for audit trail
authority.offline_kit_auditNew0341Enhanced audit with Rekor/DSSE fields

Configuration Changes

SectionSprintFields
AirGap:Quarantine0338QuarantineRoot, RetentionPeriod, MaxQuarantineSizeBytes
Scanner:OfflineKit0340RequireDsse, RekorOfflineMode, TrustAnchors[]

CLI Commands

CommandSprintDescription
stellaops offline import0339Import offline kit with verification
stellaops offline status0339Display current kit status
stellaops verify offline0339Offline evidence verification

Metrics

MetricTypeSprintLabels
offlinekit_import_totalCounter0341status, tenant_id
offlinekit_attestation_verify_latency_secondsHistogram0341attestation_type, success
attestor_rekor_success_totalCounter0341mode
attestor_rekor_retry_totalCounter0341reason
rekor_inclusion_latencyHistogram0341success

Implementation Sequence

Phase 1: Foundation (Sprint 0338)

Duration: 1 sprint Focus: Security-critical infrastructure

  1. Implement BundleVersion model with semver parsing
  2. Create IVersionMonotonicityChecker and Postgres store
  3. Integrate monotonicity check into ImportValidator
  4. Implement --force-activate with audit trail
  5. Create IQuarantineService and file-system implementation
  6. Integrate quarantine into all import failure paths
  7. Write comprehensive tests

Exit Criteria:

Phase 2: Operator Experience (Sprints 0339, 0341)

Duration: 1-2 sprints (can parallelize) Focus: CLI and observability

Sprint 0339 (CLI):

  1. Create offline command group
  2. Implement offline import with all flags
  3. Implement offline status with output formats
  4. Implement verify offline with policy loading
  5. Add exit code standardization
  6. Write CLI integration tests

Sprint 0341 (Observability):

  1. Add Prometheus metrics infrastructure
  2. Implement offline kit metrics
  3. Standardize structured logging fields
  4. Complete error reason codes
  5. Create audit schema migration
  6. Implement audit repository and emitter
  7. Create Grafana dashboard

Blockers: Prometheus /metrics endpoint hosting and audit emitter call-sites await an owning Offline Kit import/activation flow (POST /api/offline-kit/import).

Exit Criteria:

Phase 3: Configuration (Sprint 0340)

Duration: 1 sprint Focus: Trust anchor management

  1. Create OfflineKitOptions configuration class
  2. Implement PURL pattern matcher
  3. Create TrustAnchorRegistry with precedence resolution
  4. Add options validation
  5. Integrate trust anchors with DSSE verification
  6. Update Helm chart values
  7. Write configuration tests

Exit Criteria:

Phase 4: Advanced Features (Sprint 0342)

Duration: 1-2 sprints Focus: Evidence reconciliation

  1. Design artifact indexing
  2. Implement evidence collection
  3. Create document normalization
  4. Implement VEX precedence lattice
  5. Create evidence graph emitter
  6. Integrate with CLI verify offline
  7. Write golden-file determinism tests

Exit Criteria:


Testing Strategy

Unit Tests

Integration Tests

Determinism Tests

Security Tests


Documentation Updates

DocumentSprintUpdates
docs/airgap/importer.md0338Monotonicity + quarantine reference
docs/airgap/runbooks/quarantine-investigation.md0338New runbook
docs/modules/cli/commands/offline.md0339New command reference
docs/modules/cli/guides/airgap.md0339Update with CLI examples
docs/modules/scanner/configuration.md0340Add offline kit config section
docs/airgap/observability.md0341Metrics and logging reference
docs/airgap/evidence-reconciliation.md0342Algorithm documentation

Risk Register

RiskImpactMitigation
Monotonicity breaks existing workflowsHighProvide --force-activate escape hatch
Quarantine disk exhaustionMediumImplement quota and TTL cleanup
Trust anchor config complexityMediumProvide sensible defaults, validate at startup
Evidence reconciliation performanceMediumStreaming processing, caching
Cross-platform determinism failuresHighCI matrix, golden-file tests

Success Metrics

MetricTargetSprint
Rollback attack prevention100%0338
Failed bundle quarantine rate100%0338
CLI command adoption50% operators0339
Metric collection uptime99.9%0341
Audit completeness100% events0341
Reconciliation determinism100%0342

References