Understand results
Read coverage before interpreting findings. A report can contain a useful finding and unresolved observations at the same time.
Start with the report status#
| Status | Meaning in source-scan | Next action |
|---|---|---|
| complete | The selected operation has no reported completeness reasons | Inspect each condition and observation; do not extend the result beyond the selected world |
| degraded | Some analysis ran, but limitations or empty families remain | Review findings together with reasons and unknown observations |
| unavailable | The requested acquisition or analysis could not be admitted | Fix or narrow the input; do not interpret zero findings |
Exit 3 is expected for the three tutorial cases. It reports incomplete capability, not the number of findings. The edited control still exits 3. See JSON and exit codes for all process outcomes.
Read each condition#
requested means the condition was selected. executed means its family evaluator ran. Neither field guarantees that the input produced supported observations for that particular condition.
not-run: the condition did not execute.no-observations: its evaluator ran but found no relevant observations.degraded: at least one observation is unknown.completed: relevant observations were evaluated without an unknown result in that condition's coverage record.
A completed row is not a portfolio-wide guarantee. Preserve observationCount, unknownObservationCount, findingCount and the observation identities when reviewing it.
Follow the evidence#
A finding has a condition identity, evidence and source anchors. Inspect the affected source and the rule's assumptions. A source anchor identifies where evidence came from; it does not establish that the rest of the program is covered.
In the tutorial, V-EXEC-03 finds lost required context through detachment. V-ASYNC-14 finds a guard across suspension while another guard trace remains incomplete. A finding and unknown can therefore coexist even within one requested family.
Follow one recorded finding#
Open the positive report. The following is a field-by-field walkthrough of that recorded file; the hash is specific to this example.
In
conditions, find the object whoseconditionIDisV-EXEC-03. It reportsfindingCount: 1and one entry inobservationIDs.In
families, select the object whosefamilyisexecution. Itsreport.rowscontains pairs of observation identity and decision. Match the first member to the condition's observation ID.In that same family's
report.proofs, matchconditionIDto the observation ID, not toV-EXEC-03. This nested field reuses the nameconditionIDbut contains the observation hash in this report format.Read the matched proof's explanation, evidence IDs and
anchors. Each anchor is a source path and UTF-8 byte offset, not a line number. Inspect those locations in the matching example source.
Selected fields from the recorded condition:
{
"conditionID": "V-EXEC-03",
"findingCount": 1,
"observationIDs": [
"dc834195d051e2852871c5673581baf9b2dee8c0876877b8fd9e7d3cca5131fc"
]
}The matching execution report.rows entry:
[
"dc834195d051e2852871c5673581baf9b2dee8c0876877b8fd9e7d3cca5131fc",
"finding"
]The proof with that same identity includes anchors such as ["Sources/Example/Execution.swift", 67]. These excerpts omit other fields; keep the full report when filing an issue.
The guard family uses a different shape. For V-ASYNC-14, take its condition-level observationIDs and match each against families[family=guard].report.rows[].id. Each matching object has its own decision, witness, evidence and sites; source locations are in sites. The positive case has both a finding row for Guard.swift and an unknown:incomplete-guard-trace row. Do not apply the execution family's pair/proof layout to this family.
Read one unknown in the control#
The control report has an execution row with unknown:assumed-isolation-context-unresolved. The available facts do not resolve the isolation context needed for that observation. It is neither a finding nor proof of safe isolation. Review the corresponding condition's observation IDs and the control source, retain that limitation and avoid turning zero findings into a clean result. In the guard family, the edited guard observation becomes not-applicable, while a separate incomplete guard trace remains unknown.
Act within the scope#
Review the proposed edit in its actual lifecycle, isolation, error and ownership context. No automatic fix is offered. Re-run after changing code and compare both findings and coverage. If a finding disappears because the new form is unsupported, the result has not established a successful correction.
Coverage and unknown explains negative evidence. Troubleshooting explains common acquisition reasons.