{
  "repo": "core",
  "version": "7.46.0",
  "from": "2e80ea7afa8f82440b35c0841a1d81613d2f4fcc",
  "to": "4d78f3834f2c0b04e5f350c60df286c46b9de33a",
  "added": [
    {
      "name": "BoundPathRule",
      "kind": "interface",
      "tier": "advanced",
      "at": [
        "src/core/path-rule-binding.ts:34",
        "src/index.ts:1110"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "CallTargetReading",
      "kind": "interface",
      "tier": "advanced",
      "at": [
        "src/core/effective-path-target.ts:205",
        "src/index.ts:1109"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "CallTargetView",
      "kind": "type",
      "tier": "advanced",
      "at": [
        "src/core/effective-path-target.ts:195",
        "src/index.ts:1109"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "ENGINE_BUILTIN_TOOL_NAMES",
      "kind": "variable",
      "tier": "advanced",
      "at": [
        "src/core/tool-catalog-entries.ts:280",
        "src/index.ts:1492"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "PathRuleSpec",
      "kind": "interface",
      "tier": "advanced",
      "at": [
        "src/core/path-rule-binding.ts:24",
        "src/index.ts:1110"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "isEngineBuiltinToolName",
      "kind": "function",
      "tier": "advanced",
      "at": [
        "src/core/tool-catalog-entries.ts:299",
        "src/index.ts:1492"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "renderListEntry",
      "kind": "function",
      "tier": "advanced",
      "at": [
        "src/core/allow-entry.ts:614",
        "src/index.ts:1480"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "toolPolicyPathRules",
      "kind": "function",
      "tier": "advanced",
      "at": [
        "src/core/tool-policy.ts:809",
        "src/index.ts:1421"
      ],
      "criteriaCovered": false,
      "breaking": false
    }
  ],
  "removed": [
    {
      "name": "toolPolicyPathDenyRules",
      "kind": "function",
      "tier": "advanced",
      "at": [
        "src/core/tool-policy.ts:792",
        "src/index.ts:1420"
      ],
      "breaking": true
    }
  ],
  "changed": [],
  "narrowed": [
    {
      "id": "F2",
      "source": "behaviorFlips.summary",
      "text": "#1102 car A — curl's own `{}` / `[]` glob is expanded before the URL or upload file is judged (narrowing); `-g` / `--globoff` reads it literally"
    },
    {
      "id": "F28",
      "source": "behaviorFlips.summary",
      "text": "BEHAVIOR NARROWING (#1417): a shell whose argv names no script runs its standard input, and what arrives there is its script — a literal here-document / here-string / printed text is planned as a `-c` text is; a text built when the command runs (an expanding here-document, any program on the pipe other than a literal `echo` / `printf`, a `<` file) is the removal guard's `runtime_script` (`dangerous_delete`)."
    },
    {
      "id": "F30",
      "source": "behaviorFlips.summary",
      "text": "BEHAVIOR NARROWING (#1425): a read-only name keeps its value — an assignment the read-only attribute (or another attribute, or a name reference) may run before binds nothing the text says; the read through it is a read-boundary question again."
    },
    {
      "id": "F31",
      "source": "behaviorFlips.summary",
      "text": "BEHAVIOR NARROWING (#1430): a sub-agent's `denyTools` / `allowTools` govern the engine's hand tools its own run mounts (Read / Edit / Write / NotebookEdit / Bash / Grep / Glob / RepoMap / EnterWorktree / ExitWorktree / TaskOutput / TaskStop), as they govern the delegation pool — one reading, the withheld hand names joining the child's exclusion list."
    },
    {
      "id": "F32",
      "source": "behaviorFlips.summary",
      "text": "BEHAVIOR NARROWING (#1432; +1 optional option key): a delegation tool that declares its `extraTools` factory's roster (`SubagentToolOptions.extraToolNames`) publishes a listable pool again — a stale list spelling is refused before the run — and a factory product outside the roster refuses that spawn."
    }
  ],
  "closedSetMembers": [
    {
      "set": "ARG_ROLE_KINDS",
      "at": [
        "src/tools/fs/program-read-model.ts:45"
      ],
      "newSet": true,
      "added": [
        "assignment",
        "binds-name",
        "command",
        "datum",
        "entry-probe",
        "mount-source",
        "object-path",
        "path",
        "program-file",
        "program-text",
        "shell-text"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "ArgRoleKind",
      "at": [
        "src/tools/fs/program-read-model.ts:46"
      ],
      "newSet": true,
      "added": [
        "assignment",
        "binds-name",
        "command",
        "datum",
        "entry-probe",
        "mount-source",
        "object-path",
        "path",
        "program-file",
        "program-text",
        "shell-text"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "Arity",
      "at": [
        "src/tools/fs/program-read-model.ts:108"
      ],
      "newSet": true,
      "added": [
        "attached",
        "suffix"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "ChainInstallationGap",
      "at": [
        "src/core/runner/child-tree.ts:109"
      ],
      "newSet": true,
      "added": [
        "absent",
        "invalid",
        "misaligned"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "CheckpointErrorReason",
      "at": [
        "src/core/checkpoint-store.ts:2425"
      ],
      "newSet": false,
      "added": [
        "hands_coordinates_damaged",
        "installation_record_absent",
        "installation_record_invalid",
        "installation_record_misaligned"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "ChildPlacement",
      "at": [
        "src/core/runner/contracts.ts:2092"
      ],
      "newSet": true,
      "added": [
        "caller_tree",
        "elsewhere",
        "honored"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "CodeBody",
      "at": [
        "src/tools/fs/program-read-model.ts:292"
      ],
      "newSet": true,
      "added": [
        "assignment-values",
        "first-operand",
        "option-values"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "DATUM_FORMS",
      "at": [
        "src/tools/fs/program-read-model.ts:27"
      ],
      "newSet": true,
      "added": [
        "count",
        "delimiter",
        "label",
        "message",
        "name-pattern",
        "pattern"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "DatumForm",
      "at": [
        "src/tools/fs/program-read-model.ts:28"
      ],
      "newSet": true,
      "added": [
        "count",
        "delimiter",
        "label",
        "message",
        "name-pattern",
        "pattern"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "DeclaredAttribute",
      "at": [
        "src/tools/fs/program-read-model.ts:194"
      ],
      "newSet": true,
      "added": [
        "frozen",
        "integer",
        "reference",
        "transformed",
        "unsettled"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "Dialect",
      "at": [
        "src/tools/fs/program-read-model.ts:197"
      ],
      "newSet": true,
      "added": [
        "any",
        "bsd",
        "gnu"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "ENGINE_NOTICE_CODES",
      "at": [
        "src/core/governance-codes.ts:350"
      ],
      "newSet": false,
      "added": [
        "permission.rule_row_dropped"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": true
    },
    {
      "set": "ExtraToolNamesReason",
      "at": [
        "src/agents/extra-tool-names.ts:22"
      ],
      "newSet": true,
      "added": [
        "shape",
        "undeclared_name",
        "undeclared_origin"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "OPTION_MODES",
      "at": [
        "src/tools/fs/program-read-model.ts:38"
      ],
      "newSet": true,
      "added": [
        "banner",
        "follows",
        "forced",
        "interactive",
        "names-program",
        "quiet",
        "repeats"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "OptionMode",
      "at": [
        "src/tools/fs/program-read-model.ts:39"
      ],
      "newSet": true,
      "added": [
        "banner",
        "follows",
        "forced",
        "interactive",
        "names-program",
        "quiet",
        "repeats"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "OptionValueKind",
      "at": [
        "src/tools/fs/bash-readonly-classifier.ts:959"
      ],
      "newSet": false,
      "added": [],
      "removed": [
        "count",
        "delimiter",
        "form",
        "header",
        "indirect",
        "label",
        "name-pattern",
        "path",
        "pattern",
        "script",
        "url"
      ],
      "persistedBy": "none",
      "breaking": true,
      "criteriaCovered": false
    },
    {
      "set": "PATH_EFFECTS",
      "at": [
        "src/tools/fs/program-read-model.ts:58"
      ],
      "newSet": true,
      "added": [
        "create",
        "edit-in-place",
        "names",
        "read",
        "write"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "PATH_VALUE_FORMS",
      "at": [
        "src/tools/fs/program-read-model.ts:33"
      ],
      "newSet": true,
      "added": [
        "form",
        "header",
        "indirect",
        "url"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "PathEffect",
      "at": [
        "src/tools/fs/program-read-model.ts:59"
      ],
      "newSet": true,
      "added": [
        "create",
        "edit-in-place",
        "names",
        "read",
        "write"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "PathValueForm",
      "at": [
        "src/tools/fs/program-read-model.ts:34"
      ],
      "newSet": true,
      "added": [
        "form",
        "header",
        "indirect",
        "url"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "ProgramDelivery",
      "at": [
        "src/tools/fs/program-read-model.ts:1318"
      ],
      "newSet": true,
      "added": [
        "stdin",
        "text"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "ProgramTextReading",
      "at": [
        "src/tools/fs/program-read-model.ts:1540"
      ],
      "newSet": true,
      "added": [
        "from-file",
        "none",
        "unparsed"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "READ_CANDIDATE_PROVENANCES",
      "at": [
        "src/tools/fs/shell-read-plan.ts:96"
      ],
      "newSet": false,
      "added": [
        "mount_source",
        "object_path"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "RECOMMENDED_SENSITIVE_PATTERNS",
      "at": [
        "src/core/sensitive-path-policy.ts:110"
      ],
      "newSet": false,
      "added": [
        ".sema/config-lkg-*.json"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "ReadCandidate.speculative",
      "at": [
        "src/tools/fs/shell-read-plan.ts:156"
      ],
      "newSet": true,
      "added": [
        "containment",
        "whole"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "SHELL_WRITE_COMMANDS",
      "at": [
        "src/tools/fs/shell-read-write-targets.ts:18"
      ],
      "newSet": false,
      "added": [],
      "removed": [
        "cp",
        "mkdir",
        "mv",
        "rm",
        "rmdir",
        "sed",
        "tee",
        "touch"
      ],
      "persistedBy": "checkpoint-state",
      "breaking": true,
      "criteriaCovered": false
    },
    {
      "set": "Witness",
      "at": [
        "src/tools/fs/program-read-model.ts:295"
      ],
      "newSet": true,
      "added": [
        "binary"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    }
  ],
  "closedSetsUnreadable": [],
  "typeKeys": [
    {
      "type": "CheckpointState",
      "at": [
        "src/core/checkpoint-store.ts:1190"
      ],
      "added": [
        "handsHome",
        "handsRoot",
        "inheritedGate.pathRuleAnchors",
        "inheritedGate.pathRuleAnchors.home",
        "inheritedGate.pathRuleAnchors.root",
        "inheritedGate.pathRuleInstallations",
        "inheritedGate.pathRuleInstallations[].home",
        "inheritedGate.pathRuleInstallations[].root"
      ],
      "addedDetail": [
        {
          "key": "handsHome",
          "optional": true
        },
        {
          "key": "handsRoot",
          "optional": true
        },
        {
          "key": "inheritedGate.pathRuleAnchors",
          "optional": true
        },
        {
          "key": "inheritedGate.pathRuleAnchors.home",
          "optional": true
        },
        {
          "key": "inheritedGate.pathRuleAnchors.root",
          "optional": false
        },
        {
          "key": "inheritedGate.pathRuleInstallations",
          "optional": true
        },
        {
          "key": "inheritedGate.pathRuleInstallations[].home",
          "optional": true
        },
        {
          "key": "inheritedGate.pathRuleInstallations[].root",
          "optional": false
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": true
    },
    {
      "type": "EffectivePermissionRules",
      "at": [
        "src/core/permission-rule-provider.ts:89"
      ],
      "added": [
        "droppedRows",
        "droppedRows[].rule",
        "droppedRows[].scopeRoot"
      ],
      "addedDetail": [
        {
          "key": "droppedRows",
          "optional": true
        },
        {
          "key": "droppedRows[].rule",
          "optional": false
        },
        {
          "key": "droppedRows[].scopeRoot",
          "optional": false
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "InheritedGate",
      "at": [
        "src/core/runner/contracts.ts:1211"
      ],
      "via": "RunInternals.inheritedGate",
      "added": [
        "pathRuleAnchors",
        "pathRuleAnchors.home",
        "pathRuleAnchors.root",
        "pathRuleInstallations",
        "pathRuleInstallations[].home",
        "pathRuleInstallations[].root"
      ],
      "addedDetail": [
        {
          "key": "pathRuleAnchors",
          "optional": true
        },
        {
          "key": "pathRuleAnchors.home",
          "optional": true
        },
        {
          "key": "pathRuleAnchors.root",
          "optional": false
        },
        {
          "key": "pathRuleInstallations",
          "optional": true
        },
        {
          "key": "pathRuleInstallations[].home",
          "optional": true
        },
        {
          "key": "pathRuleInstallations[].root",
          "optional": false
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "NamedToolPolicy",
      "at": [
        "src/core/tool-policy.ts:1317"
      ],
      "added": [
        "pathRules"
      ],
      "addedDetail": [
        {
          "key": "pathRules",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [
        "pathDenyRules"
      ],
      "breaking": true,
      "criteriaCovered": false
    },
    {
      "type": "Prepared",
      "at": [
        "src/core/runner/contracts.ts:246"
      ],
      "via": "Runner.SuspendReap.env",
      "added": [
        "stampCallTarget"
      ],
      "addedDetail": [
        {
          "key": "stampCallTarget",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "ReadCandidate",
      "at": [
        "src/tools/fs/shell-read-plan.ts:125"
      ],
      "added": [
        "speculative"
      ],
      "addedDetail": [
        {
          "key": "speculative",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "ResolvedWorkspace",
      "at": [
        "src/core/runner/contracts.ts:2094"
      ],
      "added": [
        "placement"
      ],
      "addedDetail": [
        {
          "key": "placement",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": true
    },
    {
      "type": "RunInternals",
      "at": [
        "src/core/runner/contracts.ts:1436"
      ],
      "added": [
        "callerRoot",
        "worktreeOffered"
      ],
      "addedDetail": [
        {
          "key": "callerRoot",
          "optional": true
        },
        {
          "key": "worktreeOffered",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "RunnerDeps",
      "at": [
        "src/core/runner-deps.ts:105"
      ],
      "added": [
        "agentConfigDir"
      ],
      "addedDetail": [
        {
          "key": "agentConfigDir",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": true
    },
    {
      "type": "ShellReadSegment",
      "at": [
        "src/tools/fs/shell-read-plan.ts:175"
      ],
      "added": [
        "stdin"
      ],
      "addedDetail": [
        {
          "key": "stdin",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "SubagentToolOptions",
      "at": [
        "src/agents/subagent.ts:2742"
      ],
      "added": [
        "extraToolNames",
        "extraToolNames[].aliases",
        "extraToolNames[].contentOrigin",
        "extraToolNames[].name"
      ],
      "addedDetail": [
        {
          "key": "extraToolNames",
          "optional": true
        },
        {
          "key": "extraToolNames[].aliases",
          "optional": true
        },
        {
          "key": "extraToolNames[].contentOrigin",
          "optional": true
        },
        {
          "key": "extraToolNames[].name",
          "optional": false
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": true
    },
    {
      "type": "ToolCallRequest",
      "at": [
        "src/core/tool-policy.ts:52"
      ],
      "added": [
        "pathRuleAnchors",
        "targetReading"
      ],
      "addedDetail": [
        {
          "key": "pathRuleAnchors",
          "optional": true
        },
        {
          "key": "targetReading",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": true
    },
    {
      "type": "ToolGateInput",
      "at": [
        "src/core/hooks.ts:1471"
      ],
      "via": "runToolGate.ToolGateInput",
      "added": [
        "stampCallTarget"
      ],
      "addedDetail": [
        {
          "key": "stampCallTarget",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "ToolPolicy",
      "at": [
        "src/core/tool-policy.ts:735"
      ],
      "added": [
        "pathRules"
      ],
      "addedDetail": [
        {
          "key": "pathRules",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [
        "pathDenyRules"
      ],
      "breaking": true,
      "criteriaCovered": false
    },
    {
      "type": "WriteProtectionCompileOptions",
      "at": [
        "src/core/write-protect.ts:657"
      ],
      "added": [
        "agentConfigDir"
      ],
      "addedDetail": [
        {
          "key": "agentConfigDir",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    }
  ],
  "typeKeysUnreadableArms": [],
  "typeKeysFlattenedCount": 227,
  "signatures": [
    {
      "name": "adjudicatePersistedPathRules",
      "at": [
        "src/core/permission-rule-model.ts:2422"
      ],
      "from": [
        "(rules: readonly PersistedRule[], call: { tool: string; cwd: string | undefined; sessionId?: string; face?: DenyFace | undefined; }, targets: { readonly tighten?: PathTargetReading; readonly allow?: PathTargetReading; }, bases: PathRuleBases): PersistedRuleVerdict | undefined"
      ],
      "to": [
        "(rules: readonly PersistedRule[], call: { tool: string; cwd: string | undefined; sessionId?: string; face?: DenyFace | undefined; scopeIdentity?: ScopeRootIdentity; }, views: { readonly tighten?: TargetViews; readonly allow?: TargetViews; }, anchorsOf: (rule: PersistedRule) => PathRuleBases, leads: ReadonlyMap<string, string | undefined>): PersistedRuleVerdict | undefined"
      ],
      "changes": [
        {
          "aspect": "param",
          "detail": "param 2 `call` type widened: …: DenyFace | undefined; [ -> scopeIdentity?: ScopeRootIdentity; ]}",
          "breaking": false
        },
        {
          "aspect": "param",
          "detail": "param 3 `views` type changed, direction not read: { readonly tighten?: [PathTargetReading; readonly allow?: PathTargetReading -> TargetViews; readonly allow?: TargetViews]; }",
          "breaking": true,
          "uncertain": true
        },
        {
          "aspect": "param",
          "detail": "param 4 `anchorsOf` type changed, direction not read: [ -> (rule: PersistedRule) => ]PathRuleBases",
          "breaking": true,
          "uncertain": true
        },
        {
          "aspect": "param",
          "detail": "+required param `leads: ReadonlyMap<string, string | undefined>`",
          "breaking": true
        }
      ],
      "uncertain": "param 3 `views` type changed, direction not read: { readonly tighten?: [PathTargetReading; readonly allow?: PathTargetReading -> TargetViews; readonly allow?: TargetViews]; } · param 4 `anchorsOf` type changed, direction not read: [ -> (rule: PersistedRule) => ]PathRuleBases — 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": "adjudicatePersistedRules",
      "at": [
        "src/core/permission-rule-model.ts:2375"
      ],
      "from": [
        "(rules: readonly PersistedRule[], call: { tool: string; command: string; cwd: string | undefined; sessionId?: string; execCwd?: string; }): PersistedRuleVerdict | undefined"
      ],
      "to": [
        "(rules: readonly PersistedRule[], call: { tool: string; command: string; cwd: string | undefined; sessionId?: string; execCwd?: string; scopeIdentity?: ScopeRootIdentity; }): PersistedRuleVerdict | undefined"
      ],
      "changes": [
        {
          "aspect": "param",
          "detail": "param 2 `call` type widened: …ring; execCwd?: string; [ -> scopeIdentity?: ScopeRootIdentity; ]}",
          "breaking": false
        }
      ],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "name": "createSensitivePathPolicy",
      "at": [
        "src/core/sensitive-path-policy.ts:399"
      ],
      "from": [
        "(opts: { env: ExecutionEnv; patterns: readonly string[]; rootPath?: string; dataRoot?: string; tools?: string[]; }): ToolPolicy"
      ],
      "to": [
        "(opts: { env: ExecutionEnv; patterns: readonly string[]; rootPath?: string; dataRoot?: string; agentConfigDir?: string; tools?: string[]; }): ToolPolicy"
      ],
      "changes": [
        {
          "aspect": "param",
          "detail": "param 1 `opts` type widened: …ing; dataRoot?: string; [ -> agentConfigDir?: string; ]tools?: string[]; }",
          "breaking": false
        }
      ],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "name": "directoryRuleAdmits",
      "at": [
        "src/core/permission-rule-model.ts:1903"
      ],
      "from": [
        "(rule: Pick<PersistedRule, \"match\" | \"command\">, path: PathIdentity, bases: PathRuleBases): boolean"
      ],
      "to": [
        "(rule: Pick<PersistedRule, \"match\" | \"command\">, path: PathIdentity, bases: PathRuleBases, treeFamily?: PathFamily | undefined): boolean"
      ],
      "changes": [
        {
          "aspect": "param",
          "detail": "+optional param `treeFamily?: PathFamily | undefined`",
          "breaking": false
        }
      ],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "name": "pathRuleReachOf",
      "at": [
        "src/core/permission-rule-model.ts:1517"
      ],
      "from": [
        "(rule: Pick<PersistedRule, \"match\" | \"command\" | \"behavior\">, target: PathIdentity, bases: PathRuleBases): ProgramRunReachOutcome"
      ],
      "to": [
        "(rule: Pick<PersistedRule, \"match\" | \"command\" | \"behavior\">, target: PathIdentity, bases: PathRuleBases, treeFamily?: PathFamily | undefined): ProgramRunReachOutcome"
      ],
      "changes": [
        {
          "aspect": "param",
          "detail": "+optional param `treeFamily?: PathFamily | undefined`",
          "breaking": false
        }
      ],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "name": "scopeCoversCwd",
      "at": [
        "src/core/permission-rule-model.ts:2136"
      ],
      "from": [
        "(scope: RuleScope, cwd: string | undefined, sessionId?: string): boolean"
      ],
      "to": [
        "(scope: RuleScope, cwd: string | undefined, sessionId?: string, identity?: ScopeRootIdentity): boolean"
      ],
      "changes": [
        {
          "aspect": "param",
          "detail": "+optional param `identity?: ScopeRootIdentity`",
          "breaking": false
        }
      ],
      "breaking": false,
      "criteriaCovered": false
    }
  ],
  "declarationMoves": [
    {
      "name": "ArgWord",
      "kind": null,
      "onSurface": false,
      "from": [
        "src/tools/fs/shell-read-write-targets.ts"
      ],
      "to": [
        "src/tools/fs/program-read-model.ts",
        "src/tools/fs/shell-read-write-targets.ts"
      ]
    },
    {
      "name": "WriteSeat",
      "kind": null,
      "onSurface": false,
      "from": [
        "src/tools/fs/shell-read-write-targets.ts"
      ],
      "to": [
        "src/tools/fs/program-read-model.ts",
        "src/tools/fs/shell-read-write-targets.ts"
      ]
    },
    {
      "name": "dropDefinitionHeads",
      "kind": null,
      "onSurface": false,
      "from": [
        "src/tools/fs/shell-read-word.ts"
      ],
      "to": [
        "src/tools/fs/shell-read-bindings.ts"
      ]
    },
    {
      "name": "renderListEntry",
      "kind": "function",
      "onSurface": true,
      "from": [
        "src/core/allow-entry.ts"
      ],
      "to": [
        "src/core/allow-entry.ts",
        "src/index.ts"
      ]
    },
    {
      "name": "slotValueCandidates",
      "kind": null,
      "onSurface": false,
      "from": [
        "src/tools/fs/bash-readonly-classifier.ts"
      ],
      "to": [
        "src/tools/fs/program-read-model.ts"
      ]
    },
    {
      "name": "suppliesFirstOperandSlot",
      "kind": null,
      "onSurface": false,
      "from": [
        "src/tools/fs/bash-readonly-classifier.ts"
      ],
      "to": [
        "src/tools/fs/program-read-model.ts"
      ]
    }
  ],
  "mintMoves": [],
  "criteriaObserves": [
    {
      "kind": "engineNoticeCode",
      "name": "permission.rule_row_dropped",
      "assertions": [
        "G21.a"
      ]
    },
    {
      "kind": "taskEventField",
      "name": "tool_end.errorCode",
      "assertions": [
        "G38.a",
        "G38.b",
        "G38.c"
      ]
    },
    {
      "kind": "taskEventField",
      "name": "tool_end.gate",
      "assertions": [
        "G38.e",
        "G38.f",
        "G39.a",
        "G39.b",
        "G39.c",
        "G39.d",
        "G39.e"
      ]
    },
    {
      "kind": "taskEventField",
      "name": "tool_end.isError",
      "assertions": [
        "G20.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "AgentDefinition.allowTools",
      "assertions": [
        "G42.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "AgentDefinition.denyTools",
      "assertions": [
        "G40.a",
        "G42.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "AskRequest.askClass",
      "assertions": [
        "G7.a",
        "G8.a",
        "G9.a",
        "G12.a",
        "G15.a",
        "G16.a",
        "G27.a",
        "G37.a",
        "G37.b",
        "G37.e",
        "G37.f",
        "G37.g"
      ]
    },
    {
      "kind": "typeMember",
      "name": "AskRequest.classes",
      "assertions": [
        "G27.a",
        "G27.b",
        "G37.c",
        "G37.d",
        "G39.a",
        "G39.b",
        "G39.c",
        "G39.d",
        "G39.e"
      ]
    },
    {
      "kind": "typeMember",
      "name": "AskRequest.message",
      "assertions": [
        "G7.a",
        "G37.a",
        "G37.b"
      ]
    },
    {
      "kind": "typeMember",
      "name": "CheckpointError.detail",
      "assertions": [
        "G19.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "CheckpointState.handsCwd",
      "assertions": [
        "G11.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "CheckpointState.handsRoot",
      "assertions": [
        "G10.a",
        "G10.b",
        "G11.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "CompoundReadonlyVerdict.reason",
      "assertions": [
        "G25.a",
        "G25.b",
        "G25.c"
      ]
    },
    {
      "kind": "typeMember",
      "name": "GateOutcome.disposition",
      "assertions": [
        "G7.b",
        "G8.a",
        "G8.b",
        "G9.b",
        "G12.b",
        "G13.a",
        "G14.a",
        "G15.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "ResolvedWorkspace.placement",
      "assertions": [
        "G18.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "RunnerDeps.agentConfigDir",
      "assertions": [
        "G38.a",
        "G38.b",
        "G38.c",
        "G38.d",
        "G38.e",
        "G38.f"
      ]
    },
    {
      "kind": "typeMember",
      "name": "ShellReadJudgment.verdict",
      "assertions": [
        "G1.a",
        "G1.b",
        "G2.a",
        "G2.b",
        "G2.c",
        "G3.a",
        "G4.a",
        "G4.b",
        "G5.a",
        "G5.b",
        "G6.a",
        "G22.a",
        "G22.b",
        "G22.c",
        "G23.a",
        "G23.b",
        "G23.c",
        "G24.a",
        "G24.b",
        "G28.a",
        "G28.b",
        "G29.a",
        "G29.b",
        "G30.a",
        "G30.b",
        "G31.a",
        "G31.b",
        "G31.c",
        "G32.a",
        "G32.b",
        "G33.a",
        "G33.b",
        "G34.a",
        "G34.b",
        "G35.a",
        "G36.a",
        "G36.b"
      ]
    },
    {
      "kind": "typeMember",
      "name": "ShellSegment.peeled",
      "assertions": [
        "G26.a",
        "G26.b"
      ]
    },
    {
      "kind": "typeMember",
      "name": "SubagentToolOptions.extraToolNames",
      "assertions": [
        "G40.a",
        "G41.a",
        "G41.b",
        "G41.c"
      ]
    },
    {
      "kind": "typeMember",
      "name": "SubagentToolOptions.onExtraToolsError",
      "assertions": [
        "G41.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "TaskSpec.excludeTools",
      "assertions": [
        "G42.b"
      ]
    },
    {
      "kind": "typeMember",
      "name": "TaskSpec.handsReadOnly",
      "assertions": [
        "G42.b"
      ]
    },
    {
      "kind": "typeMember",
      "name": "ToolCallRequest.root",
      "assertions": [
        "G17.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "ToolCallRequest.targetReading",
      "assertions": [
        "G7.b"
      ]
    },
    {
      "kind": "typeMember",
      "name": "ToolSpec.agentToolPool",
      "assertions": [
        "G40.b"
      ]
    }
  ],
  "consumersHint": {
    "cli": [
      "Arity",
      "CheckpointErrorReason",
      "CheckpointState",
      "ENGINE_NOTICE_CODES",
      "EffectivePermissionRules",
      "InheritedGate",
      "NamedToolPolicy",
      "OptionValueKind",
      "Prepared",
      "READ_CANDIDATE_PROVENANCES",
      "RECOMMENDED_SENSITIVE_PATTERNS",
      "ReadCandidate",
      "RunInternals",
      "RunnerDeps",
      "SHELL_WRITE_COMMANDS",
      "SubagentToolOptions",
      "ToolCallRequest",
      "ToolGateInput",
      "ToolPolicy",
      "WriteProtectionCompileOptions",
      "adjudicatePersistedPathRules",
      "createSensitivePathPolicy"
    ],
    "server": [
      "CheckpointErrorReason",
      "CheckpointState",
      "Dialect",
      "ENGINE_NOTICE_CODES",
      "InheritedGate",
      "Prepared",
      "RECOMMENDED_SENSITIVE_PATTERNS",
      "ReadCandidate",
      "RunInternals",
      "RunnerDeps",
      "SubagentToolOptions",
      "ToolCallRequest",
      "ToolGateInput",
      "ToolPolicy",
      "WriteProtectionCompileOptions",
      "createSensitivePathPolicy",
      "scopeCoversCwd",
      "toolPolicyPathDenyRules"
    ],
    "sdk": [
      "CheckpointErrorReason",
      "ENGINE_NOTICE_CODES",
      "RunnerDeps",
      "ToolPolicy"
    ],
    "note": "scanned cli@bdbfee8f server@da3c2cdc sdk@8d8178f — 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 (EffectivePermissionRules, NamedToolPolicy, ResolvedWorkspace, ShellReadSegment, adjudicatePersistedPathRules, adjudicatePersistedRules, directoryRuleAdmits, pathRuleReachOf)"
  },
  "breakingCount": 6,
  "breakingItems": [
    "closed set lost members: OptionValueKind -count,delimiter,form,header,indirect,label,name-pattern,path,pattern,script,url",
    "closed set lost members: SHELL_WRITE_COMMANDS -cp,mkdir,mv,rm,rmdir,sed,tee,touch",
    "export removed: toolPolicyPathDenyRules (function)",
    "signature changed: adjudicatePersistedPathRules — param 3 `views` type changed, direction not read: { readonly tighten?: [PathTargetReading; readonly allow?: PathTargetReading -> TargetViews; readonly allow?: TargetViews]; }; param 4 `anchorsOf` type changed, direction not read: [ -> (rule: PersistedRule) => ]PathRuleBases; +required param `leads: ReadonlyMap<string, string | undefined>`",
    "type lost keys: NamedToolPolicy -pathDenyRules",
    "type lost keys: ToolPolicy -pathDenyRules"
  ]
}
