Files
gps-denied-onboard/src/gps_denied_onboard/healthcheck.py
T
Oleksandr Bezdieniezhnykh 5fe67023b2 [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>
2026-05-13 19:42:46 +03:00

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())