# AirGap Importer Scaffold (prep for AIRGAP-IMP-56-001/56-002/58-002) ## Scope for prep - Provide minimal project and test scaffolds so downstream implementation can wire DSSE, TUF, Merkle validation, and audit logging without redoing structure. - Capture trust-root inputs required (bundle path, signing keys, allowed algorithms, validity window). ## What landed (2025-11-20) - New project: `src/AirGap/StellaOps.AirGap.Importer/StellaOps.AirGap.Importer.csproj` (net10.0, deterministic-only dependencies). - Planning layer: `BundleImportPlanner` emits deterministic plan steps and early validation reasons (`bundle-path-required`, `trust-roots-required`, `invalid-trust-window`). - Contracts: `TrustRootConfig` record carries root bundle path, trusted key fingerprints, allowed algorithms, and optional validity window. - Validation shape: `BundleValidationResult` centralises success/failure reasons for replay/capture. - Tests: `tests/AirGap/StellaOps.AirGap.Importer.Tests` validate planner behavior without external feeds. ## Updates (2025-11-20) - Added DSSE verifier (RSA-PSS/SHA256) with PAE encoding + trusted key fingerprint checks. - Added TUF metadata validator (root/snapshot/timestamp) with hash consistency guard. - Added deterministic Merkle root calculator for bundle object staging. - Expanded tests for DSSE, TUF, Merkle helpers. - Added trust store + root rotation policy (dual approval) and import validator that coordinates DSSE/TUF/Merkle/rotation checks. ## Updates (2025-12-15) - Added monotonicity enforcement primitives under `src/AirGap/StellaOps.AirGap.Importer/Versioning/` (`BundleVersion`, `IVersionMonotonicityChecker`, `IBundleVersionStore`). - Added file-based quarantine service under `src/AirGap/StellaOps.AirGap.Importer/Quarantine/` (`IQuarantineService`, `FileSystemQuarantineService`, `QuarantineOptions`). - Updated `ImportValidator` to include monotonicity checks, force-activate support (requires reason), and quarantine on validation failures. - Added Postgres-backed bundle version tracking in `src/AirGap/StellaOps.AirGap.Storage.Postgres/Repositories/PostgresBundleVersionStore.cs` and registration via `src/AirGap/StellaOps.AirGap.Storage.Postgres/ServiceCollectionExtensions.cs`. - Updated tests in `tests/AirGap/StellaOps.AirGap.Importer.Tests` to cover versioning/quarantine and the new import validator behavior. ## Next implementation hooks - Replace placeholder plan with actual DSSE + TUF verifiers; keep step ordering stable. - Feed trust roots from sealed-mode config and Evidence Locker bundles (once available) before allowing imports. - Record audit trail for each plan step (success/failure) and a Merkle root of staged content. ## Determinism/air-gap posture - No network dependencies; BCL + `Microsoft.Extensions.*` only. - Tests use cached local NuGet feed (`local-nugets/`). - Plan steps are ordered list; do not reorder without bumping downstream replay expectations. ## How to consume ```bash # run tests offline once feed is hydrated DOTNET_NOLOGO=1 dotnet test tests/AirGap/StellaOps.AirGap.Importer.Tests/StellaOps.AirGap.Importer.Tests.csproj --no-build ``` ## Owners - AirGap Importer Guild / Security Guild (per sprint 0510).