Skip to content

Ticket Backlog

63 implemented · 15 planned · 1272 tests passing

This directory tracks every capability from idea to implementation. Completed tickets are kept as historical records. Open tickets describe what to build next and why.


What's already built

Area Tickets Ships as
Core schemas & CLI 001–003 estimate, JSON envelopes, golden fixtures, public API
Energy & feasibility 010–012, 061, 063, 097, 099 Energy budget, mass/density/SoC energy fidelity, geofence (2D + altitude bounds), landing-zone reachability, RTH reserve timeline with opt-in feasibility gate
Scenario runner 020–021, 069 Lost-link policies, per-event contingency overrides, contingency events, assertions
Route physics 030–039, 100 Fidelity v2, layered/spatiotemporal wind, terrain alt, Dubins divert, obstacle and terrain clearance
SITL (ArduPilot) 040–043 sitl command, MAVLink upload, telemetry recording, compare
Stochastic propagation 047–049, 086 propagate command, twin-state EKF, closed-loop tracking controller; split into propagation/ subpackage
Output formats 055, 057, 072–075 GeoJSON/KML exports, summary, checklist, profile, sensitivity, size-battery
Batch, import & export 060, 085, 091 batch command, convert QGC importer with --vehicle-profile, --format csv, export mission→QGC .plan writer
Real-world data 052–053, 056, 059 Fetch scripts, community vehicle profiles, infeasible Alpine demo
Regulatory pre-assessment 094–095 SORA Ground Risk Class (iGRC), Air Risk Class, and GRC×ARC→SAIL with applicable OSOs via the sora command
Weather & GO/NO-GO 092–093 Enforced max_wind_mps/max_crosswind_mps weather minimums with a checklist Weather-limits row; time-varying geofence activation windows
Correctness fixes 062, 065 Wind-triangle divert correction, stochastic spatial infeasibility tracking
Documentation 096 MkDocs Material site published to GitHub Pages, auto-built from main
Release tooling 098 bump command (semver bump + changelog roll + --check drift guard); version-agnostic golden fixtures
Calibration & validation 080, 081, 082, 083 flight-trace.v1 ingestion, phase-segments.v1 segmentation, validation-report.v1 predicted-vs-observed metrics via the validate command, calibration-profile.v1 parameter fitting via the calibrate command

Full feature list: docs/tickets/README.md implemented section · Test coverage: uv run pytest


Planned work

Items are ordered by impact. Pick one, read its ticket file, open a PR.

Quick wins

# Ticket What it adds
088 Performance benchmarks pytest-benchmark suite + CI regression gates (no production code changes)
089 Preflight report command Single preflight command combining estimate + scenario + Monte Carlo into one operator briefing
090 Schema migration tooling bvlos-sim migrate command to auto-upgrade YAML files when schema versions bump

Backend integration readiness

Gaps surfaced while reviewing whether the engine can be driven cleanly from a long-running service (the Mission Control web backend) as a one-process-per-job subprocess. None blocks single-shot CLI use; each sharpens the contract a queue worker depends on.

This track is complete: contract-version discovery (105), machine-readable run progress (106), and the machine-readable preflight validation envelope (107) are all implemented — see the full list below.

Core simulation gaps

# Ticket What it adds
062 LZ reachability wind correction Apply wind-triangle correction to landing-zone reachability energy (divert already done)
064 Batch scenario & propagate Extend batch command to run scenario and propagate jobs, not only estimates

Output & visualisation gaps

# Ticket What it adds
076 Departure window finder Scan a forecast window for the first feasible departure time
077 Mission comparison report Side-by-side diff of two mission estimates
066 Stochastic GeoJSON export --format geojson/kml for propagate command
067 Propagation progress feedback Progress bar / stderr updates during long particle runs
068 Divert route GeoJSON layer Add computed divert paths as a separate layer in scenario GeoJSON/KML

Hardware validation ladder

# Ticket What it adds
045 PX4 SITL — launch & upload PX4 SITL adapter behind the existing evidence contract
046 PX4 SITL — telemetry & evidence PX4 artifact recording and evidence bundle assembly
087 HITL adapter Real flight controller hardware (Pixhawk) in the validation loop

Integrations & platform

# Ticket What it adds
054 Reference calibration inputs Curated reference datasets for model calibration and import
058 NOTAM / live airspace Dynamic no-fly zone ingestion from live NOTAM feeds
050 REST API & web UI HTTP service wrapper and browser-based preflight interface
070 Operational integration seams Hooks for flight-ops systems, flight plans, and operator dashboards
071 Live comms, Remote ID, traffic UTM/U-space, Remote ID broadcast, and traffic awareness

Calibration & validation track

