Skip to content

Mission after-action report

ARGUS generates a structured mission after-action report on demand, using the mission’s Firestore data (planning fields, tasks, flags, flight logs, comms) as context for a GPT-4o agent. The result is a typed MissionReport object that renders inline in a dialog and exports to a formatted PDF.

Triggering a report

From the operation detail page, click GENERATE REPORT. That button is visible when you have the ai.reports permission; if your OpenAI key is not set, generation fails with a hint to configure it in Settings → AI Copilot.

The dialog auto-starts generation as soon as it opens (there is no extra confirm step). You can cancel by closing the dialog before it completes.

There is no “enable this op for AI reports at create time” toggle today — reports can be generated on any mission regardless of status, provided the API key is set.

Phases

Progress is shown as three dots across the bottom of the dialog:

  1. Load Data — pulls the mission, assets, polygons, flags, tasks, comms, and flight logs in parallel from Firestore.
  2. AI Analysis — the agent call to https://api.openai.com/v1/chat/completions with a compact intelligence briefing context. Model defaults to gpt-4o but respects the model selected in Copilot settings.
  3. Build Report — resolves the commander’s display name, assembles the final MissionReport object.

What the report contains

The MissionReport typed object includes:

Cover page fields

  • missionName, codename, classification, missionType, status, priority.
  • startTimeLabel, endTimeLabel, commanderName, optional headquartersNote.

Planning data (verbatim from the mission doc)

  • objectives[] with text, priority, completion state.
  • roe[] as plain strings.

AI-generated narrative sections

  • executiveSummary — 2-3 paragraph formal narrative for senior command.
  • missionAssessment — one of SUCCESS, PARTIAL_SUCCESS, FAILURE, INCONCLUSIVE.
  • situationalOverview — contextual narrative.
  • keyFindings[] — single-sentence bullets.
  • lessonsLearned[].
  • recommendations[].
  • commanderNotes — specific assessment for the commander: what went well, what needs attention, required follow-up actions.

Structured data sections

  • stats — duration, assets deployed (total + drones + operatives), tasks (total / completed / failed / aborted), objectives (total / completed), flags placed, high-priority flags (code_red / casualty / hazard / person_detected), comms entries, flight sessions, total flight time, total distance, search areas count, person detections.
  • tasks[] — title, type, status, priority, assigned assets, progress, sitrep, completion note, duration.
  • findings[] — flag type, name, coordinates, timestamp, notes.
  • commsHighlights[] — time, sender, transcription, duration.
  • assetsDeployed[] — name and type.

Inline preview

Once the report is ready, the dialog shows:

  • A coloured assessment banner (green / amber / red / grey with matching icon).
  • A five-stat row — Tasks Done, Objectives, Flags, Duration, Flights.
  • The first five lines of the executive summary (clipped with CSS -webkit-line-clamp).
  • Up to four key findings as bullets, with a “+N more in PDF” footer when longer.
  • The commander’s assessment in an italic left-bordered quote block.
  • A note that the full report (tasks, field intelligence, communications log, lessons learned, recommendations) is in the exported PDF only.

Exporting to PDF

Click Export PDF. MissionReportPdfService.generate(report) builds the PDF in-browser via jsPDF. The PDF includes the assessment badge, executive summary, stats grid, objectives with completion state, ROE, situational overview, key findings, lessons learned, recommendations, tasks table, findings, comms highlights, assets deployed, and the commander’s notes block.

Regenerating

The Regenerate button in the dialog calls generate() again, which produces a fresh report from current Firestore state. There is no per-section regenerate today — it’s the full report or nothing.

Editing

The dialog is read-only. There is no in-app prose editor, no media reordering, and no “Save edits to the report” action. Export the PDF and hand-edit externally if you need to tweak wording.

Distribution

There is no built-in email, webhook, or “send to participants” action. Distribution is manual — download the PDF and attach it to your own channel.

  • mission.report_ready webhook — not yet implemented. Treat any documentation mentioning it as aspirational.
  • Scheduled auto-generation on op completion — not yet implemented.

Retention

The report is not persisted back to Firestore. Each generation is fresh; close the dialog and the in-memory report is gone. Export the PDF if you need a durable artifact.

Errors

If generation fails, the dialog switches to a red error state with the error message and a hint to check the OpenAI key. Press Try Again to retry, or Close to abandon.