mirror of
https://github.com/azaion/autopilot.git
synced 2026-06-21 10:41:09 +00:00
bc40ea7300
Greenfield Steps 1-6 baseline for the autopilot rewrite from legacy Qt/C++ to a Rust workspace. - Remove legacy Qt/C++ tree (ai_controller, drone_controller, misc/camera, python_scaffold, root Dockerfile, autopilot.pro, legacy main.py / requirements.txt). - Add _docs/00_problem (problem, restrictions, acceptance criteria, security approach, input data + fixtures). - Add _docs/01_solution/solution_draft01. - Add _docs/02_document (architecture, system-flows, data_model, glossary, decision-rationale, deployment, 13 component descriptions, tests/ specs, FINAL_report, module-layout). - Add _docs/02_tasks/todo with 47 task specs (AZ-640..AZ-686, one bootstrap + 46 component tasks) and _dependencies_table.md. - Add .cursor/rules/artifact-srp.mdc (single-responsibility rule for canonical _docs artifacts). - Track autodev state in _docs/_autodev_state.md (Step 6 completed, ready for Step 7 Implement). Jira: bootstrap AZ-626; component epics AZ-627..AZ-639; tasks AZ-640..AZ-686. Total complexity 173 points across 12 epics. Co-authored-by: Cursor <cursoragent@cursor.com>
112 lines
7.9 KiB
Markdown
112 lines
7.9 KiB
Markdown
# 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.
|