changedOutput schema / (root)
Previous value: -nullNew value: +{
+ "properties": {
+ "absence": {
+ "description": "Why no actionable finding is present: measured_empty, user_empty, no_coverage, source_unverified, stale, withheld, source_error, auth_failure, or entitlement_required.",
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "agentBriefing": {
+ "description": "Audit-only narrative projection. Present only when detail='audit'; compact responses do not duplicate structured data as prose.",
+ "type": "string"
+ },
+ "asOf": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "auth": {
+ "description": "Credential lifetime visible to the caller. OAuth secondsRemaining lets an autonomous agent refresh before a multi-call workflow is interrupted.",
+ "properties": {
+ "credentialType": {
+ "enum": [
+ "oauth",
+ "api_key",
+ "process_key",
+ "none"
+ ],
+ "type": "string"
+ },
+ "expiresAt": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "refreshSupported": {
+ "type": "boolean"
+ },
+ "secondsRemaining": {
+ "type": [
+ "number",
+ "null"
+ ]
+ }
+ },
+ "type": "object"
+ },
+ "claim": {
+ "description": "Fahali dictionary claim (shared/fahaliDictionary.ts). Read `kind` FIRST: 'abstention' means no assertion was made and `reason` says why — never read an abstention as a neutral or zero result. `basis` says what the claim rests on. Absent or null means this response path does not yet emit a claim; treat that as unknown, not as agreement.",
+ "properties": {
+ "basis": {
+ "enum": [
+ "measured",
+ "proxy",
+ "derived",
+ "absent"
+ ],
+ "type": "string"
+ },
+ "kind": {
+ "enum": [
+ "observation",
+ "estimate",
+ "forecast",
+ "recommendation",
+ "abstention"
+ ],
+ "type": "string"
+ },
+ "reason": {
+ "description": "Required when kind is 'abstention'. Written for a reader, not a log.",
+ "type": "string"
+ }
+ },
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "claimPolicy": {
+ "description": "Typed constraints for safe use. Metadata, not a prompt or instruction channel.",
+ "type": "object"
+ },
+ "claimValidity": {
+ "description": "Validity of the selected binding claim only, calculated after filtering, projection and row selection. Sibling rows cannot determine it.",
+ "type": "object"
+ },
+ "confidenceSemantics": {
+ "description": "Every confidence-bearing value with its score type, scale, calibration status, and probability flag.",
+ "items": {
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "conflicts": {
+ "items": {
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "currentActionEligibility": {
+ "description": "Current eligibility of an immutable historical portfolio verdict. It never mutates the stored judgment being replayed.",
+ "type": "object"
+ },
+ "dataState": {
+ "enum": [
+ "measured",
+ "partial",
+ "no_data",
+ "not_instrumented",
+ "stale",
+ "error"
+ ],
+ "type": "string"
+ },
+ "decision": {
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "decisionAuthority": {
+ "description": "Declares this endpoint an evidence ranking and points to canonical_verdict/fahali_get_market_decision as the sole binding direction authority.",
+ "type": "object"
+ },
+ "decisionEligibility": {
+ "description": "Fail-closed binding-authority policy. WITHHELD means source evidence remains available for audit while normalized direction, actionability and execution fields are revoked.",
+ "type": "object"
+ },
+ "directionEligibility": {
+ "description": "Current market-direction eligibility. Direction is authorized only by an exact, eligible producer stratum (canonical_verdict, canonical_symbol_verdict, committee_verdict) — read bindingAuthority to see which one bound. Widening WHO may bind did not weaken WHAT binding requires: the named producer must still hold a matching horizon/class/family record on a verified-only judged population, so an authority without a record still cannot bind.",
+ "type": "object"
+ },
+ "evidenceQuality": {
+ "type": "object"
+ },
+ "executionEligibility": {
+ "description": "Fail-closed execution boundary. Portfolio monitoring tools always return WITHHELD with MONITOR_ONLY_NO_EXECUTION_AUTHORITY while Fahali has no capital path.",
+ "type": "object"
+ },
+ "guardrailBlockedCount": {
+ "description": "Verdicts blocked by the Guardrail Agent this cycle (blocked verdicts are never served)",
+ "type": "integer"
+ },
+ "instruments": {
+ "description": "Resolved or explicitly partial instrument identities. A missing venue carries an ambiguity warning.",
+ "items": {
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "items": {
+ "items": {
+ "properties": {
+ "action": {
+ "enum": [
+ "buy",
+ "sell",
+ "neutral"
+ ],
+ "type": "string"
+ },
+ "bindingAuthority": {
+ "enum": [
+ "canonical_verdict"
+ ],
+ "type": "string"
+ },
+ "bindingDirection": {
+ "description": "This evidence-ranking endpoint does not emit the binding direction.",
+ "type": "null"
+ },
+ "committeeCounts": {
+ "type": "object"
+ },
+ "committeeDirectionalState": {
+ "enum": [
+ "EVIDENCE_AVAILABLE",
+ "WITHHELD"
+ ],
+ "type": "string"
+ },
+ "committeeEvidenceDirection": {
+ "description": "Exact committee evidence direction when its publication gate clears. Never the binding market direction.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "concurrentAlertFamilies": {
+ "description": "CONTEXT, NEVER CONVICTION: count of distinct alert families that co-fired on this symbol (measured 2026-08-05 to be shared-input redundancy, not independent consensus). Ranking runs on forecast-tier evidence, not this number. Formerly named engineCount — that name misled agents into treating it as a conviction score.",
+ "type": "integer"
+ },
+ "direction": {
+ "description": "Retired ambiguous compatibility field. Always null so it cannot shadow canonical_verdict.",
+ "type": "null"
+ },
+ "directionRole": {
+ "enum": [
+ "committee_evidence_non_binding"
+ ],
+ "type": "string"
+ },
+ "directionalConviction": {
+ "description": "Share of reporting committee engines that agree; non-binding.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "directionalState": {
+ "enum": [
+ "EVIDENCE_AVAILABLE",
+ "WITHHELD"
+ ],
+ "type": "string"
+ },
+ "directionalWithheldReason": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "engines": {
+ "description": "Canonical engine keys from the live registry",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "lastTs": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "riskConviction": {
+ "description": "Ordinal stress/setup strength, not a probability and not a direction.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "severity": {
+ "enum": [
+ "EXTREME",
+ "HIGH",
+ "ELEVATED",
+ "WATCH"
+ ],
+ "type": "string"
+ },
+ "symbol": {
+ "type": "string"
+ },
+ "topType": {
+ "type": "string"
+ },
+ "why": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "matchedTrackRecord": {
+ "description": "A judged record only when engine, horizon, regime/instrument class, and claim family match this response. `state` is one of: `measured` (a stratum cleared the publishability gate — `stratum` carries engine, horizon tier, bar regime, recall, precision, base rate, base-rate lift, median lead hours, effective sample, warned events and the measurement date); `withheld` (the gate ran and refused — `reason` says why, in words); `unavailable` (the record could not be read at all — an infrastructure failure that says nothing about the record). It is ONE stratum selected by recall, never a platform-wide accuracy. Null means no exact record match; read recordMatchReason.",
+ "properties": {
+ "dataAsOf": {
+ "description": "When the record was computed. A figure without this reads as current forever.",
+ "type": "string"
+ },
+ "reason": {
+ "description": "Present on `withheld` and `unavailable`: why there is no figure.",
+ "type": "string"
+ },
+ "state": {
+ "enum": [
+ "measured",
+ "withheld",
+ "unavailable"
+ ],
+ "type": "string"
+ },
+ "stratum": {
+ "description": "Present only on `measured`. Precision must never be quoted without recall.",
+ "properties": {
+ "barRegime": {
+ "type": "string"
+ },
+ "baseRatePct": {
+ "type": "number"
+ },
+ "claimFamily": {
+ "description": "What this precision is ABOUT: `directional` (price moved the way the stratum said) or `magnitude` (a move exceeded the judge bar, carrying no direction). Never infer a direction from a `magnitude` row.",
+ "type": "string"
+ },
+ "claimMeans": {
+ "description": "The record endpoint's own sentence explaining the claim family. Quote it beside any precision figure.",
+ "type": "string"
+ },
+ "effectiveSample": {
+ "type": "number"
+ },
+ "engine": {
+ "type": "string"
+ },
+ "horizonTier": {
+ "type": "string"
+ },
+ "leadMedianHours": {
+ "type": "number"
+ },
+ "measuredOn": {
+ "type": "string"
+ },
+ "precisionPct": {
+ "description": "Share of its warnings that held. Never quotable alone.",
+ "type": "number"
+ },
+ "recallPct": {
+ "description": "Share of qualifying events this stratum warned on — the half a buyer is exposed to.",
+ "type": "number"
+ },
+ "warnedEvents": {
+ "type": "number"
+ }
+ },
+ "type": "object"
+ }
+ },
+ "required": [
+ "state"
+ ],
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "mcpStatus": {
+ "description": "Normalized MCP result status. The endpoint's original status vocabulary remains in `status` and `sourceStatus`.",
+ "enum": [
+ "ok",
+ "error"
+ ],
+ "type": "string"
+ },
+ "monitoringEligibility": {
+ "description": "Current portfolio-monitoring validity based on captured identity, freshness, integrity, and the caller-supplied monitoring policy. ELIGIBLE authorizes observation/delivery only, never financial action.",
+ "type": "object"
+ },
+ "nextActions": {
+ "description": "Registry-validated follow-up calls. Missing tools, invalid arguments, unresolved placeholders, and disabled tools are omitted.",
+ "items": {
+ "properties": {
+ "args": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "requiredTier": {
+ "type": "string"
+ },
+ "tool": {
+ "type": "string"
+ },
+ "why": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "tool",
+ "why"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "provenance": {
+ "description": "Data provenance for each response field — engine count and names are measured, action direction is a proxy derived from alert direction signals.",
+ "properties": {
+ "action": {
+ "enum": [
+ "proxy"
+ ],
+ "type": "string"
+ },
+ "engineCount": {
+ "enum": [
+ "measured"
+ ],
+ "type": "string"
+ },
+ "engines": {
+ "enum": [
+ "measured"
+ ],
+ "type": "string"
+ },
+ "severity": {
+ "enum": [
+ "measured"
+ ],
+ "type": "string"
+ },
+ "why": {
+ "enum": [
+ "measured"
+ ],
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "recordMatchReason": {
+ "description": "Why matchedTrackRecord is present or null. A null record is never evidence of safety or engine failure.",
+ "type": "string"
+ },
+ "requestId": {
+ "type": "string"
+ },
+ "responseControl": {
+ "type": "object"
+ },
+ "responseState": {
+ "enum": [
+ "OK_WITH_FINDINGS",
+ "OK_NO_FINDINGS",
+ "PARTIAL",
+ "WITHHELD",
+ "NO_COVERAGE",
+ "ERROR"
+ ],
+ "type": "string"
+ },
+ "schemaVersion": {
+ "enum": [
+ "2.0"
+ ],
+ "type": "string"
+ },
+ "scope": {
+ "type": "object"
+ },
+ "sourceConfidenceSemantics": {
+ "type": [
+ "array",
+ "object",
+ "null"
+ ]
+ },
+ "sourceDataState": {
+ "description": "The upstream endpoint's exact data-state value before endpoint-aware classification.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "sourceDecision": {
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "sourceError": {
+ "description": "The upstream endpoint's exact error text/code before normalization, when one was present.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "sourceEvidenceQuality": {
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "sourceScope": {
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "sourceStatus": {
+ "description": "The upstream endpoint's exact status before the MCP envelope normalizes transport success/error.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "status": {
+ "description": "The endpoint's original status vocabulary (for example ok, partial, degraded, withheld, or no_alerts). Use mcpStatus for normalized transport success/error.",
+ "type": "string"
+ },
+ "symbolCoverage": {
+ "description": "Conservation ledger satisfying requested = returned + withheld + notReturned for requested-symbol calls.",
+ "type": "object"
+ },
+ "verdicts": {
+ "description": "Full non-binding Master Analyst committee products. Each includes the complete canonical-roster evidence snapshot and detection-service runtime telemetry; use the canonical verdict for the authoritative direction.",
+ "items": {
+ "description": "Full non-binding committee evidence product. It preserves membership, dissent, evidence, limitations, actions, invalidation, confidence components, provenance, and engine telemetry; only the canonical arbiter publishes the binding market direction.",
+ "properties": {
+ "actionOptions": {
+ "items": {
+ "properties": {
+ "action": {
+ "type": "string"
+ },
+ "rationale": {
+ "type": "string"
+ },
+ "riskLevel": {
+ "enum": [
+ "low",
+ "moderate",
+ "high"
+ ],
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "agentsAgreeing": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "agentsAgreeingCount": {
+ "type": "integer"
+ },
+ "agentsDisagreeing": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "agentsDisagreeingCount": {
+ "type": "integer"
+ },
+ "agentsSilent": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "agentsSilentCount": {
+ "type": "integer"
+ },
+ "assetClass": {
+ "type": "string"
+ },
+ "bindingAuthority": {
+ "enum": [
+ "canonical_verdict",
+ null
+ ],
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "bindingDirection": {
+ "type": "null"
+ },
+ "committee": {
+ "description": "Committee evidence census. It is an input to the canonical arbiter, never a second binding direction authority.",
+ "properties": {
+ "abstained": {
+ "items": {
+ "type": "string"
+ },
+ "type": [
+ "array",
+ "null"
+ ]
+ },
+ "abstained_unavailable_reason": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "agreeing": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "disagreeing": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "dissent_evidence": {
+ "items": {
+ "properties": {
+ "dataStatus": {
+ "type": "string"
+ },
+ "direction": {
+ "enum": [
+ "bullish",
+ "bearish",
+ "neutral",
+ "directionless"
+ ],
+ "type": "string"
+ },
+ "engine": {
+ "type": "string"
+ },
+ "magnitude": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "observation": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "timeframe": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "minority": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "no_read": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "committeeEvidenceDirection": {
+ "description": "Explicit non-binding committee direction on the evidence-ranking projection.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "confidence": {
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "confidenceBreakdown": {
+ "properties": {
+ "directionalConsensus": {
+ "type": "number"
+ },
+ "evidenceQuality": {
+ "type": "number"
+ },
+ "historicalAccuracy": {
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "confidenceScale": {
+ "type": "string"
+ },
+ "contributingEvidenceIds": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "dataQualityWarning": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "direction": {
+ "description": "Committee evidence lean only. Reconcile through the canonical verdict before acting.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "directionRole": {
+ "enum": [
+ "committee_evidence_non_binding",
+ null
+ ],
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "engineIntelligence": {
+ "description": "Complete canonical-roster current-decision evidence snapshot. Every roster entry is emitted, including no_current_finding, stale, and source_unavailable states; this is evidence telemetry, not a worker heartbeat.",
+ "properties": {
+ "asOf": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "coverage": {
+ "properties": {
+ "complete": {
+ "enum": [
+ true
+ ],
+ "type": "boolean"
+ },
+ "completeMeaning": {
+ "enum": [
+ "all_canonical_roster_entries_emitted"
+ ],
+ "type": "string"
+ },
+ "emittedEngines": {
+ "description": "Roster entries emitted in this response.",
+ "minimum": 0,
+ "type": "integer"
+ },
+ "expectedEngines": {
+ "description": "Live canonical-roster size at response time.",
+ "minimum": 0,
+ "type": "integer"
+ },
+ "noCurrentFinding": {
+ "type": "integer"
+ },
+ "reporting": {
+ "type": "integer"
+ },
+ "sourceUnavailable": {
+ "type": "integer"
+ },
+ "stale": {
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ "engines": {
+ "description": "One row for each canonical specialist; quiet engines remain explicit rows.",
+ "items": {
+ "properties": {
+ "asOf": {
+ "format": "date-time",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "contract": {
+ "properties": {
+ "failureBehavior": {
+ "type": "string"
+ },
+ "inputRequirements": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "maxStalenessMs": {
+ "type": "number"
+ },
+ "missingDataBehavior": {
+ "type": "string"
+ },
+ "outputContract": {
+ "properties": {
+ "confidenceScale": {
+ "type": "string"
+ },
+ "fields": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "provenanceDefaults": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ }
+ },
+ "type": "object"
+ }
+ },
+ "type": "object"
+ },
+ "currentDirections": {
+ "items": {
+ "enum": [
+ "bullish",
+ "bearish",
+ "neutral"
+ ],
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "display": {
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "desk": {
+ "type": "string"
+ },
+ "directionality": {
+ "enum": [
+ "DIRECTIONAL",
+ "DIRECTIONLESS"
+ ],
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "observes": {
+ "type": "string"
+ },
+ "proxy": {
+ "type": "boolean"
+ }
+ },
+ "type": "object"
+ },
+ "eligibleToVote": {
+ "description": "Whether this specialist may contribute a directional vote; it does not make the committee binding.",
+ "type": "boolean"
+ },
+ "engineKey": {
+ "type": "string"
+ },
+ "evidencePackets": {
+ "description": "Every active packet held for this engine and symbol; projectionApplied is false.",
+ "items": {
+ "description": "Unprojected current evidence packet. contributingRawSignals, missingSignals, limitations, provenance, freshness, and engine execution state travel with the observation.",
+ "properties": {
+ "agentError": {
+ "type": "string"
+ },
+ "agentStatus": {
+ "enum": [
+ "healthy",
+ "degraded",
+ "failed"
+ ],
+ "type": "string"
+ },
+ "agentVersion": {
+ "type": "string"
+ },
+ "assetClass": {
+ "enum": [
+ "crypto",
+ "equity",
+ "fx",
+ "commodity",
+ "unknown"
+ ],
+ "type": "string"
+ },
+ "canonicalEngineKey": {
+ "type": "string"
+ },
+ "confidence": {
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "confidenceComponents": {
+ "additionalProperties": {
+ "type": "number"
+ },
+ "type": "object"
+ },
+ "confidenceScale": {
+ "enum": [
+ "raw_model_output",
+ "calibrated",
+ "ensemble_agreement",
+ "historical_accuracy",
+ "proxy_confidence",
+ "null"
+ ],
+ "type": "string"
+ },
+ "contributingRawSignals": {
+ "description": "Raw measurements contributing to this packet; audit output does not cap this collection.",
+ "items": {
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "source": {
+ "type": "string"
+ },
+ "value": {
+ "type": [
+ "number",
+ "string",
+ "boolean"
+ ]
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "dataOrigin": {
+ "type": "string"
+ },
+ "dataStatus": {
+ "enum": [
+ "measured",
+ "proxy",
+ "synthetic",
+ "stale",
+ "missing",
+ "unavailable"
+ ],
+ "type": "string"
+ },
+ "direction": {
+ "enum": [
+ "bullish",
+ "bearish",
+ "neutral",
+ "directionless"
+ ],
+ "type": "string"
+ },
+ "evidenceId": {
+ "type": "string"
+ },
+ "exchange": {
+ "type": "string"
+ },
+ "expiresAt": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "isSynthetic": {
+ "type": "boolean"
+ },
+ "limitations": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "magnitude": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "missingSignals": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "phenomenon": {
+ "type": "string"
+ },
+ "phenomenonCategory": {
+ "type": "string"
+ },
+ "processingTimeMs": {
+ "type": "number"
+ },
+ "recommendedConsumerAction": {
+ "enum": [
+ "alert",
+ "monitor",
+ "investigate",
+ "ignore",
+ "cross_reference",
+ "escalate"
+ ],
+ "type": "string"
+ },
+ "symbol": {
+ "type": "string"
+ },
+ "syntheticFields": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "timeframe": {
+ "type": "string"
+ },
+ "timestamp": {
+ "format": "date-time",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "freshness": {
+ "properties": {
+ "ageMs": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "latestExpiresAt": {
+ "format": "date-time",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "maxStalenessMs": {
+ "type": "number"
+ },
+ "status": {
+ "enum": [
+ "fresh",
+ "stale",
+ "unreported"
+ ],
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "observation": {
+ "properties": {
+ "confidence": {
+ "type": "number"
+ },
+ "confidenceScale": {
+ "type": "string"
+ },
+ "direction": {
+ "enum": [
+ "bullish",
+ "bearish",
+ "neutral",
+ "directionless"
+ ],
+ "type": "string"
+ },
+ "evidenceId": {
+ "type": "string"
+ },
+ "phenomenon": {
+ "type": "string"
+ },
+ "phenomenonCategory": {
+ "type": "string"
+ },
+ "recommendedConsumerAction": {
+ "type": "string"
+ }
+ },
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "operationalStatus": {
+ "enum": [
+ "reporting",
+ "no_current_finding",
+ "source_unavailable",
+ "stale"
+ ],
+ "type": "string"
+ },
+ "provenance": {
+ "properties": {
+ "contributingRawSignalCount": {
+ "type": "integer"
+ },
+ "dataOrigins": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "dataStatuses": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "evidenceIds": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "projectionApplied": {
+ "enum": [
+ false
+ ],
+ "type": "boolean"
+ },
+ "returnedPacketCount": {
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ "readState": {
+ "enum": [
+ "signal",
+ "observation",
+ "no_current_finding",
+ "source_unavailable"
+ ],
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "minItems": 1,
+ "type": "array"
+ },
+ "interpretation": {
+ "properties": {
+ "directionPolicy": {
+ "type": "string"
+ },
+ "evidenceScope": {
+ "enum": [
+ "all_active_packets_currently_held_on_evidence_bus"
+ ],
+ "type": "string"
+ },
+ "heartbeatMeasured": {
+ "enum": [
+ false
+ ],
+ "type": "boolean"
+ },
+ "scope": {
+ "enum": [
+ "current_decision_evidence"
+ ],
+ "type": "string"
+ },
+ "silenceMeaning": {
+ "type": "string"
+ },
+ "upstreamCompleteness": {
+ "enum": [
+ "not_asserted"
+ ],
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "schemaVersion": {
+ "enum": [
+ "engine-intelligence-snapshot.v1"
+ ],
+ "type": "string"
+ },
+ "symbol": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "engineRuntimeTelemetry": {
+ "description": "Per-scan runtime telemetry from the detection service. A measured snapshot carries the complete canonical lifecycle roster, explicit provider and operational coverage, and lossless provider states; a retired or absent roster row is never described as running. Stale retains the complete last snapshot for diagnosis; unavailable and invalid remain distinct.",
+ "properties": {
+ "ageSeconds": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "asOf": {
+ "format": "date-time",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "maxAgeSeconds": {
+ "description": "Configured maximum age for a runtime snapshot to remain measured; default 300 seconds, aligned to the production scan SLA.",
+ "type": "number"
+ },
+ "reason": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "snapshot": {
+ "additionalProperties": true,
+ "description": "Unprojected producer snapshot. Its per-engine rows carry cadence, cache, timeout, error, not-loaded, and no-finding execution states when telemetry is measured.",
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "source": {
+ "enum": [
+ "fahali:engine-telemetry:v1"
+ ],
+ "type": "string"
+ },
+ "status": {
+ "enum": [
+ "measured",
+ "stale",
+ "unavailable",
+ "invalid"
+ ],
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "evidence": {
+ "properties": {
+ "measured": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "missing": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "proxy": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "synthetic": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "guardrail": {
+ "properties": {
+ "annotations": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "passed": {
+ "type": "boolean"
+ }
+ },
+ "type": "object"
+ },
+ "headline": {
+ "type": "string"
+ },
+ "invalidationConditions": {
+ "items": {
+ "properties": {
+ "condition": {
+ "type": "string"
+ },
+ "probability": {
+ "enum": [
+ "low",
+ "moderate",
+ "high"
+ ],
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "monitoringWindow": {
+ "type": "string"
+ },
+ "narrative": {
+ "type": "string"
+ },
+ "neutralReportingCount": {
+ "type": "integer"
+ },
+ "portfolioImpact": {
+ "type": "object"
+ },
+ "provenanceHash": {
+ "type": "string"
+ },
+ "replayUrl": {
+ "type": "string"
+ },
+ "reportingCount": {
+ "type": "integer"
+ },
+ "severity": {
+ "enum": [
+ "critical",
+ "high",
+ "medium",
+ "low",
+ "noise"
+ ],
+ "type": "string"
+ },
+ "severityReason": {
+ "type": "string"
+ },
+ "symbol": {
+ "type": "string"
+ },
+ "timestamp": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "totalAgentsWithSignal": {
+ "type": "integer"
+ },
+ "verdictId": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ }
+ },
+ "type": "object"
+}