@sema-agent/core 7.43.0 → 7.44.0

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 (39) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/dist/agents/subagent.d.ts +2 -1
  3. package/dist/brain/errors.d.ts +23 -2
  4. package/dist/brain/errors.js +26 -2
  5. package/dist/brain/stream-engine.d.ts +2 -1
  6. package/dist/brain/stream-engine.js +10 -9
  7. package/dist/core/checkpoint-store.d.ts +26 -13
  8. package/dist/core/checkpoint-store.js +4 -13
  9. package/dist/core/engine-notice.d.ts +16 -14
  10. package/dist/core/engine-notice.js +4 -3
  11. package/dist/core/governance-codes.d.ts +4 -3
  12. package/dist/core/governance-codes.js +1 -0
  13. package/dist/core/memory-engine/engine.d.ts +2 -2
  14. package/dist/core/memory-engine/engine.js +7 -14
  15. package/dist/core/memory-engine/file-backend.d.ts +2 -2
  16. package/dist/core/memory-engine/file-backend.js +5 -7
  17. package/dist/core/memory-engine/layout.d.ts +37 -4
  18. package/dist/core/memory-engine/layout.js +34 -5
  19. package/dist/core/runner/contracts.d.ts +1 -16
  20. package/dist/core/runner/runtask.js +1 -5
  21. package/dist/core/runner/steer-admission.d.ts +10 -11
  22. package/dist/core/runner/steer-admission.js +6 -8
  23. package/dist/core/runner/stream-steer-verb.d.ts +5 -4
  24. package/dist/core/runner/stream-steer-verb.js +6 -8
  25. package/dist/core/steer-replay.d.ts +46 -0
  26. package/dist/core/steer-replay.js +22 -0
  27. package/dist/core/task-event.d.ts +3 -2
  28. package/dist/core/task-stream.d.ts +12 -6
  29. package/dist/core/tool-errors.d.ts +2 -2
  30. package/dist/core/types.d.ts +2 -2
  31. package/dist/core/types.js +1 -1
  32. package/dist/index.d.ts +3 -2
  33. package/dist/index.js +3 -2
  34. package/dist/orchestration/workflow-types.d.ts +5 -0
  35. package/dist/orchestration/workflow.d.ts +3 -2
  36. package/dist/orchestration/workflow.js +14 -6
  37. package/package.json +1 -1
  38. package/test/export-surface.snapshot.json +11 -5
  39. package/wire-changes/core@7.44.0.json +469 -0
package/dist/index.js CHANGED
@@ -29,7 +29,7 @@ export { StdioLspTransport } from "./engine/lsp/stdio-lsp-transport.js";
29
29
  export { encodeFrame, createFrameDecoder } from "./engine/lsp/frame-decoder.js";
30
30
  export { resolveModel, resolveTaskModel, parseModelMention, expandTiers, DEFAULT_TIER_ORDER, CC_MODEL_TIER_ALIASES, ROLE_TIER_DEFAULTS, MODEL_ROLES, } from "./core/roles.js";
31
31
  export { selectModel, selectModelOrThrow } from "./core/select-model.js";
32
- export { BrainError, classifyHttp, isProviderEchoShape, PROVIDER_ECHO_SHAPE } from "./brain/errors.js";
32
+ export { BrainError, classifyHttp, isProviderEchoShape, PROVIDER_ECHO_SHAPE, PROXY_TUNNEL_REFUSED } from "./brain/errors.js";
33
33
  export { looksDegenerate, inspectDegenerate, trimDegenerateTail } from "./brain/repetition.js";
34
34
  export { computeCostMicroUsd, isModelPriced, modelCostToPricing, } from "./core/pricing.js";
35
35
  export { cacheFamilyOf, promptTokensOf, uncachedInputTokensOf } from "./core/runner/usage-accounting.js";
