@sema-agent/core 7.29.0 → 7.30.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 (158) hide show
  1. package/CHANGELOG.md +393 -0
  2. package/dist/agents/child-model-seat.d.ts +59 -7
  3. package/dist/agents/child-model-seat.js +33 -7
  4. package/dist/agents/cross-session-judge.d.ts +27 -5
  5. package/dist/agents/cross-session-judge.js +23 -12
  6. package/dist/agents/list-agents-tool.d.ts +31 -6
  7. package/dist/agents/list-agents-tool.js +66 -14
  8. package/dist/agents/peer-admission.d.ts +20 -8
  9. package/dist/agents/peer-admission.js +21 -12
  10. package/dist/agents/peer-directory.d.ts +29 -0
  11. package/dist/agents/peer-directory.js +20 -0
  12. package/dist/agents/peer-held-queue.d.ts +31 -4
  13. package/dist/agents/peer-held-queue.js +32 -1
  14. package/dist/agents/peer-session-drain.d.ts +91 -13
  15. package/dist/agents/peer-session-drain.js +409 -102
  16. package/dist/agents/read-inbox-tool.d.ts +22 -0
  17. package/dist/agents/read-inbox-tool.js +39 -0
  18. package/dist/agents/roster-store.d.ts +2 -4
  19. package/dist/agents/roster-store.js +1 -1
  20. package/dist/agents/send-message-tool.d.ts +4 -4
  21. package/dist/agents/send-message-tool.js +22 -2
  22. package/dist/agents/subagent.js +62 -44
  23. package/dist/agents/team-role.d.ts +34 -0
  24. package/dist/agents/team-role.js +17 -0
  25. package/dist/agents/verify.js +2 -2
  26. package/dist/core/auto-compaction.d.ts +42 -0
  27. package/dist/core/auto-compaction.js +35 -2
  28. package/dist/core/child-clamp-seats.d.ts +11 -0
  29. package/dist/core/child-clamp-seats.js +3 -0
  30. package/dist/core/context-edit.d.ts +3 -2
  31. package/dist/core/context-edit.js +6 -5
  32. package/dist/core/context-guard.d.ts +2 -1
  33. package/dist/core/context-guard.js +3 -2
  34. package/dist/core/context-settings.d.ts +103 -0
  35. package/dist/core/context-settings.js +60 -0
  36. package/dist/core/engine-notice.d.ts +11 -1
  37. package/dist/core/frame-settlement.d.ts +97 -0
  38. package/dist/core/frame-settlement.js +36 -0
  39. package/dist/core/governance-codes.d.ts +1 -1
  40. package/dist/core/governance-codes.js +2 -0
  41. package/dist/core/hooks.d.ts +10 -10
  42. package/dist/core/mailbox-store.d.ts +41 -7
  43. package/dist/core/mailbox-store.js +9 -3
  44. package/dist/core/parent-spec-seat.d.ts +14 -1
  45. package/dist/core/parent-spec-seat.js +6 -0
  46. package/dist/core/permission-rule-model.js +1 -1
  47. package/dist/core/roles.d.ts +20 -0
  48. package/dist/core/roles.js +35 -16
  49. package/dist/core/runner/assemble-result.d.ts +2 -0
  50. package/dist/core/runner/assemble-result.js +1 -1
  51. package/dist/core/runner/compaction-call-options.d.ts +26 -2
  52. package/dist/core/runner/compaction-call-options.js +9 -0
  53. package/dist/core/runner/compaction-seams.d.ts +4 -3
  54. package/dist/core/runner/compaction-seams.js +13 -6
  55. package/dist/core/runner/contracts.d.ts +56 -7
  56. package/dist/core/runner/decide-continuation.d.ts +2 -1
  57. package/dist/core/runner/decide-continuation.js +11 -10
  58. package/dist/core/runner/initial-run-state.js +1 -1
  59. package/dist/core/runner/prepare-caps-and-workflow.js +9 -1
  60. package/dist/core/runner/prepare-config-doors.js +4 -1
  61. package/dist/core/runner/prepare-context-lane.d.ts +9 -2
  62. package/dist/core/runner/prepare-context-lane.js +15 -10
  63. package/dist/core/runner/prepare-delegation-surface.d.ts +3 -2
  64. package/dist/core/runner/prepare-delegation-surface.js +9 -3
  65. package/dist/core/runner/prepare-file-history.js +10 -8
  66. package/dist/core/runner/prepare-gate-stations.d.ts +4 -0
  67. package/dist/core/runner/prepare-gate-stations.js +3 -1
  68. package/dist/core/runner/prepare-inherited-gate.js +1 -0
  69. package/dist/core/runner/prepare-prompt-inputs.d.ts +6 -0
  70. package/dist/core/runner/prepare-prompt-inputs.js +2 -1
  71. package/dist/core/runner/prepare-task.js +22 -9
  72. package/dist/core/runner/prepare-wiring-manifest.d.ts +6 -1
  73. package/dist/core/runner/prepare-wiring-manifest.js +6 -1
  74. package/dist/core/runner/retired-runner-deps.d.ts +3 -1
  75. package/dist/core/runner/retired-runner-deps.js +1 -0
  76. package/dist/core/runner/run-compaction-machinery.d.ts +4 -2
  77. package/dist/core/runner/run-compaction-machinery.js +5 -3
  78. package/dist/core/runner/run-harness-handlers.js +1 -1
  79. package/dist/core/runner/run-identity-wiring.js +19 -1
  80. package/dist/core/runner/run-leg.js +1 -1
  81. package/dist/core/runner/run-notification-lane.js +8 -2
  82. package/dist/core/runner/run-recovery-lanes.js +9 -5
  83. package/dist/core/runner/run-settle-and-teardown.d.ts +4 -22
  84. package/dist/core/runner/run-settle-and-teardown.js +6 -10
  85. package/dist/core/runner/run-stop-and-final-verify.js +1 -0
  86. package/dist/core/runner/run-terminal-adoption.js +5 -5
  87. package/dist/core/runner/run-turn-boundary.js +32 -5
  88. package/dist/core/runner/runtask.d.ts +8 -1
  89. package/dist/core/runner/runtask.js +32 -1
  90. package/dist/core/runner-deps.d.ts +44 -13
  91. package/dist/core/secret-env.js +2 -1
  92. package/dist/core/swappable-deps.d.ts +20 -4
  93. package/dist/core/swappable-deps.js +6 -1
  94. package/dist/core/task-event.d.ts +5 -0
  95. package/dist/core/task-notification.d.ts +144 -2
  96. package/dist/core/task-notification.js +154 -5
  97. package/dist/core/task-result.d.ts +14 -0
  98. package/dist/core/task-spec.d.ts +7 -0
  99. package/dist/core/tool-catalog-entries.js +2 -1
  100. package/dist/core/tool-conformance.js +1 -0
  101. package/dist/core/tool-policy.d.ts +9 -4
  102. package/dist/core/tool-spec.d.ts +14 -0
  103. package/dist/core/wiring-manifest.d.ts +12 -0
  104. package/dist/core/wiring-manifest.js +5 -1
  105. package/dist/engine/harness/agent-harness.d.ts +14 -1
  106. package/dist/engine/harness/agent-harness.js +28 -3
  107. package/dist/engine/harness/types.d.ts +3 -1
  108. package/dist/engine/llm/types.d.ts +8 -7
  109. package/dist/engine/llm/types.js +1 -1
  110. package/dist/engine/lsp/node-lsp-manager.d.ts +3 -0
  111. package/dist/engine/lsp/node-lsp-manager.js +5 -3
  112. package/dist/engine/session/import-validate.js +4 -0
  113. package/dist/index.d.ts +10 -7
  114. package/dist/index.js +7 -5
  115. package/dist/orchestration/run-workflow-tool.d.ts +4 -4
  116. package/dist/orchestration/workflow.d.ts +1 -1
  117. package/dist/orchestration/workflow.js +8 -5
  118. package/dist/shell/lex.d.ts +38 -54
  119. package/dist/shell/lex.js +239 -286
  120. package/dist/stores/cc/mailbox-store.js +3 -2
  121. package/dist/stores/file/corrupt-read-sink.d.ts +28 -2
  122. package/dist/stores/file/file-history-store.d.ts +2 -4
  123. package/dist/stores/file/file-history-store.js +1 -1
  124. package/dist/stores/file/fs-atomic.d.ts +16 -11
  125. package/dist/stores/file/fs-atomic.js +17 -6
  126. package/dist/stores/file/index.d.ts +5 -6
  127. package/dist/stores/file/index.js +1 -1
  128. package/dist/stores/file/mailbox-store.d.ts +4 -9
  129. package/dist/stores/file/mailbox-store.js +29 -30
  130. package/dist/stores/file/session-policy-store.d.ts +2 -0
  131. package/dist/stores/file/session-policy-store.js +1 -1
  132. package/dist/stores/file/session-store.d.ts +11 -7
  133. package/dist/stores/file/session-store.js +23 -16
  134. package/dist/stores/file/shared-ledger.js +3 -14
  135. package/dist/stores/file/tool-result-store.d.ts +2 -0
  136. package/dist/stores/file/tool-result-store.js +5 -2
  137. package/dist/stores/file/workflow-journal-store.js +14 -9
  138. package/dist/tools/fs/bash-program-position.d.ts +15 -24
  139. package/dist/tools/fs/bash-program-position.js +11 -29
  140. package/dist/tools/fs/bash-readonly-classifier.d.ts +131 -117
  141. package/dist/tools/fs/bash-readonly-classifier.js +404 -272
  142. package/dist/tools/fs/shell-read-check.js +3 -3
  143. package/dist/tools/fs/shell-read-establish.d.ts +1 -1
  144. package/dist/tools/fs/shell-read-establish.js +5 -33
  145. package/dist/tools/fs/shell-read-identity.d.ts +13 -0
  146. package/dist/tools/fs/shell-read-identity.js +39 -0
  147. package/dist/tools/fs/shell-read-judge.d.ts +8 -0
  148. package/dist/tools/fs/shell-read-judge.js +7 -0
  149. package/dist/tools/fs/shell-read-plan.d.ts +15 -6
  150. package/dist/tools/fs/shell-read-plan.js +171 -195
  151. package/dist/tools/fs/shell-read-word.d.ts +64 -0
  152. package/dist/tools/fs/shell-read-word.js +94 -0
  153. package/dist/tools/fs/shell-reentry-text.d.ts +10 -0
  154. package/dist/tools/fs/shell-reentry-text.js +73 -0
  155. package/package.json +1 -1
  156. package/test/export-surface.snapshot.json +58 -8
  157. package/wire-changes/core@7.30.0.json +1821 -0
  158. package/wire-changes/core@7.30.1.json +154 -0
