# Structural Snapshot — 2026-05-20 (cycle-1 close) > Baseline snapshot for future retros. Captures the component / import / > contract topology at end of cycle 1 so cycle 2 retro can compute deltas > without re-deriving from source. ## Component Inventory | # | Component | Path | Strategy slots (registered) | Notes | |---|-----------|------|------------------------------|-------| | 1 | C1 — VIO | `src/gps_denied_onboard/components/c1_vio/` | `klt_ransac` (operational default), `okvis2` (BLOCKED via AZ-332→AZ-592), `vins_mono` (BLOCKED via AZ-333→AZ-593) | Three strategies behind `_STRATEGY_REGISTRY`; airborne_bootstrap registers all 3 with `BUILD_*` gating | | 2 | C2 — VPR | `src/gps_denied_onboard/components/c2_vpr/` | `ultra_vpr` (production default), `megaloc`, `mixvpr`, `selavpr`, `eigenplaces`, `salad`, `netvlad` | All implemented; secondaries behind `BUILD_*` flags per ADR-002 | | 3 | C2.5 — Re-rank | `src/gps_denied_onboard/components/c2_5_rerank/` | `inlier_based_reranker` | Single strategy | | 4 | C3 — Matcher | `src/gps_denied_onboard/components/c3_matcher/` | `disk_lightglue` (default), `aliked_lightglue`, `xfeat` | Three strategies | | 5 | C3.5 — AdHoP | `src/gps_denied_onboard/components/c3_5_adhop/` | `adhop_refiner` (production), `passthrough` (baseline) | Conditional refinement | | 6 | C4 — Pose | `src/gps_denied_onboard/components/c4_pose/` | `opencv_gtsam` (production) | D-CROSS-LATENCY-1 hybrid trigger lives here | | 7 | C5 — State | `src/gps_denied_onboard/components/c5_state/` | `gtsam_isam2` (production), `eskf_baseline` (engine-rule baseline) | iSAM2 + IncrementalFixedLagSmoother | | 8 | C6 — Tile cache | `src/gps_denied_onboard/components/c6_tile_cache/` | Factory-based (no `_STRATEGY_REGISTRY` entry) | Postgres 16 + filesystem + FAISS HNSW | | 9 | C7 — Inference | `src/gps_denied_onboard/components/c7_inference/` | `tensorrt`, `pytorch_fp16`, `onnx_trt_ep` (selected via `INFERENCE_BACKEND` env) | Factory-based | | 10 | C8 — FC adapter | `src/gps_denied_onboard/components/c8_fc_adapter/` | `ardupilot_plane` (signed MAVLink), `inav` (MSP2) | Selected via `GPS_DENIED_FC_PROFILE` | | 11 | C10 — Provisioning | `src/gps_denied_onboard/components/c10_provisioning/` | n/a (operator-only) | C10 + C11 + C12 ship in `operator-orchestrator` image | | 12 | C11 — Tile Manager | `src/gps_denied_onboard/components/c11_tilemanager/` | n/a (operator-only) | `BUILD_C11_TILE_MANAGER=OFF` on airborne (ADR-004) | | 13 | C12 — Operator Orchestrator | `src/gps_denied_onboard/components/c12_operator_orchestrator/` | n/a (operator-only) | Includes `FlightsApiClient` (AZ-489) + `PostLandingUploadOrchestrator` + `OperatorReLocService` | | 14 | C13 — FDR | `src/gps_denied_onboard/components/c13_fdr/` | Factory-based | Writer thread + segment rotation + 64 GB cap + flight header/footer | | 15 | helpers/runtime_root | `src/gps_denied_onboard/helpers/`, `src/gps_denied_onboard/runtime_root/` | n/a — composition root + cross-cutting helpers | Hosts `compose_root`, `airborne_bootstrap`, `operator_bootstrap`, `_STRATEGY_REGISTRY`, replay branch, factory modules | ## Source Size | Scope | Python LoC | |-------|------------| | `src/` (total) | 61,071 | ## Import Graph Health - **Cycles in component import graph**: 0 (verified across batches 88–92 cumulative reviews — no back-edges introduced). - **Composition seam**: `runtime_root.airborne_bootstrap` (single composition root for airborne binary) + `runtime_root.operator_bootstrap` (single composition root for operator-orchestrator binary). Both pull from per-component `*_factory` modules under `runtime_root/`. ## Contract Files | Path | Purpose | Status | |------|---------|--------| | `_docs/02_document/contracts/shared_fdr_client/fdr_record_schema.md` | FDR record envelope (v1.3.0) | Production | | `_docs/02_document/contracts/shared_fdr_client/fdr_client_protocol.md` | FDR client API surface | Production | | `_docs/02_document/contracts/shared_log_bridge/log_record_schema.md` | Log record schema (v1.0.0) | Production | | `_docs/02_document/contracts/shared_satellite_provider_ingest/` | D-PROJ-2 ingest endpoint placeholder | Planned (parent-suite work) | | `_docs/02_document/contracts/shared_flights_api/` | C12 → `flights` REST DTO | Production (consumed by AZ-489) | Contract coverage % vs public-API symbols is not computed in this snapshot (no public-API inventory exists yet). Recommend adding the inventory + coverage metric as a cycle-2 follow-up — the same effort that lands `architecture_compliance_baseline.md` per Improvement Action #3. ## Build Track Coverage (per ADR-002 + ADR-011) | Binary | Composition root | Strategies linked (production) | `BUILD_*` flags | |--------|------------------|---------------------------------|------------------| | Airborne (`companion-tier1` Tier-1 / `companion-jetson` Tier-2) | `airborne_bootstrap` | C1=`klt_ransac`, C2=`ultra_vpr`, C2.5=`inlier_based_reranker`, C3=`disk_lightglue`, C3.5=`adhop_refiner`, C4=`opencv_gtsam`, C5=`gtsam_isam2`, C7=`tensorrt`/`pytorch_fp16`, C8=`ardupilot_plane`/`inav` | `BUILD_VINS_MONO=OFF`, `BUILD_SALAD=OFF`, `BUILD_C11_TILE_MANAGER=OFF`, `BUILD_DEV_STATIC_KEY=OFF`, `BUILD_STATE_ESKF=OFF`; replay flags `BUILD_VIDEO_FILE_FRAME_SOURCE=ON`, `BUILD_TLOG_REPLAY_ADAPTER=ON`, `BUILD_REPLAY_SINK_JSONL=ON` (ADR-011) | | Research (lab Jetson IT-12) | `airborne_bootstrap` with research flags | airborne contents + every non-default strategy linked | All `BUILD_*` flags ON except `BUILD_DEV_STATIC_KEY` | | Operator-Orchestrator | `operator_bootstrap` | C10, C11 (`TileDownloader` + `TileUploader`), C12 (`FlightsApiClient`, `PostLandingUploadOrchestrator`, `OperatorReLocService`) | `BUILD_C11_TILE_MANAGER=ON` | ## Process Leftovers (open at snapshot time) - `_docs/_process_leftovers/2026-05-11_d_cross_cve_1_opencv_pin_deferred.md` — OPEN, gtsam numpy-2 unblock pending. ## Cycle-2 Delta Targets When cycle 2 closes, compare against this snapshot: - **Component count change** — target 0 (no new components mid-feature-cycle; if AZ-595 or follow-ups add a component, document why). - **Source LoC change** — informational; rapid growth flagged for sub-component refactor review. - **Cycles in import graph** — must stay 0; any new cycle is a regression and surfaces a Critical finding. - **`_STRATEGY_REGISTRY` keys** — should grow by 0–2 (only when a new strategy lands per ADR-002). - **Contract files** — D-PROJ-2 ingest moves from "placeholder" to "production" if parent-suite ships its endpoint.