Skip to main content
Glama
ShadowGraph

ShadowGraph

Official

shadowgraph_context

Read a planning working set without saving signals: decisions, stale facts, failed attempts, and fired conditions; optionally rank relevant records for a query or focal entity.

Instructions

Read a planning working set without saving signals: decisions, stale facts, failed attempts and fired conditions. shadowgraph_search matches every term; shadowgraph_retrieve adds neighbours; shadowgraph_recall ranks memory; shadowgraph_review_context persists signals. No decision or signal writes. Unmatched-query diagnostics stay in memory until a later save. No immediate revision without an access key; a key saves a revision and audit.

Input Schema

NameRequiredDescriptionDefault
asOfNoISO 8601 instant for relevant: facts and memories valid then, recency ordered from it, and lines derived as of it.
factsNoTemporary key/value overrides for object rules; unlisted keys use stored facts. Example: facts:{ready:true} tests {key:"ready",value:true}. This does not record a fact or fire a string rule; changedFacts supplies those changed-key signals.
limitNoMaximum items per collection, 1-1000, applied to each collection independently. Omit for the default of 50.
queryNoFree text. With it or focalId, the response adds relevant: the records in scope that the lexical or graph signal ranks, ahead of the working set. No semantic signal is computed on this read.
compactNoWith query or focalId, true delivers each relevant record as a shortened claim line (T1); false or omitted delivers full records. A line that would omit decisive meaning falls back to the full record. This controls record presentation, not the server tool mode. For example, query:"cache", compact:true adds relevant.items with expansion handles; compact:true alone does not add relevant.
focalIdNoEntity id to rank graph neighbours from. An id outside the scope reaches nothing, like an unknown one.
grantIdNoAlias for accessId; conflicting identifiers are refused.
projectNoProject or confirmed workspace binding; otherwise origin-only. No identity returns an empty scoped view.
accessIdNoGrant ID, rechecked at use. Widens reads only, never write authority. Presenting an access key commits a revision and bounded operational audit: at most one aggregate per grant, surface, outcome and UTC day. Conflicts with a different grantId are refused.
originIdNoCapture-origin id; with no project the record belongs to it alone.
changedFactsNoEphemeral changed-key signals for string-form reopenWhen rules; not stored facts. Example: changedFacts:["budget"] fires reopenWhen:["budget"]. Object rules instead read values from facts overrides or stored facts.

Output Schema