@@ -0,0 +1,1821 @@
1
+ {
2
+ "repo": "core",
3
+ "version": "7.30.0",
4
+ "from": "b99451b02751a1b147e397ea6807b3b9985d11f3",
5
+ "to": "v7.30.0",
6
+ "added": [
7
+ {
8
+ "name": "COMPACTION_KINDS",
9
+ "kind": "variable",
10
+ "tier": "advanced",
11
+ "at": [
12
+ "src/core/task-notification.ts:650",
13
+ "src/index.ts:986"
14
+ ],
15
+ "criteriaCovered": false,
16
+ "breaking": false
17
+ },
18
+ {
19
+ "name": "CompactionEffect",
20
+ "kind": "interface",
21
+ "tier": "advanced",
22
+ "at": [
23
+ "src/core/frame-settlement.ts:15",
24
+ "src/index.ts:937"
25
+ ],
26
+ "criteriaCovered": false,
27
+ "breaking": false
28
+ },
29
+ {
30
+ "name": "CompactionKind",
31
+ "kind": "type",
32
+ "tier": "advanced",
33
+ "at": [
34
+ "src/core/task-notification.ts:651",
35
+ "src/index.ts:987"
36
+ ],
37
+ "criteriaCovered": false,
38
+ "breaking": false
39
+ },
40
+ {
41
+ "name": "DIRECTION_RELATIONS",
42
+ "kind": "variable",
43
+ "tier": "advanced",
44
+ "at": [
45
+ "src/agents/team-role.ts:21",
46
+ "src/index.ts:3116"
47
+ ],
48
+ "criteriaCovered": false,
49
+ "breaking": false
50
+ },
51
+ {
52
+ "name": "DirectionRelation",
53
+ "kind": "type",
54
+ "tier": "advanced",
55
+ "at": [
56
+ "src/agents/team-role.ts:22",
57
+ "src/index.ts:3116"
58
+ ],
59
+ "criteriaCovered": false,
60
+ "breaking": false
61
+ },
62
+ {
63
+ "name": "HANDBACK_STATES",
64
+ "kind": "variable",
65
+ "tier": "advanced",
66
+ "at": [
67
+ "src/core/task-notification.ts:641",
68
+ "src/index.ts:984"
69
+ ],
70
+ "criteriaCovered": false,
71
+ "breaking": false
72
+ },
73
+ {
74
+ "name": "HandbackState",
75
+ "kind": "type",
76
+ "tier": "advanced",
77
+ "at": [
78
+ "src/core/task-notification.ts:642",
79
+ "src/index.ts:985"
80
+ ],
81
+ "criteriaCovered": false,
82
+ "breaking": false
83
+ },
84
+ {
85
+ "name": "MailboxAckResult",
86
+ "kind": "interface",
87
+ "tier": "advanced",
88
+ "at": [
89
+ "src/core/mailbox-store.ts:333",
90
+ "src/index.ts:1253"
91
+ ],
92
+ "criteriaCovered": true,
93
+ "breaking": false
94
+ },
95
+ {
96
+ "name": "PEER_LANE_DEFAULTS",
97
+ "kind": "variable",
98
+ "tier": "advanced",
99
+ "at": [
100
+ "src/agents/peer-admission.ts:66",
101
+ "src/index.ts:2999"
102
+ ],
103
+ "criteriaCovered": false,
104
+ "breaking": false
105
+ },
106
+ {
107
+ "name": "PEER_LISTING_FRESH_WINDOW_MS",
108
+ "kind": "variable",
109
+ "tier": "advanced",
110
+ "at": [
111
+ "src/agents/list-agents-tool.ts:26",
112
+ "src/index.ts:3117"
113
+ ],
114
+ "criteriaCovered": false,
115
+ "breaking": false
116
+ },
117
+ {
118
+ "name": "PEER_PRESENCE_MAX_CHARS",
119
+ "kind": "variable",
120
+ "tier": "advanced",
121
+ "at": [
122
+ "src/agents/peer-directory.ts:37",
123
+ "src/index.ts:3101"
124
+ ],
125
+ "criteriaCovered": false,
126
+ "breaking": false
127
+ },
128
+ {
129
+ "name": "PEER_RESUPPLY_CAP",
130
+ "kind": "variable",
131
+ "tier": "advanced",
132
+ "at": [
133
+ "src/agents/peer-session-drain.ts:129",
134
+ "src/index.ts:3120"
135
+ ],
136
+ "criteriaCovered": false,
137
+ "breaking": false
138
+ },
139
+ {
140
+ "name": "PeerLaneConfig",
141
+ "kind": "interface",
142
+ "tier": "advanced",
143
+ "at": [
144
+ "src/agents/peer-admission.ts:31",
145
+ "src/index.ts:3007"
146
+ ],
147
+ "criteriaCovered": true,
148
+ "breaking": false
149
+ },
150
+ {
151
+ "name": "PeerPresence",
152
+ "kind": "interface",
153
+ "tier": "advanced",
154
+ "at": [
155
+ "src/agents/peer-directory.ts:32",
156
+ "src/index.ts:3100"
157
+ ],
158
+ "criteriaCovered": false,
159
+ "breaking": false
160
+ },
161
+ {
162
+ "name": "READ_INBOX_MAX_LIMIT",
163
+ "kind": "variable",
164
+ "tier": "advanced",
165
+ "at": [
166
+ "src/agents/read-inbox-tool.ts:16",
167
+ "src/index.ts:3115"
168
+ ],
169
+ "criteriaCovered": false,
170
+ "breaking": false
171
+ },
172
+ {
173
+ "name": "READ_INBOX_RESULT_BUDGET_CHARS",
174
+ "kind": "variable",
175
+ "tier": "advanced",
176
+ "at": [
177
+ "src/agents/read-inbox-tool.ts:26",
178
+ "src/index.ts:3115"
179
+ ],
180
+ "criteriaCovered": false,
181
+ "breaking": false
182
+ },
183
+ {
184
+ "name": "READ_INBOX_TOOL_NAME",
185
+ "kind": "variable",
186
+ "tier": "advanced",
187
+ "at": [
188
+ "src/agents/read-inbox-tool.ts:14",
189
+ "src/index.ts:3115"
190
+ ],
191
+ "criteriaCovered": false,
192
+ "breaking": false
193
+ },
194
+ {
195
+ "name": "RESUPPLIED_FRAME_PREAMBLE",
196
+ "kind": "variable",
197
+ "tier": "advanced",
198
+ "at": [
199
+ "src/core/task-notification.ts:485",
200
+ "src/index.ts:954"
201
+ ],
202
+ "criteriaCovered": false,
203
+ "breaking": false
204
+ },
205
+ {
206
+ "name": "ReadInboxToolOptions",
207
+ "kind": "interface",
208
+ "tier": "advanced",
209
+ "at": [
210
+ "src/agents/read-inbox-tool.ts:28",
211
+ "src/index.ts:3115"
212
+ ],
213
+ "criteriaCovered": false,
214
+ "breaking": false
215
+ },
216
+ {
217
+ "name": "TEAM_ROLES",
218
+ "kind": "variable",
219
+ "tier": "advanced",
220
+ "at": [
221
+ "src/agents/team-role.ts:7",
222
+ "src/index.ts:3116"
223
+ ],
224
+ "criteriaCovered": false,
225
+ "breaking": false
226
+ },
227
+ {
228
+ "name": "TeamRole",
229
+ "kind": "type",
230
+ "tier": "advanced",
231
+ "at": [
232
+ "src/agents/team-role.ts:8",
233
+ "src/index.ts:3116"
234
+ ],
235
+ "criteriaCovered": false,
236
+ "breaking": false
237
+ },
238
+ {
239
+ "name": "createReadInboxTool",
240
+ "kind": "function",
241
+ "tier": "advanced",
242
+ "at": [
243
+ "src/agents/read-inbox-tool.ts:33",
244
+ "src/index.ts:3115"
245
+ ],
246
+ "criteriaCovered": false,
247
+ "breaking": false
248
+ },
249
+ {
250
+ "name": "handbackStateOf",
251
+ "kind": "function",
252
+ "tier": "advanced",
253
+ "at": [
254
+ "src/core/task-notification.ts:645",
255
+ "src/index.ts:988"
256
+ ],
257
+ "criteriaCovered": false,
258
+ "breaking": false
259
+ },
260
+ {
261
+ "name": "isFreshPeerRow",
262
+ "kind": "function",
263
+ "tier": "advanced",
264
+ "at": [
265
+ "src/agents/list-agents-tool.ts:34",
266
+ "src/index.ts:3117"
267
+ ],
268
+ "criteriaCovered": false,
269
+ "breaking": false
270
+ },
271
+ {
272
+ "name": "mayDirect",
273
+ "kind": "function",
274
+ "tier": "advanced",
275
+ "at": [
276
+ "src/agents/team-role.ts:36",
277
+ "src/index.ts:3116"
278
+ ],
279
+ "criteriaCovered": false,
280
+ "breaking": false
281
+ },
282
+ {
283
+ "name": "resolvePeerLaneConfig",
284
+ "kind": "function",
285
+ "tier": "advanced",
286
+ "at": [
287
+ "src/agents/peer-admission.ts:154",
288
+ "src/index.ts:2998"
289
+ ],
290
+ "criteriaCovered": false,
291
+ "breaking": false
292
+ },
293
+ {
294
+ "name": "teamRoleOf",
295
+ "kind": "function",
296
+ "tier": "advanced",
297
+ "at": [
298
+ "src/agents/team-role.ts:15",
299
+ "src/index.ts:3116"
300
+ ],
301
+ "criteriaCovered": false,
302
+ "breaking": false
303
+ },
304
+ {
305
+ "name": "terminalFrameFacets",
306
+ "kind": "function",
307
+ "tier": "advanced",
308
+ "at": [
309
+ "src/core/task-notification.ts:663",
310
+ "src/index.ts:989"
311
+ ],
312
+ "criteriaCovered": false,
313
+ "breaking": false
314
+ }
315
+ ],
316
+ "removed": [
317
+ {
318
+ "name": "PEER_ADMISSION_DEFAULTS",
319
+ "kind": "variable",
320
+ "tier": "advanced",
321
+ "at": [
322
+ "src/agents/peer-admission.ts:54",
323
+ "src/index.ts:2987"
324
+ ],
325
+ "breaking": true
326
+ },
327
+ {
328
+ "name": "PeerAdmissionConfig",
329
+ "kind": "interface",
330
+ "tier": "advanced",
331
+ "at": [
332
+ "src/agents/peer-admission.ts:31",
333
+ "src/index.ts:2995"
334
+ ],
335
+ "breaking": true
336
+ },
337
+ {
338
+ "name": "resolvePeerAdmissionConfig",
339
+ "kind": "function",
340
+ "tier": "advanced",
341
+ "at": [
342
+ "src/agents/peer-admission.ts:133",
343
+ "src/index.ts:2986"
344
+ ],
345
+ "breaking": true
346
+ }
347
+ ],
348
+ "changed": [
349
+ {
350
+ "name": "FileStorageCorruptReadInfo",
351
+ "from": {
352
+ "kind": "interface",
353
+ "tier": "advanced"
354
+ },
355
+ "to": {
356
+ "kind": "type",
357
+ "tier": "advanced"
358
+ },
359
+ "at": [
360
+ "src/index.ts:928",
361
+ "src/stores/file/index.ts:167"
362
+ ],
363
+ "breaking": true
364
+ }
365
+ ],
366
+ "narrowed": [
367
+ {
368
+ "id": "F1",
369
+ "source": "behaviorFlips.summary",
370
+ "text": "NARROWING of the ack beat + additive keys (#1036, C-R90 M-①; inbox × compaction). A session-box record is acked only after a frame carrying it reached the TRANSCRIPT and no compaction applied up to that settlement beat summarized that entry away; the drain's settlement runs AFTER the same boundary's compaction. A summarized record is handed over ONCE more (same `task_id`, same `seq`, `attempt: 2`, `resupplied: true`, one preamble line `RESUPPLIED_FRAME_PREAMBLE`); a re-supplied occurrence summarized again settles as the new `PeerInboundDisposition` word `resupply_exhausted`, disclosed on `peer.inbound_disposition` as a loss, never as read. New OPTIONAL wire keys (all `?` in src; no 7.30.0 tag yet): `TaskNotificationPayload.resupplied?: true` (absent = not a repair; no `false` form), `.attempt?: number` (absent = 1), `.inboxNotice.resupplied?: number` (absent = no repair this pass; `delivered` now counts only records the model had not seen), `compacted.summarizedCrossSessionMessages?` (present iff ≥ 1). The injection queue's dedup key gains `:a<attempt>` for attempt ≥ 2 only (byte-identical for every pre-7.30 frame); a consumer that folds frames by `taskId:status[:seq]` must add the attempt segment or it hides the repair (@server trace/inbox allowlist, @cli fold, @client-core fold). NOT criterioned in this document (assertion budget ≤ 12; see the receipt's missing-pin list): `UserMessage.engineNoteKey?` (persisted on the transcript entry, stripped from provider payloads, normalized at import — no in-tree pin exercises it), `ReadInbox`'s budget exemption, and the two advisory sinks (`AgentHarness.onFrameCommitted?`, `MaybeCompactOptions.onCommitted?`)."
371
+ },
372
+ {
373
+ "id": "F2",
374
+ "source": "behaviorFlips.summary",
375
+ "text": "BREAKING (store type face) + NARROWING (#1036): `MailboxStore.ack` returns `Promise<MailboxAckResult>` (`{ acked: boolean }`) instead of `Promise<void>`, and a HELD record stays in the box. THREE SENTENCES — WHO IS HURT: every out-of-tree `MailboxStore` implementation (a durable SQL twin included) — its `ack` no longer satisfies the interface, a type error at upgrade. COMPENSATION: the bundled backends' runtime behaviour is unchanged (the MB1 lease fence already made a non-holder's ack a no-op); what is new is that the no-op is REPORTED (`{acked:false}`), the prefix does not move, and the drain announces the refusal through `onError` (`classification: \"peer-box-ack\"`) instead of reading it as success. PICKUP: `docs/wire-consumption/unreleased-1036.md` (store-contract row, @server (b)) and the root type export `MailboxAckResult`. Same flip: a record held by the `crossSessionInbound` judgment is no longer acked into a process-local copy — the box is the held queue's durable seat; later records are still delivered past it; a leg that reacquires the box retires every held entry whose record another owner already acked (`peer.held_settled`, `detail.reason === \"superseded\"`)."
376
+ },
377
+ {
378
+ "id": "F4",
379
+ "source": "behaviorFlips.summary",
380
+ "text": "Agent teams, final form (#969 S1 / #1024 / #1025 / #1034 first slice / #1037; C-R86, C-R89). TWO BREAKING changes, three sentences each. (i) RENAME, no alias: `PeerAdmissionConfig` → `PeerLaneConfig`, `PEER_ADMISSION_DEFAULTS` → `PEER_LANE_DEFAULTS`, `resolvePeerAdmissionConfig` → `resolvePeerLaneConfig`, `RunnerDeps.peerAdmission` → `RunnerDeps.peerLane`, `SendMessageToolOptions.admission` → `.lane`. WHO IS HURT: a deployment wiring `RunnerDeps.peerAdmission` (@server) and a mirror naming the old type (@settings-schema). COMPENSATION: a type error at upgrade, never a silent default; the notice code `config.peer_admission_out_of_range` keeps its spelling; the table gains `maxWakesPerHour` (6), `maxMessagesPerRound` (5), `listingFreshWindowMs` (24 h), whole-number counts, loud fallback. PICKUP: `docs/wire-consumption/unreleased-969.md` (`PeerLaneConfig` row) and the CHANGELOG pickup sentences. (ii) SETTINGS WORD: `crossSessionInbound` is `wake | next-turn | hold | refuse`; `accept` is retired. WHO IS HURT: every reader pinning the closed set (settings-schema mirror, the server's `CROSS_SESSION_INBOUND` enum and its pin, a cli settings face) and every settings file spelling `accept`. COMPENSATION: `accept` is READ as `next-turn` and reported (`ResolvedCrossSessionInboundSetting.deprecatedLayers`, one `onError` per leg `peer-inbound-setting-spelling`). PICKUP: `unreleased-969.md` first row; ORDER LAW core → schema mirror → server pin → hosts may write `wake` (measured: a 7.29.0 core reads `wake` and `next-turn` as invalid and HOLDS). Also in this flip: `ListAgents` lists a peer by default only while FRESH (`includeAll: true` adds stale and offline), rows render `active <N> ago` / cwd tail / `self: agent=…, intent=…`; `TaskSpec.peerPresence` rides `wiring_manifest.peerPresence`; `wiring_manifest.teamRole`; one drain pass injects at most `maxMessagesPerRound` records and an `[Inbox notice]` carrier (`TaskNotificationPayload.inboxNotice`) says how many wait; new built-in tool `ReadInbox`; delegation terminal frames carry `spawnName?` / `handback` / `compaction?` and render `<agent-name>` / `<handback>` (only when not `send`); `ListAgentsToolOptions.includeOffline` removed (type face −1). Measured export surface v7.29.0 → this tree (test/export-surface.snapshot.json): 2450 → 2475, +28 / −3 (the −3 are the renamed names). NOT criterioned in this document (assertion budget ≤ 12): the durable terminal frame behind `RunnerDeps.sessionBoxEngineFrames: true` (`MAILBOX_PEER_RECORD_KINDS` +`engine_frame`, codec version stop, malformed-facet settle; pins `test/backlog969-engine-frame-codec.test.ts`), `SendMessage({ urgent })` ordering and its notice count (drain-level pin only), `mayDirect` / `DIRECTION_RELATIONS` (nothing reads it yet), `StopHookContext.backgroundTasks?()` (not a published type — the v1 vocabulary cannot cite it), the SendMessage narrow-arm wording, `ListAgentsToolOptions.includeOffline` removal."
381
+ },
382
+ {
383
+ "id": "F5",
384
+ "source": "behaviorFlips.summary",
385
+ "text": "NARROWING ×4 / WIDENING ×3 (#994 S1; +0 exports): every shell reader consumes the one lexer's facts; the strict mode, the quote mask and five hand-written readers retire. Package-root faces that move: `parseRuleText` / `RuleReject.code` — a `#`-headed persisted-rule body names no command and is refused `invalid.empty_command` (NARROWING ③); `parseLeadingCommandName` bounds its first word on bash blanks `[ \\t]` only (a non-blank whitespace character fuses — `ls<NBSP>x` names `ls<NBSP>x`, was `ls`) and answers `{ reject: \"empty command\" }` for a `#`-headed text (@server `runtime-governance.ts:31,136`); the classify face reads `#` as a comment, refuses `|&` with its own sentence, asks on `$\"…\"`, reads a HOME reassignment as bash does. Two faces are cited below — the rule-import face (`RuleReject.code`) and the classify face over a real `Bash` tool (`tool_end.gate`, NARROWING ①); the rest are verdict/sentence changes covered by `test/backlog994-s1-dual-run.test.ts` (4297 inputs × 10 faces against the v7.28.1 dist), not by a criterion here, and `parseLeadingCommandName`'s result shape has no named public type the v1 vocabulary can cite."
386
+ }
387
+ ],
388
+ "closedSetMembers": [
389
+ {
390
+ "set": "BASH_ONLY_CONSTRUCTS",
391
+ "at": [
392
+ "src/shell/lex.ts:87"
393
+ ],
394
+ "newSet": false,
395
+ "added": [
396
+ "pipe_both"
397
+ ],
398
+ "removed": [],
399
+ "breaking": false,
400
+ "criteriaCovered": false
401
+ },
402
+ {
403
+ "set": "COMPACTION_KINDS",
404
+ "at": [
405
+ "src/core/task-notification.ts:650"
406
+ ],
407
+ "newSet": true,
408
+ "added": [
409
+ "auto",
410
+ "manual",
411
+ "reactive"
412
+ ],
413
+ "removed": [],
414
+ "breaking": false,
415
+ "criteriaCovered": false
416
+ },
417
+ {
418
+ "set": "CROSS_SESSION_INBOUND_SETTINGS",
419
+ "at": [
420
+ "src/agents/cross-session-judge.ts:32"
421
+ ],
422
+ "newSet": false,
423
+ "added": [
424
+ "next-turn",
425
+ "wake"
426
+ ],
427
+ "removed": [
428
+ "accept"
429
+ ],
430
+ "persistedBy": "none",
431
+ "breaking": true,
432
+ "criteriaCovered": false
433
+ },
434
+ {
435
+ "set": "CompactionKind",
436
+ "at": [
437
+ "src/core/task-notification.ts:651",
438
+ "src/index.ts:987"
439
+ ],
440
+ "newSet": true,
441
+ "added": [
442
+ "auto",
443
+ "manual",
444
+ "reactive"
445
+ ],
446
+ "removed": [],
447
+ "breaking": false,
448
+ "criteriaCovered": false
449
+ },
450
+ {
451
+ "set": "CrossSessionInboundSetting",
452
+ "at": [
453
+ "src/agents/cross-session-judge.ts:31"
454
+ ],
455
+ "newSet": false,
456
+ "added": [
457
+ "next-turn",
458
+ "wake"
459
+ ],
460
+ "removed": [
461
+ "accept"
462
+ ],
463
+ "persistedBy": "none",
464
+ "breaking": true,
465
+ "criteriaCovered": false
466
+ },
467
+ {
468
+ "set": "DIRECTION_RELATIONS",
469
+ "at": [
470
+ "src/agents/team-role.ts:21"
471
+ ],
472
+ "newSet": true,
473
+ "added": [
474
+ "lead",
475
+ "peer",
476
+ "stranger"
477
+ ],
478
+ "removed": [],
479
+ "breaking": false,
480
+ "criteriaCovered": false
481
+ },
482
+ {
483
+ "set": "DirectionRelation",
484
+ "at": [
485
+ "src/agents/team-role.ts:22",
486
+ "src/index.ts:3116"
487
+ ],
488
+ "newSet": true,
489
+ "added": [
490
+ "lead",
491
+ "peer",
492
+ "stranger"
493
+ ],
494
+ "removed": [],
495
+ "breaking": false,
496
+ "criteriaCovered": false
497
+ },
498
+ {
499
+ "set": "ENGINE_FRAME_TASK_TYPES",
500
+ "at": [
501
+ "src/core/task-notification.ts:674"
502
+ ],
503
+ "newSet": true,
504
+ "added": [
505
+ "background_agent",
506
+ "monitor",
507
+ "workflow"
508
+ ],
509
+ "removed": [],
510
+ "breaking": false,
511
+ "criteriaCovered": false
512
+ },
513
+ {
514
+ "set": "ENGINE_NOTICE_CODES",
515
+ "at": [
516
+ "src/core/governance-codes.ts:315"
517
+ ],
518
+ "newSet": false,
519
+ "added": [
520
+ "config.context_settings_swapped"
521
+ ],
522
+ "removed": [],
523
+ "breaking": false,
524
+ "criteriaCovered": true
525
+ },
526
+ {
527
+ "set": "HANDBACK_STATES",
528
+ "at": [
529
+ "src/core/task-notification.ts:641"
530
+ ],
531
+ "newSet": true,
532
+ "added": [
533
+ "flagged",
534
+ "send",
535
+ "withheld"
536
+ ],
537
+ "removed": [],
538
+ "breaking": false,
539
+ "criteriaCovered": false
540
+ },
541
+ {
542
+ "set": "HandbackState",
543
+ "at": [
544
+ "src/core/task-notification.ts:642",
545
+ "src/index.ts:985"
546
+ ],
547
+ "newSet": true,
548
+ "added": [
549
+ "flagged",
550
+ "send",
551
+ "withheld"
552
+ ],
553
+ "removed": [],
554
+ "breaking": false,
555
+ "criteriaCovered": false
556
+ },
557
+ {
558
+ "set": "LexMode",
559
+ "at": [
560
+ "src/shell/lex.ts:25"
561
+ ],
562
+ "newSet": false,
563
+ "added": [],
564
+ "removed": [
565
+ "lenient",
566
+ "strict"
567
+ ],
568
+ "persistedBy": "none",
569
+ "breaking": true,
570
+ "criteriaCovered": false
571
+ },
572
+ {
573
+ "set": "MAILBOX_PEER_RECORD_KINDS",
574
+ "at": [
575
+ "src/core/mailbox-store.ts:123"
576
+ ],
577
+ "newSet": false,
578
+ "added": [
579
+ "engine_frame"
580
+ ],
581
+ "removed": [],
582
+ "breaking": false,
583
+ "criteriaCovered": false
584
+ },
585
+ {
586
+ "set": "PARSE_FAILURE_REASONS",
587
+ "at": [
588
+ "src/shell/lex.ts:53"
589
+ ],
590
+ "newSet": false,
591
+ "added": [],
592
+ "removed": [
593
+ "background_operator"
594
+ ],
595
+ "persistedBy": "none",
596
+ "breaking": true,
597
+ "criteriaCovered": false
598
+ },
599
+ {
600
+ "set": "PeerHeldSettleReason",
601
+ "at": [
602
+ "src/agents/peer-held-queue.ts:50"
603
+ ],
604
+ "newSet": false,
605
+ "added": [
606
+ "superseded"
607
+ ],
608
+ "removed": [],
609
+ "breaking": false,
610
+ "criteriaCovered": false
611
+ },
612
+ {
613
+ "set": "PeerInboundDisposition",
614
+ "at": [
615
+ "src/agents/peer-session-drain.ts:119"
616
+ ],
617
+ "newSet": false,
618
+ "added": [
619
+ "resupply_exhausted"
620
+ ],
621
+ "removed": [],
622
+ "breaking": false,
623
+ "criteriaCovered": false
624
+ },
625
+ {
626
+ "set": "QuoteOpen",
627
+ "at": [
628
+ "src/shell/lex.ts:293"
629
+ ],
630
+ "newSet": false,
631
+ "added": [],
632
+ "removed": [
633
+ "\"",
634
+ "'"
635
+ ],
636
+ "persistedBy": "checkpoint-state",
637
+ "breaking": true,
638
+ "criteriaCovered": false
639
+ },
640
+ {
641
+ "set": "SWAPPABLE_DEP_SEATS",
642
+ "at": [
643
+ "src/core/swappable-deps.ts:67"
644
+ ],
645
+ "newSet": false,
646
+ "added": [
647
+ "contextSettings"
648
+ ],
649
+ "removed": [],
650
+ "breaking": false,
651
+ "criteriaCovered": false
652
+ },
653
+ {
654
+ "set": "SessionErrorCode",
655
+ "at": [
656
+ "src/engine/harness/types.ts:302"
657
+ ],
658
+ "newSet": false,
659
+ "added": [
660
+ "corrupt_session"
661
+ ],
662
+ "removed": [],
663
+ "breaking": false,
664
+ "criteriaCovered": false
665
+ },
666
+ {
667
+ "set": "TEAM_ROLES",
668
+ "at": [
669
+ "src/agents/team-role.ts:7"
670
+ ],
671
+ "newSet": true,
672
+ "added": [
673
+ "lead",
674
+ "none",
675
+ "teammate"
676
+ ],
677
+ "removed": [],
678
+ "breaking": false,
679
+ "criteriaCovered": false
680
+ },
681
+ {
682
+ "set": "TeamRole",
683
+ "at": [
684
+ "src/agents/team-role.ts:8",
685
+ "src/index.ts:3116"
686
+ ],
687
+ "newSet": true,
688
+ "added": [
689
+ "lead",
690
+ "none",
691
+ "teammate"
692
+ ],
693
+ "removed": [],
694
+ "breaking": false,
695
+ "criteriaCovered": false
696
+ },
697
+ {
698
+ "set": "WordExpands",
699
+ "at": [
700
+ "src/tools/fs/shell-read-word.ts:12"
701
+ ],
702
+ "newSet": true,
703
+ "added": [
704
+ "glob",
705
+ "unresolvable"
706
+ ],
707
+ "removed": [],
708
+ "breaking": false,
709
+ "criteriaCovered": false
710
+ }
711
+ ],
712
+ "closedSetsUnreadable": [],
713
+ "typeKeys": [
714
+ {
715
+ "type": "CascadeRunResult",
716
+ "at": [
717
+ "src/agents/cascade.ts:130"
718
+ ],
719
+ "added": [
720
+ "compaction"
721
+ ],
722
+ "addedDetail": [
723
+ {
724
+ "key": "compaction",
725
+ "optional": true
726
+ }
727
+ ],
728
+ "addedRequired": [],
729
+ "removed": [],
730
+ "breaking": false,
731
+ "criteriaCovered": false
732
+ },
733
+ {
734
+ "type": "CorruptReadInfo",
735
+ "at": [
736
+ "src/stores/file/corrupt-read-sink.ts:11"
737
+ ],
738
+ "via": "FileBackgroundAgentStoreOptions.onCorruptRead",
739
+ "arms": "flattened",
740
+ "added": [],
741
+ "addedDetail": [],
742
+ "addedRequired": [],
743
+ "removed": [
744
+ "path",
745
+ "reason"
746
+ ],
747
+ "uncertain": "path, reason may have moved into a qualified reference (`CorruptRecordRead`); a qualified reference (`CorruptReplayTally`); a qualified reference (`CorruptFileRead`) rather than left this type — this reader does not follow those, so check before writing the BREAKING line",
748
+ "breaking": true,
749
+ "criteriaCovered": false
750
+ },
751
+ {
752
+ "type": "FileStorageCorruptReadInfo",
753
+ "at": [
754
+ "src/stores/file/index.ts:167"
755
+ ],
756
+ "arms": "flattened",
757
+ "added": [],
758
+ "addedDetail": [],
759
+ "addedRequired": [],
760
+ "removed": [
761
+ "path",
762
+ "reason"
763
+ ],
764
+ "uncertain": "path, reason may have moved into a qualified reference (`CorruptRecordRead`); a qualified reference (`CorruptReplayTally`); a qualified reference (`CorruptFileRead`) rather than left this type — this reader does not follow those, so check before writing the BREAKING line",
765
+ "breaking": true,
766
+ "criteriaCovered": false
767
+ },
768
+ {
769
+ "type": "LexedRedirect",
770
+ "at": [
771
+ "src/shell/lex.ts:195"
772
+ ],
773
+ "via": "ShellReadSegment.redirects.op",
774
+ "added": [
775
+ "dup",
776
+ "fd"
777
+ ],
778
+ "addedDetail": [
779
+ {
780
+ "key": "dup",
781
+ "optional": true
782
+ },
783
+ {
784
+ "key": "fd",
785
+ "optional": true
786
+ }
787
+ ],
788
+ "addedRequired": [],
789
+ "removed": [],
790
+ "breaking": false,
791
+ "criteriaCovered": false
792
+ },
793
+ {
794
+ "type": "ListAgentsRow",
795
+ "at": [
796
+ "src/agents/list-agents-tool.ts:80"
797
+ ],
798
+ "added": [
799
+ "cwd",
800
+ "lastActiveAt",
801
+ "offlineAt",
802
+ "presence"
803
+ ],
804
+ "addedDetail": [
805
+ {
806
+ "key": "cwd",
807
+ "optional": true
808
+ },
809
+ {
810
+ "key": "lastActiveAt",
811
+ "optional": true
812
+ },
813
+ {
814
+ "key": "offlineAt",
815
+ "optional": true
816
+ },
817
+ {
818
+ "key": "presence",
819
+ "optional": true
820
+ }
821
+ ],
822
+ "addedRequired": [],
823
+ "removed": [],
824
+ "breaking": false,
825
+ "criteriaCovered": true
826
+ },
827
+ {
828
+ "type": "ListAgentsToolOptions",
829
+ "at": [
830
+ "src/agents/list-agents-tool.ts:57"
831
+ ],
832
+ "added": [
833
+ "freshWindowMs",
834
+ "now"
835
+ ],
836
+ "addedDetail": [
837
+ {
838
+ "key": "freshWindowMs",
839
+ "optional": true
840
+ },
841
+ {
842
+ "key": "now",
843
+ "optional": true
844
+ }
845
+ ],
846
+ "addedRequired": [],
847
+ "removed": [
848
+ "includeOffline"
849
+ ],
850
+ "breaking": true,
851
+ "criteriaCovered": false
852
+ },
853
+ {
854
+ "type": "MailboxPeerMeta",
855
+ "at": [
856
+ "src/core/mailbox-store.ts:56"
857
+ ],
858
+ "added": [
859
+ "urgent"
860
+ ],
861
+ "addedDetail": [
862
+ {
863
+ "key": "urgent",
864
+ "optional": true
865
+ }
866
+ ],
867
+ "addedRequired": [],
868
+ "removed": [],
869
+ "breaking": false,
870
+ "criteriaCovered": false
871
+ },
872
+ {
873
+ "type": "MaybeCompactOptions",
874
+ "at": [
875
+ "src/core/auto-compaction.ts:340"
876
+ ],
877
+ "added": [
878
+ "contextOverlay",
879
+ "onCommitted"
880
+ ],
881
+ "addedDetail": [
882
+ {
883
+ "key": "contextOverlay",
884
+ "optional": true
885
+ },
886
+ {
887
+ "key": "onCommitted",
888
+ "optional": true
889
+ }
890
+ ],
891
+ "addedRequired": [],
892
+ "removed": [],
893
+ "breaking": false,
894
+ "criteriaCovered": false
895
+ },
896
+ {
897
+ "type": "ParentSpecSeat",
898
+ "at": [
899
+ "src/core/parent-spec-seat.ts:64"
900
+ ],
901
+ "added": [
902
+ "compaction",
903
+ "skillListingBudgetFraction",
904
+ "skillListingMaxDescChars"
905
+ ],
906
+ "addedDetail": [
907
+ {
908
+ "key": "compaction",
909
+ "optional": true
910
+ },
911
+ {
912
+ "key": "skillListingBudgetFraction",
913
+ "optional": true
914
+ },
915
+ {
916
+ "key": "skillListingMaxDescChars",
917
+ "optional": true
918
+ }
919
+ ],
920
+ "addedRequired": [],
921
+ "removed": [],
922
+ "breaking": false,
923
+ "criteriaCovered": false
924
+ },
925
+ {
926
+ "type": "PeerHeldQueue",
927
+ "at": [
928
+ "src/agents/peer-held-queue.ts:96"
929
+ ],
930
+ "added": [
931
+ "decisions",
932
+ "forgetDecisions",
933
+ "reconcile"
934
+ ],
935
+ "addedDetail": [
936
+ {
937
+ "key": "decisions",
938
+ "optional": false
939
+ },
940
+ {
941
+ "key": "forgetDecisions",
942
+ "optional": false
943
+ },
944
+ {
945
+ "key": "reconcile",
946
+ "optional": false
947
+ }
948
+ ],
949
+ "addedRequired": [
950
+ "decisions",
951
+ "forgetDecisions",
952
+ "reconcile"
953
+ ],
954
+ "removed": [],
955
+ "breaking": true,
956
+ "criteriaCovered": false
957
+ },
958
+ {
959
+ "type": "PeerSessionRecord",
960
+ "at": [
961
+ "src/agents/peer-directory.ts:55"
962
+ ],
963
+ "added": [
964
+ "agent",
965
+ "intent"
966
+ ],
967
+ "addedDetail": [
968
+ {
969
+ "key": "agent",
970
+ "optional": true
971
+ },
972
+ {
973
+ "key": "intent",
974
+ "optional": true
975
+ }
976
+ ],
977
+ "addedRequired": [],
978
+ "removed": [],
979
+ "breaking": false,
980
+ "criteriaCovered": false
981
+ },
982
+ {
983
+ "type": "Prepared",
984
+ "at": [
985
+ "src/core/runner/contracts.ts:231"
986
+ ],
987
+ "via": "Runner.SuspendReap.env",
988
+ "added": [
989
+ "frameSettlement",
990
+ "fullShellReachable",
991
+ "peerBoundaryRound",
992
+ "registryAccess"
993
+ ],
994
+ "addedDetail": [
995
+ {
996
+ "key": "frameSettlement",
997
+ "optional": false
998
+ },
999
+ {
1000
+ "key": "fullShellReachable",
1001
+ "optional": false
1002
+ },
1003
+ {
1004
+ "key": "peerBoundaryRound",
1005
+ "optional": true
1006
+ },
1007
+ {
1008
+ "key": "registryAccess",
1009
+ "optional": false
1010
+ }
1011
+ ],
1012
+ "addedRequired": [
1013
+ "frameSettlement",
1014
+ "fullShellReachable",
1015
+ "registryAccess"
1016
+ ],
1017
+ "removed": [],
1018
+ "breaking": true,
1019
+ "criteriaCovered": false
1020
+ },
1021
+ {
1022
+ "type": "ReadCandidate",
1023
+ "at": [
1024
+ "src/tools/fs/shell-read-plan.ts:106"
1025
+ ],
1026
+ "added": [
1027
+ "floorSpelled"
1028
+ ],
1029
+ "addedDetail": [
1030
+ {
1031
+ "key": "floorSpelled",
1032
+ "optional": true
1033
+ }
1034
+ ],
1035
+ "addedRequired": [],
1036
+ "removed": [],
1037
+ "breaking": false,
1038
+ "criteriaCovered": false
1039
+ },
1040
+ {
1041
+ "type": "RepairResult",
1042
+ "at": [
1043
+ "src/agents/repair-loop.ts:214"
1044
+ ],
1045
+ "added": [
1046
+ "compaction"
1047
+ ],
1048
+ "addedDetail": [
1049
+ {
1050
+ "key": "compaction",
1051
+ "optional": true
1052
+ }
1053
+ ],
1054
+ "addedRequired": [],
1055
+ "removed": [],
1056
+ "breaking": false,
1057
+ "criteriaCovered": false
1058
+ },
1059
+ {
1060
+ "type": "ResolvedCrossSessionInboundSetting",
1061
+ "at": [
1062
+ "src/agents/cross-session-judge.ts:58"
1063
+ ],
1064
+ "added": [
1065
+ "deprecatedLayers"
1066
+ ],
1067
+ "addedDetail": [
1068
+ {
1069
+ "key": "deprecatedLayers",
1070
+ "optional": true
1071
+ }
1072
+ ],
1073
+ "addedRequired": [],
1074
+ "removed": [],
1075
+ "breaking": false,
1076
+ "criteriaCovered": true
1077
+ },
1078
+ {
1079
+ "type": "ResolvedRole",
1080
+ "at": [
1081
+ "src/core/roles.ts:386"
1082
+ ],
1083
+ "added": [
1084
+ "modelRef"
1085
+ ],
1086
+ "addedDetail": [
1087
+ {
1088
+ "key": "modelRef",
1089
+ "optional": false
1090
+ }
1091
+ ],
1092
+ "addedRequired": [
1093
+ "modelRef"
1094
+ ],
1095
+ "removed": [],
1096
+ "breaking": true,
1097
+ "criteriaCovered": true
1098
+ },
1099
+ {
1100
+ "type": "RunInternals",
1101
+ "at": [
1102
+ "src/core/runner/contracts.ts:1384"
1103
+ ],
1104
+ "added": [
1105
+ "inheritedModelRef"
1106
+ ],
1107
+ "addedDetail": [
1108
+ {
1109
+ "key": "inheritedModelRef",
1110
+ "optional": true
1111
+ }
1112
+ ],
1113
+ "addedRequired": [],
1114
+ "removed": [],
1115
+ "breaking": false,
1116
+ "criteriaCovered": false
1117
+ },
1118
+ {
1119
+ "type": "RunnerDeps",
1120
+ "at": [
1121
+ "src/core/runner-deps.ts:105"
1122
+ ],
1123
+ "added": [
1124
+ "contextSettings",
1125
+ "peerLane",
1126
+ "sessionBoxEngineFrames"
1127
+ ],
1128
+ "addedDetail": [
1129
+ {
1130
+ "key": "contextSettings",
1131
+ "optional": true
1132
+ },
1133
+ {
1134
+ "key": "peerLane",
1135
+ "optional": true
1136
+ },
1137
+ {
1138
+ "key": "sessionBoxEngineFrames",
1139
+ "optional": true
1140
+ }
1141
+ ],
1142
+ "addedRequired": [],
1143
+ "removed": [
1144
+ "peerAdmission"
1145
+ ],
1146
+ "breaking": true,
1147
+ "criteriaCovered": true
1148
+ },
1149
+ {
1150
+ "type": "RunnerSelfSeat",
1151
+ "at": [
1152
+ "src/core/runner/contracts.ts:2486"
1153
+ ],
1154
+ "added": [
1155
+ "contextOverlayOf"
1156
+ ],
1157
+ "addedDetail": [
1158
+ {
1159
+ "key": "contextOverlayOf",
1160
+ "optional": true
1161
+ }
1162
+ ],
1163
+ "addedRequired": [],
1164
+ "removed": [],
1165
+ "breaking": false,
1166
+ "criteriaCovered": false
1167
+ },
1168
+ {
1169
+ "type": "SendMessageToolOptions",
1170
+ "at": [
1171
+ "src/agents/send-message-tool.ts:46"
1172
+ ],
1173
+ "added": [
1174
+ "lane"
1175
+ ],
1176
+ "addedDetail": [
1177
+ {
1178
+ "key": "lane",
1179
+ "optional": true
1180
+ }
1181
+ ],
1182
+ "addedRequired": [],
1183
+ "removed": [
1184
+ "admission"
1185
+ ],
1186
+ "breaking": true,
1187
+ "criteriaCovered": false
1188
+ },
1189
+ {
1190
+ "type": "SessionPolicyCorruptReadInfo",
1191
+ "at": [
1192
+ "src/stores/file/session-policy-store.ts:35"
1193
+ ],
1194
+ "via": "FileSessionPolicyStore.SessionPolicyCorruptReadInfo",
1195
+ "added": [
1196
+ "kind"
1197
+ ],
1198
+ "addedDetail": [
1199
+ {
1200
+ "key": "kind",
1201
+ "optional": false
1202
+ }
1203
+ ],
1204
+ "addedRequired": [
1205
+ "kind"
1206
+ ],
1207
+ "removed": [],
1208
+ "breaking": true,
1209
+ "criteriaCovered": false
1210
+ },
1211
+ {
1212
+ "type": "StopHookContext",
1213
+ "at": [
1214
+ "src/core/hooks.ts:731"
1215
+ ],
1216
+ "via": "Hooks.stop",
1217
+ "added": [
1218
+ "backgroundTasks"
1219
+ ],
1220
+ "addedDetail": [
1221
+ {
1222
+ "key": "backgroundTasks",
1223
+ "optional": true
1224
+ }
1225
+ ],
1226
+ "addedRequired": [],
1227
+ "removed": [],
1228
+ "breaking": false,
1229
+ "criteriaCovered": false
1230
+ },
1231
+ {
1232
+ "type": "TaskEvent",
1233
+ "at": [
1234
+ "src/core/task-event.ts:265"
1235
+ ],
1236
+ "added": [
1237
+ "compacted.summarizedCrossSessionMessages"
1238
+ ],
1239
+ "addedDetail": [
1240
+ {
1241
+ "key": "compacted.summarizedCrossSessionMessages",
1242
+ "optional": true
1243
+ }
1244
+ ],
1245
+ "addedRequired": [],
1246
+ "removed": [],
1247
+ "breaking": false,
1248
+ "criteriaCovered": true
1249
+ },
1250
+ {
1251
+ "type": "TaskNotificationPayload",
1252
+ "at": [
1253
+ "src/core/task-notification.ts:46"
1254
+ ],
1255
+ "added": [
1256
+ "attempt",
1257
+ "compaction",
1258
+ "handback",
1259
+ "inboxNotice",
1260
+ "resupplied",
1261
+ "spawnName"
1262
+ ],
1263
+ "addedDetail": [
1264
+ {
1265
+ "key": "attempt",
1266
+ "optional": true
1267
+ },
1268
+ {
1269
+ "key": "compaction",
1270
+ "optional": true
1271
+ },
1272
+ {
1273
+ "key": "handback",
1274
+ "optional": true
1275
+ },
1276
+ {
1277
+ "key": "inboxNotice",
1278
+ "optional": true
1279
+ },
1280
+ {
1281
+ "key": "resupplied",
1282
+ "optional": true
1283
+ },
1284
+ {
1285
+ "key": "spawnName",
1286
+ "optional": true
1287
+ }
1288
+ ],
1289
+ "addedRequired": [],
1290
+ "removed": [],
1291
+ "breaking": false,
1292
+ "criteriaCovered": true
1293
+ },
1294
+ {
1295
+ "type": "TaskResult",
1296
+ "at": [
1297
+ "src/core/task-result.ts:169"
1298
+ ],
1299
+ "added": [
1300
+ "compaction"
1301
+ ],
1302
+ "addedDetail": [
1303
+ {
1304
+ "key": "compaction",
1305
+ "optional": true
1306
+ }
1307
+ ],
1308
+ "addedRequired": [],
1309
+ "removed": [],
1310
+ "breaking": false,
1311
+ "criteriaCovered": true
1312
+ },
1313
+ {
1314
+ "type": "TaskSpec",
1315
+ "at": [
1316
+ "src/core/task-spec.ts:55"
1317
+ ],
1318
+ "added": [
1319
+ "peerPresence"
1320
+ ],
1321
+ "addedDetail": [
1322
+ {
1323
+ "key": "peerPresence",
1324
+ "optional": true
1325
+ }
1326
+ ],
1327
+ "addedRequired": [],
1328
+ "removed": [],
1329
+ "breaking": false,
1330
+ "criteriaCovered": false
1331
+ },
1332
+ {
1333
+ "type": "TeacherRunResult",
1334
+ "at": [
1335
+ "src/agents/teacher.ts:156"
1336
+ ],
1337
+ "added": [
1338
+ "compaction"
1339
+ ],
1340
+ "addedDetail": [
1341
+ {
1342
+ "key": "compaction",
1343
+ "optional": true
1344
+ }
1345
+ ],
1346
+ "addedRequired": [],
1347
+ "removed": [],
1348
+ "breaking": false,
1349
+ "criteriaCovered": false
1350
+ },
1351
+ {
1352
+ "type": "ToolExecuteContext",
1353
+ "at": [
1354
+ "src/core/tool-spec.ts:603"
1355
+ ],
1356
+ "added": [
1357
+ "modelRef"
1358
+ ],
1359
+ "addedDetail": [
1360
+ {
1361
+ "key": "modelRef",
1362
+ "optional": true
1363
+ }
1364
+ ],
1365
+ "addedRequired": [],
1366
+ "removed": [],
1367
+ "breaking": false,
1368
+ "criteriaCovered": true
1369
+ },
1370
+ {
1371
+ "type": "UserMessage",
1372
+ "at": [
1373
+ "src/engine/llm/types.ts:375"
1374
+ ],
1375
+ "added": [
1376
+ "engineNoteKey"
1377
+ ],
1378
+ "addedDetail": [
1379
+ {
1380
+ "key": "engineNoteKey",
1381
+ "optional": true
1382
+ }
1383
+ ],
1384
+ "addedRequired": [],
1385
+ "removed": [],
1386
+ "breaking": false,
1387
+ "criteriaCovered": false
1388
+ },
1389
+ {
1390
+ "type": "VerificationResult",
1391
+ "at": [
1392
+ "src/agents/verify.ts:262"
1393
+ ],
1394
+ "added": [
1395
+ "compaction"
1396
+ ],
1397
+ "addedDetail": [
1398
+ {
1399
+ "key": "compaction",
1400
+ "optional": true
1401
+ }
1402
+ ],
1403
+ "addedRequired": [],
1404
+ "removed": [],
1405
+ "breaking": false,
1406
+ "criteriaCovered": false
1407
+ },
1408
+ {
1409
+ "type": "WiringFacts",
1410
+ "at": [
1411
+ "src/core/wiring-manifest.ts:423"
1412
+ ],
1413
+ "added": [
1414
+ "peerPresence",
1415
+ "teamRole"
1416
+ ],
1417
+ "addedDetail": [
1418
+ {
1419
+ "key": "peerPresence",
1420
+ "optional": true
1421
+ },
1422
+ {
1423
+ "key": "teamRole",
1424
+ "optional": true
1425
+ }
1426
+ ],
1427
+ "addedRequired": [],
1428
+ "removed": [],
1429
+ "breaking": false,
1430
+ "criteriaCovered": false
1431
+ },
1432
+ {
1433
+ "type": "WiringManifest",
1434
+ "at": [
1435
+ "src/core/wiring-manifest.ts:183"
1436
+ ],
1437
+ "added": [
1438
+ "peerPresence",
1439
+ "teamRole"
1440
+ ],
1441
+ "addedDetail": [
1442
+ {
1443
+ "key": "peerPresence",
1444
+ "optional": true
1445
+ },
1446
+ {
1447
+ "key": "teamRole",
1448
+ "optional": true
1449
+ }
1450
+ ],
1451
+ "addedRequired": [],
1452
+ "removed": [],
1453
+ "breaking": false,
1454
+ "criteriaCovered": true
1455
+ }
1456
+ ],
1457
+ "typeKeysUnreadableArms": [
1458
+ {
1459
+ "type": "CorruptReadInfo",
1460
+ "at": "src/stores/file/corrupt-read-sink.ts:11",
1461
+ "reasons": [
1462
+ "a union carrying 3 arm(s) whose keys this reader does not follow (a qualified reference (`CorruptRecordRead`); a qualified reference (`CorruptReplayTally`); a qualified reference (`CorruptFileRead`)) — a key missing from this type at `to` is still reported REMOVED, carrying `uncertain` so the writer checks whether it moved there",
1463
+ "a union of 0 key-bearing arm(s) with no discriminating property (no property is declared by every key-bearing arm with literal words that no other arm shares), so its arms are read TOGETHER — a key added to one arm while a sibling already carries that name moves nothing in this manifest",
1464
+ "the two refs do not name this type's union arms the same way (no union read -> flat), so the delta below is stated at UNION level, with arm prefixes dropped — a key that moved between arms without leaving the union is not visible in it"
1465
+ ]
1466
+ },
1467
+ {
1468
+ "type": "FileStorageCorruptReadInfo",
1469
+ "at": "src/stores/file/index.ts:167",
1470
+ "reasons": [
1471
+ "a union carrying 3 arm(s) whose keys this reader does not follow (a qualified reference (`CorruptRecordRead`); a qualified reference (`CorruptReplayTally`); a qualified reference (`CorruptFileRead`)) — a key missing from this type at `to` is still reported REMOVED, carrying `uncertain` so the writer checks whether it moved there",
1472
+ "a union of 0 key-bearing arm(s) with no discriminating property (no property is declared by every key-bearing arm with literal words that no other arm shares), so its arms are read TOGETHER — a key added to one arm while a sibling already carries that name moves nothing in this manifest",
1473
+ "the two refs do not name this type's union arms the same way (no union read -> CorruptReadInfo/flat), so the delta below is stated at UNION level, with arm prefixes dropped — a key that moved between arms without leaving the union is not visible in it"
1474
+ ]
1475
+ },
1476
+ {
1477
+ "type": "TaskEvent",
1478
+ "at": "src/core/task-event.ts:265",
1479
+ "reasons": [
1480
+ "a union carrying 2 arm(s) whose keys this reader does not follow (a qualified reference (`TaskEventIdentity`); a qualified reference (`BrainStatus`)) — a key missing from this type at `to` is still reported REMOVED, carrying `uncertain` so the writer checks whether it moved there"
1481
+ ]
1482
+ }
1483
+ ],
1484
+ "typeKeysFlattenedCount": 215,
1485
+ "declarationMoves": [],
1486
+ "mintMoves": [],
1487
+ "criteriaObserves": [
1488
+ {
1489
+ "kind": "engineNoticeCode",
1490
+ "name": "config.context_settings_swapped",
1491
+ "assertions": [
1492
+ "G6.a"
1493
+ ]
1494
+ },
1495
+ {
1496
+ "kind": "engineNoticeCode",
1497
+ "name": "peer.held_settled",
1498
+ "assertions": [
1499
+ "G3.b"
1500
+ ]
1501
+ },
1502
+ {
1503
+ "kind": "engineNoticeCode",
1504
+ "name": "peer.inbound_disposition",
1505
+ "assertions": [
1506
+ "G2.a",
1507
+ "G3.b"
1508
+ ]
1509
+ },
1510
+ {
1511
+ "kind": "taskEventField",
1512
+ "name": "compacted.summarizedCrossSessionMessages",
1513
+ "assertions": [
1514
+ "G1.a"
1515
+ ]
1516
+ },
1517
+ {
1518
+ "kind": "taskEventField",
1519
+ "name": "tool_end.gate",
1520
+ "assertions": [
1521
+ "G11.a"
1522
+ ]
1523
+ },
1524
+ {
1525
+ "kind": "taskEventField",
1526
+ "name": "tool_end.isError",
1527
+ "assertions": [
1528
+ "G5.a",
1529
+ "G11.a"
1530
+ ]
1531
+ },
1532
+ {
1533
+ "kind": "typeMember",
1534
+ "name": "EngineNotice.detail",
1535
+ "assertions": [
1536
+ "G2.a"
1537
+ ]
1538
+ },
1539
+ {
1540
+ "kind": "typeMember",
1541
+ "name": "ListAgentsRow.lastActiveAt",
1542
+ "assertions": [
1543
+ "G9.a"
1544
+ ]
1545
+ },
1546
+ {
1547
+ "kind": "typeMember",
1548
+ "name": "ListAgentsRow.presence",
1549
+ "assertions": [
1550
+ "G9.a"
1551
+ ]
1552
+ },
1553
+ {
1554
+ "kind": "typeMember",
1555
+ "name": "MailboxAckResult.acked",
1556
+ "assertions": [
1557
+ "G3.a"
1558
+ ]
1559
+ },
1560
+ {
1561
+ "kind": "typeMember",
1562
+ "name": "MailboxStore.ack",
1563
+ "assertions": [
1564
+ "G3.a"
1565
+ ]
1566
+ },
1567
+ {
1568
+ "kind": "typeMember",
1569
+ "name": "MailboxStore.peekCount",
1570
+ "assertions": [
1571
+ "G3.a",
1572
+ "G3.b"
1573
+ ]
1574
+ },
1575
+ {
1576
+ "kind": "typeMember",
1577
+ "name": "ParentSpecSeatFields.compaction",
1578
+ "assertions": [
1579
+ "G4.a"
1580
+ ]
1581
+ },
1582
+ {
1583
+ "kind": "typeMember",
1584
+ "name": "ParentSpecSeatFields.skillListingBudgetFraction",
1585
+ "assertions": [
1586
+ "G4.a"
1587
+ ]
1588
+ },
1589
+ {
1590
+ "kind": "typeMember",
1591
+ "name": "PeerLaneConfig.maxMessagesPerRound",
1592
+ "assertions": [
1593
+ "G7.a"
1594
+ ]
1595
+ },
1596
+ {
1597
+ "kind": "typeMember",
1598
+ "name": "ResolvedCrossSessionInboundSetting.deprecatedLayers",
1599
+ "assertions": [
1600
+ "G8.a"
1601
+ ]
1602
+ },
1603
+ {
1604
+ "kind": "typeMember",
1605
+ "name": "ResolvedCrossSessionInboundSetting.value",
1606
+ "assertions": [
1607
+ "G8.a"
1608
+ ]
1609
+ },
1610
+ {
1611
+ "kind": "typeMember",
1612
+ "name": "ResolvedRole.modelRef",
1613
+ "assertions": [
1614
+ "G5.a"
1615
+ ]
1616
+ },
1617
+ {
1618
+ "kind": "typeMember",
1619
+ "name": "RuleReject.code",
1620
+ "assertions": [
1621
+ "G11.a"
1622
+ ]
1623
+ },
1624
+ {
1625
+ "kind": "typeMember",
1626
+ "name": "RunnerDeps.contextSettings",
1627
+ "assertions": [
1628
+ "G6.a"
1629
+ ]
1630
+ },
1631
+ {
1632
+ "kind": "typeMember",
1633
+ "name": "RunnerDeps.peerLane",
1634
+ "assertions": [
1635
+ "G7.a"
1636
+ ]
1637
+ },
1638
+ {
1639
+ "kind": "typeMember",
1640
+ "name": "TaskNotificationPayload.attempt",
1641
+ "assertions": [
1642
+ "G1.a",
1643
+ "G2.a"
1644
+ ]
1645
+ },
1646
+ {
1647
+ "kind": "typeMember",
1648
+ "name": "TaskNotificationPayload.compaction",
1649
+ "assertions": [
1650
+ "G10.a"
1651
+ ]
1652
+ },
1653
+ {
1654
+ "kind": "typeMember",
1655
+ "name": "TaskNotificationPayload.handback",
1656
+ "assertions": [
1657
+ "G10.a"
1658
+ ]
1659
+ },
1660
+ {
1661
+ "kind": "typeMember",
1662
+ "name": "TaskNotificationPayload.inboxNotice.pending",
1663
+ "assertions": [
1664
+ "G7.a"
1665
+ ]
1666
+ },
1667
+ {
1668
+ "kind": "typeMember",
1669
+ "name": "TaskNotificationPayload.inboxNotice.resupplied",
1670
+ "assertions": [
1671
+ "G1.a"
1672
+ ]
1673
+ },
1674
+ {
1675
+ "kind": "typeMember",
1676
+ "name": "TaskNotificationPayload.resupplied",
1677
+ "assertions": [
1678
+ "G1.a"
1679
+ ]
1680
+ },
1681
+ {
1682
+ "kind": "typeMember",
1683
+ "name": "TaskNotificationPayload.spawnName",
1684
+ "assertions": [
1685
+ "G10.a"
1686
+ ]
1687
+ },
1688
+ {
1689
+ "kind": "typeMember",
1690
+ "name": "TaskResult.compaction",
1691
+ "assertions": [
1692
+ "G10.a"
1693
+ ]
1694
+ },
1695
+ {
1696
+ "kind": "typeMember",
1697
+ "name": "TaskSpec.compaction.enabled",
1698
+ "assertions": [
1699
+ "G4.a"
1700
+ ]
1701
+ },
1702
+ {
1703
+ "kind": "typeMember",
1704
+ "name": "ToolExecuteContext.modelRef",
1705
+ "assertions": [
1706
+ "G5.a"
1707
+ ]
1708
+ },
1709
+ {
1710
+ "kind": "typeMember",
1711
+ "name": "WiringManifest.peerPresence",
1712
+ "assertions": [
1713
+ "G9.a"
1714
+ ]
1715
+ },
1716
+ {
1717
+ "kind": "typeMember",
1718
+ "name": "WiringManifest.teamRole",
1719
+ "assertions": [
1720
+ "G9.a"
1721
+ ]
1722
+ }
1723
+ ],
1724
+ "consumersHint": {
1725
+ "cli": [
1726
+ "BASH_ONLY_CONSTRUCTS",
1727
+ "CascadeRunResult",
1728
+ "ENGINE_NOTICE_CODES",
1729
+ "LexMode",
1730
+ "ListAgentsRow",
1731
+ "MailboxPeerMeta",
1732
+ "MaybeCompactOptions",
1733
+ "PARSE_FAILURE_REASONS",
1734
+ "ParentSpecSeat",
1735
+ "PeerInboundDisposition",
1736
+ "PeerSessionRecord",
1737
+ "Prepared",
1738
+ "QuoteOpen",
1739
+ "ReadCandidate",
1740
+ "RepairResult",
1741
+ "RunInternals",
1742
+ "RunnerDeps",
1743
+ "SWAPPABLE_DEP_SEATS",
1744
+ "SendMessageToolOptions",
1745
+ "TaskEvent",
1746
+ "TaskNotificationPayload",
1747
+ "TaskResult",
1748
+ "TaskSpec",
1749
+ "TeacherRunResult",
1750
+ "ToolExecuteContext",
1751
+ "UserMessage",
1752
+ "VerificationResult",
1753
+ "WiringFacts",
1754
+ "WiringManifest"
1755
+ ],
1756
+ "server": [
1757
+ "CROSS_SESSION_INBOUND_SETTINGS",
1758
+ "CascadeRunResult",
1759
+ "CorruptReadInfo",
1760
+ "CrossSessionInboundSetting",
1761
+ "ENGINE_NOTICE_CODES",
1762
+ "FileStorageCorruptReadInfo",
1763
+ "ListAgentsRow",
1764
+ "MAILBOX_PEER_RECORD_KINDS",
1765
+ "MailboxPeerMeta",
1766
+ "PEER_ADMISSION_DEFAULTS",
1767
+ "ParentSpecSeat",
1768
+ "PeerSessionRecord",
1769
+ "Prepared",
1770
+ "QuoteOpen",
1771
+ "ReadCandidate",
1772
+ "RepairResult",
1773
+ "RunInternals",
1774
+ "RunnerDeps",
1775
+ "SWAPPABLE_DEP_SEATS",
1776
+ "StopHookContext",
1777
+ "TaskEvent",
1778
+ "TaskNotificationPayload",
1779
+ "TaskResult",
1780
+ "TaskSpec",
1781
+ "TeacherRunResult",
1782
+ "ToolExecuteContext",
1783
+ "UserMessage",
1784
+ "VerificationResult",
1785
+ "WiringFacts",
1786
+ "WiringManifest"
1787
+ ],
1788
+ "sdk": [
1789
+ "ENGINE_NOTICE_CODES",
1790
+ "RunnerDeps",
1791
+ "TaskEvent",
1792
+ "TaskNotificationPayload",
1793
+ "TaskResult",
1794
+ "TaskSpec",
1795
+ "WiringManifest"
1796
+ ],
1797
+ "note": "scanned cli@4e593722 server@567d93b8 sdk@f554971 — 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: 11 name(s) matched ONLY in bookkeeping files and were set aside (ListAgentsToolOptions, MaybeCompactOptions, PeerAdmissionConfig, PeerHeldQueue, PeerHeldSettleReason, PeerInboundDisposition, ResolvedCrossSessionInboundSetting, ResolvedRole, RunnerSelfSeat, SendMessageToolOptions, resolvePeerAdmissionConfig)"
1798
+ },
1799
+ "breakingCount": 18,
1800
+ "breakingItems": [
1801
+ "closed set lost members: CROSS_SESSION_INBOUND_SETTINGS -accept",
1802
+ "closed set lost members: CrossSessionInboundSetting -accept",
1803
+ "closed set lost members: LexMode -lenient,strict",
1804
+ "closed set lost members: PARSE_FAILURE_REASONS -background_operator",
1805
+ "closed set lost members: QuoteOpen -\",'",
1806
+ "export kind changed: FileStorageCorruptReadInfo interface -> type",
1807
+ "export removed: PEER_ADMISSION_DEFAULTS (variable)",
1808
+ "export removed: PeerAdmissionConfig (interface)",
1809
+ "export removed: resolvePeerAdmissionConfig (function)",
1810
+ "type gained required keys: PeerHeldQueue +decisions,forgetDecisions,reconcile",
1811
+ "type gained required keys: Prepared +frameSettlement,fullShellReachable,registryAccess",
1812
+ "type gained required keys: ResolvedRole +modelRef",
1813
+ "type gained required keys: SessionPolicyCorruptReadInfo +kind",
1814
+ "type lost keys: CorruptReadInfo -path,reason",
1815
+ "type lost keys: FileStorageCorruptReadInfo -path,reason",
1816
+ "type lost keys: ListAgentsToolOptions -includeOffline",
1817
+ "type lost keys: RunnerDeps -peerAdmission",
1818
+ "type lost keys: SendMessageToolOptions -admission"
1819
+ ],
1820
+ "toResolvedAt": "74e3b5a8f2f88672aa1c505151d085eb0a602424"
1821
+ }