Skip to content
Docs
foxborne.comRequest a pilot

Runs, vehicles and incidents

A run is one flight or bench run of one vehicle, built from the files that recorded it. Vehicles hold what those files say about each platform, and an incident is a window of a run under investigation.

ExplanationMarkdown
On this page7

Foxborne organizes evidence into three kinds of object. Runs hold the files, vehicles hold what the files say about each platform and incidents hold the investigation.

Runs#

A run is one flight or bench run of one vehicle, built from the files that recorded it. It can hold four kinds of source:

SourceRecorded byFormat
Flight logThe flight controllerPX4 ULog
Companion journalsystemd on the companion computerjournalctl JSON export
Process samplesThe Foxborne collector on the companion computerCollector JSONL
Ground receive logThe MAVLink receiver at range controlReceiver JSONL

Files reach a run by two paths. Import files builds one run from the files you add together, and connected sources match new files to runs by vehicle and time. The vehicle comes from the MAVLink system ID in each flight log, or from the vehicle part of a file pattern.

Each run records how its files arrived, such as Manual upload or Assembled from 3 sources. Parsing then follows one fixed job:

  1. 01ValidateType, size and schema. A .ulg must carry the ULog magic bytes.
  2. 02HashSHA-256 of every original, stored unmodified.
  3. 03ParseFlight log topics, journal entries, samples and receipts become events with stable IDs.
  4. 04AlignEach source gets its clock, its anchor and an error bound.
  5. 05Run rulesDeterministic rules produce findings that cite the events they read.
The import job that builds a run, in the order the run page lists its steps.

The job is deterministic: the same files and parser versions give the same event IDs. On a run's page, Import job opens each step with its time. For R-0931 in the example dataset:

StepTime
Validate type, size and schema0.4 s
Hash originals (SHA-256)1.2 s
Parse flight log, 11 of 13 topics38.1 s
Parse journal and samples2.6 s
Align clocks0.3 s
Run 13 rules0.9 s

Run statuses#

StatusWhat it means
ParsingThe import job is running. The run's page shows the current step and its progress.
CompleteEvery file parsed and the rules ran. The Clock chip reports alignment separately.
PartialA source is missing, such as "No companion journal for this run". Findings that depend on it are not produced, and reports list the gap under Limitations.
QuarantinedA file is damaged, such as a flight log truncated inside a data message. Nothing from it is shown as complete.
RejectedA file cannot be used, such as an encrypted flight log. Foxborne does not decrypt logs.

The runs list groups Quarantined and Rejected under Needs attention, and both offer Replace the file. See Import statuses and fixes.

The clock chip#

Runs and incidents share one Clock chip, which sums up how the sources line up:

ChipWhat it means
Aligned ±46 msEvery source is anchored to UTC. The value is the widest combined bound between two sources.
Manual ±1.09 sA companion clock was aligned by hand, and the value includes the manual bound.
Not alignedThe companion clock has no anchor, so its evidence stays on its own axis.
Elapsed time onlyThe flight log has no GPS fix, so times run from log start.
PendingThe run has not finished parsing.

The values are from the example dataset. Clocks, anchors and error bounds explains where each bound comes from.

Vehicles#

A vehicle in Foxborne is what its files say about it, and nothing more. The Vehicles page says so: "Nothing here is live: it is read from the files you import."

Under Where each source is recorded, the page shows a line drawing of the platform and tags each part with the source that records it. For the two platforms in the example dataset:

PartTag on the drawing
Flight controllerFlight log
Companion computerJournal, Process samples
GNSS receiverVia the flight log
BatteryVia the flight log
Depth camera, Q4 recon quadVia the flight log
Lidar, T4 tracked UGVVia the journal
Mesh radioKeeps no log
Range controlReceive log

The radio is the gap that matters. It keeps no log Foxborne can read, so during an incident its box can read State not observed. Nothing on the vehicle recorded what it did.

Vehicle parts and their logs lists every part, how it is wired and which log carries its data.

Foxborne also reads failsafe parameters from each flight log's header and compares them run to run. It reads COM_DL_LOSS_T, NAV_DLL_ACT, COM_FAIL_ACT_T, COM_OF_LOSS_T, COM_OBL_RC_ACT, SYS_HAS_NUM_GNSS, COM_GNSSLOSS_ACT and, for the quad, COM_POS_FS_EPH.

Failsafe parameters shows the values from a named run, and Changes between runs, opened from its header, lists what moved. On UGV-05 in the example dataset it reads NAV_DLL_ACT 0 (Disabled) to 1 (Hold) in R-0924. See Vehicles and parameter drift and PX4 parameters Foxborne reads.

Incidents#

An incident is one failure under investigation. An investigator opens it on a window of a run where findings appear. The incident keeps that run, that window and everything written about it.

INC-0142 in the example dataset was opened on the window 14:31:53 to 14:32:16 of run R-0931, after the rules produced six findings there. Each incident names an owner and a reviewer, and its work sits in four tabs:

TabWhat it holds
ReconstructionThe timeline of every source, the map, the vehicle drawing and the events in view.
SourcesThe run's files, with their clocks, bounds, hashes and the ordering bounds between them.
ReportThe finding, sequence, evidence, limitations, open questions and next check.
ActivityWhat happened on the incident, from assembly and rule results to status changes and exports.

Admins and investigators open and edit incidents. Reviewers read everything an investigator can, comment and approve reports.

Incident status and report state#

An incident's status tracks the investigation, and its report's state tracks the review. The two move separately: changing an incident's status does not change its report.

  • Incident status: Open, In review or Closed, set from the status button in the incident's header. The incidents list opens on Active, which shows every incident that is not closed.
  • Report state: Draft, In review or Approved. The incident's reviewer approves the report. See Reports and case files.

Each status change is recorded in the incident's Activity tab and in the audit log.