mirror of
https://github.com/azaion/gps-denied-onboard.git
synced 2026-06-22 10:31:12 +00:00
[AZ-329] [AZ-330] [AZ-523] [AZ-524] Batch 44 atomic refactor
Implements two new C12 services and rebalances the C11/C12 boundary in one atomic commit: * AZ-329 PostLandingUploadOrchestrator — gates C11 upload on the `flight_footer` FDR record's `clean_shutdown` field; 4 refusal modes; new FdrFooterReader Protocol + LocalFdrFooterReader. * AZ-330 OperatorReLocService — AC-3.4 visual-loss re-localization hint; reuses shared LatLonAlt; OperatorCommandTransport Protocol cut (E-C8 owns the future pymavlink concrete); new FDR record kind `c12.reloc.requested`; log redaction (lat/lon 5 decimals, reason 200 chars). * AZ-523 C11 internal flight-state gate removed (SRP refactor): `confirm_flight_state` / `FlightStateSignal` use / `FlightStateNotOnGroundError` deleted from C11; TileUploader contract bumped to v2.0.0 (frozen) with migration note; AZ-317 superseded. * AZ-524 Package rename `c12_operator_tooling` → `c12_operator_orchestrator` across source, tests, pyproject, CMake, Dockerfile, compose, CI, runtime-root services class (`OperatorOrchestratorServices`) + factory function (`build_operator_orchestrator`), logger namespaces, config slug, docs, and the E-C12 epic title. Tests: 1543 passed, 80 skipped (all environment gates). Targeted AC suite (AZ-329 + AZ-330 + FdrFooterReader): 37 passed. Cold-start NFR-perf still ≤ 500 ms p99. Tracker: AZ-317 → Done (superseded); AZ-319 v2.0.0 contract bump comment; AZ-329/AZ-330 → In Testing; AZ-253 epic renamed; AZ-523 + AZ-524 created and closed as audit-trail tickets. See `_docs/03_implementation/batch_44_cycle1_report.md`. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+10
-10
@@ -27,7 +27,7 @@ Row 20 (E-CC-HELPERS / AZ-264) was added during Decompose Step 2 to comply with
|
||||
| 7 | E-C6 | C6 Tile Cache + Spatial Index | component | AZ-250 | M | 13–21 | E-BOOT, E-CC-LOG, E-CC-CONF |
|
||||
| 8 | E-C11 | C11 Tile Manager (TileDownloader + TileUploader) | component | AZ-251 | M | 13–21 | E-C6, E-CC-CONF, E-CC-LOG |
|
||||
| 9 | E-C10 | C10 Pre-flight Cache Provisioning | component | AZ-252 | M | 13–21 | E-C6, E-C7, E-CC-LOG |
|
||||
| 10 | E-C12 | C12 Operator Pre-flight Tooling | component | AZ-253 | M | 13–21 | E-C10, E-C11, E-CC-LOG |
|
||||
| 10 | E-C12 | C12 Operator Pre-flight Orchestrator | component | AZ-253 | M | 13–21 | E-C10, E-C11, E-CC-LOG |
|
||||
| 11 | E-C1 | C1 Visual / Visual-Inertial Odometry | component | AZ-254 | XL | 34–55 | E-BOOT, E-CC-FDR-CLIENT, E-C7 |
|
||||
| 12 | E-C2 | C2 Visual Place Recognition | component | AZ-255 | L | 21–34 | E-C6, E-C7, E-CC-FDR-CLIENT |
|
||||
| 13 | E-C2.5 | C2.5 Inlier-based Re-rank | component | AZ-256 | S | 5–8 | E-C2, E-C7, E-C6 (LightGlue helper shared with C3) |
|
||||
@@ -127,7 +127,7 @@ flowchart LR
|
||||
|
||||
### Problem / Context
|
||||
|
||||
No source layout exists yet. Every downstream epic assumes a defined repo skeleton: `src/components/<id>_<name>/`, `src/shared/<concern>/`, `tests/`, `tests/fixtures/`, plus the Tier-1 Docker compose, the Tier-2 CI job, the Postgres init scripts that match `data_model.md`, and the operator-tooling tarball build path. Until this exists, no other epic can start.
|
||||
No source layout exists yet. Every downstream epic assumes a defined repo skeleton: `src/components/<id>_<name>/`, `src/shared/<concern>/`, `tests/`, `tests/fixtures/`, plus the Tier-1 Docker compose, the Tier-2 CI job, the Postgres init scripts that match `data_model.md`, and the operator-orchestrator tarball build path. Until this exists, no other epic can start.
|
||||
|
||||
### Scope
|
||||
|
||||
@@ -1047,7 +1047,7 @@ Per `components/11_c10_provisioning/tests.md`.
|
||||
|
||||
---
|
||||
|
||||
## E-C12 — C12 Operator Pre-flight Tooling
|
||||
## E-C12 — C12 Operator Pre-flight Orchestrator
|
||||
|
||||
**Tracker**: AZ-253 | **Type**: component | **T-shirt**: M | **Story points**: 13–21
|
||||
|
||||
@@ -1055,7 +1055,7 @@ Per `components/11_c10_provisioning/tests.md`.
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
CLI[operator-tool CLI]
|
||||
CLI[operator-orchestrator CLI]
|
||||
CLI --> C11D[C11 TileDownloader]
|
||||
CLI --> C10[C10 CacheProvisioner]
|
||||
CLI --> C11U[C11 TileUploader]
|
||||
@@ -1065,7 +1065,7 @@ flowchart LR
|
||||
|
||||
### Problem / Context
|
||||
|
||||
Operator-facing CLI that sequences pre-flight (C11 download → C10 build) and post-landing (C11 upload), surfaces actionable failures, and handles the AC-3.4 re-localization workflow. Delivered as part of the operator-tooling tarball.
|
||||
Operator-facing CLI that sequences pre-flight (C11 download → C10 build) and post-landing (C11 upload), surfaces actionable failures, and handles the AC-3.4 re-localization workflow. Delivered as part of the operator-orchestrator tarball.
|
||||
|
||||
### Scope
|
||||
|
||||
@@ -1075,7 +1075,7 @@ Operator-facing CLI that sequences pre-flight (C11 download → C10 build) and p
|
||||
|
||||
### Architecture notes
|
||||
|
||||
- File: `components/13_c12_operator_tooling/description.md`.
|
||||
- File: `components/13_c12_operator_orchestrator/description.md`.
|
||||
- Strict process boundary: C12 is operator-side only, in the same image as C11, but never airborne.
|
||||
|
||||
### Interface specification
|
||||
@@ -1144,7 +1144,7 @@ T-shirt M; 13–21 points.
|
||||
|
||||
### Testing strategy
|
||||
|
||||
Per `components/13_c12_operator_tooling/tests.md`.
|
||||
Per `components/13_c12_operator_orchestrator/tests.md`.
|
||||
|
||||
---
|
||||
|
||||
@@ -1616,7 +1616,7 @@ sequenceDiagram
|
||||
|
||||
### Risks & mitigations
|
||||
|
||||
- **R10** (latency under throttle) — threshold tunable via operator-tooling pre-flight.
|
||||
- **R10** (latency under throttle) — threshold tunable via operator-orchestrator pre-flight.
|
||||
|
||||
### Effort
|
||||
|
||||
@@ -2124,7 +2124,7 @@ ROS as the input transport was considered and rejected: the system is MAVLink-na
|
||||
### Architecture notes
|
||||
|
||||
- ADR-001 / ADR-002 / ADR-009 all apply unchanged.
|
||||
- New `BUILD_*` flags: `BUILD_VIDEO_FILE_FRAME_SOURCE`, `BUILD_TLOG_REPLAY_ADAPTER`, `BUILD_REPLAY_SINK_JSONL`. Default ON for the new replay-cli binary; OFF for airborne, research, and operator-tooling.
|
||||
- New `BUILD_*` flags: `BUILD_VIDEO_FILE_FRAME_SOURCE`, `BUILD_TLOG_REPLAY_ADAPTER`, `BUILD_REPLAY_SINK_JSONL`. Default ON for the new replay-cli binary; OFF for airborne, research, and operator-orchestrator.
|
||||
- New cross-cutting `FrameSource` interface lives at `src/gps_denied_onboard/frame_source/` (Layer 1 Foundation per `module-layout.md` § layering).
|
||||
- `compose_replay` lives in `runtime_root.py` alongside `compose_root` and `compose_operator`.
|
||||
|
||||
@@ -2209,7 +2209,7 @@ T-shirt M; 27–32 points across 8 child tasks.
|
||||
|
||||
- ADR-001 / ADR-002 / ADR-009.
|
||||
- C1–C5 components MUST remain mode-agnostic; replay-aware logic lives only in the composition root, the new strategies, and the CLI.
|
||||
- No HTTP server in any companion binary (airborne or replay); HTTP wrapper, if added later, lives in operator-tooling per `module-layout.md` Layer-4 placement.
|
||||
- No HTTP server in any companion binary (airborne or replay); HTTP wrapper, if added later, lives in operator-orchestrator per `module-layout.md` Layer-4 placement.
|
||||
|
||||
### Testing strategy
|
||||
|
||||
|
||||
Reference in New Issue
Block a user