{
  "repo": "core",
  "version": "7.50.0",
  "from": "fbce2704eecb13e80618cbb09416cc1e26ae297c",
  "to": "548b94a2af65198d6e01c090944cfee23b4e144f",
  "added": [
    {
      "name": "BoundFileObject",
      "kind": "interface",
      "tier": "internal",
      "at": [
        "src/engine/harness/types.ts:403",
        "src/index.ts:517",
        "src/internal/harness-types.ts:35"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "CONSOLIDATION_WRITE_REFUSED_CODE",
      "kind": "variable",
      "tier": "advanced",
      "at": [
        "src/core/memory-engine/consolidation-driver.ts:250",
        "src/core/memory-engine/consolidation.ts:823",
        "src/core/memory-engine/index.ts:293",
        "src/index.ts:2207"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "ConsolidationWriteGate",
      "kind": "type",
      "tier": "advanced",
      "at": [
        "src/core/memory-engine/consolidation.ts:833",
        "src/core/memory-engine/index.ts:230",
        "src/index.ts:2137"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "ConsolidationWriteJudge",
      "kind": "type",
      "tier": "advanced",
      "at": [
        "src/core/memory-engine/consolidation-driver.ts:248",
        "src/core/memory-engine/index.ts:300",
        "src/index.ts:2215"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "ConsolidationWriteTarget",
      "kind": "interface",
      "tier": "advanced",
      "at": [
        "src/core/memory-engine/consolidation-driver.ts:242",
        "src/core/memory-engine/index.ts:301",
        "src/index.ts:2216"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "HumanInputAttachment",
      "kind": "interface",
      "tier": "advanced",
      "at": [
        "src/core/task-event.ts:1178",
        "src/core/types.ts:42",
        "src/index.ts:1232"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "USER_ATTACHMENTS_MAX",
      "kind": "variable",
      "tier": "advanced",
      "at": [
        "src/core/user-attachment.ts:39",
        "src/index.ts:1227"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "USER_ATTACHMENT_KINDS",
      "kind": "variable",
      "tier": "advanced",
      "at": [
        "src/core/user-attachment.ts:44",
        "src/index.ts:1224"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "USER_ATTACHMENT_LABEL_MAX",
      "kind": "variable",
      "tier": "advanced",
      "at": [
        "src/core/user-attachment.ts:41",
        "src/index.ts:1228"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "USER_ATTACHMENT_OUTCOMES",
      "kind": "variable",
      "tier": "advanced",
      "at": [
        "src/core/user-attachment.ts:48",
        "src/index.ts:1226"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "USER_ATTACHMENT_SEAT",
      "kind": "variable",
      "tier": "advanced",
      "at": [
        "src/core/user-attachment.ts:63",
        "src/index.ts:1223"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "USER_ATTACHMENT_SUPPLIES",
      "kind": "variable",
      "tier": "advanced",
      "at": [
        "src/core/user-attachment.ts:46",
        "src/index.ts:1225"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "UserAttachment",
      "kind": "type",
      "tier": "advanced",
      "at": [
        "src/core/task-spec.ts:60",
        "src/core/types.ts:23",
        "src/index.ts:3416"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "UserAttachmentDeclaration",
      "kind": "interface",
      "tier": "advanced",
      "at": [
        "src/core/user-attachment.ts:184",
        "src/index.ts:1230"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "UserAttachmentKind",
      "kind": "type",
      "tier": "advanced",
      "at": [
        "src/engine/llm/types.ts:481",
        "src/index.ts:3389",
        "src/internal/llm.ts:10"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "UserAttachmentObservation",
      "kind": "interface",
      "tier": "advanced",
      "at": [
        "src/engine/llm/types.ts:488",
        "src/index.ts:3390",
        "src/internal/llm.ts:11"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "UserAttachmentOutcome",
      "kind": "type",
      "tier": "advanced",
      "at": [
        "src/engine/llm/types.ts:485",
        "src/index.ts:3391",
        "src/internal/llm.ts:12"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "UserAttachmentSupply",
      "kind": "type",
      "tier": "advanced",
      "at": [
        "src/engine/llm/types.ts:483",
        "src/index.ts:3392",
        "src/internal/llm.ts:13"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "UserMessageAttachment",
      "kind": "interface",
      "tier": "advanced",
      "at": [
        "src/engine/llm/types.ts:500",
        "src/index.ts:3388",
        "src/internal/llm.ts:14"
      ],
      "criteriaCovered": false,
      "breaking": false
    }
  ],
  "removed": [],
  "changed": [],
  "narrowed": [
    {
      "id": "F8",
      "source": "behaviorFlips.summary",
      "text": "(#1311 car A2, #1290) the user-attachment seat: `TaskSpec.userAttachments` reaches the model as one marked user message per attachment right after the human message, under the run's synthetic-Read judgment; the Read / notebook / PDF trailers and the MCP disclosure block open after a blank line (narrowing; a hook's feedback block appended to a tool result is not on this rule)."
    }
  ],
  "closedSetMembers": [
    {
      "set": "AskGuard",
      "at": [
        "src/core/tool-policy.ts:439"
      ],
      "newSet": true,
      "added": [
        "artifact_shared_read",
        "dangerous_delete",
        "transcript_write",
        "unverifiable_delete",
        "unverifiable_shell_text"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "CHECKPOINT_CONFIG_REFUSAL_CODES",
      "at": [
        "src/core/checkpoint-store.ts:2477"
      ],
      "newSet": false,
      "added": [
        "config.user_attachment_invalid"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "MODE_RELEASE_REASONS",
      "at": [
        "src/core/ask-origin.ts:786"
      ],
      "newSet": false,
      "added": [],
      "removed": [
        "rule_unreadable"
      ],
      "persistedBy": "none",
      "breaking": true,
      "criteriaCovered": false
    },
    {
      "set": "PermissionResult.ruleUnreadable",
      "at": [
        "src/core/tool-policy.ts:605"
      ],
      "newSet": false,
      "added": [
        "persisted_rows"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "ReadKind",
      "at": [
        "src/tools/fs/fs-read.ts:93"
      ],
      "newSet": false,
      "added": [
        "directory"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "SYNTHETIC_READ_UNANSWERABLE_CAUSES",
      "at": [
        "src/core/synthetic-read-verdict.ts:88"
      ],
      "newSet": false,
      "added": [
        "rewritten",
        "store_unreadable"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "TaskEvent.type",
      "at": [
        "src/core/task-event.ts:290",
        "src/core/task-event.ts:312",
        "src/core/task-event.ts:315",
        "src/core/task-event.ts:317",
        "src/core/task-event.ts:358",
        "src/core/task-event.ts:390",
        "src/core/task-event.ts:615",
        "src/core/task-event.ts:629",
        "src/core/task-event.ts:694",
        "src/core/task-event.ts:780",
        "src/core/task-event.ts:813",
        "src/core/task-event.ts:825",
        "src/core/task-event.ts:853",
        "src/core/task-event.ts:875",
        "src/core/task-event.ts:919",
        "src/core/task-event.ts:927",
        "src/core/task-event.ts:966",
        "src/core/task-event.ts:1013",
        "src/core/task-event.ts:1118",
        "src/core/task-event.ts:1139",
        "src/core/task-event.ts:1150",
        "src/core/task-event.ts:1162",
        "src/core/task-event.ts:1170"
      ],
      "newSet": false,
      "added": [
        "task_started"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "USER_ATTACHMENT_KINDS",
      "at": [
        "src/core/user-attachment.ts:44"
      ],
      "newSet": true,
      "added": [
        "client_image",
        "client_text",
        "directory",
        "image",
        "notebook",
        "pdf",
        "text"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "USER_ATTACHMENT_SUPPLIES",
      "at": [
        "src/core/user-attachment.ts:46"
      ],
      "newSet": true,
      "added": [
        "content_image",
        "content_text",
        "path"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "UserAttachmentKind",
      "at": [
        "src/engine/llm/types.ts:481"
      ],
      "newSet": true,
      "added": [
        "client_image",
        "client_text",
        "directory",
        "image",
        "notebook",
        "pdf",
        "text"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "UserAttachmentOutcome",
      "at": [
        "src/engine/llm/types.ts:485"
      ],
      "newSet": true,
      "added": [
        "attached",
        "not_attached",
        "partial",
        "unchanged"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "UserAttachmentSupply",
      "at": [
        "src/engine/llm/types.ts:483"
      ],
      "newSet": true,
      "added": [
        "content_image",
        "content_text",
        "path"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    }
  ],
  "closedSetsUnreadable": [],
  "typeKeys": [
    {
      "type": "AskClassFacts",
      "at": [
        "src/core/ask-origin.ts:801"
      ],
      "added": [
        "ruleStoreUnreadable"
      ],
      "addedDetail": [
        {
          "key": "ruleStoreUnreadable",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "AskOriginFacts",
      "at": [
        "src/core/ask-origin.ts:103"
      ],
      "via": "AskClassFacts.AskOriginFacts",
      "added": [
        "ruleStoreUnreadable"
      ],
      "addedDetail": [
        {
          "key": "ruleStoreUnreadable",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "ConsolidationDriverEngine",
      "at": [
        "src/core/memory-engine/consolidation-driver.ts:231"
      ],
      "added": [
        "consolidationWriteHome"
      ],
      "addedDetail": [
        {
          "key": "consolidationWriteHome",
          "optional": false
        }
      ],
      "addedRequired": [
        "consolidationWriteHome"
      ],
      "removed": [],
      "breaking": true,
      "criteriaCovered": false
    },
    {
      "type": "ConsolidationPlanFile",
      "at": [
        "src/core/memory-engine/consolidation.ts:565"
      ],
      "via": "ConsolidationPlanFoldEvidence.ConsolidationPlanFile",
      "added": [
        "applier"
      ],
      "addedDetail": [
        {
          "key": "applier",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "DriveConsolidationOptions",
      "at": [
        "src/core/memory-engine/distiller.ts:1337"
      ],
      "via": "driveConsolidationToFixpoint.DriveConsolidationOptions",
      "added": [
        "writeGate"
      ],
      "addedDetail": [
        {
          "key": "writeGate",
          "optional": false
        }
      ],
      "addedRequired": [
        "writeGate"
      ],
      "removed": [],
      "breaking": true,
      "criteriaCovered": false
    },
    {
      "type": "EngineAttestation",
      "at": [
        "src/core/tool-policy.ts:260"
      ],
      "added": [
        "pathDenial"
      ],
      "addedDetail": [
        {
          "key": "pathDenial",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "ExecutionEnv",
      "at": [
        "src/engine/harness/types.ts:625"
      ],
      "added": [
        "openBound"
      ],
      "addedDetail": [
        {
          "key": "openBound",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "FileMemoryEngineBackend",
      "at": [
        "src/core/memory-engine/file-backend.ts:1082"
      ],
      "added": [
        "admitsLandings"
      ],
      "addedDetail": [
        {
          "key": "admitsLandings",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "FileSystem",
      "at": [
        "src/engine/harness/types.ts:474"
      ],
      "via": "ExecutionEnv.FileSystem",
      "added": [
        "openBound"
      ],
      "addedDetail": [
        {
          "key": "openBound",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "LspToolOptions",
      "at": [
        "src/core/lsp.ts:441"
      ],
      "added": [
        "readFace"
      ],
      "addedDetail": [
        {
          "key": "readFace",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "MemoryBackend",
      "at": [
        "src/core/memory-engine/types.ts:277"
      ],
      "added": [
        "admitsLandings"
      ],
      "addedDetail": [
        {
          "key": "admitsLandings",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "MemoryEngine",
      "at": [
        "src/core/memory-engine/engine.ts:1352"
      ],
      "added": [
        "consolidationWriteHome"
      ],
      "addedDetail": [
        {
          "key": "consolidationWriteHome",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "NodeExecutionEnv",
      "at": [
        "src/engine/execution-env/node-execution-env.ts:605"
      ],
      "added": [
        "listOpenDirectory",
        "openBound"
      ],
      "addedDetail": [
        {
          "key": "listOpenDirectory",
          "optional": true
        },
        {
          "key": "openBound",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "ObservedFilesystem",
      "at": [
        "src/tools/fs/shell-read-environment.ts:43"
      ],
      "via": "ShellReadBoundary.writeTargetJudge",
      "added": [
        "openBound"
      ],
      "addedDetail": [
        {
          "key": "openBound",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "PermissionResult",
      "at": [
        "src/core/tool-policy.ts:474"
      ],
      "added": [
        "ask.guards"
      ],
      "addedDetail": [
        {
          "key": "ask.guards",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [
        "ask.guard"
      ],
      "breaking": true,
      "criteriaCovered": false
    },
    {
      "type": "PersistedRuleHit",
      "at": [
        "src/core/hooks.ts:1452"
      ],
      "added": [
        "denial"
      ],
      "addedDetail": [
        {
          "key": "denial",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "PersistedRuleVerdict",
      "at": [
        "src/core/permission-rule-model.ts:2469"
      ],
      "added": [
        "denial"
      ],
      "addedDetail": [
        {
          "key": "denial",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "PreToolUseResult",
      "at": [
        "src/core/hooks.ts:1198"
      ],
      "added": [
        "ask.guards"
      ],
      "addedDetail": [
        {
          "key": "ask.guards",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [
        "ask.guard"
      ],
      "breaking": true,
      "criteriaCovered": false
    },
    {
      "type": "ReadDenyMatcher",
      "at": [
        "src/tools/fs/read-deny.ts:337"
      ],
      "added": [
        "forCall"
      ],
      "addedDetail": [
        {
          "key": "forCall",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "RemoteExecutionEnv",
      "at": [
        "src/core/remote-env.ts:313"
      ],
      "added": [
        "openBound"
      ],
      "addedDetail": [
        {
          "key": "openBound",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "RunMemoryConsolidationOptions",
      "at": [
        "src/core/memory-engine/consolidation-driver.ts:252"
      ],
      "added": [
        "writeJudge"
      ],
      "addedDetail": [
        {
          "key": "writeJudge",
          "optional": false
        }
      ],
      "addedRequired": [
        "writeJudge"
      ],
      "removed": [],
      "breaking": true,
      "criteriaCovered": true
    },
    {
      "type": "ShellReadBoundary",
      "at": [
        "src/tools/fs/shell-read-judge.ts:165"
      ],
      "added": [
        "unreadPartitions"
      ],
      "addedDetail": [
        {
          "key": "unreadPartitions",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "ShellReadVerdict",
      "at": [
        "src/tools/fs/shell-read-check.ts:80"
      ],
      "added": [
        "environmentSilent",
        "rowsUnread"
      ],
      "addedDetail": [
        {
          "key": "environmentSilent",
          "optional": true
        },
        {
          "key": "rowsUnread",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "TaskEvent",
      "at": [
        "src/core/task-event.ts:289"
      ],
      "added": [
        "human_input.attachments",
        "task_started.agentType",
        "task_started.model",
        "task_started.name",
        "task_started.parentSessionId",
        "task_started.parentTaskId",
        "task_started.rootSessionId",
        "task_started.seq",
        "task_started.sessionId",
        "task_started.spawnName",
        "task_started.startedAt",
        "task_started.taskId",
        "task_started.taskType",
        "task_started.type",
        "task_started.workflowAgentLabel",
        "task_started.workflowRunId"
      ],
      "addedDetail": [
        {
          "key": "human_input.attachments",
          "optional": true
        },
        {
          "key": "task_started.agentType",
          "optional": true
        },
        {
          "key": "task_started.model",
          "optional": false
        },
        {
          "key": "task_started.name",
          "optional": true
        },
        {
          "key": "task_started.parentSessionId",
          "optional": true
        },
        {
          "key": "task_started.parentTaskId",
          "optional": true
        },
        {
          "key": "task_started.rootSessionId",
          "optional": true
        },
        {
          "key": "task_started.seq",
          "optional": true
        },
        {
          "key": "task_started.sessionId",
          "optional": false
        },
        {
          "key": "task_started.spawnName",
          "optional": true
        },
        {
          "key": "task_started.startedAt",
          "optional": false
        },
        {
          "key": "task_started.taskId",
          "optional": false
        },
        {
          "key": "task_started.taskType",
          "optional": true
        },
        {
          "key": "task_started.type",
          "optional": false
        },
        {
          "key": "task_started.workflowAgentLabel",
          "optional": true
        },
        {
          "key": "task_started.workflowRunId",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": true
    },
    {
      "type": "TaskSpec",
      "at": [
        "src/core/task-spec.ts:73"
      ],
      "added": [
        "userAttachments"
      ],
      "addedDetail": [
        {
          "key": "userAttachments",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": true
    },
    {
      "type": "UserMessage",
      "at": [
        "src/engine/llm/types.ts:384"
      ],
      "added": [
        "attachment"
      ],
      "addedDetail": [
        {
          "key": "attachment",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "UserPromptSubmitContext",
      "at": [
        "src/core/hooks.ts:1211"
      ],
      "added": [
        "userAttachments"
      ],
      "addedDetail": [
        {
          "key": "userAttachments",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "WriteDenyMatcher",
      "at": [
        "src/tools/fs/read-deny.ts:304"
      ],
      "added": [
        "forCall"
      ],
      "addedDetail": [
        {
          "key": "forCall",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    }
  ],
  "typeKeysUnreadableArms": [
    {
      "type": "TaskEvent",
      "at": "src/core/task-event.ts:289",
      "reasons": [
        "a union carrying 2 arm(s) whose keys this reader does not follow (a qualified reference (`TaskEventIdentity`); a qualified reference (`BrainStatus`)) — a key missing from this type at `to` is still reported REMOVED, carrying `uncertain` so the writer checks whether it moved there"
      ]
    }
  ],
  "typeKeysFlattenedCount": 223,
  "signatures": [
    {
      "name": "ConsolidationDriveEngine.commitConsolidationPlan",
      "at": [
        "src/core/memory-engine/distiller.ts:1228"
      ],
      "from": [
        "(cycleToken: string, proposal: ConsolidationProposal, opts: { requestId: string; }): Promise<ConsolidationDriveReceipt>"
      ],
      "to": [
        "(cycleToken: string, proposal: ConsolidationProposal, opts: { requestId: string; writeGate: ConsolidationWriteGate; }): Promise<ConsolidationDriveReceipt>"
      ],
      "changes": [
        {
          "aspect": "param",
          "detail": "param 3 `opts` type changed, direction not read: { requestId: string; [ -> writeGate: ConsolidationWriteGate; ]}",
          "breaking": true,
          "uncertain": true
        }
      ],
      "uncertain": "param 3 `opts` type changed, direction not read: { requestId: string; [ -> writeGate: ConsolidationWriteGate; ]} — the direction of a type change is not read syntactically, so it is reported breaking: check whether existing call sites still type-check before writing the BREAKING line",
      "breaking": true,
      "criteriaCovered": false
    },
    {
      "name": "ConsolidationDriveEngine.reconcileConsolidation",
      "at": [
        "src/core/memory-engine/distiller.ts:1229"
      ],
      "from": [
        "(scope: string): Promise<{ replayed?: { planId: string; state: string; } | null; } | undefined | void>"
      ],
      "to": [
        "(scope: string, opts: { readonly writeGate: ConsolidationWriteGate; }): Promise<{ replayed?: { planId: string; state: string; } | null; } | undefined | void>"
      ],
      "changes": [
        {
          "aspect": "param",
          "detail": "+required param `opts: { readonly writeGate: ConsolidationWriteGate; }`",
          "breaking": true
        }
      ],
      "breaking": true,
      "criteriaCovered": false
    },
    {
      "name": "FileMemoryEngineBackend.applyPatches",
      "at": [
        "src/core/memory-engine/file-backend.ts:3600"
      ],
      "from": [
        "(patches: readonly NotePatch[], opts?: { readonly anchoredRoot?: string; }): Promise<PatchReport>"
      ],
      "to": [
        "(patches: readonly NotePatch[], opts?: Parameters<MemoryBackend[\"applyPatches\"]>[1]): Promise<PatchReport>"
      ],
      "changes": [
        {
          "aspect": "param",
          "detail": "param 2 `opts` type changed, direction not read: [{ readonly anchoredRoot?: string; } -> Parameters<MemoryBackend[\"applyPatches\"]>[1]]",
          "breaking": true,
          "uncertain": true
        }
      ],
      "uncertain": "param 2 `opts` type changed, direction not read: [{ readonly anchoredRoot?: string; } -> Parameters<MemoryBackend[\"applyPatches\"]>[1]] — the direction of a type change is not read syntactically, so it is reported breaking: check whether existing call sites still type-check before writing the BREAKING line",
      "breaking": true,
      "criteriaCovered": false
    },
    {
      "name": "LspSession.request",
      "at": [
        "src/core/lsp.ts:264"
      ],
      "from": [
        "(op: LspOperation, params: LspRequestParams, signal?: AbortSignal): Promise<LspResult>"
      ],
      "to": [
        "(op: LspOperation, params: LspRequestParams, signal?: AbortSignal, gate?: LspReadGate): Promise<LspResult>"
      ],
      "changes": [
        {
          "aspect": "param",
          "detail": "+optional param `gate?: LspReadGate`",
          "breaking": false
        }
      ],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "name": "MemoryBackend.applyPatches",
      "at": [
        "src/core/memory-engine/types.ts:386"
      ],
      "from": [
        "(patches: readonly NotePatch[], opts?: { readonly anchoredRoot?: string; }): Promise<PatchReport>"
      ],
      "to": [
        "(patches: readonly NotePatch[], opts?: { readonly anchoredRoot?: string; readonly admit?: (landings: readonly { readonly id: string; readonly scope: string; readonly slug: string; }[]) => Promise<void>; readonly confirm?: () => void; }): Promise<PatchReport>"
      ],
      "changes": [
        {
          "aspect": "param",
          "detail": "param 2 `opts` type widened: … anchoredRoot?: string; [ -> readonly admit?: (landings: readonly { readonly id: string; readonly …]}",
          "breaking": false
        }
      ],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "name": "MemoryEngine.commitConsolidationPlan",
      "at": [
        "src/core/memory-engine/engine.ts:6153"
      ],
      "from": [
        "(cycleToken: string, proposal: ConsolidationProposal, opts: { requestId: string; }): Promise<ConsolidationCommitReceipt>"
      ],
      "to": [
        "(cycleToken: string, proposal: ConsolidationProposal, opts: { requestId: string; writeGate: ConsolidationWriteGate; }): Promise<ConsolidationCommitReceipt>"
      ],
      "changes": [
        {
          "aspect": "param",
          "detail": "param 3 `opts` type changed, direction not read: { requestId: string; [ -> writeGate: ConsolidationWriteGate; ]}",
          "breaking": true,
          "uncertain": true
        }
      ],
      "uncertain": "param 3 `opts` type changed, direction not read: { requestId: string; [ -> writeGate: ConsolidationWriteGate; ]} — the direction of a type change is not read syntactically, so it is reported breaking: check whether existing call sites still type-check before writing the BREAKING line",
      "breaking": true,
      "criteriaCovered": false
    },
    {
      "name": "MemoryEngine.reconcileConsolidation",
      "at": [
        "src/core/memory-engine/engine.ts:7031"
      ],
      "from": [
        "(scope: string): Promise<ConsolidationReconcileReport>"
      ],
      "to": [
        "(scope: string, opts: { readonly writeGate: ConsolidationWriteGate; }): Promise<ConsolidationReconcileReport>"
      ],
      "changes": [
        {
          "aspect": "param",
          "detail": "+required param `opts: { readonly writeGate: ConsolidationWriteGate; }`",
          "breaking": true
        }
      ],
      "breaking": true,
      "criteriaCovered": false
    },
    {
      "name": "MemoryEngine.resolveConsolidationPlan",
      "at": [
        "src/core/memory-engine/engine.ts:7173"
      ],
      "from": [
        "(planId: string, action: \"discard\" | \"retry\", opts: { requestId: string; }): Promise<ConsolidationResolveReceipt>"
      ],
      "to": [
        "(planId: string, action: \"discard\" | \"retry\", opts: { requestId: string; writeGate: ConsolidationWriteGate; }): Promise<ConsolidationResolveReceipt>"
      ],
      "changes": [
        {
          "aspect": "param",
          "detail": "param 3 `opts` type changed, direction not read: { requestId: string; [ -> writeGate: ConsolidationWriteGate; ]}",
          "breaking": true,
          "uncertain": true
        }
      ],
      "uncertain": "param 3 `opts` type changed, direction not read: { requestId: string; [ -> writeGate: ConsolidationWriteGate; ]} — the direction of a type change is not read syntactically, so it is reported breaking: check whether existing call sites still type-check before writing the BREAKING line",
      "breaking": true,
      "criteriaCovered": false
    },
    {
      "name": "TransportLspSession.notifyFileChanged",
      "at": [
        "src/core/lsp-session.ts:421"
      ],
      "from": [
        "(filePath: string, signal?: AbortSignal): Promise<void>"
      ],
      "to": [
        "(filePath: string, signal?: AbortSignal, gate?: LspReadGate): Promise<void>"
      ],
      "changes": [
        {
          "aspect": "param",
          "detail": "+optional param `gate?: LspReadGate`",
          "breaking": false
        }
      ],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "name": "TransportLspSession.request",
      "at": [
        "src/core/lsp-session.ts:125"
      ],
      "from": [
        "(op: LspOperation, params: LspRequestParams, signal?: AbortSignal): Promise<LspResult>"
      ],
      "to": [
        "(op: LspOperation, params: LspRequestParams, signal?: AbortSignal, gate?: LspReadGate): Promise<LspResult>"
      ],
      "changes": [
        {
          "aspect": "param",
          "detail": "+optional param `gate?: LspReadGate`",
          "breaking": false
        }
      ],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "name": "TransportLspSession.warmOpen",
      "at": [
        "src/core/lsp-session.ts:405"
      ],
      "from": [
        "(filePaths: string[], signal?: AbortSignal): Promise<{ opened: number; failed: number; }>"
      ],
      "to": [
        "(filePaths: string[], _signal?: AbortSignal): Promise<{ opened: number; failed: number; deferred: number; }>"
      ],
      "changes": [
        {
          "aspect": "returns",
          "detail": "return type gained members deferred",
          "breaking": false
        }
      ],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "name": "resolveMemoryConsolidationDriver",
      "at": [
        "src/core/runner/memory-consolidation-driver.ts:59"
      ],
      "from": [
        "(deps: MemoryConsolidationDriverDeps): RunMemoryConsolidationOptions"
      ],
      "to": [
        "(deps: MemoryConsolidationDriverDeps): Omit<RunMemoryConsolidationOptions, \"writeJudge\">"
      ],
      "changes": [
        {
          "aspect": "returns",
          "detail": "return type [RunMemoryConsolidationOptions -> Omit<RunMemoryConsolidationOptions, \"writeJudge\">]",
          "breaking": true
        }
      ],
      "breaking": true,
      "criteriaCovered": false
    }
  ],
  "declarationMoves": [
    {
      "name": "quoteDataLabel",
      "kind": null,
      "onSurface": false,
      "from": [
        "src/tools/fs/dir-entries.ts"
      ],
      "to": [
        "src/engine/llm/types.ts",
        "src/internal/llm.ts"
      ]
    },
    {
      "name": "rootAdmittingArtifactStore",
      "kind": null,
      "onSurface": false,
      "from": [
        "src/core/runner/read-root-grant.ts"
      ],
      "to": [
        "src/tools/fs/safety.ts"
      ]
    },
    {
      "name": "ruleRowsDroppedNotice",
      "kind": null,
      "onSurface": false,
      "from": [
        "src/core/runner/persisted-path-rows.ts"
      ],
      "to": [
        "src/core/runner/person-path-rows.ts"
      ]
    },
    {
      "name": "ruleStoreUnreadableNotice",
      "kind": null,
      "onSurface": false,
      "from": [
        "src/core/runner/persisted-path-rows.ts"
      ],
      "to": [
        "src/core/runner/person-path-rows.ts"
      ]
    }
  ],
  "mintMoves": [
    {
      "code": "permission.rule_row_dropped",
      "from": [
        "src/core/runner/persisted-path-rows.ts"
      ],
      "to": [
        "src/core/runner/person-path-rows.ts"
      ]
    },
    {
      "code": "permission.rule_store_unavailable",
      "from": [
        "src/core/runner/persisted-path-rows.ts"
      ],
      "to": [
        "src/core/runner/person-path-rows.ts"
      ]
    }
  ],
  "criteriaObserves": [
    {
      "kind": "engineNoticeCode",
      "name": "memory.consolidation_incomplete",
      "assertions": [
        "G9.b"
      ]
    },
    {
      "kind": "engineNoticeCode",
      "name": "memory.consolidation_refused",
      "assertions": [
        "G9.c"
      ]
    },
    {
      "kind": "engineNoticeCode",
      "name": "permission.rule_store_unavailable",
      "assertions": [
        "G5.a",
        "G7.c"
      ]
    },
    {
      "kind": "taskEventField",
      "name": "human_input.attachments",
      "assertions": [
        "G10.a",
        "G10.b"
      ]
    },
    {
      "kind": "taskEventField",
      "name": "task_progress.status",
      "assertions": [
        "G11.c"
      ]
    },
    {
      "kind": "taskEventField",
      "name": "task_started.seq",
      "assertions": [
        "G11.a"
      ]
    },
    {
      "kind": "taskEventField",
      "name": "task_started.taskId",
      "assertions": [
        "G11.a"
      ]
    },
    {
      "kind": "taskEventField",
      "name": "tool_end.errorCode",
      "assertions": [
        "G2.a"
      ]
    },
    {
      "kind": "taskEventField",
      "name": "tool_end.gate",
      "assertions": [
        "G1.a",
        "G1.b",
        "G1.c",
        "G2.b",
        "G3.a",
        "G3.b",
        "G4.a",
        "G5.a",
        "G5.b",
        "G7.a",
        "G7.b",
        "G7.c",
        "G8.b"
      ]
    },
    {
      "kind": "taskEventField",
      "name": "tool_end.output",
      "assertions": [
        "G1.d",
        "G3.c",
        "G4.b",
        "G10.d",
        "G12.a",
        "G12.b"
      ]
    },
    {
      "kind": "taskEventField",
      "name": "tool_end.structured",
      "assertions": [
        "G2.a",
        "G2.b"
      ]
    },
    {
      "kind": "taskEventField",
      "name": "tool_end.totalChars",
      "assertions": [
        "G12.b"
      ]
    },
    {
      "kind": "taskEventField",
      "name": "tool_end.truncated",
      "assertions": [
        "G12.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "ConsolidationRefusedError.code",
      "assertions": [
        "G9.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "GateOutcome.disposition",
      "assertions": [
        "G1.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "GateOutcome.origin",
      "assertions": [
        "G7.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "ModeRelease.reason",
      "assertions": [
        "G8.a",
        "G8.b"
      ]
    },
    {
      "kind": "typeMember",
      "name": "PermissionResult.guards",
      "assertions": [
        "G6.a",
        "G6.b",
        "G13.a",
        "G13.b"
      ]
    },
    {
      "kind": "typeMember",
      "name": "PermissionResult.requiresRealApproval",
      "assertions": [
        "G13.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "RunMemoryConsolidationOptions.writeJudge",
      "assertions": [
        "G9.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "RunnerDeps.mediaByteCapBytes",
      "assertions": [
        "G14.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "RunnerDeps.onDelegationLifecycle",
      "assertions": [
        "G11.b"
      ]
    },
    {
      "kind": "typeMember",
      "name": "RunnerDeps.sessionStore",
      "assertions": [
        "G14.b"
      ]
    },
    {
      "kind": "typeMember",
      "name": "TaskSpec.userAttachments",
      "assertions": [
        "G10.a",
        "G10.c"
      ]
    },
    {
      "kind": "typeMember",
      "name": "WiringManifest.lsp",
      "assertions": [
        "G3.d"
      ]
    }
  ],
  "consumersHint": {
    "cli": [
      "AskClassFacts",
      "AskOriginFacts",
      "CHECKPOINT_CONFIG_REFUSAL_CODES",
      "ExecutionEnv",
      "FileMemoryEngineBackend",
      "FileSystem",
      "MODE_RELEASE_REASONS",
      "MemoryBackend",
      "MemoryEngine",
      "NodeExecutionEnv",
      "PermissionResult",
      "PersistedRuleHit",
      "PreToolUseResult",
      "ReadDenyMatcher",
      "ReadKind",
      "RemoteExecutionEnv",
      "RunMemoryConsolidationOptions",
      "SYNTHETIC_READ_UNANSWERABLE_CAUSES",
      "ShellReadBoundary",
      "ShellReadVerdict",
      "TaskEvent",
      "TaskSpec",
      "UserMessage",
      "UserPromptSubmitContext"
    ],
    "server": [
      "AskClassFacts",
      "CHECKPOINT_CONFIG_REFUSAL_CODES",
      "ConsolidationDriverEngine",
      "ExecutionEnv",
      "FileMemoryEngineBackend",
      "FileSystem",
      "LspSession",
      "MODE_RELEASE_REASONS",
      "MemoryBackend",
      "MemoryEngine",
      "NodeExecutionEnv",
      "PermissionResult",
      "PreToolUseResult",
      "RemoteExecutionEnv",
      "RunMemoryConsolidationOptions",
      "ShellReadBoundary",
      "TaskEvent",
      "TaskSpec",
      "TransportLspSession",
      "UserMessage",
      "UserPromptSubmitContext",
      "resolveMemoryConsolidationDriver"
    ],
    "sdk": [
      "FileSystem",
      "MODE_RELEASE_REASONS",
      "MemoryEngine",
      "NodeExecutionEnv",
      "PermissionResult",
      "PreToolUseResult",
      "TaskEvent",
      "TaskSpec"
    ],
    "note": "scanned cli@dea53b8d server@b4924bea sdk@a32bca5 — a name listed is MENTIONED there today, which is evidence of consumption, not proof of it. Ledger files (**/docs/core-consumption/**, **/docs/wire-consumption/**, **/*LEDGER*.json) are not evidence of use — server: 8 name(s) matched ONLY in bookkeeping files and were set aside (ConsolidationDriveEngine, EngineAttestation, LspToolOptions, PersistedRuleHit, PersistedRuleVerdict, ReadDenyMatcher, ShellReadVerdict, WriteDenyMatcher)"
  },
  "breakingCount": 13,
  "breakingItems": [
    "closed set lost members: MODE_RELEASE_REASONS -rule_unreadable",
    "signature changed: ConsolidationDriveEngine.commitConsolidationPlan — param 3 `opts` type changed, direction not read: { requestId: string; [ -> writeGate: ConsolidationWriteGate; ]}",
    "signature changed: ConsolidationDriveEngine.reconcileConsolidation — +required param `opts: { readonly writeGate: ConsolidationWriteGate; }`",
    "signature changed: FileMemoryEngineBackend.applyPatches — param 2 `opts` type changed, direction not read: [{ readonly anchoredRoot?: string; } -> Parameters<MemoryBackend[\"applyPatches\"]>[1]]",
    "signature changed: MemoryEngine.commitConsolidationPlan — param 3 `opts` type changed, direction not read: { requestId: string; [ -> writeGate: ConsolidationWriteGate; ]}",
    "signature changed: MemoryEngine.reconcileConsolidation — +required param `opts: { readonly writeGate: ConsolidationWriteGate; }`",
    "signature changed: MemoryEngine.resolveConsolidationPlan — param 3 `opts` type changed, direction not read: { requestId: string; [ -> writeGate: ConsolidationWriteGate; ]}",
    "signature changed: resolveMemoryConsolidationDriver — return type [RunMemoryConsolidationOptions -> Omit<RunMemoryConsolidationOptions, \"writeJudge\">]",
    "type gained required keys: ConsolidationDriverEngine +consolidationWriteHome",
    "type gained required keys: DriveConsolidationOptions +writeGate",
    "type gained required keys: RunMemoryConsolidationOptions +writeJudge",
    "type lost keys: PermissionResult -ask.guard",
    "type lost keys: PreToolUseResult -ask.guard"
  ]
}
