# Dependencies Table

**Date**: 2026-05-19
**Total Tasks**: 47 (1 bootstrap + 46 component)
**Total Complexity Points**: 173
**Cycle Check**: PASS (DAG verified)
**Coverage Check**: PASS (every named architectural capability has an implementation task)

## Recommended Execution Order

Tasks are listed in a topologically valid order. The `/implement` skill batches by dependency depth automatically; the order here is one valid linearization.

| Task | Name | Complexity | Dependencies | Epic |
|------|------|-----------|-------------|------|
| AZ-640 | initial_structure | 5 | None | AZ-626 |
| AZ-641 | mavlink_transport_and_heartbeat | 3 | AZ-640 | AZ-637 |
| AZ-642 | mavlink_codec | 5 | AZ-640 | AZ-637 |
| AZ-643 | mavlink_ack_demux_and_signing | 3 | AZ-640, AZ-641, AZ-642 | AZ-637 |
| AZ-644 | mission_client_pull_and_schema | 3 | AZ-640 | AZ-638 |
| AZ-645 | mission_client_waypoint_post | 2 | AZ-640, AZ-644 | AZ-638 |
| AZ-646 | mission_client_mapobjects_pull | 3 | AZ-640, AZ-644 | AZ-638 |
| AZ-647 | mission_client_mapobjects_push | 5 | AZ-640, AZ-644, AZ-646 | AZ-638 |
| AZ-648 | mission_executor_state_machine | 5 | AZ-640, AZ-641, AZ-642, AZ-643 | AZ-636 |
| AZ-649 | mission_executor_telemetry_forwarding | 2 | AZ-640, AZ-648 | AZ-636 |
| AZ-650 | mission_executor_bit_f9 | 5 | AZ-640, AZ-648, AZ-649, AZ-644, AZ-646 | AZ-636 |
| AZ-651 | mission_executor_lost_link_ladder | 3 | AZ-640, AZ-648, AZ-649 | AZ-636 |
| AZ-652 | mission_executor_safety_and_resume | 5 | AZ-640, AZ-648, AZ-649, AZ-643, AZ-647 | AZ-636 |
| AZ-653 | gimbal_a40_transport | 5 | AZ-640 | AZ-634 |
| AZ-654 | gimbal_zoom_out_sweep | 3 | AZ-640, AZ-653 | AZ-634 |
| AZ-655 | gimbal_smooth_pan_plan | 3 | AZ-640, AZ-653 | AZ-634 |
| AZ-656 | gimbal_centre_on_target | 3 | AZ-640, AZ-653 | AZ-634 |
| AZ-657 | frame_ingest_rtsp_session | 3 | AZ-640 | AZ-627 |
| AZ-658 | frame_ingest_decoder | 5 | AZ-640, AZ-657 | AZ-627 |
| AZ-659 | frame_ingest_publisher | 3 | AZ-640, AZ-657, AZ-658 | AZ-627 |
| AZ-660 | detection_client_grpc_stream | 5 | AZ-640, AZ-659 | AZ-628 |
| AZ-661 | detection_client_schema_and_health | 2 | AZ-640, AZ-660 | AZ-628 |
| AZ-662 | movement_detector_ego_motion | 5 | AZ-640, AZ-659, AZ-656, AZ-649 | AZ-629 |
| AZ-663 | movement_detector_clustering_and_emission | 5 | AZ-640, AZ-662 | AZ-629 |
| AZ-664 | movement_detector_fp_cap_and_q14_fallback | 3 | AZ-640, AZ-662, AZ-663 | AZ-629 |
| AZ-665 | mapobjects_store_h3_classify | 5 | AZ-640 | AZ-633 |
| AZ-666 | mapobjects_store_ignored_and_pass_sweep | 3 | AZ-640, AZ-665 | AZ-633 |
| AZ-667 | mapobjects_store_hydrate_and_pending | 5 | AZ-640, AZ-665, AZ-666 | AZ-633 |
| AZ-668 | mapobjects_store_persistence | 3 | AZ-640, AZ-665, AZ-667 | AZ-633 |
| AZ-669 | semantic_analyzer_primitive_graph | 5 | AZ-640, AZ-660, AZ-661 | AZ-630 |
| AZ-670 | semantic_analyzer_roi_cnn | 5 | AZ-640, AZ-669 | AZ-630 |
| AZ-671 | semantic_analyzer_action_policy | 3 | AZ-640, AZ-669, AZ-670 | AZ-630 |
| AZ-672 | vlm_client_provider_trait | 2 | AZ-640 | AZ-631 |
| AZ-673 | vlm_client_nanollm_ipc | 5 | AZ-640, AZ-672 | AZ-631 |
| AZ-674 | vlm_client_schema_and_model_version | 3 | AZ-640, AZ-673 | AZ-631 |
| AZ-675 | telemetry_stream_grpc_server | 3 | AZ-640, AZ-649, AZ-657 | AZ-637 |
| AZ-676 | telemetry_stream_video_path | 3 | AZ-640, AZ-657, AZ-675 | AZ-637 |
| AZ-677 | telemetry_stream_mapobjects_snapshot | 3 | AZ-640, AZ-675, AZ-667 | AZ-637 |
| AZ-678 | operator_bridge_command_auth | 5 | AZ-640, AZ-675 | AZ-628 |
| AZ-679 | operator_bridge_poi_surface | 3 | AZ-640, AZ-675 | AZ-628 |
| AZ-680 | operator_bridge_command_dispatch | 3 | AZ-640, AZ-678 | AZ-628 |
| AZ-681 | operator_bridge_safety_and_bit_ack | 3 | AZ-640, AZ-678, AZ-650, AZ-652 | AZ-628 |
| AZ-682 | scan_controller_state_machine | 5 | AZ-640, AZ-649 | AZ-635 |
| AZ-683 | scan_controller_poi_queue_and_window | 5 | AZ-640, AZ-682 | AZ-635 |
| AZ-684 | scan_controller_evidence_ladder | 5 | AZ-640, AZ-682, AZ-683, AZ-660, AZ-671, AZ-672 | AZ-635 |
| AZ-685 | scan_controller_mapobjects_dispatch | 3 | AZ-640, AZ-682, AZ-684, AZ-665, AZ-666, AZ-667 | AZ-635 |
| AZ-686 | scan_controller_gimbal_issuance | 3 | AZ-640, AZ-682, AZ-683, AZ-684, AZ-654, AZ-655, AZ-656, AZ-648 | AZ-635 |

