changedOutput schema / (root)
Previous value: -nullNew value: +{
+ "properties": {
+ "completeness": {
+ "description": "Declares exactly what this response left out, so a truncated result can never look complete.",
+ "properties": {
+ "capture": {
+ "description": "Scoped unprocessed capture, when present.",
+ "properties": {
+ "blocked": {
+ "description": "Items blocked.",
+ "minimum": 0,
+ "type": "integer"
+ },
+ "expired": {
+ "description": "Raw expired before extraction; a gap, not backlog.",
+ "minimum": 0,
+ "type": "integer"
+ },
+ "extractionAvailable": {
+ "description": "Whether extraction runs.",
+ "type": "boolean"
+ },
+ "failed": {
+ "description": "Items failed.",
+ "minimum": 0,
+ "type": "integer"
+ },
+ "gaps": {
+ "description": "Capture refusal/unread gaps; no identities.",
+ "items": {
+ "properties": {
+ "from": {
+ "description": "Gap start time.",
+ "type": "string"
+ },
+ "reason": {
+ "description": "Why capture has a gap.",
+ "enum": [
+ "maxQueueDepth",
+ "maxStoreBytes",
+ "maxItemsPerSession",
+ "session_in_another_project",
+ "raw_expired",
+ "transcript_unrecognised",
+ "session_left_project",
+ "transcript_rewritten",
+ "transcript_reanchored",
+ "transcript_incomplete_at_end",
+ "transcript_line_oversized",
+ "tool_calls_not_captured"
+ ],
+ "type": "string"
+ },
+ "sessions": {
+ "description": "Sessions covered by this gap.",
+ "minimum": 0,
+ "type": "integer"
+ },
+ "to": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "End time, if known."
+ }
+ },
+ "required": [
+ "reason",
+ "from",
+ "to"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "limited": {
+ "description": "Admission limits; accepted items kept.",
+ "items": {
+ "properties": {
+ "ceiling": {
+ "description": "The limit value.",
+ "minimum": 0,
+ "type": "integer"
+ },
+ "limit": {
+ "description": "The limit reached.",
+ "enum": [
+ "maxQueueDepth",
+ "maxStoreBytes"
+ ],
+ "type": "string"
+ },
+ "since": {
+ "description": "When refusal began.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "limit",
+ "ceiling",
+ "since"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "oldestPendingAt": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Oldest pending capture."
+ },
+ "pending": {
+ "description": "Items waiting.",
+ "minimum": 0,
+ "type": "integer"
+ },
+ "processing": {
+ "description": "Items claimed.",
+ "minimum": 0,
+ "type": "integer"
+ },
+ "workerErrors": {
+ "description": "Scoped worker stops; fixed codes.",
+ "items": {
+ "properties": {
+ "at": {
+ "description": "Stop timestamp.",
+ "type": "string"
+ },
+ "reason": {
+ "description": "Worker stop code.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "reason",
+ "at"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "pending",
+ "processing",
+ "failed",
+ "blocked",
+ "oldestPendingAt",
+ "extractionAvailable",
+ "limited",
+ "gaps"
+ ],
+ "type": "object"
+ },
+ "complete": {
+ "description": "Known-candidate coverage; false for unresolved scope, withheld detail or pending capture; not recall.",
+ "type": "boolean"
+ },
+ "limitSource": {
+ "description": "Whose choice bounded the result.",
+ "enum": [
+ "caller",
+ "default"
+ ],
+ "type": "string"
+ },
+ "limitation": {
+ "description": "Limits of this view.",
+ "properties": {
+ "code": {
+ "description": "Stable limitation code.",
+ "type": "string"
+ },
+ "detail": {
+ "description": "What this view cannot establish.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "detail"
+ ],
+ "type": "object"
+ },
+ "losslessItems": {
+ "description": "False when returned items have withheld or transformed detail.",
+ "type": "boolean"
+ },
+ "omitted": {
+ "description": "total minus returned.",
+ "minimum": 0,
+ "type": "integer"
+ },
+ "quarantined": {
+ "description": "Items withheld as possibly purged.",
+ "minimum": 0,
+ "type": "integer"
+ },
+ "returned": {
+ "description": "Items in this response.",
+ "minimum": 0,
+ "type": "integer"
+ },
+ "scope": {
+ "description": "The resolved read boundary.",
+ "properties": {
+ "grant": {
+ "anyOf": [
+ {
+ "type": "null"
+ },
+ {
+ "properties": {
+ "accessId": {
+ "description": "The currently rechecked grant identifier.",
+ "type": "string"
+ },
+ "expiresAt": {
+ "description": "Earliest effective expiry of this read authority.",
+ "type": "string"
+ },
+ "surface": {
+ "description": "Actual runtime surface of this read.",
+ "enum": [
+ "cli",
+ "mcp",
+ "http"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "accessId",
+ "expiresAt",
+ "surface"
+ ],
+ "type": "object"
+ }
+ ],
+ "description": "Effective rechecked grant, or null."
+ },
+ "originPresented": {
+ "description": "Usable origin presented; not project selection.",
+ "type": "boolean"
+ },
+ "project": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Resolved project, or null."
+ },
+ "requestState": {
+ "description": "Whether a project was resolved.",
+ "enum": [
+ "project_selected",
+ "project_unresolved"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "project",
+ "requestState",
+ "originPresented",
+ "grant"
+ ],
+ "type": "object"
+ },
+ "total": {
+ "description": "Items that matched in total.",
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "scope",
+ "returned",
+ "total",
+ "complete",
+ "omitted",
+ "losslessItems"
+ ],
+ "type": "object"
+ },
+ "items": {
+ "description": "All known matching items inside this boundary.",
+ "items": {
+ "description": "One decision whose rejected alternatives are due for reconsideration.",
+ "properties": {
+ "alternativesToReconsider": {
+ "description": "Labels of the alternatives to look at again; all of them when the trigger was not alternative-specific.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "decisionId": {
+ "description": "The decision to reconsider.",
+ "type": "string"
+ },
+ "reason": {
+ "description": "Comma-separated causes: the fact keys whose reopenWhen rules matched, \"review date reached\", or \"decision outcome failed\".",
+ "type": "string"
+ },
+ "reviewSignalId": {
+ "description": "Pass this to shadowgraph_ack_review to acknowledge this review.",
+ "type": "string"
+ },
+ "reviewSignalStatus": {
+ "description": "Whether this review is open or acknowledged, or unpersisted: no stored signal, because context is a read or the evaluation was wider. Entries are recomputed from current evidence; an acknowledged one still appears.",
+ "enum": [
+ "open",
+ "acknowledged",
+ "unpersisted"
+ ],
+ "type": "string"
+ },
+ "title": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Decision title, when the stored decision has one."
+ },
+ "violatedConditions": {
+ "description": "The conditions that actually fired, each naming its operator, expected and observed value, and the fact it was computed from.",
+ "items": {
+ "description": "One evaluated reopen condition. Verdict \"unknown\" means it could not be evaluated from available evidence, which is not a pass.",
+ "properties": {
+ "alternativeId": {
+ "description": "Alternative carrying it.",
+ "type": "string"
+ },
+ "alternativeLabel": {
+ "description": "Label of that alternative.",
+ "type": "string"
+ },
+ "attemptId": {
+ "description": "Attempt the condition belongs to, for a reusableWhen rule.",
+ "type": "string"
+ },
+ "conflictingEvidence": {
+ "description": "Equally applicable facts that disagree. The verdict rests on the deterministic winner.",
+ "items": {
+ "description": "A fact a verdict came from. Unrecorded fields are omitted, never filled in.",
+ "properties": {
+ "factId": {
+ "description": "The observed fact.",
+ "type": "string"
+ },
+ "observedAt": {
+ "description": "When observed, if recorded.",
+ "type": "string"
+ },
+ "sourceClass": {
+ "description": "Provenance class, if recorded.",
+ "type": "string"
+ },
+ "validFrom": {
+ "description": "Validity start, if recorded.",
+ "type": "string"
+ },
+ "value": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ },
+ {
+ "type": "array"
+ },
+ {
+ "type": "object"
+ }
+ ],
+ "description": "A stored value, any lossless JSON value."
+ },
+ "verificationStatus": {
+ "description": "Verification status, if recorded.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "factId",
+ "value"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "decisionId": {
+ "description": "Decision the condition belongs to, for a reopenWhen rule.",
+ "type": "string"
+ },
+ "evidence": {
+ "description": "Provenance of the value used.",
+ "type": "object"
+ },
+ "expected": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ },
+ {
+ "type": "array"
+ },
+ {
+ "type": "object"
+ }
+ ],
+ "description": "A stored value, any lossless JSON value."
+ },
+ "key": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Fact key read."
+ },
+ "observed": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ },
+ {
+ "type": "array"
+ },
+ {
+ "type": "object"
+ }
+ ],
+ "description": "A stored value, any lossless JSON value."
+ },
+ "operator": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Operator the rule declared."
+ },
+ "reason": {
+ "description": "Why this verdict.",
+ "type": "string"
+ },
+ "unit": {
+ "description": "Unit the rule declared, if any.",
+ "type": "string"
+ },
+ "verdict": {
+ "description": "Evaluation result.",
+ "enum": [
+ "true",
+ "false",
+ "unknown"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "key",
+ "operator",
+ "verdict",
+ "reason"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "decisionId",
+ "reason",
+ "alternativesToReconsider"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "readProvenance": {
+ "description": "Original read bounds; reuse intersects these with currently valid authority.",
+ "properties": {
+ "accessId": {
+ "description": "Original grant, revalidated on every reuse.",
+ "type": "string"
+ },
+ "expiresAt": {
+ "description": "Original effective expiry; reuse cannot extend it.",
+ "type": "string"
+ },
+ "request": {
+ "description": "Original request ownership, preserved during expansion.",
+ "properties": {
+ "originId": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Original capture origin, or null when absent."
+ },
+ "project": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Original resolved project, or null when unresolved."
+ }
+ },
+ "required": [
+ "project",
+ "originId"
+ ],
+ "type": "object"
+ },
+ "scope": {
+ "description": "Finite explicit owner bounds; project names, origins and legacy attribution are disjoint.",
+ "properties": {
+ "legacyAttributions": {
+ "description": "Explicit legacy ownership classes; neither is a named project.",
+ "items": {
+ "enum": [
+ "legacy_ambiguous",
+ "legacy_unattributed"
+ ],
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "originIds": {
+ "description": "Exact nonempty origin identifiers for unattributed content.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "projects": {
+ "description": "Exact named projects, including a real project named default if requested.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "surfaces": {
+ "description": "Original permitted surfaces; reuse can only narrow them.",
+ "items": {
+ "enum": [
+ "cli",
+ "mcp",
+ "http"
+ ],
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "version": {
+ "const": 1,
+ "description": "Version of this bounded read provenance.",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "version",
+ "request",
+ "accessId",
+ "scope",
+ "surfaces",
+ "expiresAt"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "items",
+ "completeness"
+ ],
+ "type": "object"
+}