Doctor Check Evidence Schemas

Audience: operators, support engineers, and integrators who consume Doctor diagnostics — plus anyone extending Doctor with new checks.

Every Stella Ops Doctor health check emits structured evidence: a flat set of named fields that describe what the check observed. This reference defines the standardized evidence schema for each check, so that the field meanings, expected ranges, and likely root causes are unambiguous. Stable schemas let the Console, the CLI, and Advisory AI interpret results consistently and differentiate genuine faults from benign variance.

See also: Doctor Plugins Reference for the checks, severities, and configuration options.


Evidence Schema Conventions

Field Naming

Value Types


Policy Engine Checks

check.policy.engine

Description: Verify policy engine compilation, evaluation, and storage health

Evidence Fields:

FieldTypeDescriptionExpected Range
engine_typestringPolicy engine typeopa, rego, custom, unknown
engine_versionstringEngine version stringSemantic version or unknown
engine_urlstringPolicy engine base URLValid HTTP(S) URL
compilation_statusstringCompilation healthOK, FAILED
evaluation_statusstringEvaluation healthOK, FAILED
storage_statusstringStorage healthOK, FAILED
policy_countintNumber of loaded policies≥ 0
compilation_time_msintCompilation latency0-10000 (typical < 100)
evaluation_latency_p50_msintMedian evaluation time0-5000 (typical < 50)
cache_hit_ratiofloatPolicy cache efficiency0.0-1.0
last_compilation_errorstring?Most recent compilation errornull or error message
evaluation_errorstring?Most recent evaluation errornull or error message
storage_errorstring?Most recent storage errornull or error message

Likely Cause Differentiation:

Evidence PatternLikely Cause
compilation_status=FAILEDOPA/Rego syntax error or engine unavailable
evaluation_status=FAILEDPolicy evaluation timeout or runtime error
storage_status=FAILEDPostgreSQL connection issue or disk full
evaluation_latency_p50_ms > 100Complex policies or cold cache
cache_hit_ratio < 0.5Cache not warmed or policies changing frequently

Authentication Checks

check.auth.oidc

Description: Verify connectivity to configured OIDC provider and discovery endpoint

Evidence Fields:

FieldTypeDescriptionExpected Range
issuer_urlstringOIDC issuer URLValid HTTPS URL
discovery_reachableboolCan reach discovery endpointtrue or false
discovery_response_msintDiscovery fetch latency0-10000 (typical < 500)
authorization_endpoint_presentboolHas authorization endpointtrue
token_endpoint_presentboolHas token endpointtrue
jwks_uri_presentboolHas JWKS URItrue
jwks_key_countintNumber of signing keys≥ 1
jwks_fetch_msintJWKS fetch latency0-10000 (typical < 500)
http_status_codeint?HTTP response codenull or 100-599
error_messagestring?Error detailsnull or error string
connection_error_typestring?Error classificationssl_error, dns_failure, refused, timeout, connection_failed

Likely Cause Differentiation:

Evidence PatternLikely Cause
discovery_reachable=false, connection_error_type=dns_failureDNS resolution failure
discovery_reachable=false, connection_error_type=ssl_errorTLS certificate issue
discovery_reachable=false, connection_error_type=refusedOIDC provider down or firewall
discovery_reachable=true, authorization_endpoint_present=falseMalformed discovery document
jwks_key_count=0JWKS endpoint error or key rotation in progress

Cryptography Checks

check.crypto.fips

Description: Verify FIPS 140-2 mode is enabled when required by crypto profile

Evidence Fields:

FieldTypeDescriptionExpected Range
fips_mode_enabledboolSystem FIPS mode activetrue or false
platformstringOperating system platformwindows, linux, macos, unknown
crypto_providerstringCryptographic providerbcrypt, openssl, managed, unknown
openssl_fips_module_loadedboolOpenSSL FIPS module statustrue or false
crypto_profilestringConfigured crypto profileProfile name from config
algorithms_testedstringComma-separated algorithm listAlgorithm names
algorithms_availablestringAlgorithms that passed testingAlgorithm names
algorithms_missingstringAlgorithms that failed testingAlgorithm names or none
statusstringOverall compliance statuscompliant, non-compliant
test_aes_256stringAES-256 test resultpass or fail: <error>
test_sha_256stringSHA-256 test resultpass or fail: <error>
test_sha_384stringSHA-384 test resultpass or fail: <error>
test_sha_512stringSHA-512 test resultpass or fail: <error>
test_rsa_2048stringRSA-2048 test resultpass or fail: <error>
test_ecdsa_p256stringECDSA-P256 test resultpass or fail: <error>

