Operations

Clearing-Layer Health Verdict

One deterministic tenant/environment diagnosis shared byte-for-byte by REST, Connect, MCP, CLI, and dashboard.

One server-owned verdict. Every client sees the same diagnosis.
Scope
Tenant + environment + bounded observation window
Evidence
Fresh Postgres aggregates and dependency snapshots
Surfaces
REST, Connect, MCP, CLI, and dashboard

Ductor computes one deterministic operational diagnosis. Clients render the versioned result; they do not reinterpret charts or ask an LLM whether production is healthy.

Surfaces

ClientOperation
RESTGET /api/operational-health/report
Authorized scopesGET /api/operational-health/scopes
Connectductor.api.OperationalHealthService/GetOperationalHealthReport
MCPapi_operationalhealthservice_getoperationalhealthreport
CLIductor report health
Dashboard/workspaces/{tenant}/health

All surfaces consume the same v1 report id, scope, bounded time window, source freshness, verdict, confidence, stable reason codes, safe numeric evidence, and fixed runbook-backed next steps.

Verdicts

healthy
Evidence is fresh

Every required source is available and no warning threshold is crossed.

degraded
Flowing under pressure

Work continues, but at least one warning threshold is crossed.

unhealthy
Action required

Failure, backlog, incompatibility, or stall evidence crosses a hard threshold.

unknown
Evidence path failed

Required data is missing, stale, unavailable, skewed, or unclassified.

unknown is fail-closed. Missing telemetry never becomes healthy inactivity.

Current ruleset

SignalDegradedUnhealthy / unknown
Telemetry ageunknown after 5 minutes
Source clock skewunknown beyond 30 seconds
Dependency snapshot ageunknown after 30 seconds
Workflow failure ratio (minimum 5 terminals)10%25%
Recoverable running runs idle for 5 minutes15
Ready queue depth1001,000
Oldest ready item15 minutes1 hour
Incompatible active attempts110
Unreplayed workflow DLQ entries1100

The successful bounded Postgres observation is itself the workflow telemetry heartbeat, so a genuinely idle environment can remain fresh without inventing business activity.

Authority and privacy

The request principal supplies tenant authority. Environment filtering is checked against that principal before the tenant-bounded aggregate query runs. Reports cache for 15 seconds by tenant, environment, and period. The report id hashes the pinned ruleset plus sanitized aggregates.

Output and audit contain ids, scope, verdict, confidence, reason codes, and safe numbers. Workflow payloads, prompts, raw dependency errors, and credentials are never report fields.

CLI example

ductor report health --environment production --period 1h

Treat unknown first as an evidence-path incident: restore the stale or unavailable source before interpreting downstream workflow ratios.

Change policy

Threshold or classification changes require a new ruleset version and frozen fixtures for flowing, idle, stalled, failing, backlogged, incompatible, and stale scenarios. A client-specific threshold override is intentionally unsupported.