{
  "repo": "core",
  "version": "7.25.0",
  "from": "cf97cdb0f908b76024df797a71fc33ecac6c0356",
  "to": "v7.25.0",
  "added": [
    {
      "name": "AddResult",
      "kind": "type",
      "tier": "advanced",
      "at": [
        "src/core/permission-rule-store.ts:1244",
        "src/index.ts:1636"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "NOTIFICATION_INJECTION_OUTCOMES",
      "kind": "variable",
      "tier": "advanced",
      "at": [
        "src/core/task-notification.ts:22",
        "src/index.ts:966"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "NotificationInjectionOutcome",
      "kind": "type",
      "tier": "advanced",
      "at": [
        "src/core/task-notification.ts:21",
        "src/index.ts:965"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "PEER_DIRECTORY_CONTRACT_SCOPE",
      "kind": "variable",
      "tier": "advanced",
      "at": [
        "src/core/store-contracts/peer-directory-contract.ts:12",
        "src/index.ts:2763"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "PeerDirectoryContractHooks",
      "kind": "interface",
      "tier": "advanced",
      "at": [
        "src/core/store-contracts/peer-directory-contract.ts:14",
        "src/index.ts:2763"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "RuleTightenAddDelta",
      "kind": "interface",
      "tier": "advanced",
      "at": [
        "src/core/permission-rule-store.ts:171",
        "src/index.ts:1669"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "addPersistedRule",
      "kind": "function",
      "tier": "advanced",
      "at": [
        "src/core/permission-rule-store.ts:1277",
        "src/index.ts:1615"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "isNotificationInjectionOutcome",
      "kind": "function",
      "tier": "advanced",
      "at": [
        "src/core/task-notification.ts:25",
        "src/index.ts:967"
      ],
      "criteriaCovered": false,
      "breaking": false
    },
    {
      "name": "peerDirectoryContract",
      "kind": "function",
      "tier": "advanced",
      "at": [
        "src/core/store-contracts/peer-directory-contract.ts:51",
        "src/index.ts:2763"
      ],
      "criteriaCovered": false,
      "breaking": false
    }
  ],
  "removed": [
    {
      "name": "bashReadBoundaryProbe",
      "kind": "function",
      "tier": "advanced",
      "at": [
        "src/index.ts:588",
        "src/tools/fs/fs-bash.ts:648"
      ],
      "breaking": true
    }
  ],
  "changed": [],
  "narrowed": [
    {
      "id": "F3",
      "source": "behaviorFlips.summary",
      "text": "NARROWING (#969 S0): a child REVIVED by a sibling child (or by a host verb with no reviver session) addresses `main` to the row's ROOT session and carries no live injector — its `SendMessage(\"main\")` reads `main_not_deliverable` naming the session, instead of being delivered live into the sibling reviver's lane. WHO NEEDS IT: 'main' means one conversation (the leader), never whoever happened to wake the agent. WHO IS AFFECTED: a model that relied on a sibling reading its 'main' messages after reviving it — it addresses the sibling by name instead; the sibling's own completion notification is unchanged."
    },
    {
      "id": "F6",
      "source": "behaviorFlips.summary",
      "text": "#945 class A (NARROWING, 39 cells; 7.24.3 red on every cell): a deny-listed shell read is REFUSED at the gate's read station on every shell face and under every doctrine — no card, no YES arm"
    },
    {
      "id": "F16",
      "source": "behaviorFlips.summary",
      "text": "NARROWING (#982): a key's `rev` (`(sessionId, principal)`) is a high-water mark across `deleteBySession` — the first write after an erase stamps `max(row, mark)+1`, never 1; rows carry their LINEAGE `gen` (an erase ends it; the live rule reader treats a row of another generation as not comparable whatever its rev, and no longer latches on a transient absence); `SessionPolicyError` gains code `corrupt` (closed set +1)."
    },
    {
      "id": "F18",
      "source": "behaviorFlips.summary",
      "text": "WIDENING (#981, narrowed scope): the ancestor session-rule layer publishes the row it enforced to grandchildren spawned later (per-leg seat keyed by layer index; one projection also read by the checkpoint half); the other half (sessions with no rule row publish no ancestorRules) stays for 7.26.0."
    }
  ],
  "closedSetMembers": [
    {
      "set": "DENIED_BY_VALUES",
      "at": [
        "src/core/gate-outcome.ts:165"
      ],
      "newSet": false,
      "added": [
        "read_boundary"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "NOTIFICATION_INJECTION_OUTCOMES",
      "at": [
        "src/core/task-notification.ts:22"
      ],
      "newSet": true,
      "added": [
        "dropped_duplicate",
        "parked",
        "parked_durably",
        "queued"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "NotificationInjectionOutcome",
      "at": [
        "src/core/task-notification.ts:21"
      ],
      "newSet": true,
      "added": [
        "dropped_duplicate",
        "parked",
        "parked_durably",
        "queued"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "REMOVAL_LIVENESS_WORDS",
      "at": [
        "src/core/permission-rule-store.ts:985"
      ],
      "newSet": true,
      "added": [
        "no",
        "unknown",
        "yes"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "ReadEstablishment",
      "at": [
        "src/tools/fs/shell-read-judge.ts:105"
      ],
      "newSet": true,
      "added": [
        "canonical",
        "expansion",
        "lexical",
        "unestablishable"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "RemovalLiveness",
      "at": [
        "src/core/permission-rule-store.ts:986"
      ],
      "newSet": true,
      "added": [
        "no",
        "unknown",
        "yes"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "SHELL_READ_FINDINGS",
      "at": [
        "src/tools/fs/shell-read-judge.ts:26"
      ],
      "newSet": true,
      "added": [
        "declined",
        "deny_hit",
        "identity_changed",
        "none",
        "outside_roots",
        "unestablishable"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "SHELL_READ_SEATS",
      "at": [
        "src/tools/fs/shell-read-judge.ts:33"
      ],
      "newSet": true,
      "added": [
        "bash_classify",
        "bash_off",
        "readonly",
        "rejudge"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "ShellReadDisposition",
      "at": [
        "src/tools/fs/shell-read-judge.ts:52"
      ],
      "newSet": true,
      "added": [
        "mandated",
        "ordinary",
        "refuse",
        "vouch"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "ShellReadFinding",
      "at": [
        "src/tools/fs/shell-read-judge.ts:27"
      ],
      "newSet": true,
      "added": [
        "declined",
        "deny_hit",
        "identity_changed",
        "none",
        "outside_roots",
        "unestablishable"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "ShellReadSeat",
      "at": [
        "src/tools/fs/shell-read-judge.ts:34"
      ],
      "newSet": true,
      "added": [
        "bash_classify",
        "bash_off",
        "readonly",
        "rejudge"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "TASK_OUTPUT_REPLAY_KINDS",
      "at": [
        "src/core/task-registry-shared.ts:762"
      ],
      "newSet": true,
      "added": [
        "cursor",
        "full"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "set": "TaskOutputReplay",
      "at": [
        "src/core/task-registry-shared.ts:763"
      ],
      "newSet": true,
      "added": [
        "cursor",
        "full"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    }
  ],
  "closedSetsUnreadable": [],
  "typeKeys": [
    {
      "type": "BackgroundAgentRecord",
      "at": [
        "src/core/background-agent-store.ts:37"
      ],
      "added": [],
      "removed": [
        "teamName"
      ],
      "breaking": true,
      "criteriaCovered": false
    },
    {
      "type": "BackgroundChildEvent",
      "at": [
        "src/core/delegation-frames.ts:19"
      ],
      "added": [
        "spawnName"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": true
    },
    {
      "type": "CompoundReadonlyVerdict",
      "at": [
        "src/tools/fs/bash-readonly-classifier.ts:649"
      ],
      "added": [],
      "removed": [
        "checkedPaths",
        "checkedSpellings",
        "outOfRootGrantCandidate",
        "outOfRootGrantCoversExactPath",
        "outOfRootPaths",
        "outOfRootRead",
        "outOfRootSpellings",
        "readDenied",
        "readDeniedPath",
        "readDeniedPattern",
        "recursiveReadPaths",
        "refusedWhole",
        "segmentNameRefusal",
        "undecidedPaths",
        "undecidedSpellings",
        "unresolvedOperands"
      ],
      "breaking": true,
      "criteriaCovered": false
    },
    {
      "type": "HookInvocationIdentity",
      "at": [
        "src/core/hooks.ts:1017"
      ],
      "added": [
        "agentType",
        "spawnName"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": true
    },
    {
      "type": "MailboxPeerMeta",
      "at": [
        "src/core/mailbox-store.ts:56"
      ],
      "added": [
        "fromRoot"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "MonitorToolOptions",
      "at": [
        "src/tools/monitor.ts:60"
      ],
      "added": [
        "shellReadAdmission"
      ],
      "removed": [
        "readBoundary"
      ],
      "breaking": true,
      "criteriaCovered": false
    },
    {
      "type": "ParentSpecSeat",
      "at": [
        "src/core/parent-spec-seat.ts:42"
      ],
      "added": [
        "hooks"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": true
    },
    {
      "type": "RunInternals",
      "at": [
        "src/core/runner/contracts.ts:1324"
      ],
      "added": [
        "spawnAgentType",
        "uplinkSessionId"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "SendMessageToolOptions",
      "at": [
        "src/agents/send-message-tool.ts:45"
      ],
      "added": [
        "uplinkSessionId"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": true
    },
    {
      "type": "StoredSessionRules",
      "at": [
        "src/core/session-policy-store.ts:42"
      ],
      "added": [
        "gen"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    },
    {
      "type": "TaskEvent",
      "at": [
        "src/core/task-event.ts:265"
      ],
      "added": [
        "task_progress.spawnName"
      ],
      "removed": [],
      "breaking": false,
      "criteriaCovered": false
    }
  ],
  "declarationMoves": [
    {
      "name": "deepestCommonDir",
      "kind": null,
      "onSurface": false,
      "from": [
        "src/tools/fs/bash-readonly-classifier.ts"
      ],
      "to": [
        "src/tools/fs/shell-read-judge.ts"
      ]
    },
    {
      "name": "elideMiddle",
      "kind": null,
      "onSurface": false,
      "from": [
        "src/tools/fs/fs-bash.ts"
      ],
      "to": [
        "src/tools/fs/read-deny.ts"
      ]
    },
    {
      "name": "fitMiddle",
      "kind": null,
      "onSurface": false,
      "from": [
        "src/tools/fs/fs-bash.ts"
      ],
      "to": [
        "src/tools/fs/read-deny.ts"
      ]
    }
  ],
  "mintMoves": [],
  "criteriaObserves": [
    {
      "kind": "taskEventField",
      "name": "tool_end.errorCode",
      "assertions": [
        "G6.a"
      ]
    },
    {
      "kind": "taskEventField",
      "name": "tool_end.gate",
      "assertions": [
        "G6.a",
        "G10.a"
      ]
    },
    {
      "kind": "taskEventField",
      "name": "tool_end.isError",
      "assertions": [
        "G10.a"
      ]
    },
    {
      "kind": "taskEventField",
      "name": "tool_end.output",
      "assertions": [
        "G2.a",
        "G3.a"
      ]
    },
    {
      "kind": "taskEventField",
      "name": "tool_end.structured",
      "assertions": [
        "G6.a",
        "G6.c",
        "G9.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "AskRequest.origin",
      "assertions": [
        "G6.b"
      ]
    },
    {
      "kind": "typeMember",
      "name": "AskRequest.probeReason",
      "assertions": [
        "G6.b"
      ]
    },
    {
      "kind": "typeMember",
      "name": "AskRequest.readRootCandidate",
      "assertions": [
        "G6.b",
        "G6.c"
      ]
    },
    {
      "kind": "typeMember",
      "name": "BackgroundAgentRecord.rootSessionId",
      "assertions": [
        "G5.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "BackgroundChildEvent.spawnName",
      "assertions": [
        "G1.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "HookInvocationIdentity.spawnName",
      "assertions": [
        "G4.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "ParentSpecSeat.hooks",
      "assertions": [
        "G4.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "RuleAdd.origin",
      "assertions": [
        "G7.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "SendMessageToolOptions.uplinkSessionId",
      "assertions": [
        "G2.a",
        "G3.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "SessionPolicyStore.deleteBySession",
      "assertions": [
        "G8.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "StoredSessionRules.rev",
      "assertions": [
        "G8.a"
      ]
    }
  ],
  "consumersHint": {
    "cli": [],
    "server": [],
    "sdk": [],
    "note": "NOT SCANNED: sema-cli, sema-server, sema-sdk — an empty list for those repos means \"not checked out\", not \"no consumer\""
  },
  "breakingCount": 4,
  "breakingItems": [
    "export removed: bashReadBoundaryProbe (function)",
    "type lost keys: BackgroundAgentRecord -teamName",
    "type lost keys: CompoundReadonlyVerdict -checkedPaths,checkedSpellings,outOfRootGrantCandidate,outOfRootGrantCoversExactPath,outOfRootPaths,outOfRootRead,outOfRootSpellings,readDenied,readDeniedPath,readDeniedPattern,recursiveReadPaths,refusedWhole,segmentNameRefusal,undecidedPaths,undecidedSpellings,unresolvedOperands",
    "type lost keys: MonitorToolOptions -readBoundary"
  ],
  "toResolvedAt": "0acdbbe6fc5d38e5e3545a0adce816901a2f68c2"
}