Likely Cause Differentiation:

Evidence PatternLikely Cause
fips_mode_enabled=false, platform=linuxFIPS mode not enabled via fips-mode-setup
fips_mode_enabled=false, platform=windowsFIPS Group Policy not configured
openssl_fips_module_loaded=falseOpenSSL FIPS provider not installed
algorithms_missing contains valuesCrypto provider missing FIPS-validated algorithms

Attestation Checks

check.attestation.clock.skew

Description: Verify system clock is synchronized for attestation validity

Evidence Fields:

FieldTypeDescriptionExpected Range
local_time_utcISO8601System timeValid timestamp
server_time_utcISO8601Reference server timeValid timestamp
skew_secondsfloatClock difference (positive = ahead)-300 to 300 (typical < 5)
max_allowed_skewintThreshold in secondsDefault: 5
ntp_daemon_runningboolNTP service activetrue or false
ntp_daemon_typestringNTP daemon typechronyd, ntpd, systemd-timesyncd, w32time, unknown
ntp_servers_configuredstringComma-separated NTP serversServer hostnames
last_sync_time_utcISO8601?Last successful syncTimestamp or null
sync_age_secondsint?Seconds since last sync≥ 0 or null
is_virtual_machineboolRunning in VMtrue or false
vm_typestringVM hypervisor typevmware, hyper-v, kvm, xen, container, none
vm_clock_sync_enabledboolVM time sync tools enabledtrue or false
connection_error_typestring?Network error typessl_error, dns_failure, refused, timeout, connection_failed

Likely Cause Differentiation:

Evidence PatternLikely Cause
ntp_daemon_running=falseNTP service not started
ntp_daemon_running=true, sync_age_seconds > 3600NTP server unreachable
is_virtual_machine=true, vm_clock_sync_enabled=falseVM clock drift without sync
skew_seconds > 0 (large positive)System clock set to future
skew_seconds < 0 (large negative)System clock set to past

check.attestation.transparency.consistency

Description: Verify stored log checkpoints match remote transparency log

Evidence Fields:

FieldTypeDescriptionExpected Range
checkpoint_pathstringLocal checkpoint file pathFilesystem path
stored_tree_sizeintLocal tree size≥ 0
remote_tree_sizeintRemote tree size≥ stored_tree_size
stored_root_hashstringLocal root hashHex string
remote_root_hashstringRemote root hashHex string
entries_behindintEntries to catch up≥ 0
checkpoint_ageISO8601Checkpoint last updateValid timestamp
consistency_verifiedboolLog is consistenttrue or false

Likely Cause Differentiation:

Evidence PatternLikely Cause
remote_tree_size < stored_tree_sizeCRITICAL: Possible log rollback/tampering
stored_root_hash != remote_root_hash at same sizeCRITICAL: Possible log modification
entries_behind > 10000Checkpoint very stale, needs sync
Checkpoint file parse errorCorrupted checkpoint file

Remediation Step Properties

All remediation steps now include safety annotations:

PropertyTypeDescription
OrderintStep sequence (1-based)
DescriptionstringHuman-readable description
CommandstringCommand to execute
CommandTypeenumShell, Sql, Api, Manual, Comment
IsDestructiveboolStep modifies/deletes data
DryRunVariantstring?Safe preview command
Placeholdersdict?User-supplied values needed

Advisory AI integration:


Adding New Check Schemas

When adding a new Doctor check:

  1. Define the evidence fields in the check implementation.
  2. Add a schema section to this file, following the conventions above.
  3. Include a “Likely Cause Differentiation” table.
  4. Confirm the check’s evidence output matches the documented schema.
  5. Update the Advisory AI prompt if the new fields should inform remediation guidance.

Last updated: 2026-01-18 (UTC).