Every run keeps the evidence of what it did and why each step passed or failed: the inputs it was given, the acknowledgement chain of every telecommand, the samples that decided every condition, and every confirmation with the identity of who gave it. The test report of the run is rendered from that log alone, so AIT and IVV test reports come for free, and the same log always gives the same report.
Evidence in the log#
The run log is the evidence. For each step and each attempt, it holds:
| Evidence | Event |
|---|---|
The inputs of the run, resolved (quantities in the unit of their input), the targets, the requester, the resolved run (ir) | started |
| The resolved inputs of each step | step_started |
The identifier of each telecommand, logged before it leaves, and the telecommand of the first attempt it retries (retry_of) | telecommand_sent |
The acknowledgement chain of each telecommand: every event from PENDING to its final state, with its time and detail | telecommand_finished (acks) |
Each expect, check and wait until: the condition as written, its outcome, why it failed, and the samples it was judged on (target, component, instance, measure, value, sample time, ground reception time) | checked |
| Each question, and the role awaited for a hazardous confirmation | asked |
| Each answer, with the identity, the role and the time, or its automatic acknowledgement | answered |
| Each answer not taken, with who and why | answer_refused |
| Decisions, suspensions, resumptions, takeovers | decision_required, answered, suspended, continued, taken_over |
| The outcome of each attempt, of each procedure, of the run | step_finished, procedure_finished, finished |
The log lives in the JetStream stream RUNS, as long as its retention keeps it. An output
connector with the run_events data keeps it longer, in a database of your choice: see
Output Connectors.
The test report#
stellar report <run> -o report.html # to a file
stellar report <run> > report.html # to the standard outputGET /v1/runs/{id}/report returns the report as HTML: the report archived at the end of the run,
or, for a run still going, the report rendered from its log so far.
The report shows:
- a header: run identifier, procedure, library and version, environment, requester, start time, hash of the resolved run, the target of each role and the value of each input;
- one section per procedure and sub-procedure, with its outcome;
- one block per attempt of each step: its start, its inputs, each telecommand sent (identifier, target, retry of), its final state and failure detail, each condition judged with the samples used, each question and answer (who, as which role, when, or acknowledged automatically), each answer not taken, decisions, suspensions and resumptions, and the outcome of the attempt;
- the result of the run, with its reason when it failed, and its end time.
Archiving#
At the end of a run, the executor renders the report from the complete log and stores it in the
object store stellar_reports, under the identifier of the run. Since the report depends on the
log only, a report rendered again from the log is identical to the archived one.
What the report is not#
The report covers one run. Telemetry, telecommands and alarms outside runs, and history beyond the retention of JetStream, are the business of the systems fed by output connectors (a time series database with Grafana dashboards, for instance). The API never queries them.