## Per-Epic Roll-Up

| Epic | Component | Tasks | Points |
|------|-----------|-------|--------|
| AZ-626 | bootstrap | 1 | 5 |
| AZ-627 | frame_ingest | 3 | 11 |
| AZ-628 | detection_client + operator_bridge | 6 | 21 |
| AZ-629 | movement_detector | 3 | 13 |
| AZ-630 | semantic_analyzer | 3 | 13 |
| AZ-631 | vlm_client | 3 | 10 |
| AZ-633 | mapobjects_store | 4 | 16 |
| AZ-634 | gimbal_controller | 4 | 14 |
| AZ-635 | scan_controller | 5 | 21 |
| AZ-636 | mission_executor | 5 | 20 |
| AZ-637 | mavlink_layer + telemetry_stream | 6 | 20 |
| AZ-638 | mission_client | 4 | 13 |
| **TOTAL** | — | **47** | **173** |

> Note: Epic AZ-628 holds both `detection_client` and `operator_bridge` (per the Plan-step epic assignment, which placed both Action-plane components under the same epic). Epic AZ-637 holds both `mavlink_layer` and `telemetry_stream`.

## Coverage Check (named runtime capabilities → task)

Every named capability from `architecture.md`, `system-flows.md`, and per-component `description.md` files maps to a production-implementation task (no scaffold-only coverage):

- MAVLink transport + heartbeat → AZ-641; MAVLink v2 codec → AZ-642; ack demux + signing → AZ-643
- Mission pull + schema → AZ-644; middle-waypoint POST → AZ-645; MapObjects pull → AZ-646; MapObjects push (durable) → AZ-647
- Mission state machine → AZ-648; telemetry forwarding → AZ-649; BIT F9 → AZ-650; lost-link F10 → AZ-651; geofence/battery + safety + resume → AZ-652
- A40 vendor transport (CRC16, UDP) → AZ-653; zoom-out sweep → AZ-654; smooth-pan plan → AZ-655; centre-on-target → AZ-656
- RTSP session → AZ-657; H.264/265 decode (NVDEC + sw fallback) → AZ-658; broadcast publisher (zero-copy) → AZ-659
- Detection bi-di gRPC + budgeting → AZ-660; detection schema + model_version + health → AZ-661
- Ego-motion (OpenCV + telemetry sync) → AZ-662; clustering + persistence + emission → AZ-663; FP cap + Q14 hook → AZ-664
- H3 classify → AZ-665; ignored set + sweep → AZ-666; hydrate + sync_state + pending → AZ-667; persistence (JSON snapshot) → AZ-668
- Primitive graph + freshness → AZ-669; ROI CNN (ONNX) → AZ-670; action policy + pan plan → AZ-671
- VLM provider trait + disabled + feature → AZ-672; NanoLLM UDS + peer-cred → AZ-673; schema + model_version → AZ-674
- Operator telemetry gRPC + per-client lossy → AZ-675; video path (rtsp_forward / bytes_inline) + ai_locked → AZ-676; MapObjects snapshot + diff + resnap → AZ-677
- Operator command auth (sig + replay + session) → AZ-678; POI surface format → AZ-679; command dispatch + idempotency → AZ-680; BIT-degraded ack + safety-override → AZ-681
- Scan state machine + frame-rate floor → AZ-682; POI queue + 5/min cap + decision window → AZ-683; evidence ladder + zoom-in candidate routing → AZ-684; classify/ignored/degraded-sync dispatch → AZ-685; gimbal issuance + mission hint + health fallback → AZ-686

## DAG Validation Notes

- Every dependency targets a strictly smaller task number → no cycles.
- `AZ-640_initial_structure` is the unique root.
- Maximum dependency depth = 8 (AZ-686: 640 → 657 → 658 → 659 → 660 → 671 → 684 → 686 along one path; other paths similar).
- No task depends on a task in a later epic that itself depends back into an earlier epic.

## Notes for /implement

- Total complexity 173 pts: at ~5 pts/day per implementer that's ~35 implementer-days. Parallelism is bounded by the DAG; the widest parallel layer is just after AZ-640 (15 leaf-level tasks: AZ-641, AZ-642, AZ-644, AZ-653, AZ-657, AZ-665, AZ-672 plus the bootstrap-only-dep tasks below them on each chain).
- Suite-level integration tests (Phase 2 in monorepo-document terms) are NOT in this table — they belong to the suite-e2e epic and are decomposed separately when the suite-e2e harness is wired up.