NameRequiredDescriptionDefault
noticeYesDeclared interface metadata, not memory: context is a read, and reviewContext (shadowgraph_review_context) evaluates and persists.
projectYesThe resolved project, or null when unresolved.
relevantNoPresent with query or focalId: records in scope ranked on the records themselves, head first.
completenessYesPer-collection completeness. context returns several named collections, so one page object cannot describe it.
failedAttemptsYesAttempts that failed: resultClass failed or, with none and not captured, a result mentioning failure, regression, or error.
readProvenanceNoOriginal read bounds; reuse intersects these with currently valid authority.
activeDecisionsYesDecisions whose lifecycle status is current: proposed, planned, in_progress, executed, validated, or reconsidered.
firedConditionsYesDecisions whose recorded review conditions fired, with the conditions and the facts they were computed from.
reusableAttemptsNoAttempts whose reusableWhen conditions all hold now. The recorded failure still stands, and this is not authorisation to retry.
staleAssumptionsYesFacts that are no longer active, such as superseded or expired ones, which earlier decisions may still rest on.
conditionDiagnosticsNoConditions that could not be settled, or that rest on facts which disagree. Neither a breach nor a confirmed-safe decision.
belowConfidenceThresholdYesDecisions of any status whose recorded confidence is below the policy threshold.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changedv0.42.4
    • changedOutput schema / properties / completeness / properties / capture / properties / gaps / items / properties / reason / enum
      Previous value: -[
      -  "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"
      -]New value: +[
      +  "maxQueueDepth",
      +  "maxStoreBytes",
      +  "maxItemsPerSession",
      +  "session_in_another_project",
      +  "raw_expired",
      +  "prior_setup",
      +  "transcript_unrecognised",
      +  "session_left_project",
      +  "transcript_rewritten",
      +  "transcript_reanchored",
      +  "transcript_incomplete_at_end",
      +  "transcript_line_oversized",
      +  "tool_calls_not_captured"
      +]
    • addedOutput schema / properties / completeness / properties / capture / properties / priorSetup
      Added value: +{
      +  "description": "Unextracted items of no or an earlier setup; never extracted by the current one.",
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • changedOutput schema / properties / relevant / properties / capture / properties / gaps / items / properties / reason / enum
      Previous value: -[
      -  "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"
      -]New value: +[
      +  "maxQueueDepth",
      +  "maxStoreBytes",
      +  "maxItemsPerSession",
      +  "session_in_another_project",
      +  "raw_expired",
      +  "prior_setup",
      +  "transcript_unrecognised",
      +  "session_left_project",
      +  "transcript_rewritten",
      +  "transcript_reanchored",
      +  "transcript_incomplete_at_end",
      +  "transcript_line_oversized",
      +  "tool_calls_not_captured"
      +]
    • addedOutput schema / properties / relevant / properties / capture / properties / priorSetup
      Added value: +{
      +  "description": "Unextracted items of no or an earlier setup; never extracted by the current one.",
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • changedOutput schema / properties / relevant / properties / processing / properties / gaps / items / properties / reason / enum
      Previous value: -[
      -  "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"
      -]New value: +[
      +  "maxQueueDepth",
      +  "maxStoreBytes",
      +  "maxItemsPerSession",
      +  "session_in_another_project",
      +  "raw_expired",
      +  "prior_setup",
      +  "transcript_unrecognised",
      +  "session_left_project",
      +  "transcript_rewritten",
      +  "transcript_reanchored",
      +  "transcript_incomplete_at_end",
      +  "transcript_line_oversized",
      +  "tool_calls_not_captured"
      +]
    • addedOutput schema / properties / relevant / properties / processing / properties / priorSetup
      Added value: +{
      +  "description": "Unextracted items of no or an earlier setup; never extracted by the current one.",
      +  "minimum": 0,
      +  "type": "integer"
      +}
  2. Changed3 schema fields changedv0.42.3
    • changedInput schema / properties / changedFacts / description
      Previous value: -"Fact keys that just changed. Only string-form reopenWhen rules match this list; it is an ephemeral signal, not durable state."New value: +"Ephemeral changed-key signals for string-form reopenWhen rules; not stored facts. Example: changedFacts:[\"budget\"] fires reopenWhen:[\"budget\"]. Object rules instead read values from facts overrides or stored facts."
    • changedInput schema / properties / compact / description
      Previous value: -"With query or focalId, true delivers each relevant record as a shortened claim line (T1); false or omitted delivers full records. A line that would omit decisive meaning falls back to the full record. This controls record presentation, not the server tool mode."New value: +"With query or focalId, true delivers each relevant record as a shortened claim line (T1); false or omitted delivers full records. A line that would omit decisive meaning falls back to the full record. This controls record presentation, not the server tool mode. For example, query:\"cache\", compact:true adds relevant.items with expansion handles; compact:true alone does not add relevant."
    • changedInput schema / properties / facts / description
      Previous value: -"Fact key/value overrides evaluated instead of the stored facts of the same key. Stored facts are used for every key not listed here, so reopen rules still work after a restart."New value: +"Temporary key/value overrides for object rules; unlisted keys use stored facts. Example: facts:{ready:true} tests {key:\"ready\",value:true}. This does not record a fact or fire a string rule; changedFacts supplies those changed-key signals."
  3. Changed3 schema fields changedv0.42.2
    • changedInput schema / properties / accessId / description
      Previous value: -"Grant ID, rechecked at use."New value: +"Grant ID, rechecked at use. Widens reads only, never write authority. Presenting an access key commits a revision and bounded operational audit: at most one aggregate per grant, surface, outcome and UTC day. Conflicts with a different grantId are refused."
    • changedInput schema / properties / compact / description
      Previous value: -"Deliver each relevant record as a derived claim line (T1) instead of the full record. A line that cannot carry its decisive meaning is delivered as the full record."New value: +"With query or focalId, true delivers each relevant record as a shortened claim line (T1); false or omitted delivers full records. A line that would omit decisive meaning falls back to the full record. This controls record presentation, not the server tool mode."
    • changedOutput schema / properties / relevant / properties / processing / description
      Previous value: -"Scoped capture processing; extraction is inactive in this build."New value: +"Scoped capture processing and current extraction availability."
  4. Changed44 schema fields changedv0.42.1
    • addedInput schema / properties / accessId
      Added value: +{
      +  "description": "Grant ID, rechecked at use.",
      +  "type": "string"
      +}
    • addedInput schema / properties / asOf
      Added value: +{
      +  "description": "ISO 8601 instant for relevant: facts and memories valid then, recency ordered from it, and lines derived as of it.",
      +  "type": "string"
      +}
    • addedInput schema / properties / compact
      Added value: +{
      +  "description": "Deliver each relevant record as a derived claim line (T1) instead of the full record. A line that cannot carry its decisive meaning is delivered as the full record.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / focalId
      Added value: +{
      +  "description": "Entity id to rank graph neighbours from. An id outside the scope reaches nothing, like an unknown one.",
      +  "type": "string"
      +}
    • addedInput schema / properties / grantId
      Added value: +{
      +  "description": "Alias for accessId; conflicting identifiers are refused.",
      +  "type": "string"
      +}
    • addedInput schema / properties / originId
      Added value: +{
      +  "description": "Capture-origin id; with no project the record belongs to it alone.",
      +  "type": "string"
      +}
    • changedInput schema / properties / project / description
      Previous value: -"Project namespace. Defaults to \"default\"; an empty string is rejected."New value: +"Project or confirmed workspace binding; otherwise origin-only. No identity returns an empty scoped view."
    • addedInput schema / properties / query
      Added value: +{
      +  "description": "Free text. With it or focalId, the response adds relevant: the records in scope that the lexical or graph signal ranks, ahead of the working set. No semantic signal is computed on this read.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / activeDecisions / description
      Previous value: -"Decisions in a current, actionable state: proposed, planned, in_progress, executed, validated, or reconsidered."New value: +"Decisions whose lifecycle status is current: proposed, planned, in_progress, executed, validated, or reconsidered."
    • changedOutput schema / properties / activeDecisions / items / properties / project / description
      Previous value: -"Project namespace; records imported from a schema that predates projects may carry null."New value: +"Project namespace; null for an unattributed record or one imported from before projects."
    • addedOutput schema / properties / belowConfidenceThreshold
      Added value: +{
      +  "description": "Decisions of any status whose recorded confidence is below the policy threshold.",
      +  "items": {
      +    "description": "One decision whose recorded confidence is below the policy threshold.",
      +    "properties": {
      +      "confidence": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "boolean"
      +          },
      +          {
      +            "type": "null"
      +          },
      +          {
      +            "type": "array"
      +          },
      +          {
      +            "type": "object"
      +          }
      +        ],
      +        "description": "Recorded current confidence, normally 0-1; null when none is recorded, which counts as below."
      +      },
      +      "decisionId": {
      +        "description": "The decision.",
      +        "type": "string"
      +      },
      +      "status": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "boolean"
      +          },
      +          {
      +            "type": "null"
      +          },
      +          {
      +            "type": "array"
      +          },
      +          {
      +            "type": "object"
      +          }
      +        ],
      +        "description": "Its lifecycle status as recorded, whatever it is; null when none is recorded."
      +      },
      +      "threshold": {
      +        "description": "The policy threshold the confidence is below.",
      +        "type": "number"
      +      },
      +      "title": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Decision title, when the stored decision has one."
      +      }
      +    },
      +    "required": [
      +      "decisionId",
      +      "status",
      +      "confidence",
      +      "threshold"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / completeness / description
      Previous value: -"Per-collection completeness. context returns five named collections, so one page object cannot describe it."New value: +"Per-collection completeness. context returns several named collections, so one page object cannot describe it."
    • addedOutput schema / properties / completeness / properties / capture
      Added value: +{
      +  "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"
      +}
    • addedOutput schema / properties / completeness / properties / collections / properties / belowConfidenceThreshold
      Added value: +{
      +  "description": "Counts for belowConfidenceThreshold.",
      +  "properties": {
      +    "hasMore": {
      +      "description": "True when this collection was truncated.",
      +      "type": "boolean"
      +    },
      +    "omitted": {
      +      "description": "total minus returned for this collection.",
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "returned": {
      +      "description": "Items returned for this collection.",
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "total": {
      +      "description": "Items that matched for this collection.",
      +      "minimum": 0,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "returned",
      +    "total",
      +    "hasMore",
      +    "omitted"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / completeness / properties / collections / properties / conditionDiagnostics
      Added value: +{
      +  "description": "Counts for conditionDiagnostics.",
      +  "properties": {
      +    "hasMore": {
      +      "description": "True when this collection was truncated.",
      +      "type": "boolean"
      +    },
      +    "omitted": {
      +      "description": "total minus returned for this collection.",
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "returned": {
      +      "description": "Items returned for this collection.",
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "total": {
      +      "description": "Items that matched for this collection.",
      +      "minimum": 0,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "returned",
      +    "total",
      +    "hasMore",
      +    "omitted"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / completeness / properties / collections / properties / failedAttempts
      Added value: +{
      +  "description": "Counts for failedAttempts.",
      +  "properties": {
      +    "hasMore": {
      +      "description": "True when this collection was truncated.",
      +      "type": "boolean"
      +    },
      +    "omitted": {
      +      "description": "total minus returned for this collection.",
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "returned": {
      +      "description": "Items returned for this collection.",
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "total": {
      +      "description": "Items that matched for this collection.",
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "undetermined": {
      +      "description": "Captured attempts with no resultClass: undetermined, in no collection.",
      +      "minimum": 0,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "returned",
      +    "total",
      +    "hasMore",
      +    "omitted",
      +    "undetermined"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / properties / completeness / properties / collections / properties / failedAttemptsToAvoid
      Removed value: -{
      -  "description": "Counts for failedAttemptsToAvoid.",
      -  "properties": {
      -    "hasMore": {
      -      "description": "True when this collection was truncated.",
      -      "type": "boolean"
      -    },
      -    "omitted": {
      -      "description": "total minus returned for this collection.",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "returned": {
      -      "description": "Items returned for this collection.",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "total": {
      -      "description": "Items that matched for this collection.",
      -      "minimum": 0,
      -      "type": "integer"
      -    }
      -  },
      -  "required": [
      -    "returned",
      -    "total",
      -    "hasMore",
      -    "omitted"
      -  ],
      -  "type": "object"
      -}
    • addedOutput schema / properties / completeness / properties / collections / properties / firedConditions
      Added value: +{
      +  "description": "Counts for firedConditions.",
      +  "properties": {
      +    "hasMore": {
      +      "description": "True when this collection was truncated.",
      +      "type": "boolean"
      +    },
      +    "omitted": {
      +      "description": "total minus returned for this collection.",
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "returned": {
      +      "description": "Items returned for this collection.",
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "total": {
      +      "description": "Items that matched for this collection.",
      +      "minimum": 0,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "returned",
      +    "total",
      +    "hasMore",
      +    "omitted"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / properties / completeness / properties / collections / properties / openReviews
      Removed value: -{
      -  "description": "Counts for openReviews.",
      -  "properties": {
      -    "hasMore": {
      -      "description": "True when this collection was truncated.",
      -      "type": "boolean"
      -    },
      -    "omitted": {
      -      "description": "total minus returned for this collection.",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "returned": {
      -      "description": "Items returned for this collection.",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "total": {
      -      "description": "Items that matched for this collection.",
      -      "minimum": 0,
      -      "type": "integer"
      -    }
      -  },
      -  "required": [
      -    "returned",
      -    "total",
      -    "hasMore",
      -    "omitted"
      -  ],
      -  "type": "object"
      -}
    • addedOutput schema / properties / completeness / properties / collections / properties / reusableAttempts
      Added value: +{
      +  "description": "Counts for reusableAttempts.",
      +  "properties": {
      +    "hasMore": {
      +      "description": "True when this collection was truncated.",
      +      "type": "boolean"
      +    },
      +    "omitted": {
      +      "description": "total minus returned for this collection.",
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "returned": {
      +      "description": "Items returned for this collection.",
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "total": {
      +      "description": "Items that matched for this collection.",
      +      "minimum": 0,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "returned",
      +    "total",
      +    "hasMore",
      +    "omitted"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / properties / completeness / properties / collections / properties / suggestedQuestions
      Removed value: -{
      -  "description": "Counts for suggestedQuestions.",
      -  "properties": {
      -    "hasMore": {
      -      "description": "True when this collection was truncated.",
      -      "type": "boolean"
      -    },
      -    "omitted": {
      -      "description": "total minus returned for this collection.",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "returned": {
      -      "description": "Items returned for this collection.",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "total": {
      -      "description": "Items that matched for this collection.",
      -      "minimum": 0,
      -      "type": "integer"
      -    }
      -  },
      -  "required": [
      -    "returned",
      -    "total",
      -    "hasMore",
      -    "omitted"
      -  ],
      -  "type": "object"
      -}
    • changedOutput schema / properties / completeness / properties / collections / required
      Previous value: -[
      -  "activeDecisions",
      -  "staleAssumptions",
      -  "failedAttemptsToAvoid",
      -  "openReviews",
      -  "suggestedQuestions"
      -]New value: +[
      +  "activeDecisions",
      +  "staleAssumptions",
      +  "failedAttempts",
      +  "firedConditions",
      +  "belowConfidenceThreshold"
      +]
    • changedOutput schema / properties / completeness / properties / complete / description
      Previous value: -"True only when no collection was truncated."New value: +"Known-candidate coverage; false for unresolved scope, withheld detail or pending capture; not recall."
    • addedOutput schema / properties / completeness / properties / limitation
      Added value: +{
      +  "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"
      +}
    • changedOutput schema / properties / completeness / properties / losslessItems / description
      Previous value: -"Always true: items are full records, never summaries."New value: +"False when returned items have withheld or transformed detail."
    • addedOutput schema / properties / completeness / properties / quarantined
      Added value: +{
      +  "description": "Items withheld as possibly purged.",
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • changedOutput schema / properties / completeness / properties / scope / description
      Previous value: -"The project this result covers."New value: +"The resolved read boundary."
    • addedOutput schema / properties / completeness / properties / scope / properties
      Added value: +{
      +  "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"
      +  }
      +}
    • addedOutput schema / properties / completeness / properties / scope / required
      Added value: +[
      +  "project",
      +  "requestState",
      +  "originPresented",
      +  "grant"
      +]
    • addedOutput schema / properties / conditionDiagnostics
      Added value: +{
      +  "description": "Conditions that could not be settled, or that rest on facts which disagree. Neither a breach nor a confirmed-safe decision.",
      +  "items": {
      +    "description": "Unresolved or contested conditions on one decision or attempt. Not a review signal: neither a breach nor a confirmed-safe decision.",
      +    "properties": {
      +      "attemptId": {
      +        "description": "The attempt involved, for reusableWhen conditions.",
      +        "type": "string"
      +      },
      +      "conditions": {
      +        "description": "The unresolved or contested conditions.",
      +        "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"
      +      },
      +      "decisionId": {
      +        "description": "The decision involved, for reopenWhen conditions.",
      +        "type": "string"
      +      },
      +      "title": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Decision title, when stored."
      +      }
      +    },
      +    "required": [
      +      "conditions"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / failedAttempts
      Added value: +{
      +  "description": "Attempts that failed: resultClass failed or, with none and not captured, a result mentioning failure, regression, or error.",
      +  "items": {
      +    "description": "A stored attempt and its result.",
      +    "properties": {
      +      "actor": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Who performed the write."
      +      },
      +      "causalClaim": {
      +        "description": "The cause, attributed apart from the attempt: state recorded (the reason, agent_claimed), unknown, not_recorded, or legacy_freetext (a reason stored before causes were, never classed or evidenced).",
      +        "type": "object"
      +      },
      +      "client": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Which client performed the write."
      +      },
      +      "createdAt": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "ISO 8601 creation time."
      +      },
      +      "environment": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Where it was tried."
      +      },
      +      "id": {
      +        "description": "Stable entity identifier.",
      +        "type": "string"
      +      },
      +      "kind": {
      +        "description": "Entity kind: decision, attempt, memory, fact, relation, review, or alternative.",
      +        "type": "string"
      +      },
      +      "project": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Project namespace; null for an unattributed record or one imported from before projects."
      +      },
      +      "reason": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Why it turned out that way, verbatim as recorded."
      +      },
      +      "relatedTo": {
      +        "description": "Identifiers of related entities.",
      +        "type": "array"
      +      },
      +      "result": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "What happened."
      +      },
      +      "resultClass": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Declared or observed: failed, succeeded, or inconclusive. If absent: not captured (no captureRef or outcomeEvidence), the wording heuristic classifies; captured, the outcome is undetermined."
      +      },
      +      "reusableWhen": {
      +        "description": "Conditions recorded for reusing the attempt. All must hold, and none may be unresolved.",
      +        "type": "array"
      +      },
      +      "schemaVersion": {
      +        "description": "Storage schema version this entity was written under. A value above the build’s own version is preserved rather than downgraded.",
      +        "type": "integer"
      +      },
      +      "sessionId": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Session identifier recorded with the write."
      +      },
      +      "solution": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "What was tried."
      +      },
      +      "sourceClass": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Claimed origin class recorded with the write. A claim, never proof."
      +      },
      +      "sourceRaw": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "The original origin label when it differed from sourceClass. Audit only; never evidence."
      +      },
      +      "updatedAt": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "ISO 8601 time of the last change."
      +      }
      +    },
      +    "required": [
      +      "id",
      +      "kind"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • removedOutput schema / properties / failedAttemptsToAvoid
      Removed value: -{
      -  "description": "Attempts whose result mentions failure, regression, or error.",
      -  "items": {
      -    "description": "A stored attempt and its result.",
      -    "properties": {
      -      "actor": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Who performed the write."
      -      },
      -      "client": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Which client performed the write."
      -      },
      -      "createdAt": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "ISO 8601 creation time."
      -      },
      -      "environment": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Where it was tried."
      -      },
      -      "id": {
      -        "description": "Stable entity identifier.",
      -        "type": "string"
      -      },
      -      "kind": {
      -        "description": "Entity kind: decision, attempt, memory, fact, relation, review, or alternative.",
      -        "type": "string"
      -      },
      -      "project": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Project namespace; records imported from a schema that predates projects may carry null."
      -      },
      -      "reason": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Why it turned out that way."
      -      },
      -      "relatedTo": {
      -        "description": "Identifiers of related entities.",
      -        "type": "array"
      -      },
      -      "result": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "What happened."
      -      },
      -      "reusableWhen": {
      -        "description": "Conditions under which the attempt is worth repeating.",
      -        "type": "array"
      -      },
      -      "schemaVersion": {
      -        "description": "Storage schema version this entity was written under. A value above the build’s own version is preserved rather than downgraded.",
      -        "type": "integer"
      -      },
      -      "sessionId": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Session identifier recorded with the write."
      -      },
      -      "solution": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "What was tried."
      -      },
      -      "sourceClass": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Claimed origin class recorded with the write. A claim, never proof."
      -      },
      -      "sourceRaw": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "The original origin label when it differed from sourceClass. Audit only; never evidence."
      -      },
      -      "updatedAt": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "ISO 8601 time of the last change."
      -      }
      -    },
      -    "required": [
      -      "id",
      -      "kind"
      -    ],
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
    • addedOutput schema / properties / firedConditions
      Added value: +{
      +  "description": "Decisions whose recorded review conditions fired, with the conditions and the facts they were computed from.",
      +  "items": {
      +    "description": "One decision whose recorded reopen conditions, review date or failed outcome fired.",
      +    "properties": {
      +      "affectedAlternatives": {
      +        "description": "Labels of the recorded alternatives the fired conditions belong to; all of them when the trigger was not alternative-specific.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "decisionId": {
      +        "description": "The decision whose conditions fired.",
      +        "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": "The stored review signal for this decision; shadowgraph_ack_review takes this id.",
      +        "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",
      +      "affectedAlternatives"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / notice
      Added value: +{
      +  "description": "Declared interface metadata, not memory: context is a read, and reviewContext (shadowgraph_review_context) evaluates and persists.",
      +  "properties": {
      +    "code": {
      +      "description": "Stable notice code.",
      +      "enum": [
      +        "context_does_not_persist"
      +      ],
      +      "type": "string"
      +    },
      +    "detail": {
      +      "description": "Where the old evaluate-and-persist behaviour moved.",
      +      "type": "string"
      +    },
      +    "replacement": {
      +      "description": "The replacement operation on each surface.",
      +      "properties": {
      +        "cli": {
      +          "description": "CLI verb to run.",
      +          "type": "string"
      +        },
      +        "http": {
      +          "description": "HTTP route to call.",
      +          "type": "string"
      +        },
      +        "kernel": {
      +          "description": "Kernel method to call.",
      +          "type": "string"
      +        },
      +        "mcp": {
      +          "description": "MCP tool to call.",
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "detail",
      +    "replacement"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / properties / openReviews
      Removed value: -{
      -  "description": "Decisions currently due for reconsideration.",
      -  "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"
      -      },
      -      "title": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Decision title, when the stored decision has one."
      -      }
      -    },
      -    "required": [
      -      "decisionId",
      -      "reason",
      -      "alternativesToReconsider"
      -    ],
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
    • addedOutput schema / properties / project / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / project / description
      Previous value: -"The project this context describes."New value: +"The resolved project, or null when unresolved."
    • removedOutput schema / properties / project / type
      Removed value: -"string"
    • addedOutput schema / properties / readProvenance
      Added value: +{
      +  "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"
      +}
    • addedOutput schema / properties / relevant
      Added value: +{
      +  "description": "Present with query or focalId: records in scope ranked on the records themselves, head first.",
      +  "properties": {
      +    "byKind": {
      +      "description": "Candidates by kind.",
      +      "properties": {
      +        "attempt": {
      +          "description": "Candidate attempts.",
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "decision": {
      +          "description": "Candidate decisions.",
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "fact": {
      +          "description": "Candidate facts.",
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "memory": {
      +          "description": "Candidate memories.",
      +          "minimum": 0,
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "decision",
      +        "attempt",
      +        "memory",
      +        "fact"
      +      ],
      +      "type": "object"
      +    },
      +    "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": "All counted candidates returned, relevance established and the scope resolved; not semantic recall.",
      +      "type": "boolean"
      +    },
      +    "expansion": {
      +      "description": "The operation a line handle names.",
      +      "properties": {
      +        "available": {
      +          "description": "True: shadowgraph_expand serves the full record behind a line.",
      +          "type": "boolean"
      +        },
      +        "operation": {
      +          "description": "Operation name.",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "operation",
      +        "available"
      +      ],
      +      "type": "object"
      +    },
      +    "fallback": {
      +      "description": "Whether fuller delivery replaced relevance or a line.",
      +      "properties": {
      +        "reason": {
      +          "anyOf": [
      +            {
      +              "enum": [
      +                "relevance_not_established",
      +                "decisive_meaning_omitted"
      +              ],
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "relevance_not_established: no signal ranked a record, so the working set is delivered. decisive_meaning_omitted: a line could not carry its decisive meaning, so that record is delivered in full."
      +        },
      +        "used": {
      +          "description": "True when the working set or a full record was delivered instead.",
      +          "type": "boolean"
      +        }
      +      },
      +      "required": [
      +        "used",
      +        "reason"
      +      ],
      +      "type": "object"
      +    },
      +    "hasMore": {
      +      "description": "True when limit left candidates out.",
      +      "type": "boolean"
      +    },
      +    "items": {
      +      "description": "Ranked records, best first; the working set when fallback reason is relevance_not_established.",
      +      "items": {
      +        "description": "One relevant record, as its line (T1) or in full (T2), with the ranks that selected it.",
      +        "properties": {
      +          "line": {
      +            "description": "A derived claim line (T1): never canonical, bound to the revision it was derived from.",
      +            "properties": {
      +              "boundRevision": {
      +                "description": "The record id and the SHA-256 digest of what the line was derived from.",
      +                "type": "object"
      +              },
      +              "claimClass": {
      +                "description": "The weakest class among its claims and its cause: quoted, entailed, ambiguous, unsupported, legacy_freetext, or not_classified.",
      +                "type": "string"
      +              },
      +              "decisiveOmitted": {
      +                "description": "Decisive parts the line could not carry; empty on a delivered line.",
      +                "items": {
      +                  "type": "string"
      +                },
      +                "type": "array"
      +              },
      +              "derivationVersion": {
      +                "description": "Version of the template.",
      +                "type": "string"
      +              },
      +              "derived": {
      +                "description": "Always true: a line is never canonical.",
      +                "type": "boolean"
      +              },
      +              "expansion": {
      +                "description": "Handle for the full record: operation, record id, digest, as-of, derivation version, scope and derivation time.",
      +                "type": "object"
      +              },
      +              "kind": {
      +                "anyOf": [
      +                  {
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "The kind of that record."
      +              },
      +              "line": {
      +                "description": "The record in one line, from a versioned template: stored values quoted, recorded conditions stated as recorded.",
      +                "type": "string"
      +              },
      +              "outcome": {
      +                "description": "Attempts only: result class, outcome-evidence state and cause state.",
      +                "type": "object"
      +              },
      +              "polarity": {
      +                "description": "Whether decisive text negates, with the negating text verbatim.",
      +                "type": "object"
      +              },
      +              "preconditions": {
      +                "description": "Recorded reopen and reuse conditions and assumptions, verbatim.",
      +                "type": "object"
      +              },
      +              "provenance": {
      +                "description": "Source class and capture reference.",
      +                "type": "object"
      +              },
      +              "recordId": {
      +                "description": "The record the line was derived from.",
      +                "type": "string"
      +              },
      +              "requiresExpansion": {
      +                "description": "True when a negation is not settled by a verified claim stating it.",
      +                "type": "boolean"
      +              },
      +              "scope": {
      +                "description": "Project, memory scope, environment and applicability window.",
      +                "type": "object"
      +              },
      +              "status": {
      +                "description": "Lifecycle, supersession and verification state.",
      +                "type": "object"
      +              }
      +            },
      +            "required": [
      +              "recordId",
      +              "kind",
      +              "line",
      +              "claimClass",
      +              "polarity",
      +              "scope",
      +              "preconditions",
      +              "status",
      +              "provenance",
      +              "boundRevision",
      +              "derived",
      +              "derivationVersion",
      +              "decisiveOmitted",
      +              "requiresExpansion",
      +              "expansion"
      +            ],
      +            "type": "object"
      +          },
      +          "ranks": {
      +            "anyOf": [
      +              {
      +                "description": "Position this item held in each signal list, counting from 1, or null where that signal did not rank it.",
      +                "properties": {
      +                  "graph": {
      +                    "anyOf": [
      +                      {
      +                        "type": "integer"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ],
      +                    "description": "Position in the graph-distance list; null when no focalId was supplied."
      +                  },
      +                  "lexical": {
      +                    "anyOf": [
      +                      {
      +                        "type": "integer"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ],
      +                    "description": "Position in the BM25-style lexical list."
      +                  },
      +                  "semantic": {
      +                    "anyOf": [
      +                      {
      +                        "type": "integer"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ],
      +                    "description": "Position in the vector list; null when no compatible query vector or provider existed."
      +                  },
      +                  "temporal": {
      +                    "anyOf": [
      +                      {
      +                        "type": "integer"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ],
      +                    "description": "Position in the recency list; null when neither asOf nor preferRecent was supplied."
      +                  }
      +                },
      +                "required": [
      +                  "lexical",
      +                  "semantic",
      +                  "graph",
      +                  "temporal"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Position in each signal list; null for a working-set record delivered by the fallback."
      +          },
      +          "record": {
      +            "description": "One stored entity: a decision, attempt, memory, fact, or alternative. Fields vary by kind, and an entity imported from an older schema may carry fewer of them.",
      +            "properties": {
      +              "actor": {
      +                "anyOf": [
      +                  {
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "Who performed the write."
      +              },
      +              "client": {
      +                "anyOf": [
      +                  {
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "Which client performed the write."
      +              },
      +              "createdAt": {
      +                "anyOf": [
      +                  {
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "ISO 8601 creation time."
      +              },
      +              "id": {
      +                "description": "Stable entity identifier.",
      +                "type": "string"
      +              },
      +              "kind": {
      +                "description": "Entity kind: decision, attempt, memory, fact, relation, review, or alternative.",
      +                "type": "string"
      +              },
      +              "project": {
      +                "anyOf": [
      +                  {
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "Project namespace; null for an unattributed record or one imported from before projects."
      +              },
      +              "schemaVersion": {
      +                "description": "Storage schema version this entity was written under. A value above the build’s own version is preserved rather than downgraded.",
      +                "type": "integer"
      +              },
      +              "sessionId": {
      +                "anyOf": [
      +                  {
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "Session identifier recorded with the write."
      +              },
      +              "sourceClass": {
      +                "anyOf": [
      +                  {
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "Claimed origin class recorded with the write. A claim, never proof."
      +              },
      +              "sourceRaw": {
      +                "anyOf": [
      +                  {
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "The original origin label when it differed from sourceClass. Audit only; never evidence."
      +              },
      +              "updatedAt": {
      +                "anyOf": [
      +                  {
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "ISO 8601 time of the last change."
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "score": {
      +            "anyOf": [
      +              {
      +                "type": "number"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Fused rank score; null for a working-set record delivered by the fallback."
      +          },
      +          "temporalEvidence": {
      +            "description": "What the stored times and supersession support: when it was recorded, when it held, whether it holds now.",
      +            "properties": {
      +              "currentState": {
      +                "anyOf": [
      +                  {
      +                    "description": "Whether it holds at the read instant, and on what basis.",
      +                    "properties": {
      +                      "basis": {
      +                        "anyOf": [
      +                          {
      +                            "enum": [
      +                              "explicit_supersession",
      +                              "validity_window",
      +                              "recording_order_only"
      +                            ],
      +                            "type": "string"
      +                          },
      +                          {
      +                            "type": "null"
      +                          }
      +                        ],
      +                        "description": "What decides it; null when nothing temporal does."
      +                      },
      +                      "evidence": {
      +                        "description": "The records that decide it, at most 10.",
      +                        "items": {
      +                          "type": "string"
      +                        },
      +                        "type": "array"
      +                      },
      +                      "evidenceOmitted": {
      +                        "description": "Deciding records not named.",
      +                        "minimum": 0,
      +                        "type": "integer"
      +                      },
      +                      "state": {
      +                        "description": "unresolved: only the recording order sets it apart from another version. undetermined: no event time places it at the read instant.",
      +                        "enum": [
      +                          "current",
      +                          "historical",
      +                          "not_yet_valid",
      +                          "unresolved",
      +                          "undetermined"
      +                        ],
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "state",
      +                      "basis",
      +                      "evidence",
      +                      "evidenceOmitted"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "null for an attempt, an event."
      +              },
      +              "eventTime": {
      +                "description": "When it held, if stored apart from the recording time.",
      +                "properties": {
      +                  "at": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ],
      +                    "description": "The event time, when known."
      +                  },
      +                  "state": {
      +                    "description": "unknown: no event time stored apart from the recording time.",
      +                    "enum": [
      +                      "known",
      +                      "unknown"
      +                    ],
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "at",
      +                  "state"
      +                ],
      +                "type": "object"
      +              },
      +              "recordedAt": {
      +                "anyOf": [
      +                  {
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "When it was recorded."
      +              }
      +            },
      +            "required": [
      +              "recordedAt",
      +              "eventTime",
      +              "currentState"
      +            ],
      +            "type": "object"
      +          },
      +          "tier": {
      +            "description": "T1 carries line, T2 carries record.",
      +            "enum": [
      +              "T1",
      +              "T2"
      +            ],
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "tier",
      +          "score",
      +          "ranks",
      +          "temporalEvidence"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "limitSource": {
      +      "description": "Whose choice bounded the items.",
      +      "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"
      +    },
      +    "lines": {
      +      "description": "One entry per delivered line, in item order.",
      +      "items": {
      +        "description": "A delivered line.",
      +        "properties": {
      +          "claimClass": {
      +            "description": "The claim class of that line.",
      +            "type": "string"
      +          },
      +          "recordId": {
      +            "description": "The record the line was derived from.",
      +            "type": "string"
      +          },
      +          "requiresExpansion": {
      +            "description": "Whether that line requires expansion.",
      +            "type": "boolean"
      +          }
      +        },
      +        "required": [
      +          "recordId",
      +          "claimClass",
      +          "requiresExpansion"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "omitted": {
      +      "description": "total minus returned.",
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "processing": {
      +      "description": "Scoped capture processing; extraction is inactive in this build.",
      +      "properties": {
      +        "blocked": {
      +          "description": "Items whose extraction is blocked.",
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "extractionAvailable": {
      +          "description": "Whether extraction runs.",
      +          "type": "boolean"
      +        },
      +        "failed": {
      +          "description": "Items whose extraction 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": "When the oldest pending item arrived."
      +        },
      +        "pending": {
      +          "description": "Items awaiting extraction.",
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "processing": {
      +          "description": "Items an extraction has claimed; present when the store holds capture state.",
      +          "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",
      +        "failed",
      +        "blocked",
      +        "oldestPendingAt",
      +        "extractionAvailable"
      +      ],
      +      "type": "object"
      +    },
      +    "relevance": {
      +      "description": "Whether any signal established relevance, and which signals ran.",
      +      "properties": {
      +        "established": {
      +          "description": "True when the lexical, semantic or graph signal ranked a record. Recency orders records; it never selects one.",
      +          "type": "boolean"
      +        },
      +        "signals": {
      +          "description": "Availability of each signal.",
      +          "properties": {
      +            "graph": {
      +              "description": "Distance from focalId.",
      +              "properties": {
      +                "available": {
      +                  "description": "Whether the signal ran.",
      +                  "type": "boolean"
      +                },
      +                "matched": {
      +                  "description": "Records it ranked.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "available",
      +                "matched"
      +              ],
      +              "type": "object"
      +            },
      +            "lexical": {
      +              "description": "Content-word matching: available when the query has a content word; matched counts records sharing one. Item ranks use every term.",
      +              "properties": {
      +                "available": {
      +                  "description": "Whether the signal ran.",
      +                  "type": "boolean"
      +                },
      +                "matched": {
      +                  "description": "Records it ranked.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "available",
      +                "matched"
      +              ],
      +              "type": "object"
      +            },
      +            "semantic": {
      +              "description": "Meaning; never available on this read.",
      +              "properties": {
      +                "available": {
      +                  "description": "Whether the signal ran.",
      +                  "type": "boolean"
      +                },
      +                "matched": {
      +                  "description": "Records it ranked.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "available",
      +                "matched"
      +              ],
      +              "type": "object"
      +            },
      +            "temporal": {
      +              "description": "Recency from asOf.",
      +              "properties": {
      +                "available": {
      +                  "description": "Whether the signal ran.",
      +                  "type": "boolean"
      +                },
      +                "matched": {
      +                  "description": "Records it ranked.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "available",
      +                "matched"
      +              ],
      +              "type": "object"
      +            }
      +          },
      +          "required": [
      +            "lexical",
      +            "semantic",
      +            "graph",
      +            "temporal"
      +          ],
      +          "type": "object"
      +        }
      +      },
      +      "required": [
      +        "established",
      +        "signals"
      +      ],
      +      "type": "object"
      +    },
      +    "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"
      +    },
      +    "temporal": {
      +      "description": "The as-of instant, and how many items have no stored event time or rest on the recording order only.",
      +      "properties": {
      +        "asOf": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "The asOf given, or null."
      +        },
      +        "eventTimeUnknown": {
      +          "description": "Items whose event time is unknown.",
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "recordingOrderOnly": {
      +          "description": "Items whose state rests on the recording order only.",
      +          "minimum": 0,
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "asOf",
      +        "eventTimeUnknown",
      +        "recordingOrderOnly"
      +      ],
      +      "type": "object"
      +    },
      +    "total": {
      +      "description": "Candidates in total.",
      +      "minimum": 0,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "scope",
      +    "relevance",
      +    "fallback",
      +    "byKind",
      +    "total",
      +    "returned",
      +    "omitted",
      +    "hasMore",
      +    "complete",
      +    "limitSource",
      +    "limitation",
      +    "temporal",
      +    "lines",
      +    "processing",
      +    "expansion",
      +    "items"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / reusableAttempts
      Added value: +{
      +  "description": "Attempts whose reusableWhen conditions all hold now. The recorded failure still stands, and this is not authorisation to retry.",
      +  "items": {
      +    "description": "An attempt whose reusableWhen conditions ALL hold now, with none unresolved. The recorded failure still stands, and this is not authorisation to retry.",
      +    "properties": {
      +      "attemptId": {
      +        "description": "The attempt.",
      +        "type": "string"
      +      },
      +      "resultClass": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Declared or observed result class, or null when the wording heuristic classified it."
      +      },
      +      "satisfiedConditions": {
      +        "description": "Every condition that had to hold, and the evidence for each.",
      +        "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"
      +      },
      +      "solution": {
      +        "description": "What was tried.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "attemptId",
      +      "satisfiedConditions"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / staleAssumptions / items / properties / project / description
      Previous value: -"Project namespace; records imported from a schema that predates projects may carry null."New value: +"Project namespace; null for an unattributed record or one imported from before projects."
    • removedOutput schema / properties / suggestedQuestions
      Removed value: -{
      -  "description": "Questions for the low-confidence decisions in this project.",
      -  "items": {
      -    "type": "string"
      -  },
      -  "type": "array"
      -}
    • changedOutput schema / required
      Previous value: -[
      -  "project",
      -  "activeDecisions",
      -  "staleAssumptions",
      -  "failedAttemptsToAvoid",
      -  "openReviews",
      -  "suggestedQuestions",
      -  "completeness"
      -]New value: +[
      +  "project",
      +  "activeDecisions",
      +  "staleAssumptions",
      +  "failedAttempts",
      +  "firedConditions",
      +  "belowConfidenceThreshold",
      +  "completeness",
      +  "notice"
      +]
  5. Changed5 schema fields changedv0.40.1
    • addedInput schema / properties / changedFacts / description
      Added value: +"Fact keys that just changed. Only string-form reopenWhen rules match this list; it is an ephemeral signal, not durable state."
    • addedInput schema / properties / facts / description
      Added value: +"Fact key/value overrides evaluated instead of the stored facts of the same key. Stored facts are used for every key not listed here, so reopen rules still work after a restart."
    • addedInput schema / properties / limit / description
      Added value: +"Maximum items per collection, 1-1000, applied to each collection independently. Omit for the default of 50."
    • addedInput schema / properties / project / description
      Added value: +"Project namespace. Defaults to \"default\"; an empty string is rejected."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "description": "The working set for one project.",
      +  "properties": {
      +    "activeDecisions": {
      +      "description": "Decisions in a current, actionable state: proposed, planned, in_progress, executed, validated, or reconsidered.",
      +      "items": {
      +        "description": "A stored decision, including its alternatives and auditable confidence basis.",
      +        "properties": {
      +          "actor": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Who performed the write."
      +          },
      +          "alternatives": {
      +            "description": "Rejected alternatives, each with id, label, reasonRejected, status, and the reopenWhen rules that make it reconsiderable.",
      +            "type": "array"
      +          },
      +          "assumptions": {
      +            "description": "Assumptions the decision rests on. Searchable content.",
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "chosen": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The option that was chosen."
      +          },
      +          "client": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Which client performed the write."
      +          },
      +          "confidence": {
      +            "description": "Auditable confidence: initial, current (0-1), policy, a history entry per move, and a basis summarising the contributions it was folded from. Legacy records may lack basis.",
      +            "type": "object"
      +          },
      +          "createdAt": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "ISO 8601 creation time."
      +          },
      +          "evidence": {
      +            "description": "Normalised evidence entries: source, type, sourceClass, confidence, observedAt, detail.",
      +            "type": "array"
      +          },
      +          "failedAttempts": {
      +            "description": "Attempt identifiers or notes attached to this decision.",
      +            "type": "array"
      +          },
      +          "goal": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "What the decision was trying to achieve."
      +          },
      +          "id": {
      +            "description": "Stable entity identifier.",
      +            "type": "string"
      +          },
      +          "kind": {
      +            "description": "Entity kind: decision, attempt, memory, fact, relation, review, or alternative.",
      +            "type": "string"
      +          },
      +          "migration": {
      +            "description": "Present only on migrated records; records the legacy value a field was mapped from.",
      +            "type": "object"
      +          },
      +          "outcome": {
      +            "anyOf": [
      +              {
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The recorded outcome, or null until one is recorded."
      +          },
      +          "project": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Project namespace; records imported from a schema that predates projects may carry null."
      +          },
      +          "reviewAfter": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "ISO 8601 instant after which shadowgraph_maintain marks this decision stale."
      +          },
      +          "schemaVersion": {
      +            "description": "Storage schema version this entity was written under. A value above the build’s own version is preserved rather than downgraded.",
      +            "type": "integer"
      +          },
      +          "sessionId": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Session identifier recorded with the write."
      +          },
      +          "sourceClass": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Claimed origin class recorded with the write. A claim, never proof."
      +          },
      +          "sourceRaw": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The original origin label when it differed from sourceClass. Audit only; never evidence."
      +          },
      +          "status": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Lifecycle state. Legacy records may carry a value this build does not recognise; shadowgraph_validate reports those."
      +          },
      +          "supersededBy": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Identifier of the decision that replaced this one."
      +          },
      +          "supersedes": {
      +            "description": "Identifiers of decisions this one replaced.",
      +            "type": "array"
      +          },
      +          "title": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Short name of the decision."
      +          },
      +          "updatedAt": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "ISO 8601 time of the last change."
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "kind"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "completeness": {
      +      "description": "Per-collection completeness. context returns five named collections, so one page object cannot describe it.",
      +      "properties": {
      +        "collections": {
      +          "description": "One entry per returned collection.",
      +          "properties": {
      +            "activeDecisions": {
      +              "description": "Counts for activeDecisions.",
      +              "properties": {
      +                "hasMore": {
      +                  "description": "True when this collection was truncated.",
      +                  "type": "boolean"
      +                },
      +                "omitted": {
      +                  "description": "total minus returned for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "returned": {
      +                  "description": "Items returned for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "total": {
      +                  "description": "Items that matched for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "returned",
      +                "total",
      +                "hasMore",
      +                "omitted"
      +              ],
      +              "type": "object"
      +            },
      +            "failedAttemptsToAvoid": {
      +              "description": "Counts for failedAttemptsToAvoid.",
      +              "properties": {
      +                "hasMore": {
      +                  "description": "True when this collection was truncated.",
      +                  "type": "boolean"
      +                },
      +                "omitted": {
      +                  "description": "total minus returned for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "returned": {
      +                  "description": "Items returned for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "total": {
      +                  "description": "Items that matched for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "returned",
      +                "total",
      +                "hasMore",
      +                "omitted"
      +              ],
      +              "type": "object"
      +            },
      +            "openReviews": {
      +              "description": "Counts for openReviews.",
      +              "properties": {
      +                "hasMore": {
      +                  "description": "True when this collection was truncated.",
      +                  "type": "boolean"
      +                },
      +                "omitted": {
      +                  "description": "total minus returned for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "returned": {
      +                  "description": "Items returned for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "total": {
      +                  "description": "Items that matched for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "returned",
      +                "total",
      +                "hasMore",
      +                "omitted"
      +              ],
      +              "type": "object"
      +            },
      +            "staleAssumptions": {
      +              "description": "Counts for staleAssumptions.",
      +              "properties": {
      +                "hasMore": {
      +                  "description": "True when this collection was truncated.",
      +                  "type": "boolean"
      +                },
      +                "omitted": {
      +                  "description": "total minus returned for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "returned": {
      +                  "description": "Items returned for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "total": {
      +                  "description": "Items that matched for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "returned",
      +                "total",
      +                "hasMore",
      +                "omitted"
      +              ],
      +              "type": "object"
      +            },
      +            "suggestedQuestions": {
      +              "description": "Counts for suggestedQuestions.",
      +              "properties": {
      +                "hasMore": {
      +                  "description": "True when this collection was truncated.",
      +                  "type": "boolean"
      +                },
      +                "omitted": {
      +                  "description": "total minus returned for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "returned": {
      +                  "description": "Items returned for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "total": {
      +                  "description": "Items that matched for this collection.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "returned",
      +                "total",
      +                "hasMore",
      +                "omitted"
      +              ],
      +              "type": "object"
      +            }
      +          },
      +          "required": [
      +            "activeDecisions",
      +            "staleAssumptions",
      +            "failedAttemptsToAvoid",
      +            "openReviews",
      +            "suggestedQuestions"
      +          ],
      +          "type": "object"
      +        },
      +        "complete": {
      +          "description": "True only when no collection was truncated.",
      +          "type": "boolean"
      +        },
      +        "limitSource": {
      +          "description": "Whose choice bounded the collections.",
      +          "enum": [
      +            "caller",
      +            "default"
      +          ],
      +          "type": "string"
      +        },
      +        "losslessItems": {
      +          "description": "Always true: items are full records, never summaries.",
      +          "type": "boolean"
      +        },
      +        "scope": {
      +          "description": "The project this result covers.",
      +          "type": "object"
      +        }
      +      },
      +      "required": [
      +        "scope",
      +        "complete",
      +        "limitSource",
      +        "losslessItems",
      +        "collections"
      +      ],
      +      "type": "object"
      +    },
      +    "failedAttemptsToAvoid": {
      +      "description": "Attempts whose result mentions failure, regression, or error.",
      +      "items": {
      +        "description": "A stored attempt and its result.",
      +        "properties": {
      +          "actor": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Who performed the write."
      +          },
      +          "client": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Which client performed the write."
      +          },
      +          "createdAt": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "ISO 8601 creation time."
      +          },
      +          "environment": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Where it was tried."
      +          },
      +          "id": {
      +            "description": "Stable entity identifier.",
      +            "type": "string"
      +          },
      +          "kind": {
      +            "description": "Entity kind: decision, attempt, memory, fact, relation, review, or alternative.",
      +            "type": "string"
      +          },
      +          "project": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Project namespace; records imported from a schema that predates projects may carry null."
      +          },
      +          "reason": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Why it turned out that way."
      +          },
      +          "relatedTo": {
      +            "description": "Identifiers of related entities.",
      +            "type": "array"
      +          },
      +          "result": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "What happened."
      +          },
      +          "reusableWhen": {
      +            "description": "Conditions under which the attempt is worth repeating.",
      +            "type": "array"
      +          },
      +          "schemaVersion": {
      +            "description": "Storage schema version this entity was written under. A value above the build’s own version is preserved rather than downgraded.",
      +            "type": "integer"
      +          },
      +          "sessionId": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Session identifier recorded with the write."
      +          },
      +          "solution": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "What was tried."
      +          },
      +          "sourceClass": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Claimed origin class recorded with the write. A claim, never proof."
      +          },
      +          "sourceRaw": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The original origin label when it differed from sourceClass. Audit only; never evidence."
      +          },
      +          "updatedAt": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "ISO 8601 time of the last change."
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "kind"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "openReviews": {
      +      "description": "Decisions currently due for reconsideration.",
      +      "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"
      +          },
      +          "title": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Decision title, when the stored decision has one."
      +          }
      +        },
      +        "required": [
      +          "decisionId",
      +          "reason",
      +          "alternativesToReconsider"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "project": {
      +      "description": "The project this context describes.",
      +      "type": "string"
      +    },
      +    "staleAssumptions": {
      +      "description": "Facts that are no longer active, such as superseded or expired ones, which earlier decisions may still rest on.",
      +      "items": {
      +        "description": "A stored fact with its provenance claim and validity window.",
      +        "properties": {
      +          "actor": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Who performed the write."
      +          },
      +          "client": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Which client performed the write."
      +          },
      +          "confidence": {
      +            "anyOf": [
      +              {
      +                "type": "number"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Caller-declared confidence in the observation, 0-1."
      +          },
      +          "createdAt": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "ISO 8601 creation time."
      +          },
      +          "expiresAt": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Caller-declared expiry instant, or null."
      +          },
      +          "id": {
      +            "description": "Stable entity identifier.",
      +            "type": "string"
      +          },
      +          "key": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Fact name, unique per project among active facts."
      +          },
      +          "kind": {
      +            "description": "Entity kind: decision, attempt, memory, fact, relation, review, or alternative.",
      +            "type": "string"
      +          },
      +          "observedAt": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "ISO 8601 time the fact was observed."
      +          },
      +          "project": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Project namespace; records imported from a schema that predates projects may carry null."
      +          },
      +          "schemaVersion": {
      +            "description": "Storage schema version this entity was written under. A value above the build’s own version is preserved rather than downgraded.",
      +            "type": "integer"
      +          },
      +          "sessionId": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Session identifier recorded with the write."
      +          },
      +          "source": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Legacy alias of sourceClass, retained for compatibility."
      +          },
      +          "sourceClass": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Claimed origin class recorded with the write. A claim, never proof."
      +          },
      +          "sourceRaw": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The original origin label when it differed from sourceClass. Audit only; never evidence."
      +          },
      +          "status": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "active, superseded, or expired."
      +          },
      +          "temporal": {
      +            "description": "Bi-temporal window: validFrom, validTo, recordedAt, invalidatedAt.",
      +            "type": "object"
      +          },
      +          "updatedAt": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "ISO 8601 time of the last change."
      +          },
      +          "validityPolicy": {
      +            "description": "Declared expiry inputs and the effective expiration boundary derived from them.",
      +            "type": "object"
      +          },
      +          "value": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "number"
      +              },
      +              {
      +                "type": "boolean"
      +              },
      +              {
      +                "type": "null"
      +              },
      +              {
      +                "type": "array"
      +              },
      +              {
      +                "type": "object"
      +              }
      +            ],
      +            "description": "The observed value, any lossless JSON value."
      +          },
      +          "verification": {
      +            "description": "Present only on a signed verification: the attestation this build checked.",
      +            "type": "object"
      +          },
      +          "verificationStatus": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "unverified, contradicted, expired, or verified. Only the separately configured signed-evidence verifier can produce verified."
      +          }
      +        },
      +        "required": [
      +          "key"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "suggestedQuestions": {
      +      "description": "Questions for the low-confidence decisions in this project.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "project",
      +    "activeDecisions",
      +    "staleAssumptions",
      +    "failedAttemptsToAvoid",
      +    "openReviews",
      +    "suggestedQuestions",
      +    "completeness"
      +  ],
      +  "type": "object"
      +}
  6. First observedv0.40.0

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description resolves the apparent read/write ambiguity in the annotations: reads never write, but presenting an access key 'commits a revision and bounded operational audit', which is why readOnlyHint is false. It also discloses that unmatched-query diagnostics persist in memory until a later save, and gives an audit volume bound per grant/surface/outcome/day. A clearer statement of who may supply an access key would raise this further.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Six short sentences, front-loaded with purpose and then the sibling differentiation, with no redundant restatement of the name. The telegraphic style ('No decision or signal writes.', 'a key saves a revision and audit') is efficient but occasionally compressed to the point of ambiguity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter tool with an output schema and no required arguments, the description covers purpose, alternatives, write conditions, and ephemeral state handling. Nothing an agent needs in order to decide whether calling this is safe is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and every parameter already carries a substantive description (facts overrides vs changedFacts, compact presentation fallback, focalId scoping, grantId/accessId aliasing and conflict refusal). The prose adds only the general no-write framing and no parameter-level meaning beyond the schema, so the baseline applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The definition opens with a specific verb and resource ('Read a planning working set') and enumerates the four collections returned (decisions, stale facts, failed attempts, fired conditions). It then separates itself from four named siblings by their distinguishing behavior (search matches every term, retrieve adds neighbours, recall ranks memory, review_context persists signals).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly routes the agent away from this tool with 'No decision or signal writes', and contrasts it against the sibling read tools and the persisting tool. What is missing is an affirmative statement of the situation that selects this tool over shadowgraph_search or shadowgraph_recall, so the agent must infer the condition from the contrasts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.