A separate track for post-flight model calibration from real flight logs. Tickets 080, 081, 082, and 083 are complete; only 084 (holdout validation reports) remains.

# Ticket Status
080 Flight log ingestion & trace normalisation implemented
081 Flight phase segmentation implemented
082 Predicted vs. observed validation metrics implemented
083 Calibration profile data & fitting implemented
084 Holdout validation reports planned
102 Binary flight-log ingestion (.bin, ULog) planned

Contributing

Before opening a PR, read the ticket file for the work you're doing. Each ticket states its acceptance criteria, composition with existing code, and what tests are expected.

Rules

  • Keep core execution deterministic. Randomness lives in Monte Carlo and stochastic layers only.
  • Add adapter layers only after core contracts are stable.
  • All schemas and public outputs are versioned. Bump the version string when the shape changes.
  • Reject unsupported inputs explicitly — never approximate silently.
  • No live external network calls in core CI.
  • Update docs, tests, and golden fixtures in the same commit when public behaviour changes.

Integration standard

Every new ticket must compose through the existing surfaces:

  • YAML schemas: mission.v6, vehicle.v4, scenario.v1, uncertainty.v1, stochastic.v1, batch.v1
  • Examples: examples/missions/, examples/vehicles/, examples/scenarios/
  • CLI commands: estimate, scenario, sample, propagate, batch, convert, export, sitl, compare, size-battery, sora
  • Output contracts: canonical JSON envelopes, Markdown reports, golden fixtures
  • Public Python API: estimator.try_estimate_mission_distance_time, estimator.run_scenario, estimator.execution.monte_carlo.run_monte_carlo

New capabilities should work with existing pieces, not alongside them in isolation.


Implemented tickets

Full list (78 tickets)

  1. 001 Estimator CLI and envelope
  2. 002 Versioning and golden fixtures
  3. 003 Technical debt hardening
  4. 010 Deterministic energy feasibility
  5. 011 Static geofence feasibility
  6. 012 Static landing-zone reachability
  7. 020 Scenario runner core
  8. 021 Comms link and contingency policies
  9. 030 Fidelity v2 — layered wind and sub-segments
  10. 031 Fidelity v2 — turns and fixed-wing loiter
  11. 032 Terrain-referenced altitude execution
  12. 033 Continuous spatiotemporal wind grid
  13. 034 Resource and link feasibility abstractions
  14. 035 Dynamic landing-zone availability
  15. 036 Computed divert routing
  16. 037 Monte Carlo uncertainty modelling
  17. 038 Bank-angle and Dubins path optimisation
  18. 039 Path planning model gaps
  19. 040 SITL adapter contract and evidence schema
  20. 041 ArduPilot SITL launch and mission upload
  21. 042 SITL telemetry recorder and evidence bundle
  22. 043 SITL scenario comparison report
  23. 047 Stochastic state propagation
  24. 048 Observation model and twin-state EKF
  25. 049 Stochastic closed-loop control
  26. 052 Real-world data fetch scripts
  27. 053 Airspace geofence fetch script
  28. 055 GeoJSON and KML route export
  29. 056 Community vehicle profiles
  30. 057 Summary output format
  31. 059 Infeasible demo mission
  32. 060 Import, export, and batch workflows
  33. 062 Wind-corrected divert energy (LZ reachability TAS-only remaining — Ticket 062)
  34. 063 Return-to-home reserve check
  35. 065 Geofence and LZ in stochastic propagation
  36. 069 Per-event lost-link policy override
  37. 072 Route altitude profile report
  38. 073 Pre-flight checklist output
  39. 074 Energy reserve sensitivity report
  40. 075 Minimum battery sizing command
  41. 085 QGC convert vehicle profile selection
  42. 086 Stochastic propagator module split
  43. 094 SORA Ground Risk Class (iGRC)
  44. 095 SORA Air Risk Class and SAIL determination
  45. 091 QGC mission export
  46. 092 Weather minimums and automatic GO/NO-GO
  47. 093 Time-varying geofence activation
  48. 096 Documentation site on GitHub Pages
  49. 099 Energy-model fidelity
  50. 100 Obstacle database and vertical clearance checks
  51. 101 SORA mitigation depth — M1–M3 and tactical air-risk reduction
  52. 097 Opt-in RTH reserve feasibility gate
  53. 061 3D geofence altitude bounds
  54. 080 Flight log ingestion and trace normalization
  55. 081 Flight phase segmentation
  56. 082 Predicted vs. observed validation metrics
  57. 098 Version bump and release tooling
  58. 083 Calibration profile data and fitting
  59. 104 Atomic output writes and clean cancellation
  60. 105 Contract-version discovery command
  61. 106 Machine-readable run progress
  62. 107 Machine-readable preflight validation report