mirror of
https://github.com/azaion/gps-denied-onboard.git
synced 2026-06-22 21:01:13 +00:00
5fe67023b2
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>
43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
"""Bootstrap healthcheck callable.
|
|
|
|
Used by both `companion-tier1` and `operator-orchestrator` Dockerfiles via
|
|
`HEALTHCHECK CMD python -m gps_denied_onboard.healthcheck`. Returns a non-zero exit
|
|
code on any failure so Docker's healthcheck loop marks the container unhealthy.
|
|
|
|
AC-6 (Bootstrap / AZ-263): this module must be importable and runnable.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
|
|
|
|
def check() -> int:
|
|
"""Quick liveness check: all foundation packages must be importable.
|
|
|
|
Returns 0 on success, non-zero exit code on failure.
|
|
"""
|
|
try:
|
|
import gps_denied_onboard # noqa: F401
|
|
from gps_denied_onboard import _types # noqa: F401
|
|
from gps_denied_onboard._types import ( # noqa: F401
|
|
calibration,
|
|
emitted,
|
|
inference,
|
|
manifests,
|
|
matching,
|
|
nav,
|
|
pose,
|
|
tile,
|
|
vpr,
|
|
)
|
|
from gps_denied_onboard.logging import get_logger # noqa: F401
|
|
except ImportError as exc:
|
|
print(f"healthcheck: ImportError: {exc}", file=sys.stderr)
|
|
return 1
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(check())
|