{
  "repo": "core",
  "version": "7.51.2",
  "from": "a5c7c33244f7b139e674093f35159037fdfb63da",
  "to": "v7.51.2",
  "added": [
    {
      "name": "BUILTIN_SUBAGENT_TYPES",
      "kind": "variable",
      "tier": "advanced",
      "at": [
        "src/agents/subagent.ts:680",
        "src/index.ts:3032"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "BuiltinSubagentType",
      "kind": "type",
      "tier": "advanced",
      "at": [
        "src/agents/subagent.ts:682",
        "src/index.ts:3027"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "McpToolAxesRead",
      "kind": "type",
      "tier": "advanced",
      "at": [
        "src/core/mcp-server-spec.ts:161",
        "src/core/types.ts:32",
        "src/index.ts:3537"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "SESSION_RULES_GRAMMAR",
      "kind": "variable",
      "tier": "advanced",
      "at": [
        "src/core/session-policy-store.ts:65",
        "src/index.ts:375"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "SessionRulesInGrammar",
      "kind": "type",
      "tier": "advanced",
      "at": [
        "src/core/session-policy-store.ts:82",
        "src/index.ts:377"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "compileSessionRuleBucket",
      "kind": "function",
      "tier": "advanced",
      "at": [
        "src/core/session-policy-store.ts:356",
        "src/index.ts:376"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "readMcpToolAxes",
      "kind": "function",
      "tier": "advanced",
      "at": [
        "src/core/mcp-server-spec.ts:242",
        "src/core/types.ts:33",
        "src/index.ts:3536"
      ],
      "criteriaCovered": false,
      "breaking": false
    }
  ],
  "removed": [],
  "changed": [],
  "narrowed": [
    {
      "id": "F2",
      "source": "behaviorFlips.summary",
      "text": "#1763 (additive + admission narrowing): `readMcpToolAxes(raw)` is the one runtime judge of `McpServerSpec.toolAxes` (exported from the root; vocabulary derived from `SAFETY_AXIS_VOCABULARY`); the task admission door and the `materializeMcpTools` convergence point both ask it, and a malformed declaration refuses that server entry loudly (no spawn) instead of being trusted by type."
    }
  ],
  "closedSetMembers": [
    {
      "set": "ALLOW_ENTRY_INERT_REASONS",
      "at": [
        "src/core/allow-entry.ts:48"
      ],
      "newSet": false,
      "added": [
        "earlier_grammar"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "BUILTIN_SUBAGENT_TYPES",
      "at": [
        "src/agents/subagent.ts:680"
      ],
      "newSet": true,
      "added": [
        "Explore",
        "Plan",
        "fork",
        "general-purpose"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "BuiltinSubagentType",
      "at": [
        "src/agents/subagent.ts:682",
        "src/index.ts:3027"
      ],
      "newSet": true,
      "added": [
        "Explore",
        "Plan",
        "fork",
        "general-purpose"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    }
  ],
  "closedSetsUnreadable": [],
  "typeKeys": [
    {
      "type": "StoredSessionRules",
      "at": [
        "src/core/session-policy-store.ts:68"
      ],
      "added": [
        "grammar"
      ],
      "addedDetail": [
        {
          "key": "grammar",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    }
  ],
  "typeKeysUnreadableArms": [],
  "typeKeysFlattenedCount": 235,
  "signatures": [
    {
      "name": "createSessionRulePolicy",
      "at": [
        "src/core/runner/session-rule-policy.ts:326"
      ],
      "from": [
        "(rules: SessionPermissionRules | SessionRuleSource, opts: { env: ExecutionEnv; rootPath?: string; toolEffects?: ReadonlyMap<string, ToolEffect>; anchors?: PathRuleBases; }): NamedToolPolicy"
      ],
      "to": [
        "(rules: SessionPermissionRules | SessionRuleSource, opts: { env: ExecutionEnv; rootPath?: string; toolEffects?: ReadonlyMap<string, ToolEffect>; anchors?: PathRuleBases; onEarlierGrammar?: (entries: readonly string[]) => void; }): NamedToolPolicy"
      ],
      "changes": [
        {
          "aspect": "param",
          "detail": "param 2 `opts` type widened: …nchors?: PathRuleBases; [ -> onEarlierGrammar?: (entries: readonly string[]) => void; ]}",
          "breaking": false
        }
      ],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "name": "judgeSessionRulesWrite",
      "at": [
        "src/core/session-policy-store.ts:441"
      ],
      "from": [
        "(prior: StoredSessionRules | null, rules: unknown, opts: PutRulesOptions | undefined, mountedToolNames?: ReadonlySet<string>): SessionPermissionRules"
      ],
      "to": [
        "(prior: StoredSessionRules | null, rules: unknown, opts: PutRulesOptions | undefined, mountedToolNames?: ReadonlySet<string>): SessionPermissionRules & { grammar: number; }"
      ],
      "changes": [
        {
          "aspect": "returns",
          "detail": "return type SessionPermissionRules[ ->  & { grammar: number; }]",
          "breaking": true
        }
      ],
      "breaking": true,
      "criteriaCovered": false
    },
    {
      "name": "readSessionRulesShape",
      "at": [
        "src/core/session-policy-store.ts:285"
      ],
      "from": [
        "(value: unknown): { fault: SessionRuleShapeRefusal; sentence: string; } | { rules: SessionPermissionRules; }"
      ],
      "to": [
        "(value: unknown): { fault: SessionRuleShapeRefusal; sentence: string; } | { rules: SessionRulesInGrammar; }"
      ],
      "changes": [
        {
          "aspect": "returns",
          "detail": "return type …ng; } | { rules: Session[PermissionRules -> RulesInGrammar]; }",
          "breaking": true
        }
      ],
      "breaking": true,
      "criteriaCovered": false
    }
  ],
  "declarationMoves": [],
  "mintMoves": [],
  "criteriaObserves": [
    {
      "kind": "taskEventField",
      "name": "tool_end.gate",
      "assertions": [
        "G1.a",
        "G1.c",
        "G2.b"
      ]
    },
    {
      "kind": "typeMember",
      "name": "AgentDefinition.name",
      "assertions": [
        "G3.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "McpServerSpec.toolAxes",
      "assertions": [
        "G2.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "StoredSessionRules.rev",
      "assertions": [
        "G1.b"
      ]
    }
  ],
  "consumersHint": {
    "cli": [
      "ALLOW_ENTRY_INERT_REASONS",
      "StoredSessionRules"
    ],
    "server": [
      "ALLOW_ENTRY_INERT_REASONS",
      "McpToolAxesRead",
      "StoredSessionRules",
      "createSessionRulePolicy",
      "judgeSessionRulesWrite",
      "readMcpToolAxes",
      "readSessionRulesShape"
    ],
    "sdk": [
      "ALLOW_ENTRY_INERT_REASONS",
      "StoredSessionRules"
    ],
    "note": "scanned cli@800f2dc8 server@01b2b2ef sdk@fa0c123 — a name listed is MENTIONED there today, which is evidence of consumption, not proof of it"
  },
  "breakingCount": 2,
  "breakingItems": [
    "signature changed: judgeSessionRulesWrite — return type SessionPermissionRules[ ->  & { grammar: number; }]",
    "signature changed: readSessionRulesShape — return type …ng; } | { rules: Session[PermissionRules -> RulesInGrammar]; }"
  ],
  "toResolvedAt": "97c8b3e2ab9bc4d63bbbeb55ea858cc2a4f36c10"
}
