• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

thanos / ex_drone / ff8ad6ad2d8c40602942fa34953e014499d7eaef-PR-61
89%
main: 93%

Build:
Build:
LAST BUILD BRANCH: v0.3.0/Crazyflie_support
DEFAULT BRANCH: main
Ran 31 Jul 2026 10:01PM UTC
Jobs 1
Files 24
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

31 Jul 2026 09:55PM UTC coverage: 89.009% (+1.3%) from 87.734%
ff8ad6ad2d8c40602942fa34953e014499d7eaef-PR-61

Pull #61

github

thanos
The v0.2.0 release adds a genuinely well-shaped abstraction. Separating
`Drone.Formation` (pure, no processes, no I/O) from `Drone.Swarm` (membership +
fan-out) is the right decomposition, the geometric conventions are consistent
with `Drone.Geometry` (verified: `forward = {sin, cos}`, `right = {cos, -sin}`,
`cw` increases yaw, and `Formation.bearing_deg/2` uses `atan2(dx, dy)` to match),
and the decision to ship one-shot planners rather than pretending to do
closed-loop flocking is honest and well documented. The supervision split
(vehicles under `Drone.Supervisor`, coordinators under `Drone.Swarm.Supervisor`)
is correct. Test count and coverage are respectable at a headline level.

However, the release is **not ready to merge as-is**. The review found four
reproducible crash/leak defects and one safety-semantics defect in the new
public API:

1. `Drone.Swarm.emergency/1` does **not** fan out immediately. It is a
   `handle_call` on the same GenServer that executes long-running missions
   synchronously, so it queues behind them. Measured: **2799 ms** of latency for
   an emergency issued during a 3-second `run/2`. The project's own design
   document states emergency "must fan out immediately". For a library whose
   stated first principle is safety, this is the most serious finding.
2. Three distinct inputs crash the coordinator process with an unhandled
   exception instead of returning an error tuple: a bare `%Drone.Mission{}`
   passed to `run/2`, `:diamond` with more than four members, and a float `:yaw`
   or `columns: 0` in `Formation.plan/2`.
3. When the coordinator dies for any reason, its member vehicles are **leaked**
   — they stay connected forever with no owner. `terminate/2` contains a
   cleanup branch that can never execute, because the swarm does not trap exits.

The test suite, despite 276 passing tests and 89.6% line coverage, would not
catch most of this. The formation tests assert cardinality (`map_size == 3`) and
non-emptiness... (continued)
Pull Request #61: V0.2.0/swarms and missions

310 of 343 new or added lines in 6 files covered. (90.38%)

826 of 928 relevant lines covered (89.01%)

30.43 hits per line

Uncovered Changes

Lines Coverage ∆ File
22
86.5
lib/drone/swarm.ex
11
93.33
lib/drone/formation.ex
Jobs
ID Job ID Ran Files Coverage
1 ff8ad6ad2d8c40602942fa34953e014499d7eaef-PR-61.1 31 Jul 2026 10:01PM UTC 24
89.01
GitHub Action Run
Source Files on build ff8ad6ad2d8c40602942fa34953e014499d7eaef-PR-61
  • Tree
  • List 24
  • Changed 10
  • Source Changed 0
  • Coverage Changed 10
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Pull Request #61
  • PR Base - main (#F91DDDFB...)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc