mirror of
https://github.com/azaion/gps-denied-onboard.git
synced 2026-06-22 20:21:13 +00:00
[AZ-343] C2.5 InlierCountReRanker + shared FeatureExtractor helper
Implements the production-default ReRankStrategy: K=10 → N=3 by single-pair LightGlue inlier count, with strict drop-and-continue (INV-8) on per-candidate TileFetch / backbone / zero-inlier failures and RerankAllCandidatesFailedError on zero survivors. Composition root injects the shared LightGlueRuntime + Clock + the new FeatureExtractor helper (an L1 placeholder OpenCvOrbExtractor that unblocks AZ-343 and future C3 strategies — task scope expansion). Architectural notes: - Cross-component imports stay banned; tile_store types as `object` and the C6 TileCacheError family is duck-typed by class module prefix (same workaround AZ-348 adopted for c7_inference; proper fix is to relocate TileCacheError to _types/ in a follow-up). - Clock injection follows the replay contract (AZ-398 Invariant 2); reranked_at is sourced from clock.monotonic_ns(). - AZ-342 factory grew `feature_extractor` + `clock` + `fdr_client` parameters; existing AZ-342 conformance tests updated. Tests: 19 new AC-1..AC-12 + mixed-failure scenarios in test_inlier_count_reranker.py; existing AZ-342 suite (26) still green. Full repo sweep 1093 passed / 2 skipped (cmake/actionlint not on PATH). Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -37,10 +37,18 @@ class C2_5RerankConfig:
|
||||
|
||||
``top_n`` is the per-frame N cap (1..K-1). Default 3 (the epic's
|
||||
K=10 → N=3 spec).
|
||||
|
||||
``debug_per_frame_log`` gates the two DEBUG events
|
||||
(``c2_5.rerank.zero_inliers`` per dropped candidate and
|
||||
``c2_5.rerank.frame_done`` per frame); flooding journald at
|
||||
``3 Hz × K=10 = 30 events/sec`` by default would violate
|
||||
description.md § 9. Operators flip this to ``True`` for the
|
||||
debug-build flight binary.
|
||||
"""
|
||||
|
||||
strategy: str = "inlier_count"
|
||||
top_n: int = 3
|
||||
debug_per_frame_log: bool = False
|
||||
|
||||
def __post_init__(self) -> None:
|
||||
if self.strategy not in KNOWN_STRATEGIES:
|
||||
|
||||
Reference in New Issue
Block a user