diff --git a/_docs/02_tasks/_dependencies_table.md b/_docs/02_tasks/_dependencies_table.md index d4b1e3b..983fa0b 100644 --- a/_docs/02_tasks/_dependencies_table.md +++ b/_docs/02_tasks/_dependencies_table.md @@ -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 diff --git a/_docs/02_tasks/todo/AZ-687_pre_constructed_replay_mode_guard.md b/_docs/02_tasks/todo/AZ-687_pre_constructed_replay_mode_guard.md new file mode 100644 index 0000000..5f2a58d --- /dev/null +++ b/_docs/02_tasks/todo/AZ-687_pre_constructed_replay_mode_guard.md @@ -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 diff --git a/_docs/03_implementation/jetson_runs/2026-05-19_az618_tier2_run.txt b/_docs/03_implementation/jetson_runs/2026-05-19_az618_tier2_run.txt new file mode 100644 index 0000000..0a05356 --- /dev/null +++ b/_docs/03_implementation/jetson_runs/2026-05-19_az618_tier2_run.txt @@ -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': '', '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 diff --git a/_docs/_autodev_state.md b/_docs/_autodev_state.md index ceed900..de71b48 100644 --- a/_docs/_autodev_state.md +++ b/_docs/_autodev_state.md @@ -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