@sema-agent/core
Version:
Stateless, task-oriented AI agent core
672 lines (671 loc) • 15.7 kB
JSON
{
"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"
}