Training records (xAPI)
Assessments and instructor reviews export as xAPI 1.0.3 statements and as flat CSV, written to files so they can cross an air gap on approved media.
Export#
aarcv export-records --out records/ --pilot PILOT-01 --since 2026-10-01
# records/statements.json, records/records.csv, records/manifest.json (with hashes)
# optionally push to a Learning Record Store inside the enclave
AARCV_LRS_PASSWORD=... aarcv export-records --out records/ --lrs-url https://lrs.local/xapi --lrs-user aarcv
The same exports are available over HTTP: GET /api/export/xapi, GET /api/export/records.csv and GET /api/export/package.zip.
Statements#
- One completed statement (
http://adlnet.gov/expapi/verbs/completed) per scored sortie, carrying the overall and category scores. - One scored statement (
http://adlnet.gov/expapi/verbs/scored) per instructor review, recording the instructor's call.
Statement IDs are derived from the sortie, reviewer and content, so re-exporting the same record is idempotent at the LRS and a changed review gets a new ID. Pilots are identified only by pilot ID as an xAPI account, never by name or email. Every export carries the configured classification banner.
CSV columns#
One row per sortie and category:
record_id, sortie_id, pilot_id, date, receiver, tail, label, category, weight,
auto_score, instructor_score, final_score, instructor_agrees, reviewer, comment,
overall_score, grade, contacts, contact_time_s, events_total, events_warning_or_worse,
model_release, classification
Column mapping to a specific system of record is agreed with the program office at transition.
Proficiency records between units#
Separate from xAPI, a unit can export a signed, portable proficiency record for one pilot (POST /api/record/export). The receiving unit trusts the sender's key (POST /api/record/trust), verifies and imports the record, and links it to its own aircrew entry. Scores and plans travel; video never does.