[autodev] Step 13 partial: c6/c7/c8 cycle-1 doc sync

Batch 3 of the cycle-1 component-doc sync. For each of C6
(tile_cache), C7 (inference), C8 (fc_adapter):

- Append "Cycle-1 operational reality" paragraph to § 1
  documenting the actual cycle-1 wiring path:
  - C6: infrastructure seeded via build_pre_constructed's
    c6_descriptor_index (BUILD_FAISS_INDEX-gated) and
    c6_tile_store slots; no _STRATEGY_REGISTRY slot;
    AZ-687 replay-mode guard skips both seeds when the
    minimal replay Config omits the c6_tile_cache block.
  - C7: single InferenceRuntime built once via
    _build_c7_inference, identity-shared as the engine
    source for c3_lightglue_runtime (AZ-622 phase D);
    C7_AIRBORNE_BUILD_FLAGS lists tensorrt (production-
    default) + pytorch_fp16 (Tier-0 fallback);
    onnx_trt_ep deliberately omitted from airborne flags;
    AZ-687 replay-mode guard cascades to c3_lightglue_runtime.
  - C8: composed via a SEPARATE registry path
    (runtime_root/fc_factory.py) with its own _FC_REGISTRY
    + _GCS_REGISTRY; per-binary bootstrap modules register
    concrete strategies under BUILD_FC_* / BUILD_GCS_*
    flags; bind_outbound_emit_thread enforces the
    single-writer outbound invariant (AC-6).

- Add "Cycle-1 Tier-2 follow-up dependencies" subsection
  in § 7 of C7 only: onnx_trt_ep is implemented and the
  inference_factory recognises BUILD_ONNX_TRT_EP_RUNTIME,
  but airborne config selecting it raises a clean
  AirborneBootstrapError pointing only at the two airborne
  options. C6 and C8 have no parked Tier-2 strategies for
  cycle-1.

None of c6/c7/c8 import cv2 directly, so no OpenCV pin
row is added to § 5 (D-CROSS-CVE-1 leftover stays as it
is; the relaxed pin is recorded against c2.5/c3/c3.5/c4/c5
where the imports actually live).

Also refresh the D-CROSS-CVE-1 leftover replay timestamp
(condition still upstream-gated: gtsam wheels remain
numpy<2) and bump the autodev state's sub_step.detail to
record "batch 3/~5 done (c6/c7/c8); 4 components + 8
helpers + tests/ remain".

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Oleksandr Bezdieniezhnykh
2026-05-19 17:17:33 +03:00
parent a680146193
commit 76f460c88a
5 changed files with 15 additions and 6 deletions
@@ -6,6 +6,8 @@
**Architectural Pattern**: Repository — three concrete stores behind separate interfaces (`TileStore` for pixel + metadata I/O; `TileMetadataStore` for the Postgres spatial index; `DescriptorIndex` for FAISS HNSW). Single concrete implementation per interface today (`PostgresFilesystemStore`, `FaissDescriptorIndex`); future variants (e.g., RocksDB-backed metadata for resource-constrained tiers) can be added behind the same interfaces.
**Cycle-1 operational reality**: C6 is **infrastructure** — it does NOT have a `c6_tile_cache` slot in the `_STRATEGY_REGISTRY` populated by `register_airborne_strategies()` (AZ-591). Instead the airborne binary materialises C6's two consumer-facing handles via `runtime_root/airborne_bootstrap.py::build_pre_constructed`, which seeds `pre_constructed["c6_descriptor_index"]` (via `_build_c6_descriptor_index``storage_factory.build_descriptor_index`, gated by `BUILD_FAISS_INDEX` per `airborne_bootstrap.FAISS_BUILD_FLAG`) and `pre_constructed["c6_tile_store"]` (via `_build_c6_tile_store``storage_factory.build_tile_store`, no `BUILD_*` flag — always built when the c6 block is configured). `compose_root` then passes those instances to the downstream wrappers that list them in `AIRBORNE_REQUIRED_PRE_CONSTRUCTED_KEYS` (c2_vpr consumes `c6_descriptor_index`; c2_5_rerank consumes `c6_tile_store`; c5_state optionally consumes `c6_tile_store` for the AZ-389 orthorectifier path). Strategy slots are populated from `C6TileCacheConfig.KNOWN_*_RUNTIMES`: `{store,metadata}_runtime ∈ {"postgres_filesystem"}` and `descriptor_index_runtime ∈ {"faiss_hnsw"}` — only one concrete impl per slot in cycle-1; the field exists to keep the contract open for a future SQLite Tier-0 dev runtime. When `BUILD_FAISS_INDEX` is OFF and any configured downstream consumer still requires the descriptor index, `_build_c6_descriptor_index` re-raises the lower-level `RuntimeNotAvailableError` as an `AirborneBootstrapError` naming `c6_descriptor_index`, the gating flag, and the consuming component slug. AZ-687 replay-mode guard: when `config.mode == "replay"` and the minimal replay `Config` omits the `c6_tile_cache` block, `build_pre_constructed` skips both C6 seeds entirely — the only wrappers that read those slots (c2_vpr / c2_5_rerank / c5_state) also require their own component entries in `config.components`, which the minimal replay `Config` likewise omits, so the skipped slots are never read.
**Upstream dependencies**:
- C11 `TileDownloader` (writes `tiles` rows + JPEGs during F1 pre-flight provisioning, source='googlemaps').
- C10 CacheProvisioner (writes Manifest + FAISS index during F1 pre-flight provisioning, after C11 has populated tiles).