addedInput schema / properties / accessId
Added value: +{
+ "description": "Grant ID, rechecked at use.",
+ "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"
+}
addedInput schema / properties / project
Added value: +{
+ "description": "Project or confirmed workspace binding; otherwise origin-only. No identity returns an empty scoped view.",
+ "type": "string"
+}
addedOutput schema / properties / diagnostics
Added value: +{
+ "description": "Conditions that could not be settled, or that rest on facts which disagree.",
+ "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 / due / items / properties / reviewSignalId
Added value: +{
+ "description": "Pass this to shadowgraph_ack_review to acknowledge this review.",
+ "type": "string"
+}
addedOutput schema / properties / due / items / properties / reviewSignalStatus
Added value: +{
+ "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"
+}
addedOutput schema / properties / due / items / properties / violatedConditions
Added value: +{
+ "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"
+}
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 / reviewSignals / items / properties / coverage
Added value: +{
+ "description": "Exact conditions covered, and part of this identity.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+}
changedOutput schema / properties / reviewSignals / items / properties / reason / description
Previous value: -"Why the signal was raised. Together with decisionId this is the dedupe identity, so the same cause never raises a second signal."New value: +"Why it was raised. Identity is this plus decisionId and coverage."
changedOutput schema / properties / reviewSignals / items / required
Previous value: -[
- "id",
- "kind",
- "decisionId",
- "reason",
- "alternativesToReconsider",
- "status",
- "createdAt"
-]New value: +[
+ "id",
+ "kind",
+ "decisionId",
+ "status",
+ "createdAt"
+]