Reference
Doctor Findings
The stable finding shape used by doctor, workspace doctor, and explain.
referenceautomation buildersintermediatestable2026-05-30
Recommended next
What a finding is
A finding is the smallest stable unit in doctor, workspace doctor, and explain.
Use it when you need one issue model that still works for CI, editors, agents, and support workflows.
- findings explain the issue, why it matters, and what to do next
- findings keep the machine-readable identifier stable even when wording changes
- findings let humans and tools read the same issue model without scraping terminal prose
- a finding should be specific enough that a user can act on it without guessing
Field descriptions
severitytells you whether the finding blocks readiness:error,warn, orinfocodeis the stable machine-readable identifier for the condition, such asOTA_TASKS_MISSINGcategorytells you which area the finding belongs to, such as contract, service, policy, or workspaceownertells you who should act on it, such as the repo contract, host, service, or workspacesummaryis the short headline a human should read firstwhyexplains why the finding exists and why it mattersnextgives the safest next action ota can recommendevidenceholds the structured facts behind the finding so CI and support can verify it; probe-aware runtime and tool findings can includecommandandpathwhen ota resolved an executable and recorded the exact probe it ran- the fields together should answer: what happened, why it matters, and what to do next
How to read findings
- Read
severityfirst to know whether the finding blocks readiness - Then read
summaryto understand the issue in one line - Then read
whyto understand the consequence - Then read
nextto see the safest fix - Then inspect
evidenceif you need the proof - runtime and tool diagnosis can distinguish missing commands from probe failures and unparseable version output without changing the stable finding model
- If the wording changes later, the code should still stay stable
- The top finding renders as the bold title on the
Primary BlockerorPrimary Findingblock, without a separateVerdict:label
Why it matters
- CI can gate on stable identifiers instead of brittle wording
- agents can ask for the next action instead of guessing
- support teams can classify the issue as contract, service, policy, or host related
- workspace roll-ups stay readable without flattening repo-level context
- the same finding model works across repo doctor, workspace doctor, and explain
Finding catalog
- the shipped code catalog lives in
docs/spec/doctor-finding-reference.mdin the ota repo - use that reference when you need the published
code,category,owner, andprovenance_keysurfaces without reading Rust source directly - workspace acquisition and repo-contract blocker codes are included there alongside the repo doctor finding families
Example findings
Blocking contract issuetext
ERROR No tasks definedWhy: The repo contract is not yet runnable because ota cannot discover a safe task entrypoint.Next: add a task such as `setup`, `test`, or `build` so the repo can be executed safely.Warning-only service issuetext
WARNING Required service has no healthcheckWhy: ota cannot verify readiness without a healthcheck, so the repo may look ready when it is not.Next: add a healthcheck command to the service contract.Policy findingtext
ERROR Repo does not satisfy org policy packWhy: The policy pack requires `AGENTS.md` and this repo does not have it, so the repo does not meet org rules.Next: add the missing file or update the policy pack.Where it shows up
ota doctorota workspace doctorota explain- policy-aware findings
- CI annotations derived from doctor JSON
What a finding is not
- not a raw log line
- not a free-form error blob
- not a hidden policy engine response
- not a replacement for the contract or the execution receipt
How CI should use it
- gate on
severity: errorand stablecodevalues - render
summaryas the human headline - render
whyas the explanation - render
nextas the suggested fix - avoid re-parsing text output when JSON is available
Use cases
- fastest fix path for a blocked repo
- stable machine identifiers for CI
- contract, service, policy, or host classification for agents
- workspace findings without reading raw JSON