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>
8.3 KiB
Fixture manifest
All fixtures live inside this workspace so the autopilot repo is self-sufficient — downstream test runners must never reach into a sibling repo at ../. When you add or refresh a fixture, update the matching SHA-256 in this manifest AND the rows in ../expected_results/results_report.md that consume it.
Total on-disk size: ~57 MB.
Files
Still-image aerial frames — images/
Used as Tier-1 input frames for detection-quality assertions.
| File | Size | SHA-256 | Upstream source | results_report.md rows |
|---|---|---|---|---|
images/4d6e1830d211ad50.jpg |
152 KB | 4c396495af64aaf9aac5ecb92431bf0c75db42b0bdb8e4eec1937f9995acee42 |
../detections/data/images/ (re-copied 2026-05-19) |
L1, D6 |
images/54f6459dbddb93d8.jpg |
6.7 MB | cd65c76a080ef72ce3528031f003f067fca6091c067a86d527a1ae91cd78be59 |
../detections/data/images/ (re-copied 2026-05-19) |
D2 |
images/6dd601b7d2dc1b30.jpg |
1.4 MB | 45edd83a357a9f852e14e5845265cd09c20b4b99b1828c160cb3298f0e160181 |
../detections/data/images/ (re-copied 2026-05-19) |
D2 |
images/805bcf1e9f271a58.jpg |
176 KB | fe696899225fc04f2335e87acf6a3ad8a00cd3950c5940d5e73e5ce438f36257 |
../detections/data/images/ (re-copied 2026-05-19) |
D2 |
images/f997d0934726b555.jpg |
232 KB | 5d1c9c551c0680e5b3d0aab261bca71e724c78f6db3580da598c680b4f7d4d79 |
../detections/data/images/ (re-copied 2026-05-19) |
D2 |
Reconnaissance video — videos/
| File | Size | SHA-256 | Upstream source | results_report.md rows |
|---|---|---|---|---|
videos/94d42580bd1ad6ff.mp4 |
12 MB | 602b22a42515a754313551847caa6d6a6d7b3cde1d857cbd08ebc5543fb8cf7c |
../detections/data/videos/ (re-copied 2026-05-19) |
T3 (frame-rate floor scenario) |
Movement-detection clips — movement/
Wide-area reconnaissance clips intended for movement-detection visual baselines. Important: these clips DO NOT have paired gimbal.csv / telemetry.csv files — ego-motion compensation assertions (M1–M4) cannot run against them. They are useful for visual harness work, frame-count assertions, and as visual reference for the movement-detection scenarios.
| File | Size | SHA-256 | Upstream source | results_report.md rows |
|---|---|---|---|---|
movement/video01.mp4 |
5.3 MB | 6f37186f5e9be97109db8d0d220df96d21cac9ce5b50b576234c6f7ee369d2bb |
local; provenance pre-existing in workspace | M1 (visual reference only — no telemetry) |
movement/video02.mp4 |
5.9 MB | 7de7981e511e21e1e72f506d44541b44a4c27a995c9505ef8e3b48e69b416367 |
local; provenance pre-existing in workspace | M2 (visual reference only — no telemetry) |
movement/video03.mp4 |
6.1 MB | df441164da7f37d715968212b95e9bf53c8e37384f20ddfab61cd6d0d18b4f3a |
local; provenance pre-existing in workspace | M3 (visual reference only — no telemetry) |
movement/video04.mp4 |
5.8 MB | 36445bf1c86c5afa524000b5b2da7fc9cb3d39c745f9ad830b3d60f6868948e7 |
local; provenance pre-existing in workspace | M4 (visual reference only — no telemetry) |
Semantic reference frames — semantic/
Annotated reference examples for concealed-position semantic targets. Not a graded eval set — these are 4 hand-picked examples of footpath-to-concealment patterns, intended as visual reference for what the system should recognise. Detection-quality gates (D1, D3, D4, D5) need a full annotated multi-season eval set; these 4 PNGs are insufficient for those gates and serve as starter reference only.
| File | Size | SHA-256 | Description | results_report.md rows |
|---|---|---|---|---|
semantic/semantic01.png |
3.1 MB | 339ad4d35ab36052828f05652ab7249801bcd5d7bb04522f0ab9cbf6f0ca008a |
Footpath leading to branch-pile hideout in winter forest | D3, D4, D5 (starter only — full multi-season set still required) |
semantic/semantic02.png |
5.1 MB | ffe3c49f5f1833724ce46083d212e714422e664b635cdd48b63311adefcd7b1f |
Footpath to FPV launch clearing, branch mass at forest edge | D3, D4, D5 (starter only) |
semantic/semantic03.png |
1.0 MB | ce89c139815e9a80679237008f7cfc3039bbd53f162d48017e840ff91e57b109 |
Footpath to squared hideout structure | D3, D4, D5 (starter only) |
semantic/semantic04.png |
1.3 MB | b25c689b7aa543ec15858e4b5edfa32387ced4930130eb280d952c555f104e69 |
Footpath terminating at tree-branch concealment | D3, D4, D5 (starter only) |
semantic/data_parameters.md |
2 KB | n/a (text) | Description of the four reference examples + the new YOLO primitive classes that motivate them | reference only |
Detection contract schemas — schemas/
| File | Size | SHA-256 | Upstream source | results_report.md rows |
|---|---|---|---|---|
schemas/expected_detections.json |
1.4 KB | ce60c105d697efe0359d2e6b1b46fc63e53d3789b067d53501f9c76aad9bd1ae |
../e2e/fixtures/ (re-copied 2026-05-19) |
D6 (sample Tier-1 response) |
schemas/expected_detections.schema.json |
2.4 KB | a7174e0b083dcbf42fa8672acd3e1807d11ea0629cc636ff958a4d77168733b9 |
../e2e/fixtures/ (re-copied 2026-05-19) |
D6 (JSON-schema for the Tier-1 contract) |
Database init script — sql/
| File | Size | SHA-256 | Upstream source | results_report.md rows |
|---|---|---|---|---|
sql/init.sql |
3.7 KB | b61e452c549f7b006db88d265f4346837e0a33d1abd4d977ebf3d48d8c943439 |
../e2e/fixtures/ (re-copied 2026-05-19) |
suite-only reference; no autopilot AC row asserts against this |
Copy vs reference
Fixtures were COPIED (not moved). The sibling repos still own the originals — keeping autopilot's copy in sync when an upstream changes is a manual chore today (the monorepo-e2e skill at the suite root will eventually own this drift; see _docs/_process_leftovers/ if a sync is pending).
When an upstream fixture changes:
- Recompute the SHA-256 in the source repo.
- Re-copy into the matching
fixtures/subdirectory here. - Update this manifest's SHA-256 column.
- If the change invalidates an assertion in
../expected_results/results_report.md, fix the row's expected result too — do not let assertions drift silently against new data.
Gaps still pending fixture acquisition
The authoritative per-service acquisition catalogue lives in ../services.md. Summary of the still-open gaps (each is also tagged on its row in ../expected_results/results_report.md with a structured <DEFERRED: ...> marker, and a _docs/_process_leftovers/ entry records the replay obligation):
| Gap | What's missing | Blocks AC rows | Acquisition status |
|---|---|---|---|
| Paired gimbal+telemetry CSVs for the 4 movement clips | gimbal.csv + telemetry.csv aligned to each video frame timestamps |
M1–M4, tightens L6/L7 | Confirmed unavailable today (user 2026-05-19) — requires re-flight or new recording with gimbal-feedback channel captured |
| Annotated eval set across all four seasons | Hundreds–thousands of labelled images per season for concealed-position + footpath gates | D1, D3, D4, D5 | needs annotation campaign (1.5 months at 5 hrs/day target per semantic/data_parameters.md) |
| Per-zoom-band frame sequences | Same kind of clip as movement/ but recorded at light, medium, and high zoom bands |
tightens M2, L7, S2 | needs flight time + zoom-band metadata in the recorder |
Mock missions HTTPS exchanges |
Recorded JSON request/response pairs for mission GET/POST + mapobjects GET/POST | Mp1–Mp5 | inline-authorable against the mission-schema; not yet authored |
| Mock Ground Station session traces | Scripted timing trace (connect / push / drop / reconnect / lost-link) | R4, O8 | inline-authorable; not yet authored |
| ArduPilot SITL traces | Recorded MAVLink streams for waypoint upload, geofence INCLUSION + EXCLUSION, RTL on lost-link, RTL on battery floor | R4, R5, R6, R7, R9 + project SITL conformance gate | needs SITL run |
| Operator-command envelopes | Valid / expired / replayed / malformed envelopes under the chosen Q9 auth scheme | O9, O10 | blocked on Q9 (_docs/02_document/architecture.md §8) |
| VLM I/O pairs | Bounded ROI in → structured VlmAssessment out + schema-violation cases |
L3, S5 | inline-authorable against the assessment schema once the local model is pinned |
| GPS / NTP drift scenarios | Scripted offset / lock-loss traces | R8 | inline-authorable |
When a fixture from this list lands, copy it under fixtures/<category>/, add a row to the relevant subsection above, and bind the matching <DEFERRED> row in ../expected_results/results_report.md to its new local path.