mirror of
https://github.com/azaion/gps-denied-onboard.git
synced 2026-06-21 09:01:14 +00:00
[AZ-687] [autodev] File replay-mode guard task + Tier-2 evidence
Jetson Tier-2 e2e on 2026-05-19 11:27 surfaced a NEW gap one phase deeper than where Rerun 3 died: build_pre_constructed seeds c6_descriptor_index unconditionally, which reads config.components["c6_tile_cache"] via storage_factory._c6_config. The replay CLI synthesizes a Config that has no c6_tile_cache block, so AC-1/2/5/6 fail with KeyError 'c6_tile_cache'. Bootstrap (no source code changes): - AZ-687 (Story, To Do, 2pt, Epic AZ-602; blocks AZ-618) - Task spec in _docs/02_tasks/todo/ - _dependencies_table.md row + header narrative - _docs/_autodev_state.md detail repointed at AZ-687 - _docs/03_implementation/jetson_runs/ Tier-2 evidence The fix itself lives in batch 97 (next session): guard the c6/c7 seeds at the BUILD-PRE-CONSTRUCTED layer when config.mode == "replay". Per existing storage_factory._c6_config docstring the silent-fallback path is explicitly rejected — the bootstrap layer is the right seam. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
# Dependencies Table
|
||||
|
||||
**Date**: 2026-05-19 (refreshed mid-day after AZ-618 split: per the spec author's own Sizing-note recommendation + user-rule cap on PBI complexity, AZ-618 was split into 6 subtasks AZ-619..AZ-624 in Jira (subtasks of AZ-618; epic AZ-602 stays grandparent). AZ-618 retained at 0pt as the umbrella tracker; aggregate actionable work is 16pt across the subtasks (vs. AZ-618's original 5pt filing — author's "likely a true 8" caveat was understated due to c5_isam2_graph_handle ordering + GPU builder unknowns). Earlier same-day refresh at start of Step-7 rewind for AZ-618 — Step-11 Jetson tier-2 e2e gate identified missing internal product implementation: `runtime_root.main()` does not build the airborne `pre_constructed` infrastructure dict before `compose_root()`; AZ-618 = 5pt cross-cutting follow-up to AZ-591, lives under E-AZ-602; all 12 dep tasks are in `done/`. Earlier 2026-05-16 (cycle-1 completeness-gate post-mortem): AZ-589 + AZ-590 closed Won't Fix — were wrong abstraction (OKVIS v1 `ThreadedKFVio` API doesn't exist in OKVIS2 upstream; VINS-Mono `cpp/vins_mono/upstream/` submodule never existed; the actual production gap is the empty central `_STRATEGY_REGISTRY` affecting EVERY component with a strategy-selecting config field, not just c1_vio); replaced by AZ-591 (cross-cutting compose_root per-binary bootstrap, todo/, 5pt) + AZ-592 (AZ-332 Tier-2 validation bundle, backlog/, 5pt placeholder) + AZ-593 (AZ-333 Tier-2 validation bundle, backlog/, 5pt placeholder); AZ-332 + AZ-333 re-classified in gate report from FAIL to BLOCKED-on-Tier-2 per the original tasks' Implementation Notes deferral handles; earlier same-day after end of cycle-1 gate: AZ-589 + AZ-590 created (now closed); earlier same-day after end of Batch 64: AZ-558 implementation closed — `MavlinkTransport` seam now routes every C8 outbound MAVLink byte; AZ-401 AC-9 + AZ-404 AC-4b unskipped together; encoder helpers extracted to `_outbound_mavlink_payloads.py`; live-mode `compose_root` injection deferred to whichever future batch registers AP/iNav strategies in an airborne binary; earlier 2026-05-14: refreshed at start of Batch 63: AZ-559 closed Won't Fix — gap was illusory; `TileSource.ONBOARD_INGEST` + `TileMetadata.quality_metadata` + `write_tile`'s `FreshnessRejectionError` already cover the AZ-389 mid-flight ingest semantic without any new API; AZ-389 dep restored to AZ-303; earlier same-day after Batch 61: AZ-558 follow-up added — routes C8 outbound encoder bytes through `MavlinkTransport` seam; closes AZ-401 AC-9 deferred during batch 61 due to encoder-side routing not being in the AZ-401 task envelope; earlier same-day after cumulative review batches 52-54: AZ-528 hygiene PBI added for c1_vio strategy facade orchestration-spine 3-way duplication (Medium); earlier same-day after Batch 53: AZ-333 VINS-Mono landed — first c1_vio strategy after the AZ-332 OKVIS2 production-default; consolidation hygiene for the strategy-facade duplication deferred to a post-AZ-334 PBI; earlier same-day after Batch 51: AZ-527 hygiene PBI added from cumulative review batches 49-51 F1; 2026-05-13: AZ-526 hygiene PBI added from cumulative review batches 46-48 F1+F3; same-day refresh after Batch 44 SRP refactor: AZ-317 superseded; AZ-329 + AZ-330 specs rewritten; AZ-523 + AZ-524 audit-trail tickets added; E-C12 epic renamed `Operator Pre-flight Tooling` → `Operator Pre-flight Orchestrator`; earlier same-day refresh: AZ-507 + AZ-508 hygiene PBIs from cumulative review batches 31-33; 2026-05-11: AZ-489 + AZ-490 ADR-010 operator-origin path)
|
||||
**Total Tasks**: 162 (121 product + 41 blackbox-test) — AZ-317 retained in the table marked SUPERSEDED for audit; AZ-523 (C11 gate removal) + AZ-524 (C12 rename) added as 2 closed audit-trail tasks; AZ-526 = 2pt clock-helper hygiene; AZ-527 = 2pt c2 engine-dim helper hygiene; AZ-528 = 3pt c1_vio facade-spine hygiene; AZ-558 = 3pt MavlinkTransport routing follow-up; AZ-559 closed Won't Fix; AZ-589 + AZ-590 closed Won't Fix (kept in table as 0pt audit-trail rows); AZ-591 = 5pt cross-cutting compose_root bootstrap (todo/); AZ-592 = 5pt OKVIS2 Tier-2 placeholder (backlog/); AZ-593 = 5pt VINS-Mono Tier-2 placeholder (backlog/); AZ-618 = 0pt umbrella (split into AZ-619..AZ-624 on 2026-05-19); AZ-619..AZ-624 = 6 subtasks of AZ-618 covering Phase A..F of the airborne `pre_constructed` assembly, summing to 16pt actionable work
|
||||
**Total Complexity Points**: 533 (400 product + 133 blackbox-test) — AZ-523 = 3pt, AZ-524 = 2pt, AZ-526 = 2pt, AZ-527 = 2pt, AZ-528 = 3pt, AZ-558 = 3pt, AZ-589 + AZ-590 retained at 5pt each but closed Won't Fix (treated as 0 effective pts going forward), AZ-591 = 5pt, AZ-592 = 5pt placeholder, AZ-593 = 5pt placeholder, AZ-618 = 0pt umbrella post-split, AZ-619 = 2pt, AZ-620 = 3pt, AZ-621 = 3pt, AZ-622 = 3pt, AZ-623 = 3pt, AZ-624 = 2pt
|
||||
**Date**: 2026-05-19 (refreshed late-morning after 11:27 Jetson Tier-2 e2e run for AZ-618 — surfaced a NEW gap: replay-mode `Config` lacks `c6_tile_cache` block, so `build_pre_constructed → _build_c6_descriptor_index → _c6_config` raises `KeyError` for AC-1/2/5/6. Follow-up filed as AZ-687 (2pt) under E-AZ-602 with guard at the bootstrap layer (NOT silent fallback in `_c6_config`). Earlier same-day mid-day after AZ-618 split: per the spec author's own Sizing-note recommendation + user-rule cap on PBI complexity, AZ-618 was split into 6 subtasks AZ-619..AZ-624 in Jira (subtasks of AZ-618; epic AZ-602 stays grandparent). AZ-618 retained at 0pt as the umbrella tracker; aggregate actionable work is 16pt across the subtasks (vs. AZ-618's original 5pt filing — author's "likely a true 8" caveat was understated due to c5_isam2_graph_handle ordering + GPU builder unknowns). Earlier same-day refresh at start of Step-7 rewind for AZ-618 — Step-11 Jetson tier-2 e2e gate identified missing internal product implementation: `runtime_root.main()` does not build the airborne `pre_constructed` infrastructure dict before `compose_root()`; AZ-618 = 5pt cross-cutting follow-up to AZ-591, lives under E-AZ-602; all 12 dep tasks are in `done/`. Earlier 2026-05-16 (cycle-1 completeness-gate post-mortem): AZ-589 + AZ-590 closed Won't Fix — were wrong abstraction (OKVIS v1 `ThreadedKFVio` API doesn't exist in OKVIS2 upstream; VINS-Mono `cpp/vins_mono/upstream/` submodule never existed; the actual production gap is the empty central `_STRATEGY_REGISTRY` affecting EVERY component with a strategy-selecting config field, not just c1_vio); replaced by AZ-591 (cross-cutting compose_root per-binary bootstrap, todo/, 5pt) + AZ-592 (AZ-332 Tier-2 validation bundle, backlog/, 5pt placeholder) + AZ-593 (AZ-333 Tier-2 validation bundle, backlog/, 5pt placeholder); AZ-332 + AZ-333 re-classified in gate report from FAIL to BLOCKED-on-Tier-2 per the original tasks' Implementation Notes deferral handles; earlier same-day after end of cycle-1 gate: AZ-589 + AZ-590 created (now closed); earlier same-day after end of Batch 64: AZ-558 implementation closed — `MavlinkTransport` seam now routes every C8 outbound MAVLink byte; AZ-401 AC-9 + AZ-404 AC-4b unskipped together; encoder helpers extracted to `_outbound_mavlink_payloads.py`; live-mode `compose_root` injection deferred to whichever future batch registers AP/iNav strategies in an airborne binary; earlier 2026-05-14: refreshed at start of Batch 63: AZ-559 closed Won't Fix — gap was illusory; `TileSource.ONBOARD_INGEST` + `TileMetadata.quality_metadata` + `write_tile`'s `FreshnessRejectionError` already cover the AZ-389 mid-flight ingest semantic without any new API; AZ-389 dep restored to AZ-303; earlier same-day after Batch 61: AZ-558 follow-up added — routes C8 outbound encoder bytes through `MavlinkTransport` seam; closes AZ-401 AC-9 deferred during batch 61 due to encoder-side routing not being in the AZ-401 task envelope; earlier same-day after cumulative review batches 52-54: AZ-528 hygiene PBI added for c1_vio strategy facade orchestration-spine 3-way duplication (Medium); earlier same-day after Batch 53: AZ-333 VINS-Mono landed — first c1_vio strategy after the AZ-332 OKVIS2 production-default; consolidation hygiene for the strategy-facade duplication deferred to a post-AZ-334 PBI; earlier same-day after Batch 51: AZ-527 hygiene PBI added from cumulative review batches 49-51 F1; 2026-05-13: AZ-526 hygiene PBI added from cumulative review batches 46-48 F1+F3; same-day refresh after Batch 44 SRP refactor: AZ-317 superseded; AZ-329 + AZ-330 specs rewritten; AZ-523 + AZ-524 audit-trail tickets added; E-C12 epic renamed `Operator Pre-flight Tooling` → `Operator Pre-flight Orchestrator`; earlier same-day refresh: AZ-507 + AZ-508 hygiene PBIs from cumulative review batches 31-33; 2026-05-11: AZ-489 + AZ-490 ADR-010 operator-origin path)
|
||||
**Total Tasks**: 163 (122 product + 41 blackbox-test) — AZ-317 retained in the table marked SUPERSEDED for audit; AZ-523 (C11 gate removal) + AZ-524 (C12 rename) added as 2 closed audit-trail tasks; AZ-526 = 2pt clock-helper hygiene; AZ-527 = 2pt c2 engine-dim helper hygiene; AZ-528 = 3pt c1_vio facade-spine hygiene; AZ-558 = 3pt MavlinkTransport routing follow-up; AZ-559 closed Won't Fix; AZ-589 + AZ-590 closed Won't Fix (kept in table as 0pt audit-trail rows); AZ-591 = 5pt cross-cutting compose_root bootstrap (todo/); AZ-592 = 5pt OKVIS2 Tier-2 placeholder (backlog/); AZ-593 = 5pt VINS-Mono Tier-2 placeholder (backlog/); AZ-618 = 0pt umbrella (split into AZ-619..AZ-624 on 2026-05-19); AZ-619..AZ-624 = 6 subtasks of AZ-618 covering Phase A..F of the airborne `pre_constructed` assembly, summing to 16pt actionable work; AZ-687 = 2pt replay-mode guard follow-up surfaced by AZ-618 Tier-2 run on 2026-05-19
|
||||
**Total Complexity Points**: 535 (402 product + 133 blackbox-test) — AZ-523 = 3pt, AZ-524 = 2pt, AZ-526 = 2pt, AZ-527 = 2pt, AZ-528 = 3pt, AZ-558 = 3pt, AZ-589 + AZ-590 retained at 5pt each but closed Won't Fix (treated as 0 effective pts going forward), AZ-591 = 5pt, AZ-592 = 5pt placeholder, AZ-593 = 5pt placeholder, AZ-618 = 0pt umbrella post-split, AZ-619 = 2pt, AZ-620 = 3pt, AZ-621 = 3pt, AZ-622 = 3pt, AZ-623 = 3pt, AZ-624 = 2pt, AZ-687 = 2pt
|
||||
|
||||
Dependencies columns list only the tracker-ID portion (descriptive tail
|
||||
text in each task spec is omitted here for table-readability). The
|
||||
@@ -176,6 +176,7 @@ are all declared and documented below under **Cycle Check**.
|
||||
| AZ-622 | AZ-618 Phase D: build_pre_constructed seeds c3_lightglue_runtime + c3_feature_extractor | 3 | AZ-619, AZ-620, AZ-621, AZ-278 | AZ-602 |
|
||||
| AZ-623 | AZ-618 Phase E: build_pre_constructed seeds c282_ransac_filter + c5 helpers | 3 | AZ-619, AZ-282, AZ-276, AZ-277, AZ-279, AZ-381 | AZ-602 |
|
||||
| AZ-624 | AZ-618 Phase F: wire build_pre_constructed into main() + AC-1..AC-5 (incl. Jetson tier-2) | 2 | AZ-619, AZ-620, AZ-621, AZ-622, AZ-623 | AZ-602 |
|
||||
| AZ-687 | build_pre_constructed must guard c6_descriptor_index when config.mode == 'replay' | 2 | AZ-619, AZ-620, AZ-624 | AZ-602 |
|
||||
|
||||
## Notes
|
||||
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
# AZ-687 — build_pre_constructed must guard c6_descriptor_index when config.mode == 'replay'
|
||||
|
||||
**Task**: AZ-687_pre_constructed_replay_mode_guard
|
||||
**Name**: build_pre_constructed must guard c6_descriptor_index when config.mode == 'replay'
|
||||
**Description**: Follow-up to AZ-618 (umbrella) surfaced by the 2026-05-19 Jetson Tier-2 e2e run. The newly-wired `build_pre_constructed` unconditionally seeds `c6_descriptor_index`, which reads `config.components["c6_tile_cache"]` via `storage_factory._c6_config`. In replay mode the CLI synthesizes a `Config` that does NOT include a `c6_tile_cache` block, so the call raises `KeyError`. The descriptor index is not consumed in replay mode (replay sources frames from the tlog + mp4 directly), so the fix is a replay-mode guard at the bootstrap layer — NOT a silent fallback in `_c6_config` (the docstring explicitly rejects that to keep import-time wiring honest).
|
||||
**Complexity**: 2 points
|
||||
**Dependencies**: AZ-619, AZ-620, AZ-624 (the c6 seed introduced by AZ-620 and wired by AZ-624 must already be in `done/` — they are, as of batch 96).
|
||||
**Component**: runtime_root (cross-cutting)
|
||||
**Tracker**: AZ-687
|
||||
**Epic**: AZ-602 (parent: AZ-618 umbrella; AZ-687 is a sibling follow-up under the same Epic)
|
||||
|
||||
## Outcome
|
||||
|
||||
- `runtime_root/airborne_bootstrap.py::build_pre_constructed` (or its `_build_c6_descriptor_index` helper) guards the c6 descriptor index + c6 tile store seeds on `config.mode == "replay"`.
|
||||
- Equivalent guard applied to any other c6/c7/cN seed whose underlying `_cN_config` lookup fails on a replay-synthesized config AND whose result is not consumed by the replay path.
|
||||
- New unit test pins the replay-mode path; existing live-mode tests continue to assert every key in `AIRBORNE_REQUIRED_PRE_CONSTRUCTED_KEYS` is populated.
|
||||
- Jetson Tier-2 e2e replay run crosses both `replay.compose_root.ready` AND `replay.input.frame_emitted` log lines on AC-1, AC-2, AC-5, AC-6.
|
||||
|
||||
## Scope
|
||||
|
||||
### Included
|
||||
|
||||
- Replay-mode guard inside `runtime_root/airborne_bootstrap.py` covering the c6 descriptor index + c6 tile store seeds (and any other replay-irrelevant seed that currently relies on a config block the replay CLI does not synthesize).
|
||||
- New unit test under `tests/unit/runtime_root/` (e.g. `test_az687_pre_constructed_replay_mode.py`) that builds a replay-mode Config with no `c6_tile_cache` block and asserts `build_pre_constructed(config)` returns successfully.
|
||||
- Live-mode regression coverage: extend or assert against existing tests so they continue to require every documented key.
|
||||
- Re-run Jetson Tier-2 via `scripts/run-tests-jetson.sh` (compose-bypass path documented in `_docs/03_implementation/run_tests_step11_report.md` Rerun 3 if companion/operator-orchestrator builds remain broken on the Jetson).
|
||||
- Batch report `Tier-2 evidence:` field populated per `_docs/02_document/tests/tier2-jetson-testing.md`.
|
||||
|
||||
### Excluded
|
||||
|
||||
- Any change to component factory signatures or per-component config schemas.
|
||||
- New `BUILD_*` env flags.
|
||||
- Operator-binary `pre_constructed` assembly (still explicitly deferred per AZ-591).
|
||||
- Fixing the operator-orchestrator Dockerfile build order (`pip install -e .` before `COPY src ./src`) — unrelated; this task uses the compose-bypass workaround.
|
||||
- AC-3 (camera calibration xfail) or AC-8 (mock-sat dep) — both have their own existing gates.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
**AC-687-1: replay-mode build_pre_constructed succeeds without c6_tile_cache block**
|
||||
Given a `Config` with `mode == "replay"` and `components` that do NOT include a `c6_tile_cache` block
|
||||
When `build_pre_constructed(config)` is called
|
||||
Then it returns without raising `KeyError`
|
||||
And the returned dict either omits `c6_descriptor_index` / `c6_tile_store` or maps them to a sentinel the consuming wrapper factories recognise as "not built for replay".
|
||||
|
||||
**AC-687-2: live-mode build_pre_constructed continues to seed every required key**
|
||||
Given a `Config` with `mode == "live"` and the full default `components` block
|
||||
When `build_pre_constructed(config)` is called
|
||||
Then the returned dict contains every key in `set.union(*AIRBORNE_REQUIRED_PRE_CONSTRUCTED_KEYS.values())`
|
||||
And no key maps to `None`.
|
||||
|
||||
**AC-687-3: Jetson Tier-2 e2e crosses both bootstrap log lines**
|
||||
Given AZ-687 is landed
|
||||
When `scripts/run-tests-jetson.sh tests/e2e/replay/test_derkachi_1min.py` is invoked (or its compose-bypass equivalent)
|
||||
Then AC-1, AC-2, AC-5, AC-6 each log `replay.compose_root.ready` AND `replay.input.frame_emitted`
|
||||
And the batch report `Tier-2 evidence:` field captures terminal log path, JetPack version (6.2.2+b24), L4T (R36.5.0), and run timestamp.
|
||||
|
||||
**AC-687-4: full Tier-1 pytest suite green**
|
||||
Given AZ-687 is landed
|
||||
When the full Tier-1 pytest suite is run
|
||||
Then 0 new failures appear (the existing pre-existing `c12_operator_orchestrator/test_cli_console_script.py::test_cold_start_under_500ms_p99` Mac-dev-host failure remains out of scope).
|
||||
|
||||
## Constraints
|
||||
|
||||
- MUST NOT change `_c6_config` to fall back silently — silent fallback was explicitly rejected per the existing docstring (the rationale: "if the package has not been imported, KeyError here is the right failure mode — silent fallback would mask a missing import"). The fix lives at the BUILD-PRE-CONSTRUCTED layer, not the storage_factory layer.
|
||||
- MUST NOT introduce new `BUILD_*` env flags.
|
||||
- MUST NOT touch per-component factory signatures.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Jetson run log (failure evidence): `_docs/03_implementation/jetson_runs/2026-05-19_az618_tier2_run.txt`
|
||||
- AZ-618 umbrella spec (defines AC-5 expectations): `_docs/02_tasks/done/AZ-618_airborne_bootstrap_pre_constructed.md`
|
||||
- AZ-620 Phase B (introduces `_build_c6_descriptor_index`): `_docs/02_tasks/done/AZ-620_pre_constructed_phase_b_c6_storage.md`
|
||||
- AZ-624 Phase F (wires `main()`): `_docs/02_tasks/done/AZ-624_pre_constructed_phase_f_wire_main.md`
|
||||
- `_c6_config` rationale: `src/gps_denied_onboard/runtime_root/storage_factory.py:55-62`
|
||||
- Tier-2 testing policy: `_docs/02_document/tests/tier2-jetson-testing.md`
|
||||
|
||||
## Tracker relationships
|
||||
|
||||
- Parent Epic: AZ-602 (E2E Tier-1 harness rehabilitation)
|
||||
- Surfaces from: AZ-618 (umbrella) — specifically AC-618-5 Jetson Tier-2 reality gate
|
||||
@@ -0,0 +1,61 @@
|
||||
FFx..FFF.s.............. [100%]
|
||||
=================================== FAILURES ===================================
|
||||
______________________ test_ac1_exits_0_jsonl_count_match ______________________
|
||||
tests/e2e/replay/test_derkachi_1min.py:66: in test_ac1_exits_0_jsonl_count_match
|
||||
assert result.returncode == 0, (
|
||||
E AssertionError: gps-denied-replay exited 1
|
||||
E stdout:
|
||||
E {"ts":"2026-05-19T08:27:40.862695Z","level":"INFO","component":"shared.fdr_client","frame_id":null,"kind":"fdr.client_constructed","msg":"FdrClient constructed","kv":{"producer_id":"airborne_main","capacity":4096},"exc":null}
|
||||
E {"ts":"2026-05-19T08:27:40.865683Z","level":"ERROR","component":"gps_denied_onboard.cli.replay","frame_id":null,"kind":"log.diag","msg":"gps-denied-replay: unhandled exception","kv":{},"exc":"Traceback (most recent call last):\n File \"/opt/src/gps_denied_onboard/cli/replay.py\", line 308, in main\n return int(shared_main(config))\n File \"/opt/src/gps_denied_onboard/runtime_root/__init__.py\", line 663, in main\n pre_constructed = build_pre_constructed(config)\n File \"/opt/src/gps_denied_onboard/runtime_root/airborne_bootstrap.py\", line 1219, in build_pre_constructed\n constructed[\"c6_descriptor_index\"] = _build_c6_descriptor_index(config)\n File \"/opt/src/gps_denied_onboard/runtime_root/airborne_bootstrap.py\", line 550, in _build_c6_descriptor_index\n return build_descriptor_index(config)\n File \"/opt/src/gps_denied_onboard/runtime_root/storage_factory.py\", line 151, in build_descriptor_index\n block = _c6_config(config)\n File \"/opt/src/gps_denied_onboard/runtime_root/storage_factory.py\", line 62, in _c6_config\n return config.components[\"c6_tile_cache\"]\nKeyError: 'c6_tile_cache'"}
|
||||
E
|
||||
E stderr:
|
||||
E gps-denied-replay starting with args: {'video': PosixPath('/opt/_docs/00_problem/input_data/flight_derkachi/flight_derkachi.mp4'), 'tlog': PosixPath('/tmp/pytest-of-root/pytest-0/derkachi0/synth.tlog'), 'output': PosixPath('/tmp/pytest-of-root/pytest-0/derkachi0/estimator_output_1.jsonl'), 'camera_calibration': PosixPath('/opt/tests/fixtures/calibration/adti26.json'), 'config_path': PosixPath('/tmp/pytest-of-root/pytest-0/derkachi0/config.yaml'), 'mavlink_signing_key': '<redacted>', 'pace': 'asap', 'time_offset_ms': 0, 'skip_auto_sync_validation': True}
|
||||
E Traceback (most recent call last):
|
||||
E File "/opt/src/gps_denied_onboard/cli/replay.py", line 308, in main
|
||||
E return int(shared_main(config))
|
||||
E File "/opt/src/gps_denied_onboard/runtime_root/__init__.py", line 663, in main
|
||||
E pre_constructed = build_pre_constructed(config)
|
||||
E File "/opt/src/gps_denied_onboard/runtime_root/airborne_bootstrap.py", line 1219, in build_pre_constructed
|
||||
E constructed["c6_descriptor_index"] = _build_c6_descriptor_index(config)
|
||||
E File "/opt/src/gps_denied_onboard/runtime_root/airborne_bootstrap.py", line 550, in _build_c6_descriptor_index
|
||||
E return build_descriptor_index(config)
|
||||
E File "/opt/src/gps_denied_onboard/runtime_root/storage_factory.py", line 151, in build_descriptor_index
|
||||
E block = _c6_config(config)
|
||||
E File "/opt/src/gps_denied_onboard/runtime_root/storage_factory.py", line 62, in _c6_config
|
||||
E return config.components["c6_tile_cache"]
|
||||
E KeyError: 'c6_tile_cache'
|
||||
E
|
||||
E assert 1 == 0
|
||||
E + where 1 = ReplayRunResult(returncode=1, stdout='{"ts":"2026-05-19T08:27:40.862695Z","level":"INFO","component":"shared.fdr_clien...tput_path=PosixPath('/tmp/pytest-of-root/pytest-0/derkachi0/estimator_output_1.jsonl'), wall_clock_s=1.429985128925182).returncode
|
||||
_________________________ test_ac2_jsonl_schema_match __________________________
|
||||
tests/e2e/replay/test_derkachi_1min.py:106: in test_ac2_jsonl_schema_match
|
||||
rows = parse_jsonl(result.output_path)
|
||||
tests/e2e/replay/_helpers.py:66: in parse_jsonl
|
||||
with path.open(encoding="utf-8") as fp:
|
||||
/usr/lib/python3.10/pathlib.py:1119: in open
|
||||
return self._accessor.open(self, mode, buffering, encoding, errors,
|
||||
E FileNotFoundError: [Errno 2] No such file or directory: '/tmp/pytest-of-root/pytest-0/derkachi0/estimator_output_1.jsonl'
|
||||
______________________ test_ac5_determinism_two_runs_diff ______________________
|
||||
tests/e2e/replay/test_derkachi_1min.py:364: in test_ac5_determinism_two_runs_diff
|
||||
assert r1.returncode == 0 and r2.returncode == 0
|
||||
E assert (1 == 0)
|
||||
E + where 1 = ReplayRunResult(returncode=1, stdout='{"ts":"2026-05-19T08:27:45.899390Z","level":"INFO","component":"shared.fdr_clien...put_path=PosixPath('/tmp/pytest-of-root/pytest-0/derkachi0/estimator_output_1.jsonl'), wall_clock_s=1.1765288199530914).returncode
|
||||
____________________ test_ac6_pace_realtime_60s_within_5pct ____________________
|
||||
tests/e2e/replay/test_derkachi_1min.py:392: in test_ac6_pace_realtime_60s_within_5pct
|
||||
assert result.returncode == 0
|
||||
E assert 1 == 0
|
||||
E + where 1 = ReplayRunResult(returncode=1, stdout='{"ts":"2026-05-19T08:27:48.271495Z","level":"INFO","component":"shared.fdr_clien...put_path=PosixPath('/tmp/pytest-of-root/pytest-0/derkachi0/estimator_output_1.jsonl'), wall_clock_s=1.1753297119867057).returncode
|
||||
_________________________ test_ac6_pace_asap_under_30s _________________________
|
||||
tests/e2e/replay/test_derkachi_1min.py:406: in test_ac6_pace_asap_under_30s
|
||||
assert result.returncode == 0
|
||||
E assert 1 == 0
|
||||
E + where 1 = ReplayRunResult(returncode=1, stdout='{"ts":"2026-05-19T08:27:49.478080Z","level":"INFO","component":"shared.fdr_clien...tput_path=PosixPath('/tmp/pytest-of-root/pytest-0/derkachi0/estimator_output_1.jsonl'), wall_clock_s=1.193672444904223).returncode
|
||||
=========================== short test summary info ============================
|
||||
SKIPPED [1] tests/e2e/replay/test_derkachi_1min.py:441: AC-8 (operator workflow rehearsal) blocked on the full D-PROJ-2 mock-suite-sat-service implementation — current tests/fixtures/mock-suite-sat-service/ is a bootstrap stub with only GET /healthz. Unskips when the mock implements tile-fetch + index-build endpoints.
|
||||
XFAIL tests/e2e/replay/test_derkachi_1min.py::test_ac3_within_100m_80pct_of_ticks - AC-3 requires a real Topotek KHP20S30 camera calibration; _docs/00_problem/input_data/flight_derkachi/camera_info.md states the intrinsics are unknown. Test runs as xfail until a real calibration JSON ships.
|
||||
FAILED tests/e2e/replay/test_derkachi_1min.py::test_ac1_exits_0_jsonl_count_match
|
||||
FAILED tests/e2e/replay/test_derkachi_1min.py::test_ac2_jsonl_schema_match - ...
|
||||
FAILED tests/e2e/replay/test_derkachi_1min.py::test_ac5_determinism_two_runs_diff
|
||||
FAILED tests/e2e/replay/test_derkachi_1min.py::test_ac6_pace_realtime_60s_within_5pct
|
||||
FAILED tests/e2e/replay/test_derkachi_1min.py::test_ac6_pace_asap_under_30s
|
||||
5 failed, 17 passed, 1 skipped, 1 xfailed in 10.61s
|
||||
@@ -8,7 +8,7 @@ status: in_progress
|
||||
sub_step:
|
||||
phase: 16
|
||||
name: batch-loop
|
||||
detail: "AZ-618 umbrella complete; AC-618-5 BLOCKED on operator Jetson run"
|
||||
detail: "AZ-687 (2pt) filed under AZ-602 (blocks AZ-618); spec in todo/, Jetson Tier-2 evidence in _docs/03_implementation/jetson_runs/2026-05-19_az618_tier2_run.txt; resume batch loop in new session"
|
||||
retry_count: 0
|
||||
cycle: 1
|
||||
tracker: jira
|
||||
|
||||
Reference in New Issue
Block a user