Files
git.stella-ops.org/docs/airgap/bundle-repositories.md
master 3a2100aa78 Add unit and integration tests for VexCandidateEmitter and SmartDiff repositories
- Implemented comprehensive unit tests for VexCandidateEmitter to validate candidate emission logic based on various scenarios including absent and present APIs, confidence thresholds, and rate limiting.
- Added integration tests for SmartDiff PostgreSQL repositories, covering snapshot storage and retrieval, candidate storage, and material risk change handling.
- Ensured tests validate correct behavior for storing, retrieving, and querying snapshots and candidates, including edge cases and expected outcomes.
2025-12-16 19:00:43 +02:00

1.8 KiB

Bundle Catalog & Items Repositories (prep for AIRGAP-IMP-57-001)

Scope

  • Deterministic storage for offline bundle metadata with tenant isolation (RLS) and stable ordering.
  • Ready for PostgreSQL-backed implementation while providing in-memory deterministic reference behavior.

Schema (logical)

  • bundle_catalog:
    • tenant_id (string, PK part, RLS partition)
    • bundle_id (string, PK part)
    • digest (hex string)
    • imported_at_utc (datetime)
    • content_paths (array of strings, sorted ordinal)
  • bundle_items:
    • tenant_id (string, PK part, RLS partition)
    • bundle_id (string, PK part)
    • path (string, PK part)
    • digest (hex string)
    • size_bytes (long)

Implementation delivered (2025-11-20)

  • In-memory repositories enforcing tenant isolation and deterministic ordering:
    • InMemoryBundleCatalogRepository (upsert + list ordered by bundle_id).
    • InMemoryBundleItemRepository (bulk upsert + list ordered by path).
  • Models: BundleCatalogEntry, BundleItem.
  • Tests cover upsert overwrite semantics, tenant isolation, and deterministic ordering (tests/AirGap/StellaOps.AirGap.Importer.Tests/InMemoryBundleRepositoriesTests.cs).

Migration notes (for PostgreSQL backends)

  • Create compound unique indexes on (tenant_id, bundle_id) for catalog; (tenant_id, bundle_id, path) for items.
  • Enforce RLS by always scoping queries to tenant_id and validating it at repository boundary (as done in in-memory reference impl).
  • Keep paths lowercased or use ordinal comparisons to avoid locale drift; sort before persistence to preserve determinism.

Next steps

  • Implement PostgreSQL-backed repositories mirroring the deterministic behavior and indexes above.
  • Wire repositories into importer service/CLI once storage provider is selected.

Owners

  • AirGap Importer Guild.