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"
+ },
+ "count": {
+ "type": "integer"
+ },
+ "currentActionEligibility": {
+ "description": "Current eligibility of an immutable historical portfolio verdict. It never mutates the stored judgment being replayed.",
+ "type": "object"
+ },
+ "data": {
+ "items": {
+ "properties": {
+ "canonical": {
+ "description": "Complete canonical arbiter verdict and sole binding market-direction authority. Null means the arbiter returned no eligible authority and MUST remain a withheld/no-read state; it is never neutral direction. When present it carries the full committee evidence product, the current canonical-roster evidence rows, runtime telemetry, forecast distribution, record, conflict resolution, invalidation, and policy version.",
+ "properties": {
+ "agreement": {
+ "properties": {
+ "agreeing": {
+ "type": "integer"
+ },
+ "ofDirectional": {
+ "type": "integer"
+ },
+ "pct": {
+ "type": [
+ "number",
+ "null"
+ ]
+ }
+ },
+ "type": "object"
+ },
+ "agreementPct": {
+ "description": "Compatibility alias of agreement.pct.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "committee": {
+ "description": "Complete committee input carried into the canonical verdict for reconciliation. Committee membership and its raw verdict are evidence; the enclosing canonical verdict remains the sole market-direction authority.",
+ "properties": {
+ "agreeing": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "disagreeing": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "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"
+ },
+ "silent": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "verdict": {
+ "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": "object"
+ },
+ "compositeConfidencePct": {
+ "description": "Canonical arbiter confidence on a 0-100 scale. This is the only confidence that may authorize or gate the binding market decision.",
+ "maximum": 100,
+ "minimum": 0,
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "conflict": {
+ "description": "Compatibility alias of conflictDetail.present.",
+ "type": "boolean"
+ },
+ "conflictDetail": {
+ "description": "Canonical arbitration result when committee evidence and forecast disagree; committee input is not independently binding.",
+ "properties": {
+ "note": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "present": {
+ "type": "boolean"
+ }
+ },
+ "type": "object"
+ },
+ "coverage": {
+ "description": "Compatibility label on the MCP route; coverageDetail carries the structured source value.",
+ "type": [
+ "string",
+ "object"
+ ]
+ },
+ "coverageDetail": {
+ "properties": {
+ "label": {
+ "type": "string"
+ },
+ "reporting": {
+ "type": "integer"
+ },
+ "totalEngines": {
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ "cta": {
+ "properties": {
+ "action": {
+ "enum": [
+ "alert_risk",
+ "review_exposure",
+ "watchlist",
+ "wait_for_evidence"
+ ],
+ "type": "string"
+ },
+ "label": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "direction": {
+ "enum": [
+ "DOWNSIDE_SKEW",
+ "UPSIDE_SKEW",
+ "RANGE_BOUND",
+ "MIXED",
+ "INSUFFICIENT_EVIDENCE"
+ ],
+ "type": "string"
+ },
+ "expectedMovePct": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "expectedRangePct": {
+ "properties": {
+ "high": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "low": {
+ "type": [
+ "number",
+ "null"
+ ]
+ }
+ },
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "explanation": {
+ "type": "string"
+ },
+ "headline": {
+ "type": "string"
+ },
+ "horizon": {
+ "enum": [
+ "72h"
+ ],
+ "type": "string"
+ },
+ "invalidation": {
+ "items": {
+ "type": "object"
+ },
+ "type": [
+ "array",
+ "null"
+ ]
+ },
+ "participation": {
+ "properties": {
+ "directional": {
+ "type": "integer"
+ },
+ "ofReporting": {
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ "policyVersion": {
+ "type": "string"
+ },
+ "portfolio": {
+ "properties": {
+ "capitalAtRiskUsd": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "holdsSymbol": {
+ "type": "boolean"
+ }
+ },
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "probabilities": {
+ "properties": {
+ "downside": {
+ "type": "number"
+ },
+ "rangeBound": {
+ "type": "number"
+ },
+ "upside": {
+ "type": "number"
+ }
+ },
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "record": {
+ "properties": {
+ "directional": {
+ "properties": {
+ "total": {
+ "type": "integer"
+ },
+ "wins": {
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ "engineFlags": {
+ "properties": {
+ "total": {
+ "type": "integer"
+ },
+ "wins": {
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ "forecast72h": {
+ "properties": {
+ "accruing": {
+ "type": "boolean"
+ },
+ "total": {
+ "type": "integer"
+ },
+ "wins": {
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ }
+ },
+ "type": "object"
+ },
+ "recordStatedInExplanation": {
+ "type": "boolean"
+ },
+ "reliability": {
+ "enum": [
+ "UNVALIDATED",
+ "LOW",
+ "MEDIUM",
+ "HIGH"
+ ],
+ "type": "string"
+ },
+ "state": {
+ "enum": [
+ "NORMAL",
+ "WATCH",
+ "DEFEND",
+ "WITHHOLD"
+ ],
+ "type": "string"
+ },
+ "symbol": {
+ "type": "string"
+ },
+ "thresholds": {
+ "properties": {
+ "downsideBelowPct": {
+ "type": "number"
+ },
+ "upsideAbovePct": {
+ "type": "number"
+ }
+ },
+ "type": [
+ "object",
+ "null"
+ ]
+ }
+ },
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "masterAgentEvidence": {
+ "description": "Preserved agent_verdict evidence for audit and compatibility. Its direction, confidence, and expected move are non-binding inputs; they never replace, authorize, or gate the canonical verdict.",
+ "properties": {
+ "abstainReason": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "actionability": {
+ "enum": [
+ "ACTIONABLE",
+ "ABSTAIN",
+ null
+ ],
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "confidence": {
+ "description": "Confidence in the master-agent evidence synthesis. It is not decision confidence.",
+ "maximum": 1,
+ "minimum": 0,
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "direction": {
+ "description": "Legacy master-agent evidence lean only; never the binding market direction.",
+ "enum": [
+ "bullish",
+ "bearish",
+ "neutral",
+ "unknown",
+ null
+ ],
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "expectedMovePct": {
+ "description": "Legacy evidence estimate only; the canonical arbiter owns the binding expected move.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "forecastHorizon": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "producer": {
+ "enum": [
+ "agent_verdict"
+ ],
+ "type": "string"
+ },
+ "role": {
+ "enum": [
+ "evidence_non_binding"
+ ],
+ "type": "string"
+ },
+ "severity": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "uncertainty": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "urgencyScore": {
+ "type": [
+ "number",
+ "null"
+ ]
+ }
+ },
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "provenance": {
+ "properties": {
+ "engineNames": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "integrity": {
+ "properties": {
+ "alg": {
+ "type": "string"
+ },
+ "hash": {
+ "type": "string"
+ },
+ "hashedAt": {
+ "format": "date-time",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "walkForwardValidated": {
+ "type": "boolean"
+ }
+ },
+ "type": "object"
+ },
+ "reasoning": {
+ "properties": {
+ "conflictScore": {
+ "type": "number"
+ },
+ "missingSignals": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "steps": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "toolsUsed": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "symbol": {
+ "type": "string"
+ },
+ "timestamp": {
+ "type": [
+ "string",
+ "integer",
+ "number"
+ ]
+ },
+ "verdict": {
+ "description": "Compatibility decision block. Direction and bindingConfidence belong to the canonical arbiter; legacy confidence and any masterAgentEvidence remain non-binding evidence.",
+ "properties": {
+ "abstainReason": {
+ "description": "Present only when actionability is ABSTAIN. Plain-language explanation of why no directional call is being made — distinguishes a measured range-bound read from missing or conflicting evidence.",
+ "type": "string"
+ },
+ "actionability": {
+ "description": "Gate on this before treating a verdict as a reason to act. ACTIONABLE means a directional call is on the table: a bullish/bearish read that cleared the 25% confidence floor. ABSTAIN means there is no directional call, for one of two reasons named in abstainReason — (a) the read was directional but below the floor, so its label was withheld and direction reads neutral by policy, or (b) no direction was reached at all: range-bound, insufficient evidence, or signals in conflict. Widened 2026-08-14: case (b) previously fell through to ACTIONABLE by default, so verdicts whose own arbiter reported INSUFFICIENT_EVIDENCE reached agents marked actionable. ABSTAIN is never a default — every verdict is decided.",
+ "enum": [
+ "ACTIONABLE",
+ "ABSTAIN"
+ ],
+ "type": "string"
+ },
+ "bindingConfidence": {
+ "description": "Canonical arbiter confidence normalized to 0-1. This is the only decision confidence; null means no canonical confidence was available.",
+ "maximum": 1,
+ "minimum": 0,
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "bindingConfidenceProducer": {
+ "description": "canonical_verdict when bindingConfidence is present; null when the sole direction authority returned no read.",
+ "enum": [
+ "canonical_verdict",
+ null
+ ],
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "confidence": {
+ "description": "Legacy agent_verdict evidence confidence retained for compatibility. It is non-binding and is never decision confidence.",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "confidenceProducer": {
+ "description": "Producer of the legacy confidence field; an evidence producer, not a direction authority.",
+ "enum": [
+ "agent_verdict"
+ ],
+ "type": "string"
+ },
+ "confidenceRole": {
+ "description": "Declares that confidence is compatibility evidence and cannot authorize or gate the decision.",
+ "enum": [
+ "legacy_master_evidence_non_binding"
+ ],
+ "type": "string"
+ },
+ "direction": {
+ "description": "Served market direction after canonical arbitration and its confidence gate. No agent or committee evidence may replace it.",
+ "enum": [
+ "bullish",
+ "bearish",
+ "neutral",
+ "unknown"
+ ],
+ "type": "string"
+ },
+ "expectedMovePct": {
+ "description": "Signed expected move, percent. ALWAYS null when actionability is ABSTAIN — a signed move sitting beside a withheld direction is a directional claim the verdict declined to make, and it is the only concrete figure in the block, so an agent reads it as the call. Live 2026-08-14: NVO and META shipped +10 next to direction 'neutral'.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "forecastHorizon": {
+ "type": "string"
+ },
+ "masterAgentEvidence": {
+ "description": "Preserved agent_verdict evidence for audit and compatibility. Its direction, confidence, and expected move are non-binding inputs; they never replace, authorize, or gate the canonical verdict.",
+ "properties": {
+ "abstainReason": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "actionability": {
+ "enum": [
+ "ACTIONABLE",
+ "ABSTAIN",
+ null
+ ],
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "confidence": {
+ "description": "Confidence in the master-agent evidence synthesis. It is not decision confidence.",
+ "maximum": 1,
+ "minimum": 0,
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "direction": {
+ "description": "Legacy master-agent evidence lean only; never the binding market direction.",
+ "enum": [
+ "bullish",
+ "bearish",
+ "neutral",
+ "unknown",
+ null
+ ],
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "expectedMovePct": {
+ "description": "Legacy evidence estimate only; the canonical arbiter owns the binding expected move.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "forecastHorizon": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "producer": {
+ "enum": [
+ "agent_verdict"
+ ],
+ "type": "string"
+ },
+ "role": {
+ "enum": [
+ "evidence_non_binding"
+ ],
+ "type": "string"
+ },
+ "severity": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "uncertainty": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "urgencyScore": {
+ "type": [
+ "number",
+ "null"
+ ]
+ }
+ },
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "severity": {
+ "type": "string"
+ },
+ "uncertainty": {
+ "type": "number"
+ },
+ "urgencyScore": {
+ "description": "Rescaled urgency evidence when the source produced it. Null is the honest value for a withheld/no-read verdict; it must never be filled with zero.",
+ "type": [
+ "number",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "direction",
+ "confidence",
+ "uncertainty"
+ ],
+ "type": "object"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "dataState": {
+ "enum": [
+ "measured",
+ "partial",
+ "no_data",
+ "not_instrumented",
+ "stale",
+ "error"
+ ],
+ "type": "string"
+ },
+ "decision": {
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "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"
+ },
+ "instruments": {
+ "description": "Resolved or explicitly partial instrument identities. A missing venue carries an ambiguity warning.",
+ "items": {
+ "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"
+ },
+ "notReturned": {
+ "description": "Every requested symbol without a judged verdict row. Fresh/stale runtime telemetry remains attached when available; no engine evidence is promoted into a binding direction.",
+ "items": {
+ "properties": {
+ "bindingDecision": {
+ "description": "Explicit authority boundary for a requested symbol with no judged verdict row. Runtime evidence may still be present, but it cannot become a fallback direction.",
+ "properties": {
+ "direction": {
+ "type": "null"
+ },
+ "producer": {
+ "enum": [
+ "canonical_verdict"
+ ],
+ "type": "string"
+ },
+ "reason": {
+ "type": "string"
+ },
+ "state": {
+ "type": "null"
+ },
+ "status": {
+ "enum": [
+ "withheld"
+ ],
+ "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",
+ "null"
+ ]
+ },
+ "reason": {
+ "type": "string"
+ },
+ "symbol": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "provenanceRoot": {
+ "description": "SHA-256 over the per-item integrity hashes. Verifies this response wasn't altered after receipt (recompute to check). NOT a cryptographic attestation — key-signed receipts are on the roadmap.",
+ "type": "string"
+ },
+ "recordMatchReason": {
+ "description": "Why matchedTrackRecord is present or null. A null record is never evidence of safety or engine failure.",
+ "type": "string"
+ },
+ "requestId": {
+ "type": "string"
+ },
+ "requestedCoverage": {
+ "properties": {
+ "bySymbol": {
+ "additionalProperties": {
+ "properties": {
+ "bindingDecision": {
+ "description": "Explicit authority boundary for a requested symbol with no judged verdict row. Runtime evidence may still be present, but it cannot become a fallback direction.",
+ "properties": {
+ "direction": {
+ "type": "null"
+ },
+ "producer": {
+ "enum": [
+ "canonical_verdict"
+ ],
+ "type": "string"
+ },
+ "reason": {
+ "type": "string"
+ },
+ "state": {
+ "type": "null"
+ },
+ "status": {
+ "enum": [
+ "withheld"
+ ],
+ "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",
+ "null"
+ ]
+ },
+ "reason": {
+ "type": "string"
+ },
+ "state": {
+ "enum": [
+ "returned",
+ "not_returned"
+ ],
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "type": "object"
+ },
+ "complete": {
+ "description": "True when every requested symbol is explicitly accounted for as returned or not_returned; it is not a claim that every symbol has a verdict.",
+ "type": "boolean"
+ },
+ "notReturnedCount": {
+ "type": "integer"
+ },
+ "requestedCount": {
+ "type": "integer"
+ },
+ "returnedCount": {
+ "type": "integer"
+ }
+ },
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "responseControl": {
+ "type": "object"
+ },
+ "responseState": {
+ "enum": [
+ "OK_WITH_FINDINGS",
+ "OK_NO_FINDINGS",
+ "PARTIAL",
+ "WITHHELD",
+ "NO_COVERAGE",
+ "ERROR"
+ ],
+ "type": "string"
+ },
+ "schemaVersion": {
+ "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"
+ },
+ "updatedAt": {
+ "format": "date-time",
+ "type": "string"
+ }
+ },
+ "type": "object"
+}