@sema-agent/core 7.30.1 → 7.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/CHANGELOG.md +284 -0
  2. package/dist/agents/cross-session-judge.d.ts +4 -12
  3. package/dist/agents/cross-session-judge.js +4 -11
  4. package/dist/agents/peer-session-drain.js +0 -5
  5. package/dist/agents/send-message-tool.js +1 -0
  6. package/dist/agents/subagent.d.ts +1 -0
  7. package/dist/agents/subagent.js +1 -0
  8. package/dist/core/ask-origin.d.ts +6 -0
  9. package/dist/core/ask-origin.js +10 -0
  10. package/dist/core/checkpoint-store.d.ts +14 -0
  11. package/dist/core/checkpoint-store.js +1 -0
  12. package/dist/core/engine-notice.d.ts +4 -0
  13. package/dist/core/governance-codes.d.ts +1 -1
  14. package/dist/core/governance-codes.js +4 -0
  15. package/dist/core/memory-engine/data-plane.d.ts +3 -1
  16. package/dist/core/memory-engine/data-plane.js +1 -1
  17. package/dist/core/memory-engine/delegation-settlement.d.ts +44 -3
  18. package/dist/core/memory-engine/delegation-settlement.js +38 -3
  19. package/dist/core/memory-engine/engine.d.ts +133 -27
  20. package/dist/core/memory-engine/engine.js +452 -151
  21. package/dist/core/memory-engine/entry-scan.d.ts +23 -0
  22. package/dist/core/memory-engine/entry-scan.js +55 -0
  23. package/dist/core/memory-engine/file-backend.d.ts +31 -23
  24. package/dist/core/memory-engine/file-backend.js +174 -100
  25. package/dist/core/memory-engine/layer-observations.d.ts +109 -0
  26. package/dist/core/memory-engine/layer-observations.js +148 -0
  27. package/dist/core/memory-engine/layout.d.ts +40 -4
  28. package/dist/core/memory-engine/layout.js +43 -7
  29. package/dist/core/memory-engine/types.d.ts +26 -2
  30. package/dist/core/parent-spec-seat.d.ts +4 -1
  31. package/dist/core/parent-spec-seat.js +2 -0
  32. package/dist/core/park-selfcheck.js +1 -0
  33. package/dist/core/runner/announce-once-ledger.d.ts +26 -0
  34. package/dist/core/runner/announce-once-ledger.js +37 -0
  35. package/dist/core/runner/contracts.d.ts +22 -5
  36. package/dist/core/runner/denial-limit-arms.d.ts +2 -2
  37. package/dist/core/runner/prepare-acquire-reconcile.d.ts +0 -4
  38. package/dist/core/runner/prepare-acquire-reconcile.js +1 -3
  39. package/dist/core/runner/prepare-file-history.d.ts +13 -15
  40. package/dist/core/runner/prepare-file-history.js +57 -43
  41. package/dist/core/runner/prepare-hands-readface.d.ts +2 -2
  42. package/dist/core/runner/prepare-listings.d.ts +3 -1
  43. package/dist/core/runner/prepare-listings.js +2 -2
  44. package/dist/core/runner/prepare-memory.js +16 -5
  45. package/dist/core/runner/prepare-park-ask.js +27 -16
  46. package/dist/core/runner/prepare-prompt-inputs.d.ts +8 -1
  47. package/dist/core/runner/prepare-prompt-inputs.js +5 -3
  48. package/dist/core/runner/prepare-task.js +7 -5
  49. package/dist/core/runner/prepare-wiring-manifest.d.ts +1 -0
  50. package/dist/core/runner/prepare-wiring-manifest.js +2 -1
  51. package/dist/core/runner/run-attachment-seats.js +1 -1
  52. package/dist/core/runner/run-leg.js +61 -52
  53. package/dist/core/runner/run-settle-and-teardown.js +4 -0
  54. package/dist/core/runner/run-turn-boundary.js +6 -6
  55. package/dist/core/runner/turn-attachments.d.ts +6 -6
  56. package/dist/core/runner-deps.d.ts +3 -1
  57. package/dist/core/secret-env.d.ts +12 -1
  58. package/dist/core/secret-env.js +27 -2
  59. package/dist/core/store-contracts/checkpoint-store-contract.d.ts +2 -0
  60. package/dist/core/store-contracts/checkpoint-store-contract.js +22 -0
  61. package/dist/core/task-result.d.ts +1 -1
  62. package/dist/core/task-spec.d.ts +17 -8
  63. package/dist/core/tool-spec.d.ts +1 -1
  64. package/dist/core/wiring-manifest.d.ts +10 -0
  65. package/dist/core/wiring-manifest.js +7 -1
  66. package/dist/engine/execution-env/node-execution-env.d.ts +6 -0
  67. package/dist/engine/execution-env/node-execution-env.js +15 -17
  68. package/dist/engine/harness/agent-harness.js +7 -5
  69. package/dist/engine/lsp/node-lsp-manager.d.ts +4 -0
  70. package/dist/engine/lsp/node-lsp-manager.js +10 -4
  71. package/dist/index.d.ts +1 -1
  72. package/dist/index.js +1 -1
  73. package/dist/tools/fs/shell-read-plan.d.ts +2 -2
  74. package/dist/tools/fs/shell-read-plan.js +15 -10
  75. package/dist/tools/fs/shell-read-word.d.ts +5 -4
  76. package/dist/tools/fs/shell-read-word.js +3 -2
  77. package/package.json +1 -1
  78. package/test/export-surface.snapshot.json +7 -1
  79. package/wire-changes/core@7.31.0.json +705 -0
  80. package/wire-changes/core@7.31.1.json +189 -0