@@ -49,7 +49,8 @@ export { MCP_FAILURE_KINDS, MCP_DELIVERY_VERDICTS, MCP_LIVENESS_STATES, classify
49
49
  export { MCP_INJECTION_DROP_REASONS, MCP_INJECTION_DROP_TEXT, mcpInjectionDroppedNotice } from "./core/mcp-injection-drop.js";
50
50
  export { askUnresolvableNotice } from "./core/ask-unresolvable-notice.js";
51
51
  export { ASK_UNRESOLVABLE_CAUSES } from "./core/ask-unresolvable-notice.js";
52
- export { USER_STEER_UNDRAINED_CAUSES } from "./core/engine-notice.js";
52
+ export { USER_INPUT_UNDRAINED_CAUSES } from "./core/engine-notice.js";
53
+ export { STEER_REPLAY_FACETS } from "./core/steer-replay.js";
53
54
  export { TOOL_TURN_INCOMPLETE_CAUSES } from "./internal/llm.js";
54
55
  export { DURABLE_MANDATE_SOURCES } from "./core/tool-policy.js";
55
56
  export { TERMINAL_CAUSE_IS_REPLAYABLE, PROMPT_BLOCK_CAUSES, isPromptBlockCause } from "./core/terminal-cause.js";
@@ -421,6 +421,9 @@ export interface WorkflowRun {
421
421
  * read or written carrying this token's `parked` entry, so
422
422
  * absence is the confirmed state and an entry written before this member reads as confirmed, exactly as it did; the
423
423
  * engine's own material read identity-checks what it finds, so an unconfirmed origin degrades rather than mis-binds.
424
+ * `parkedBy` is the run standing on the park: a record's run holds it iff `entry.parkedBy === record.id` (never
425
+ * `originRunId`); inheritance keeps it. `generation` is the inherited entry's, else `0`, plus one per admission — the
426
+ * highest on a session is the chain's tail, a tie is a fork. Both or neither; an older entry has neither (no holder).
424
427
  */
425
428
  parks?: Array<{
426
429
  callKey: string;
@@ -428,6 +431,8 @@ export interface WorkflowRun {
428
431
  token: string;
429
432
  originRunId: string;
430
433
  originUnconfirmed?: true;
434
+ parkedBy?: string;
435
+ generation?: number;
431
436
  }>;
432
437
  /**
433
438
  * Set (`true`) on a resume run's record from its creation and REMOVED the moment its admission completes — so a record
@@ -223,8 +223,9 @@ export interface WorkflowAgentHandle {
223
223
  * legs of one steering ingress are equally replay-safe. ⚠️ ONE arm of that contract is NOT reachable through this
224
224
  * handle, deliberately: the idempotent-REPLAY arm ("same id, same payload ⇒ injects nothing"). Each call mints a
225
225
  * FRESH unguessable correlation marker into the framing it delivers, so a retry under the same id is a
226
- * same-id-DIFFERENT-instruction call and refuses typed `steering.duplicate_input_id`. What the key buys on this
227
- * lane is therefore AT-MOST-ONCE: a retried ingress is refused LOUDLY instead of injecting a second copy.
226
+ * same-id-DIFFERENT-instruction call and refuses typed `steering.duplicate_input_id` (`detail.differs` always names
227
+ * `text` on this lane). What the key buys on this lane is therefore AT-MOST-ONCE: a retried ingress is refused
228
+ * LOUDLY instead of injecting a second copy.
228
229
  */
229
230
  steer(content: string, opts?: {
230
231
  inputId?: string;
@@ -1056,9 +1056,10 @@ export function startWorkflow(runner, fn, opts = {}, internals) {
1056
1056
  const parks = run.parks ?? (run.parks = []);
1057
1057
  const at = parks.findIndex((e) => e.callKey === rec.callKey);
1058
1058
  const held = at === -1 ? undefined : parks[at];
1059
+ const holder = { parkedBy: runId, generation: held?.generation ?? 0 };
1059
1060
  const key = held !== undefined && held.token === paused.terminal.token && held.originUnconfirmed !== true
1060
- ? { callKey: rec.callKey, sessionId: paused.sessionId, token: paused.terminal.token, originRunId: held.originRunId }
1061
- : { callKey: rec.callKey, sessionId: paused.sessionId, token: paused.terminal.token, originRunId: runId, originUnconfirmed: true };
1061
+ ? { callKey: rec.callKey, sessionId: paused.sessionId, token: paused.terminal.token, originRunId: held.originRunId, ...holder }
1062
+ : { callKey: rec.callKey, sessionId: paused.sessionId, token: paused.terminal.token, originRunId: runId, originUnconfirmed: true, ...holder };
1062
1063
  if (at === -1)
1063
1064
  parks.push(key);
1064
1065
  else
@@ -2263,19 +2264,23 @@ export function startWorkflow(runner, fn, opts = {}, internals) {
2263
2264
  throw parksUnreadable("its journal yielded no entry to derive one from");
2264
2265
  const candidates = new Map();
2265
2266
  const keyed = (k) => k.token !== "" && k.sessionId !== "";
2267
+ const clash = (a, b) => a !== "" && b !== "" && a !== b;
2266
2268
  const offerCandidate = (ord, key) => {
2267
2269
  const recorded = candidates.get(ord);
2268
- if (recorded !== undefined && (recorded.callKey !== key.callKey || (keyed(recorded) && keyed(key) && (recorded.token !== key.token || recorded.sessionId !== key.sessionId))))
2270
+ if (recorded !== undefined && (recorded.callKey !== key.callKey || clash(recorded.token, key.token) || clash(recorded.sessionId, key.sessionId)))
2269
2271
  throw parkBindingBroken(ord, "the prior run's key caches name different tokens, sessions or calls for it");
2270
- if (recorded === undefined || (!keyed(recorded) && keyed(key)))
2272
+ if (recorded === undefined)
2271
2273
  candidates.set(ord, key);
2274
+ else if (!keyed(recorded) && keyed(key))
2275
+ candidates.set(ord, recorded.parkedBy === undefined ? key : { ...key, parkedBy: recorded.parkedBy, generation: recorded.generation });
2272
2276
  };
2273
2277
  for (const raw of recordParks ?? []) {
2274
2278
  const e = raw;
2275
- if (e === null || typeof e !== "object" || typeof e.callKey !== "string" || typeof e.sessionId !== "string" || typeof e.token !== "string" || typeof e.originRunId !== "string" || !/^\d+:/.test(e.callKey)) {
2279
+ const holder = e === null || typeof e !== "object" ? undefined : e.parkedBy === undefined && e.generation === undefined ? {} : typeof e.parkedBy === "string" && e.parkedBy !== "" && Number.isSafeInteger(e.generation) && e.generation >= 0 ? { parkedBy: e.parkedBy, generation: e.generation } : undefined;
2280
+ if (e === null || typeof e !== "object" || holder === undefined || typeof e.callKey !== "string" || typeof e.sessionId !== "string" || typeof e.token !== "string" || typeof e.originRunId !== "string" || !/^\d+:/.test(e.callKey)) {
2276
2281
  throw parkBindingBroken(-1, "a recorded park entry is malformed or its call key has no ordinal");
2277
2282
  }
2278
- offerCandidate(callKeyOrdinal(e.callKey), { callKey: e.callKey, sessionId: e.sessionId, token: e.token, originRunId: e.originRunId, ...(e.originUnconfirmed === true ? { originUnconfirmed: true } : {}) });
2283
+ offerCandidate(callKeyOrdinal(e.callKey), { callKey: e.callKey, sessionId: e.sessionId, token: e.token, originRunId: e.originRunId, ...(e.originUnconfirmed === true ? { originUnconfirmed: true } : {}), ...holder });
2279
2284
  }
2280
2285
  for (const [ord, e] of replayByOrdinal.entries()) {
2281
2286
  if (e?.parked === undefined)
@@ -2320,6 +2325,9 @@ export function startWorkflow(runner, fn, opts = {}, internals) {
2320
2325
  }
2321
2326
  }
2322
2327
  if (!finalized) {
2328
+ for (const key of inherited)
2329
+ if (key.generation !== undefined)
2330
+ key.generation += 1;
2323
2331
  run.parks = inherited;
2324
2332
  delete run.resumeAdmissionIncomplete;
2325
2333
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sema-agent/core",
3
- "version": "7.43.0",
3
+ "version": "7.44.0",
4
4
  "description": "Stateless, task-oriented AI agent core",
5
5
  "type": "module",
6
6
  "license": "BUSL-1.1",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "_comment": "design/87 L3 — frozen public export surface of src/index.ts (name -> kind). DO NOT edit by hand to silence a red test. A removed/changed entry = a SemVer-BREAKING change; bump MAJOR and update this fixture in the SAME commit (design/87 §4.2 / §5.2). Regenerate via REGEN in test/export-surface.test.ts.",
3
3
  "_tierComment": "#435 v1 — machine-readable layering of the public surface: stable = demonstrated by README.md / src/examples; internal = an `Internal`-marked name or a runner/engine deep-subtree declaration (the model seam src/engine/llm is excluded — it is the BYOM contract, not an engine internal); advanced = a supported export the front door does not walk you through. THIS IS AN INITIAL HEURISTIC, derived mechanically and expected to be refined ticket by ticket: no human reviewed these 1700+ entries one by one, and nothing here claims otherwise. Known bias: a short or English-word export name (ok, err, Result, Usage) can match ordinary prose in README.md and land `stable` on a coincidence. Every export MUST carry a tier — a new export with no row fails the gate in export-surface.test.ts.",
4
- "count": 2598,
4
+ "count": 2601,
5
5
  "exports": {
6
6
  "A2ATaskState": "type",
7
7
  "A2ATaskStateReversal": "type",
@@ -965,6 +965,7 @@
965
965
  "PROMPT_BLOCK_CAUSES": "variable",
966
966
  "PROTOCOL_TABLE": "variable",
967
967
  "PROVIDER_ECHO_SHAPE": "variable",
968
+ "PROXY_TUNNEL_REFUSED": "variable",
968
969
  "PackSectionDeclaration": "interface",
969
970
  "ParentSpecSeat": "interface",
970
971
  "ParentSpecSeatFields": "type",
@@ -1354,6 +1355,7 @@
1354
1355
  "STALE_RUNNING_REAP_ATTRIBUTION": "variable",
1355
1356
  "STARTER_RULES": "variable",
1356
1357
  "STATIC_VERIFICATION_PROMPT": "variable",
1358
+ "STEER_REPLAY_FACETS": "variable",
1357
1359
  "STUB_ARCHIVED_LINE": "variable",
1358
1360
  "SUBAGENT_PROMPT": "variable",
1359
1361
  "SUBAGENT_SYSTEM_NOTE": "variable",
@@ -1480,6 +1482,7 @@
1480
1482
  "StaticWiringDeps": "type",
1481
1483
  "StaticWiringSpec": "type",
1482
1484
  "StdioLspTransport": "class",
1485
+ "SteerReplayFacet": "type",
1483
1486
  "StopFailureContext": "interface",
1484
1487
  "StopReason": "type",
1485
1488
  "StopSource": "type",
@@ -1652,7 +1655,7 @@
1652
1655
  "UNCOVERED_SEGMENT_REASON_BASELINE": "variable",
1653
1656
  "URL_SAFETY": "variable",
1654
1657
  "USAGE_WINDOW_REAP_MARGIN_MS": "variable",
1655
- "USER_STEER_UNDRAINED_CAUSES": "variable",
1658
+ "USER_INPUT_UNDRAINED_CAUSES": "variable",
1656
1659
  "UnarmedDenialLimitFallback": "interface",
1657
1660
  "UncoveredSegmentDetail": "interface",
1658
1661
  "UnifiedTaskOutput": "interface",
@@ -1665,10 +1668,10 @@
1665
1668
  "UsageWindowReading": "interface",
1666
1669
  "UsageWindowRecord": "interface",
1667
1670
  "UsageWindowStore": "interface",
1671
+ "UserInputUndrainedCause": "type",
1668
1672
  "UserMessage": "interface",
1669
1673
  "UserPromptSubmitContext": "interface",
1670
1674
  "UserPromptSubmitResult": "interface",
1671
- "UserSteerUndrainedCause": "type",
1672
1675
  "UtilityGate": "type",
1673
1676
  "V2HeaderHints": "interface",
1674
1677
  "VERIFICATION_PROMPT": "variable",
@@ -3565,6 +3568,7 @@
3565
3568
  "PROMPT_BLOCK_CAUSES": "advanced",
3566
3569
  "PROTOCOL_TABLE": "advanced",
3567
3570
  "PROVIDER_ECHO_SHAPE": "advanced",
3571
+ "PROXY_TUNNEL_REFUSED": "advanced",
3568
3572
  "PackSectionDeclaration": "advanced",
3569
3573
  "ParentSpecSeat": "advanced",
3570
3574
  "ParentSpecSeatFields": "advanced",
@@ -3954,6 +3958,7 @@
3954
3958
  "STALE_RUNNING_REAP_ATTRIBUTION": "advanced",
3955
3959
  "STARTER_RULES": "advanced",
3956
3960
  "STATIC_VERIFICATION_PROMPT": "advanced",
3961
+ "STEER_REPLAY_FACETS": "advanced",
3957
3962
  "STUB_ARCHIVED_LINE": "advanced",
3958
3963
  "SUBAGENT_PROMPT": "advanced",
3959
3964
  "SUBAGENT_SYSTEM_NOTE": "advanced",
@@ -4080,6 +4085,7 @@
4080
4085
  "StaticWiringDeps": "advanced",
4081
4086
  "StaticWiringSpec": "advanced",
4082
4087
  "StdioLspTransport": "internal",
4088
+ "SteerReplayFacet": "advanced",
4083
4089
  "StopFailureContext": "advanced",
4084
4090
  "StopReason": "advanced",
4085
4091
  "StopSource": "advanced",
@@ -4252,7 +4258,7 @@
4252
4258
  "UNCOVERED_SEGMENT_REASON_BASELINE": "advanced",
4253
4259
  "URL_SAFETY": "advanced",
4254
4260
  "USAGE_WINDOW_REAP_MARGIN_MS": "internal",
4255
- "USER_STEER_UNDRAINED_CAUSES": "advanced",
4261
+ "USER_INPUT_UNDRAINED_CAUSES": "advanced",
4256
4262
  "UnarmedDenialLimitFallback": "advanced",
4257
4263
  "UncoveredSegmentDetail": "advanced",
4258
4264
  "UnifiedTaskOutput": "advanced",
@@ -4265,10 +4271,10 @@
4265
4271
  "UsageWindowReading": "advanced",
4266
4272
  "UsageWindowRecord": "advanced",
4267
4273
  "UsageWindowStore": "advanced",
4274
+ "UserInputUndrainedCause": "advanced",
4268
4275
  "UserMessage": "advanced",
4269
4276
  "UserPromptSubmitContext": "advanced",
4270
4277
  "UserPromptSubmitResult": "advanced",
4271
- "UserSteerUndrainedCause": "advanced",
4272
4278
  "UtilityGate": "advanced",
4273
4279
  "V2HeaderHints": "advanced",
4274
4280
  "VERIFICATION_PROMPT": "advanced",
@@ -0,0 +1,469 @@
1
+ {
2
+ "repo": "core",
3
+ "version": "7.44.0",
4
+ "from": "81c4563dd75c1e50c20c79f4c639232fa8c2d548",
5
+ "to": "3f30c7387bbf41e2124d0b3216aab2ad0ff662cd",
6
+ "added": [
7
+ {
8
+ "name": "PROXY_TUNNEL_REFUSED",
9
+ "kind": "variable",
10
+ "tier": "advanced",
11
+ "at": [
12
+ "src/brain/errors.ts:283",
13
+ "src/index.ts:250"
14
+ ],
15
+ "criteriaCovered": false,
16
+ "breaking": false
17
+ },
18
+ {
19
+ "name": "STEER_REPLAY_FACETS",
20
+ "kind": "variable",
21
+ "tier": "advanced",
22
+ "at": [
23
+ "src/core/steer-replay.ts:14",
24
+ "src/index.ts:361"
25
+ ],
26
+ "criteriaCovered": false,
27
+ "breaking": false
28
+ },
29
+ {
30
+ "name": "SteerReplayFacet",
31
+ "kind": "type",
32
+ "tier": "advanced",
33
+ "at": [
34
+ "src/core/steer-replay.ts:15",
35
+ "src/index.ts:361"
36
+ ],
37
+ "criteriaCovered": false,
38
+ "breaking": false
39
+ },
40
+ {
41
+ "name": "USER_INPUT_UNDRAINED_CAUSES",
42
+ "kind": "variable",
43
+ "tier": "advanced",
44
+ "at": [
45
+ "src/core/engine-notice.ts:1035",
46
+ "src/core/types.ts:55",
47
+ "src/index.ts:360"
48
+ ],
49
+ "criteriaCovered": false,
50
+ "breaking": false
51
+ },
52
+ {
53
+ "name": "UserInputUndrainedCause",
54
+ "kind": "type",
55
+ "tier": "advanced",
56
+ "at": [
57
+ "src/core/engine-notice.ts:1036",
58
+ "src/core/types.ts:54",
59
+ "src/index.ts:360"
60
+ ],
61
+ "criteriaCovered": false,
62
+ "breaking": false
63
+ }
64
+ ],
65
+ "removed": [
66
+ {
67
+ "name": "USER_STEER_UNDRAINED_CAUSES",
68
+ "kind": "variable",
69
+ "tier": "advanced",
70
+ "at": [
71
+ "src/core/engine-notice.ts:1033",
72
+ "src/core/types.ts:55",
73
+ "src/index.ts:361"
74
+ ],
75
+ "breaking": true
76
+ },
77
+ {
78
+ "name": "UserSteerUndrainedCause",
79
+ "kind": "type",
80
+ "tier": "advanced",
81
+ "at": [
82
+ "src/core/engine-notice.ts:1034",
83
+ "src/core/types.ts:54",
84
+ "src/index.ts:361"
85
+ ],
86
+ "breaking": true
87
+ }
88
+ ],
89
+ "changed": [],
90
+ "narrowed": [],
91
+ "closedSetMembers": [
92
+ {
93
+ "set": "SCOPE_HOME_FORMS",
94
+ "at": [
95
+ "src/core/memory-engine/layout.ts:1140"
96
+ ],
97
+ "newSet": true,
98
+ "added": [
99
+ "file",
100
+ "other",
101
+ "symlink"
102
+ ],
103
+ "removed": [],
104
+ "breaking": false,
105
+ "criteriaCovered": false
106
+ },
107
+ {
108
+ "set": "STEER_REPLAY_FACETS",
109
+ "at": [
110
+ "src/core/steer-replay.ts:14"
111
+ ],
112
+ "newSet": true,
113
+ "added": [
114
+ "actor",
115
+ "priority",
116
+ "text",
117
+ "trusted"
118
+ ],
119
+ "removed": [],
120
+ "breaking": false,
121
+ "criteriaCovered": false
122
+ },
123
+ {
124
+ "set": "ScopeHomeForm",
125
+ "at": [
126
+ "src/core/memory-engine/layout.ts:1141"
127
+ ],
128
+ "newSet": true,
129
+ "added": [
130
+ "file",
131
+ "other",
132
+ "symlink"
133
+ ],
134
+ "removed": [],
135
+ "breaking": false,
136
+ "criteriaCovered": false
137
+ },
138
+ {
139
+ "set": "SteerReplayFacet",
140
+ "at": [
141
+ "src/core/steer-replay.ts:15",
142
+ "src/index.ts:361"
143
+ ],
144
+ "newSet": true,
145
+ "added": [
146
+ "actor",
147
+ "priority",
148
+ "text",
149
+ "trusted"
150
+ ],
151
+ "removed": [],
152
+ "breaking": false,
153
+ "criteriaCovered": false
154
+ },
155
+ {
156
+ "set": "USER_INPUT_UNDRAINED_CAUSES",
157
+ "at": [
158
+ "src/core/engine-notice.ts:1035"
159
+ ],
160
+ "newSet": true,
161
+ "added": [
162
+ "crashed",
163
+ "leg_end"
164
+ ],
165
+ "removed": [],
166
+ "breaking": false,
167
+ "criteriaCovered": false
168
+ },
169
+ {
170
+ "set": "UserInputUndrainedCause",
171
+ "at": [
172
+ "src/core/engine-notice.ts:1036",
173
+ "src/core/types.ts:54",
174
+ "src/index.ts:360"
175
+ ],
176
+ "newSet": true,
177
+ "added": [
178
+ "crashed",
179
+ "leg_end"
180
+ ],
181
+ "removed": [],
182
+ "breaking": false,
183
+ "criteriaCovered": false
184
+ }
185
+ ],
186
+ "closedSetsUnreadable": [],
187
+ "typeKeys": [
188
+ {
189
+ "type": "WorkflowRun",
190
+ "at": [
191
+ "src/orchestration/workflow-types.ts:205"
192
+ ],
193
+ "added": [
194
+ "parks[].generation",
195
+ "parks[].parkedBy"
196
+ ],
197
+ "addedDetail": [
198
+ {
199
+ "key": "parks[].generation",
200
+ "optional": true
201
+ },
202
+ {
203
+ "key": "parks[].parkedBy",
204
+ "optional": true
205
+ }
206
+ ],
207
+ "addedRequired": [],
208
+ "removed": [],
209
+ "breaking": false,
210
+ "criteriaCovered": false
211
+ }
212
+ ],
213
+ "typeKeysUnreadableArms": [],
214
+ "typeKeysFlattenedCount": 225,
215
+ "signatures": [
216
+ {
217
+ "name": "CheckpointError.constructor",
218
+ "at": [
219
+ "src/core/checkpoint-store.ts:2433"
220
+ ],
221
+ "from": [
222
+ "(code: \"checkpoint.already_exists\" | \"checkpoint.already_resolved\" | \"checkpoint.config_refused\" | \"checkpoint.cwd_conflicts_restore\" | \"checkpoint.execution_outcome_conflict\" | \"checkpoint.gate_mismatch\" | \"checkpoint.invalid_outcome\" | \"checkpoint.not_found\" | \"checkpoint.reopen_failed\" | \"checkpoint.reopen_revote\" | \"checkpoint.reopened_concurrently\" | \"checkpoint.resume_aborted\" | \"checkpoint.unsupported_version\" | \"checkpoint.walltime_axis_retired\" | \"resume.constraint_rejected\" | \"resume.constraint_unprojectable\" | \"resume.parent_constraint_mismatch\" | \"resume.parent_constraint_missing\" | \"resume.placement_mismatch\" | \"resume.preflight_rejected\" | \"resume.principal_mismatch\" | \"resume.usage_window_exhausted\" | \"steering.blocked_by_hook\" | \"steering.duplicate_input_id\" | \"steering.invalid_content\" | \"steering.queue_full\" | \"wake.gate_pending\" | \"wake.nothing_to_deliver\", message: string, detail?: { field?: \"boundCallId\" | \"boundInputHash\" | \"boundGrantDigest\" | \"answer\" | \"hostDecision\" | \"approver\" | \"taskConfig\" | \"inheritedGate\"; code?: CheckpointConfigRefusalCode; retryAfterMs?: number; reason?: CheckpointErrorReason; })"
223
+ ],
224
+ "to": [
225
+ "(code: \"checkpoint.already_exists\" | \"checkpoint.already_resolved\" | \"checkpoint.config_refused\" | \"checkpoint.cwd_conflicts_restore\" | \"checkpoint.execution_outcome_conflict\" | \"checkpoint.gate_mismatch\" | \"checkpoint.invalid_outcome\" | \"checkpoint.not_found\" | \"checkpoint.reopen_failed\" | \"checkpoint.reopen_revote\" | \"checkpoint.reopened_concurrently\" | \"checkpoint.resume_aborted\" | \"checkpoint.unsupported_version\" | \"checkpoint.walltime_axis_retired\" | \"resume.constraint_rejected\" | \"resume.constraint_unprojectable\" | \"resume.parent_constraint_mismatch\" | \"resume.parent_constraint_missing\" | \"resume.placement_mismatch\" | \"resume.preflight_rejected\" | \"resume.principal_mismatch\" | \"resume.usage_window_exhausted\" | \"steering.blocked_by_hook\" | \"steering.duplicate_input_id\" | \"steering.invalid_content\" | \"steering.queue_full\" | \"wake.gate_pending\" | \"wake.nothing_to_deliver\", message: string, detail?: { field?: \"boundCallId\" | \"boundInputHash\" | \"boundGrantDigest\" | \"answer\" | \"hostDecision\" | \"approver\" | \"taskConfig\" | \"inheritedGate\"; code?: CheckpointConfigRefusalCode; retryAfterMs?: number; reason?: CheckpointErrorReason; differs?: readonly SteerReplayFacet[]; })"
226
+ ],
227
+ "changes": [
228
+ {
229
+ "aspect": "param",
230
+ "detail": "param 3 `detail` type widened: … CheckpointErrorReason; [ -> differs?: readonly SteerReplayFacet[]; ]}",
231
+ "breaking": false
232
+ }
233
+ ],
234
+ "breaking": false,
235
+ "criteriaCovered": false
236
+ }
237
+ ],
238
+ "declarationMoves": [],
239
+ "mintMoves": [],
240
+ "criteriaObserves": [
241
+ {
242
+ "kind": "engineNoticeCode",
243
+ "name": "task.user_followup_undrained",
244
+ "assertions": [
245
+ "G10.a",
246
+ "G11.b"
247
+ ]
248
+ },
249
+ {
250
+ "kind": "engineNoticeCode",
251
+ "name": "task.user_steer_undrained",
252
+ "assertions": [
253
+ "G10.b",
254
+ "G11.b"
255
+ ]
256
+ },
257
+ {
258
+ "kind": "taskEventField",
259
+ "name": "status.detail",
260
+ "assertions": [
261
+ "G6.a"
262
+ ]
263
+ },
264
+ {
265
+ "kind": "taskEventField",
266
+ "name": "status.errClass",
267
+ "assertions": [
268
+ "G6.a",
269
+ "G6.c"
270
+ ]
271
+ },
272
+ {
273
+ "kind": "taskEventField",
274
+ "name": "status.maxRetries",
275
+ "assertions": [
276
+ "G6.a"
277
+ ]
278
+ },
279
+ {
280
+ "kind": "typeMember",
281
+ "name": "CheckpointError.code",
282
+ "assertions": [
283
+ "G12.a"
284
+ ]
285
+ },
286
+ {
287
+ "kind": "typeMember",
288
+ "name": "CheckpointError.detail",
289
+ "assertions": [
290
+ "G12.a",
291
+ "G12.b",
292
+ "G12.c",
293
+ "G13.d"
294
+ ]
295
+ },
296
+ {
297
+ "kind": "typeMember",
298
+ "name": "EngineNotice.detail",
299
+ "assertions": [
300
+ "G10.a",
301
+ "G10.b",
302
+ "G11.a"
303
+ ]
304
+ },
305
+ {
306
+ "kind": "typeMember",
307
+ "name": "FileMemoryEngineBackend.applyPatches",
308
+ "assertions": [
309
+ "G7.b",
310
+ "G8.a",
311
+ "G9.a"
312
+ ]
313
+ },
314
+ {
315
+ "kind": "typeMember",
316
+ "name": "FileMemoryEngineBackend.listHeaders",
317
+ "assertions": [
318
+ "G7.a",
319
+ "G8.b"
320
+ ]
321
+ },
322
+ {
323
+ "kind": "typeMember",
324
+ "name": "MemoryEngine.eraseMemoryEntries",
325
+ "assertions": [
326
+ "G8.a"
327
+ ]
328
+ },
329
+ {
330
+ "kind": "typeMember",
331
+ "name": "MemoryEngine.materialize",
332
+ "assertions": [
333
+ "G7.a",
334
+ "G8.b"
335
+ ]
336
+ },
337
+ {
338
+ "kind": "typeMember",
339
+ "name": "PatchReport.applied",
340
+ "assertions": [
341
+ "G9.a"
342
+ ]
343
+ },
344
+ {
345
+ "kind": "typeMember",
346
+ "name": "PatchReport.conflicts",
347
+ "assertions": [
348
+ "G7.b"
349
+ ]
350
+ },
351
+ {
352
+ "kind": "typeMember",
353
+ "name": "TaskResult.apiFailure",
354
+ "assertions": [
355
+ "G6.d"
356
+ ]
357
+ },
358
+ {
359
+ "kind": "typeMember",
360
+ "name": "TaskResult.terminal",
361
+ "assertions": [
362
+ "G6.b"
363
+ ]
364
+ },
365
+ {
366
+ "kind": "typeMember",
367
+ "name": "TaskStream.steer",
368
+ "assertions": [
369
+ "G13.a",
370
+ "G13.b",
371
+ "G13.c",
372
+ "G13.d"
373
+ ]
374
+ },
375
+ {
376
+ "kind": "typeMember",
377
+ "name": "WorkflowRun.errorCode",
378
+ "assertions": [
379
+ "G5.c",
380
+ "G5.d"
381
+ ]
382
+ },
383
+ {
384
+ "kind": "typeMember",
385
+ "name": "WorkflowRun.parks.generation",
386
+ "assertions": [
387
+ "G1.a",
388
+ "G1.b",
389
+ "G2.a",
390
+ "G2.b",
391
+ "G2.c",
392
+ "G4.a",
393
+ "G5.a",
394
+ "G5.b",
395
+ "G5.d"
396
+ ]
397
+ },
398
+ {
399
+ "kind": "typeMember",
400
+ "name": "WorkflowRun.parks.originRunId",
401
+ "assertions": [
402
+ "G3.a"
403
+ ]
404
+ },
405
+ {
406
+ "kind": "typeMember",
407
+ "name": "WorkflowRun.parks.originUnconfirmed",
408
+ "assertions": [
409
+ "G3.b"
410
+ ]
411
+ },
412
+ {
413
+ "kind": "typeMember",
414
+ "name": "WorkflowRun.parks.parkedBy",
415
+ "assertions": [
416
+ "G1.a",
417
+ "G1.b",
418
+ "G2.a",
419
+ "G2.b",
420
+ "G2.c",
421
+ "G3.a",
422
+ "G3.b",
423
+ "G4.a",
424
+ "G5.a",
425
+ "G5.b",
426
+ "G5.d"
427
+ ]
428
+ },
429
+ {
430
+ "kind": "typeMember",
431
+ "name": "WorkflowRun.parks.token",
432
+ "assertions": [
433
+ "G2.c"
434
+ ]
435
+ },
436
+ {
437
+ "kind": "typeMember",
438
+ "name": "WorkflowRun.status",
439
+ "assertions": [
440
+ "G4.a",
441
+ "G5.c"
442
+ ]
443
+ }
444
+ ],
445
+ "consumersHint": {
446
+ "cli": [
447
+ "CheckpointError",
448
+ "USER_STEER_UNDRAINED_CAUSES",
449
+ "UserSteerUndrainedCause",
450
+ "WorkflowRun"
451
+ ],
452
+ "server": [
453
+ "CheckpointError",
454
+ "USER_STEER_UNDRAINED_CAUSES",
455
+ "UserSteerUndrainedCause",
456
+ "WorkflowRun"
457
+ ],
458
+ "sdk": [
459
+ "CheckpointError",
460
+ "WorkflowRun"
461
+ ],
462
+ "note": "scanned cli@72cc4d60 server@dd5568ac sdk@0616917 — a name listed is MENTIONED there today, which is evidence of consumption, not proof of it"
463
+ },
464
+ "breakingCount": 2,
465
+ "breakingItems": [
466
+ "export removed: USER_STEER_UNDRAINED_CAUSES (variable)",
467
+ "export removed: UserSteerUndrainedCause (type)"
468
+ ]
469
+ }