@@ -0,0 +1,705 @@
1
+ {
2
+ "repo": "core",
3
+ "version": "7.31.0",
4
+ "from": "dd49f2638b0c29a0ff735b8870b1534dce4e0485",
5
+ "to": "v7.31.0",
6
+ "added": [
7
+ {
8
+ "name": "MEMORY_PROJECT_KEY_ABSENT_REASONS",
9
+ "kind": "variable",
10
+ "tier": "advanced",
11
+ "at": [
12
+ "src/core/memory.ts:1091",
13
+ "src/index.ts:1984"
14
+ ],
15
+ "criteriaCovered": false,
16
+ "breaking": false
17
+ },
18
+ {
19
+ "name": "MemoryProjectKey",
20
+ "kind": "type",
21
+ "tier": "advanced",
22
+ "at": [
23
+ "src/core/memory.ts:1103",
24
+ "src/index.ts:1986"
25
+ ],
26
+ "criteriaCovered": true,
27
+ "breaking": false
28
+ },
29
+ {
30
+ "name": "MemoryProjectKeyAbsentReason",
31
+ "kind": "type",
32
+ "tier": "advanced",
33
+ "at": [
34
+ "src/core/memory.ts:1092",
35
+ "src/index.ts:1985"
36
+ ],
37
+ "criteriaCovered": false,
38
+ "breaking": false
39
+ }
40
+ ],
41
+ "removed": [],
42
+ "changed": [],
43
+ "narrowed": [
44
+ {
45
+ "id": "F3",
46
+ "source": "behaviorFlips.summary",
47
+ "text": "Additive deployment switch + one NARROWING (#1050; +1 `RunnerDeps` word, +1 config code; two refusal texts reworded, codes unchanged; +0 exports). (a) `RunnerDeps.fileHistoryCapture?: \"off\"` beside a real store: no run records (no first-touch, no boundary, no fork carry, no advisory; the leg's `wiring_manifest.fileHistory` reads `\"disabled\"`), and the store stays the restore seat — `restoreFiles` / `rewindFilesTo` converge to boundaries already in it. Every other value, and `\"off\"` with no real store (key omitted, or `fileHistoryStore: \"disabled\"`), refuses prepare `config.invalid_file_history_capture` before any store call. (b) `rewind.store_unconfigured` names its arm — an omitted store keeps `… this deployment wired no RunnerDeps.fileHistoryStore …`, a `\"disabled\"` seat says `… this deployment declared file history disabled (RunnerDeps.fileHistoryStore: \"disabled\") …` — and `rewind_snapshot.unresolvable`'s second sentence says boundaries exist only for turns that recorded history (KL-1047a closed). (c) NARROWING: `resumeAt` + `resumeAtMode: \"before\"` + `restoreFiles` converges to the target entry's OWN boundary or refuses `rewind_snapshot.unresolvable` with the files untouched (`entry \"<id>\" has no file-history boundary … never crosses into an earlier turn`); the fallback to the nearest boundary-carrying ancestor — which also reverted edits the kept conversation still shows — is removed (`rewindFilesTo` and `\"at\"` mode never walked). WHO IS HURT: a consumer matching the two refusal texts (switch on the code), a deployment writing `\"off\"` with no store, a consumer pinning the `config.*` code set, a caller sending a before-restore at a steer / follow-up entry or at a turn that recorded nothing. ORDER: core first. Residual KL-1050a."
48
+ },
49
+ {
50
+ "id": "F4",
51
+ "source": "behaviorFlips.summary",
52
+ "text": "Behaviour NARROWING (#1074; +0 exports, +0 wire keys): a stop ends the leg. A leg whose abort has fired issues no prompt — read at each leg's prompt door after everything that can fire it: the durable classifier denial-limit stop (inside the resume leg's decision application), a cancel landing while the approved call runs on a resume, while a parked steer is screened, or while the objective's image is fetched. `AgentHarness.prompt` mints its run controller before its own startup awaits, so a cancel landing while a prompt starts up reaches the loop, and a run aborted before its first turn ends `run aborted` (not `invalid_state`). After the durable stop: 0 model calls, 0 tool frames, one `done` carrying `classifier.denial_limit` and the notice's sentence, whatever limits are declared; a cancel before the prompt ends `failed` / `run aborted` with no model call. A continuation not sent stays owed: a steer parked on the consumed row is announced (`task.user_steer_undrained`), a review decision it would have delivered reopens its row, the objective leg publishes no `human_input` \"applied\" account, the suspended batch's unanswered siblings close \"never executed\". WHO IS HURT: a host or test that counted the post-stop turns or read a `limits.*` code off a stopped durable leg. Residuals KL-1074a–c."
53
+ },
54
+ {
55
+ "id": "F6",
56
+ "source": "behaviorFlips.summary",
57
+ "text": "Behaviour NARROWING (#1076b, #1080; +0 exports; +2 optional `MemorySessionHandle` keys `layerBaseline`, `accountLeg`; +0 wire keys; +1 incident code `memory.observation_settlement_unavailable`): bytes that appear in a read-only memory layer during a session are never adopted. A session's harvest compares each layer it holds read-only with a census taken at its materialize; every file whose bytes changed in that window and that no commit backs is recorded in the control plane (`layer-observations.json`). Every door through which uncommitted disk state enters the committed account consults it — the adopting read's edit / new-file / move arms, the lock-free retrieval face, a writer's harvest: a recorded divergence is NOT adopted — the committed copy is served, the file is left as found, and every session that meets it is told (`change NOT adopted: …` / `file NOT adopted: …`). A divergence nobody recorded (a git pull between sessions) is adopted as before; a commit that moves an entry's rev retires every record made against the old rev. While a transaction journal is pending the question is undecidable: the change is recorded UNDECIDED (never adopted meanwhile; `change NOT adopted yet …`); the first session that may write settles each undecided row after its preflight recovered the journal — a commit backing the bytes at their seat drops that row, a readable committed face that does not back them pins the row to the rev it read (an ordinary row from then on), an unreadable one keeps it undecided. A zero-copy backend without the committed-snapshot face (`committedSnapshotOf` — e.g. a wrapper that does not pass it through) records every such change undecided and never settles it; the engine states that ONCE per engine at materialize (`memory.observation_settlement_unavailable` on `MemoryEngineOptions.onIncident`). Writer presence (#1080): a writing session does not restore a read-only layer file while a session that writes that layer is live — liveness is the session-account row's leg (`terminatedAt` absent), never `closedAt` — it warns instead. WHO IS HURT: a legitimate write landing inside a session's window in a layer that session holds read-only (a git pull during it) is recorded and not adopted until a commit moves its rev or its bytes change (KL-1076b-a); a host relying on a zero-copy mount rewriting a hand-edited entry file into canonical bytes. Residuals KL-1076b-b – KL-1076b-o."
58
+ },
59
+ {
60
+ "id": "F7",
61
+ "source": "behaviorFlips.summary",
62
+ "text": "BREAKING (type: the optional `ResolvedCrossSessionInboundSetting.deprecatedLayers` is removed) + behaviour NARROWING (#1078; +0 exports): `crossSessionInbound`'s retired spelling `accept` reads exactly like any other unrecognized value — the layer is reported in `invalidLayers` with `decidedBy: \"invalid\"`, and the existing fail-closed rule forces `hold` whenever the standing value is looser (the drain holds each record with the `invalid-setting` cause, disclosed as `peer.inbound_disposition` with `disposition: \"held\"`); the per-leg spelling announcement and the module-local `CROSS_SESSION_INBOUND_DEPRECATED_SPELLINGS` (never exported) are gone. THREE SENTENCES — WHO IS HURT: a settings layer (managed / user / repo) still spelling `accept`, silently migrated to `next-turn` with one warning per leg on 7.30.x, now holds every cross-session message it would have delivered; a reader of `deprecatedLayers` gets a type error. COMPENSATION: settings-schema 6.0.0 already rejects `accept` at the schema door, so no currently valid settings file carries it, and the hold is announced through the same invalid-setting arm a typo takes. UPGRADE: write `next-turn` in every layer that says `accept`, and drop reads of `deprecatedLayers`."
63
+ },
64
+ {
65
+ "id": "F8",
66
+ "source": "behaviorFlips.summary",
67
+ "text": "Additive (#1079; +0 exports; +2 optional type keys; no checkpoint-version bump) + one NARROWING (#1088, tightening only). (a) The durable park row carries the mandate twin: `PendingAction` (`tool_approval` arm) `.mandated?: true` and `CheckpointSummary.mandated?: true` — present ⇔ no persisted allow rule and no standing answer may retire the parked question; `true` only, never `false`; minted from the SAME clearance-facts object the row's rule-offer factory reads, through the derivation the live card's `AskRequest.mandated` comes from; the summary screens it to the literal `true`. Three independent facts now ride a parked card: `requiresRealApproval` (only a person — implies the mandate), `mandated` (no rule), `ruleOffersAbsence` (what the offer lane has to give). Display metadata: no gate, CAS or resume path reads it; a row minted before it reads absent (unreported). (b) #1088: when a JSON-fidelity checkpoint backend's projection moves the parked value and the deployment's policy re-judges the stored shape, the re-judgment's ask JOINS the gate's facts, tightening only — its `requiresRealApproval` makes the park `irreversible_ask` with `gate.realApproval` (worded by the parked ask's own origin) and the row's `requiresRealApproval`; its mandate and an explicit ask-rule match join the clearance facts. A demand the first judgment already made is kept; a re-judgment that allows or asks plainly changes nothing. WHO IS HURT: (#1088) a budget resolver that auto-approved such a park (`human` → `irreversible_ask`) no longer may; a custom `CheckpointStore` must round-trip `mandated` (the store-contract kit now fails a whitelisting serializer)."
68
+ }
69
+ ],
70
+ "closedSetMembers": [
71
+ {
72
+ "set": "ENGINE_NOTICE_CODES",
73
+ "at": [
74
+ "src/core/governance-codes.ts:317"
75
+ ],
76
+ "newSet": false,
77
+ "added": [
78
+ "config.secret_env_scrubbed"
79
+ ],
80
+ "removed": [],
81
+ "breaking": false,
82
+ "criteriaCovered": true
83
+ },
84
+ {
85
+ "set": "SessionAccountWrite",
86
+ "at": [
87
+ "src/core/memory-engine/delegation-settlement.ts:680"
88
+ ],
89
+ "newSet": true,
90
+ "added": [
91
+ "absent",
92
+ "stale",
93
+ "written"
94
+ ],
95
+ "removed": [],
96
+ "breaking": false,
97
+ "criteriaCovered": false
98
+ }
99
+ ],
100
+ "closedSetsUnreadable": [],
101
+ "typeKeys": [
102
+ {
103
+ "type": "CheckpointSummary",
104
+ "at": [
105
+ "src/core/checkpoint-store.ts:2090"
106
+ ],
107
+ "added": [
108
+ "mandated"
109
+ ],
110
+ "addedDetail": [
111
+ {
112
+ "key": "mandated",
113
+ "optional": true
114
+ }
115
+ ],
116
+ "addedRequired": [],
117
+ "removed": [],
118
+ "breaking": false,
119
+ "criteriaCovered": true
120
+ },
121
+ {
122
+ "type": "MemorySessionHandle",
123
+ "at": [
124
+ "src/core/memory-engine/types.ts:403"
125
+ ],
126
+ "added": [
127
+ "accountLeg",
128
+ "layerBaseline"
129
+ ],
130
+ "addedDetail": [
131
+ {
132
+ "key": "accountLeg",
133
+ "optional": true
134
+ },
135
+ {
136
+ "key": "layerBaseline",
137
+ "optional": true
138
+ }
139
+ ],
140
+ "addedRequired": [],
141
+ "removed": [],
142
+ "breaking": false,
143
+ "criteriaCovered": true
144
+ },
145
+ {
146
+ "type": "NodeLspManagerOptions",
147
+ "at": [
148
+ "src/engine/lsp/node-lsp-manager.ts:77"
149
+ ],
150
+ "added": [
151
+ "onNotice"
152
+ ],
153
+ "addedDetail": [
154
+ {
155
+ "key": "onNotice",
156
+ "optional": true
157
+ }
158
+ ],
159
+ "addedRequired": [],
160
+ "removed": [],
161
+ "breaking": false,
162
+ "criteriaCovered": true
163
+ },
164
+ {
165
+ "type": "ParentSpecSeat",
166
+ "at": [
167
+ "src/core/parent-spec-seat.ts:67"
168
+ ],
169
+ "added": [
170
+ "fileHistory"
171
+ ],
172
+ "addedDetail": [
173
+ {
174
+ "key": "fileHistory",
175
+ "optional": true
176
+ }
177
+ ],
178
+ "addedRequired": [],
179
+ "removed": [],
180
+ "breaking": false,
181
+ "criteriaCovered": false
182
+ },
183
+ {
184
+ "type": "PendingAction",
185
+ "at": [
186
+ "src/core/checkpoint-store.ts:962"
187
+ ],
188
+ "added": [
189
+ "tool_approval.mandated"
190
+ ],
191
+ "addedDetail": [
192
+ {
193
+ "key": "tool_approval.mandated",
194
+ "optional": true
195
+ }
196
+ ],
197
+ "addedRequired": [],
198
+ "removed": [],
199
+ "breaking": false,
200
+ "criteriaCovered": false
201
+ },
202
+ {
203
+ "type": "ResolvedCrossSessionInboundSetting",
204
+ "at": [
205
+ "src/agents/cross-session-judge.ts:54"
206
+ ],
207
+ "added": [],
208
+ "addedDetail": [],
209
+ "addedRequired": [],
210
+ "removed": [
211
+ "deprecatedLayers"
212
+ ],
213
+ "breaking": true,
214
+ "criteriaCovered": false
215
+ },
216
+ {
217
+ "type": "RunnerDeps",
218
+ "at": [
219
+ "src/core/runner-deps.ts:105"
220
+ ],
221
+ "added": [
222
+ "fileHistoryCapture"
223
+ ],
224
+ "addedDetail": [
225
+ {
226
+ "key": "fileHistoryCapture",
227
+ "optional": true
228
+ }
229
+ ],
230
+ "addedRequired": [],
231
+ "removed": [],
232
+ "breaking": false,
233
+ "criteriaCovered": true
234
+ },
235
+ {
236
+ "type": "TaskSpec",
237
+ "at": [
238
+ "src/core/task-spec.ts:55"
239
+ ],
240
+ "added": [
241
+ "fileHistory"
242
+ ],
243
+ "addedDetail": [
244
+ {
245
+ "key": "fileHistory",
246
+ "optional": true
247
+ }
248
+ ],
249
+ "addedRequired": [],
250
+ "removed": [],
251
+ "breaking": false,
252
+ "criteriaCovered": true
253
+ },
254
+ {
255
+ "type": "WiringFacts",
256
+ "at": [
257
+ "src/core/wiring-manifest.ts:431"
258
+ ],
259
+ "added": [
260
+ "fileHistory"
261
+ ],
262
+ "addedDetail": [
263
+ {
264
+ "key": "fileHistory",
265
+ "optional": true
266
+ }
267
+ ],
268
+ "addedRequired": [],
269
+ "removed": [],
270
+ "breaking": false,
271
+ "criteriaCovered": false
272
+ },
273
+ {
274
+ "type": "WiringManifest",
275
+ "at": [
276
+ "src/core/wiring-manifest.ts:183"
277
+ ],
278
+ "added": [
279
+ "fileHistory"
280
+ ],
281
+ "addedDetail": [
282
+ {
283
+ "key": "fileHistory",
284
+ "optional": true
285
+ }
286
+ ],
287
+ "addedRequired": [],
288
+ "removed": [],
289
+ "breaking": false,
290
+ "criteriaCovered": true
291
+ }
292
+ ],
293
+ "typeKeysUnreadableArms": [],
294
+ "typeKeysFlattenedCount": 214,
295
+ "declarationMoves": [
296
+ {
297
+ "name": "DEFAULT_MAX_ENTRY_DEPTH",
298
+ "kind": "variable",
299
+ "onSurface": true,
300
+ "from": [
301
+ "src/core/memory-engine/file-backend.ts",
302
+ "src/core/memory-engine/index.ts",
303
+ "src/index.ts"
304
+ ],
305
+ "to": [
306
+ "src/core/memory-engine/entry-scan.ts",
307
+ "src/core/memory-engine/file-backend.ts",
308
+ "src/core/memory-engine/index.ts",
309
+ "src/index.ts"
310
+ ]
311
+ },
312
+ {
313
+ "name": "MEMORY_INDEX_FILENAME",
314
+ "kind": "variable",
315
+ "onSurface": true,
316
+ "from": [
317
+ "src/core/memory-engine/file-backend.ts",
318
+ "src/core/memory-engine/index.ts",
319
+ "src/index.ts"
320
+ ],
321
+ "to": [
322
+ "src/core/memory-engine/entry-scan.ts",
323
+ "src/core/memory-engine/file-backend.ts",
324
+ "src/core/memory-engine/index.ts",
325
+ "src/index.ts"
326
+ ]
327
+ },
328
+ {
329
+ "name": "MEMORY_PROJECT_KEY_ABSENT_REASONS",
330
+ "kind": "variable",
331
+ "onSurface": true,
332
+ "from": [
333
+ "src/core/memory.ts"
334
+ ],
335
+ "to": [
336
+ "src/core/memory.ts",
337
+ "src/index.ts"
338
+ ]
339
+ },
340
+ {
341
+ "name": "MemoryProjectKey",
342
+ "kind": "type",
343
+ "onSurface": true,
344
+ "from": [
345
+ "src/core/memory.ts"
346
+ ],
347
+ "to": [
348
+ "src/core/memory.ts",
349
+ "src/index.ts"
350
+ ]
351
+ },
352
+ {
353
+ "name": "MemoryProjectKeyAbsentReason",
354
+ "kind": "type",
355
+ "onSurface": true,
356
+ "from": [
357
+ "src/core/memory.ts"
358
+ ],
359
+ "to": [
360
+ "src/core/memory.ts",
361
+ "src/index.ts"
362
+ ]
363
+ },
364
+ {
365
+ "name": "ScannedEntryFile",
366
+ "kind": "interface",
367
+ "onSurface": true,
368
+ "from": [
369
+ "src/core/memory-engine/file-backend.ts",
370
+ "src/core/memory-engine/index.ts",
371
+ "src/index.ts"
372
+ ],
373
+ "to": [
374
+ "src/core/memory-engine/entry-scan.ts",
375
+ "src/core/memory-engine/file-backend.ts",
376
+ "src/core/memory-engine/index.ts",
377
+ "src/index.ts"
378
+ ]
379
+ },
380
+ {
381
+ "name": "scanEntryFiles",
382
+ "kind": "function",
383
+ "onSurface": true,
384
+ "from": [
385
+ "src/core/memory-engine/file-backend.ts",
386
+ "src/core/memory-engine/index.ts",
387
+ "src/index.ts"
388
+ ],
389
+ "to": [
390
+ "src/core/memory-engine/entry-scan.ts",
391
+ "src/core/memory-engine/file-backend.ts",
392
+ "src/core/memory-engine/index.ts",
393
+ "src/index.ts"
394
+ ]
395
+ }
396
+ ],
397
+ "mintMoves": [],
398
+ "criteriaObserves": [
399
+ {
400
+ "kind": "engineNoticeCode",
401
+ "name": "classifier.denial_limit",
402
+ "assertions": [
403
+ "G4.a"
404
+ ]
405
+ },
406
+ {
407
+ "kind": "engineNoticeCode",
408
+ "name": "config.secret_env_scrubbed",
409
+ "assertions": [
410
+ "G9.a"
411
+ ]
412
+ },
413
+ {
414
+ "kind": "engineNoticeCode",
415
+ "name": "peer.inbound_disposition",
416
+ "assertions": [
417
+ "G7.a"
418
+ ]
419
+ },
420
+ {
421
+ "kind": "taskEventField",
422
+ "name": "done.result",
423
+ "assertions": [
424
+ "G4.a"
425
+ ]
426
+ },
427
+ {
428
+ "kind": "taskEventField",
429
+ "name": "steering_injected.preview",
430
+ "assertions": [
431
+ "G1.a"
432
+ ]
433
+ },
434
+ {
435
+ "kind": "taskEventField",
436
+ "name": "steering_injected.source",
437
+ "assertions": [
438
+ "G1.a"
439
+ ]
440
+ },
441
+ {
442
+ "kind": "taskEventField",
443
+ "name": "tool_end.isError",
444
+ "assertions": [
445
+ "G5.a"
446
+ ]
447
+ },
448
+ {
449
+ "kind": "taskEventField",
450
+ "name": "tool_end.output",
451
+ "assertions": [
452
+ "G5.a"
453
+ ]
454
+ },
455
+ {
456
+ "kind": "taskEventField",
457
+ "name": "tool_start.toolCallId",
458
+ "assertions": [
459
+ "G4.a"
460
+ ]
461
+ },
462
+ {
463
+ "kind": "typeMember",
464
+ "name": "Checkpoint.gate.realApproval",
465
+ "assertions": [
466
+ "G8.a"
467
+ ]
468
+ },
469
+ {
470
+ "kind": "typeMember",
471
+ "name": "CheckpointSummary.gateKind",
472
+ "assertions": [
473
+ "G8.a"
474
+ ]
475
+ },
476
+ {
477
+ "kind": "typeMember",
478
+ "name": "CheckpointSummary.mandated",
479
+ "assertions": [
480
+ "G8.a"
481
+ ]
482
+ },
483
+ {
484
+ "kind": "typeMember",
485
+ "name": "EngineNotice.detail",
486
+ "assertions": [
487
+ "G7.a",
488
+ "G9.a"
489
+ ]
490
+ },
491
+ {
492
+ "kind": "typeMember",
493
+ "name": "HarvestReport.rejections",
494
+ "assertions": [
495
+ "G6.a"
496
+ ]
497
+ },
498
+ {
499
+ "kind": "typeMember",
500
+ "name": "HarvestReport.restored",
501
+ "assertions": [
502
+ "G6.a"
503
+ ]
504
+ },
505
+ {
506
+ "kind": "typeMember",
507
+ "name": "HarvestReport.warnings",
508
+ "assertions": [
509
+ "G5.a",
510
+ "G6.a",
511
+ "G6.b"
512
+ ]
513
+ },
514
+ {
515
+ "kind": "typeMember",
516
+ "name": "MemoryEngine.eraseMemoryEntries",
517
+ "assertions": [
518
+ "G5.a"
519
+ ]
520
+ },
521
+ {
522
+ "kind": "typeMember",
523
+ "name": "MemoryEngineOptions.onIncident",
524
+ "assertions": [
525
+ "G6.b"
526
+ ]
527
+ },
528
+ {
529
+ "kind": "typeMember",
530
+ "name": "MemoryProjectKey.absent",
531
+ "assertions": [
532
+ "G10.a"
533
+ ]
534
+ },
535
+ {
536
+ "kind": "typeMember",
537
+ "name": "MemoryProjectKey.scope",
538
+ "assertions": [
539
+ "G10.a"
540
+ ]
541
+ },
542
+ {
543
+ "kind": "typeMember",
544
+ "name": "MemorySessionHandle.layerBaseline",
545
+ "assertions": [
546
+ "G6.a"
547
+ ]
548
+ },
549
+ {
550
+ "kind": "typeMember",
551
+ "name": "MemorySessionHandle.materialized",
552
+ "assertions": [
553
+ "G5.a",
554
+ "G6.a",
555
+ "G6.b"
556
+ ]
557
+ },
558
+ {
559
+ "kind": "typeMember",
560
+ "name": "NodeLspManagerOptions.onNotice",
561
+ "assertions": [
562
+ "G9.a"
563
+ ]
564
+ },
565
+ {
566
+ "kind": "typeMember",
567
+ "name": "PendingAction.mandated",
568
+ "assertions": [
569
+ "G8.a"
570
+ ]
571
+ },
572
+ {
573
+ "kind": "typeMember",
574
+ "name": "PendingAction.requiresRealApproval",
575
+ "assertions": [
576
+ "G8.a"
577
+ ]
578
+ },
579
+ {
580
+ "kind": "typeMember",
581
+ "name": "ResolvedCrossSessionInboundSetting.decidedBy",
582
+ "assertions": [
583
+ "G7.a"
584
+ ]
585
+ },
586
+ {
587
+ "kind": "typeMember",
588
+ "name": "ResolvedCrossSessionInboundSetting.invalidLayers",
589
+ "assertions": [
590
+ "G7.a"
591
+ ]
592
+ },
593
+ {
594
+ "kind": "typeMember",
595
+ "name": "ResolvedCrossSessionInboundSetting.value",
596
+ "assertions": [
597
+ "G7.a"
598
+ ]
599
+ },
600
+ {
601
+ "kind": "typeMember",
602
+ "name": "RunnerDeps.fileHistoryCapture",
603
+ "assertions": [
604
+ "G3.a"
605
+ ]
606
+ },
607
+ {
608
+ "kind": "typeMember",
609
+ "name": "TaskResult.terminal.code",
610
+ "assertions": [
611
+ "G2.a",
612
+ "G3.a",
613
+ "G3.b",
614
+ "G4.a"
615
+ ]
616
+ },
617
+ {
618
+ "kind": "typeMember",
619
+ "name": "TaskResult.terminal.message",
620
+ "assertions": [
621
+ "G3.a",
622
+ "G3.b"
623
+ ]
624
+ },
625
+ {
626
+ "kind": "typeMember",
627
+ "name": "TaskSpec.fileHistory",
628
+ "assertions": [
629
+ "G2.a"
630
+ ]
631
+ },
632
+ {
633
+ "kind": "typeMember",
634
+ "name": "TaskSpec.memory.projectKey",
635
+ "assertions": [
636
+ "G10.a"
637
+ ]
638
+ },
639
+ {
640
+ "kind": "typeMember",
641
+ "name": "TaskSpec.restoreFiles",
642
+ "assertions": [
643
+ "G3.b"
644
+ ]
645
+ },
646
+ {
647
+ "kind": "typeMember",
648
+ "name": "TaskSpec.resumeAtMode",
649
+ "assertions": [
650
+ "G3.b"
651
+ ]
652
+ },
653
+ {
654
+ "kind": "typeMember",
655
+ "name": "WiringManifest.fileHistory",
656
+ "assertions": [
657
+ "G2.a",
658
+ "G3.a"
659
+ ]
660
+ }
661
+ ],
662
+ "consumersHint": {
663
+ "cli": [
664
+ "CheckpointSummary",
665
+ "ENGINE_NOTICE_CODES",
666
+ "MEMORY_PROJECT_KEY_ABSENT_REASONS",
667
+ "MemoryProjectKeyAbsentReason",
668
+ "MemorySessionHandle",
669
+ "ParentSpecSeat",
670
+ "PendingAction",
671
+ "RunnerDeps",
672
+ "TaskSpec",
673
+ "WiringFacts",
674
+ "WiringManifest"
675
+ ],
676
+ "server": [
677
+ "CheckpointSummary",
678
+ "ENGINE_NOTICE_CODES",
679
+ "MEMORY_PROJECT_KEY_ABSENT_REASONS",
680
+ "MemoryProjectKey",
681
+ "MemorySessionHandle",
682
+ "NodeLspManagerOptions",
683
+ "ParentSpecSeat",
684
+ "PendingAction",
685
+ "RunnerDeps",
686
+ "TaskSpec",
687
+ "WiringFacts",
688
+ "WiringManifest"
689
+ ],
690
+ "sdk": [
691
+ "CheckpointSummary",
692
+ "ENGINE_NOTICE_CODES",
693
+ "PendingAction",
694
+ "RunnerDeps",
695
+ "TaskSpec",
696
+ "WiringManifest"
697
+ ],
698
+ "note": "scanned cli@4e593722 server@57709419 sdk@a9440f2 — 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: 1 name(s) matched ONLY in bookkeeping files and were set aside (ResolvedCrossSessionInboundSetting)"
699
+ },
700
+ "breakingCount": 1,
701
+ "breakingItems": [
702
+ "type lost keys: ResolvedCrossSessionInboundSetting -deprecatedLayers"
703
+ ],
704
+ "toResolvedAt": "3f6c68b65cc5b8f778b01c42cf4e838babf97be1"
705
+ }