@sensigo/realm 0.31.2 → 0.32.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 (44) hide show
  1. package/dist/engine/apply-resume.d.ts +34 -0
  2. package/dist/engine/apply-resume.d.ts.map +1 -0
  3. package/dist/engine/apply-resume.js +69 -0
  4. package/dist/engine/apply-resume.js.map +1 -0
  5. package/dist/engine/defaulted-steps.d.ts +17 -0
  6. package/dist/engine/defaulted-steps.d.ts.map +1 -0
  7. package/dist/engine/defaulted-steps.js +26 -0
  8. package/dist/engine/defaulted-steps.js.map +1 -0
  9. package/dist/engine/execution-loop.d.ts +32 -0
  10. package/dist/engine/execution-loop.d.ts.map +1 -1
  11. package/dist/engine/execution-loop.js +704 -39
  12. package/dist/engine/execution-loop.js.map +1 -1
  13. package/dist/engine/lifecycle.d.ts +14 -0
  14. package/dist/engine/lifecycle.d.ts.map +1 -1
  15. package/dist/engine/lifecycle.js +14 -0
  16. package/dist/engine/lifecycle.js.map +1 -1
  17. package/dist/engine/run-health.d.ts +1 -1
  18. package/dist/engine/run-health.d.ts.map +1 -1
  19. package/dist/engine/run-health.js +26 -3
  20. package/dist/engine/run-health.js.map +1 -1
  21. package/dist/engine/settlement.d.ts +27 -0
  22. package/dist/engine/settlement.d.ts.map +1 -0
  23. package/dist/engine/settlement.js +414 -0
  24. package/dist/engine/settlement.js.map +1 -0
  25. package/dist/index.d.ts +8 -2
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +11 -2
  28. package/dist/index.js.map +1 -1
  29. package/dist/store/json-file-store.d.ts +54 -3
  30. package/dist/store/json-file-store.d.ts.map +1 -1
  31. package/dist/store/json-file-store.js +156 -17
  32. package/dist/store/json-file-store.js.map +1 -1
  33. package/dist/store/store-interface.d.ts +47 -1
  34. package/dist/store/store-interface.d.ts.map +1 -1
  35. package/dist/types/run-record.d.ts +67 -0
  36. package/dist/types/run-record.d.ts.map +1 -1
  37. package/dist/types/settlement.d.ts +124 -0
  38. package/dist/types/settlement.d.ts.map +1 -0
  39. package/dist/types/settlement.js +2 -0
  40. package/dist/types/settlement.js.map +1 -0
  41. package/dist/types/workflow-error.d.ts +1 -1
  42. package/dist/types/workflow-error.d.ts.map +1 -1
  43. package/dist/types/workflow-error.js.map +1 -1
  44. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settlement.d.ts","sourceRoot":"","sources":["../../src/engine/settlement.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAoB,MAAM,iCAAiC,CAAC;AAC5F,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAEhB,iBAAiB,EAGlB,MAAM,wBAAwB,CAAC;AAyGhC;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,kBAAkB,EAC9B,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,EACrC,OAAO,EAAE,iBAAiB,GACzB,MAAM,EAAE,CAWV;AA2VD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,eAAe,EACtB,UAAU,EAAE,kBAAkB,EAC9B,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,IAAI,CAAA;CAAE,GACvB,gBAAgB,CAUlB"}
@@ -0,0 +1,414 @@
1
+ import { deriveRunPhase, isWorkflowComplete, findEligibleSteps, findEligibleGuardSteps, propagateSkips, } from './eligibility.js';
2
+ import { deriveDefaultedSteps } from './defaulted-steps.js';
3
+ import { captureEvidence } from '../evidence/snapshot.js';
4
+ import { omitClaim } from './claim-liveness.js';
5
+ import { DRAIN_LEASE_MAX } from './lifecycle.js';
6
+ // ---------------------------------------------------------------------------
7
+ // §2 normative helpers
8
+ // ---------------------------------------------------------------------------
9
+ /** `isTerminal(fresh) := fresh.terminal_state === true` — BU-blocking adjudication; F1 preserved
10
+ * (abandon/abort SET terminal_state, so this reads correctly for both). */
11
+ function isTerminal(fresh) {
12
+ return fresh.terminal_state === true;
13
+ }
14
+ /** `norm(t) := t ?? null` — absent≡absent normalization (issue #197's grandfathered-claims
15
+ * precedent), so a token-less claim/entry is never spuriously distinguished from a `null` one. */
16
+ function norm(t) {
17
+ return t ?? null;
18
+ }
19
+ /** `tokensEqual(a,b) := norm(a) === norm(b)`. */
20
+ function tokensEqual(a, b) {
21
+ return norm(a) === norm(b);
22
+ }
23
+ /** `M := {complete: completed_steps, fail: failed_steps, skip: skipped_steps}` — the membership
24
+ * array a settled-map entry's `outcome` maps to. */
25
+ function membershipFor(fresh, outcome) {
26
+ switch (outcome) {
27
+ case 'complete':
28
+ return fresh.completed_steps;
29
+ case 'fail':
30
+ return fresh.failed_steps;
31
+ case 'skip':
32
+ return fresh.skipped_steps;
33
+ }
34
+ }
35
+ /**
36
+ * `entryOf(fresh, s) := e = fresh.settled?.[s]; e !== undefined && s ∈ M[e.outcome](fresh) ? e :
37
+ * undefined` — the ORPHAN RULE: an entry without matching membership is treated as absent (the
38
+ * `claimStep` :512 overwrite-self-heal precedent, generalized). Never occurs through `settleStep`
39
+ * itself (APPLY always writes both atomically) — guards a hand-authored fixture or an external
40
+ * store's divergent history from wedging the predicate.
41
+ */
42
+ function entryOf(fresh, step) {
43
+ const e = fresh.settled?.[step];
44
+ if (e === undefined)
45
+ return undefined;
46
+ return membershipFor(fresh, e.outcome).includes(step) ? e : undefined;
47
+ }
48
+ /** `toSettledOutcome := {complete↦'complete', fail↦'fail', abort↦'skip'}`. */
49
+ function toSettledOutcome(outcome) {
50
+ switch (outcome) {
51
+ case 'complete':
52
+ return 'complete';
53
+ case 'fail':
54
+ return 'fail';
55
+ case 'abort':
56
+ return 'skip';
57
+ }
58
+ }
59
+ /** The pending subset of a finalizer ledger, ascending by `rank` — the order the drain loop (§6)
60
+ * consumes. A convenience snapshot for {@link SettlementResult}'s `pendingFinalizers` field. */
61
+ function pendingFinalizerNames(ledger) {
62
+ if (ledger === undefined)
63
+ return [];
64
+ return Object.entries(ledger)
65
+ .filter(([, e]) => e.status === 'pending')
66
+ .sort(([, a], [, b]) => a.rank - b.rank)
67
+ .map(([name]) => name);
68
+ }
69
+ // ---------------------------------------------------------------------------
70
+ // Finalizer selection — extracted from execution-loop.ts's buildFinalizedSeal (the ONE
71
+ // engine-file touch this PR makes). Behavior-preserving by construction: the legacy caller passes
72
+ // the SAME (definition, settled-step-names, outcome) inputs and gets the SAME ordered name list
73
+ // back that its own inline grouping loop used to compute.
74
+ // ---------------------------------------------------------------------------
75
+ /** Normalizes a finalizer's `on_outcome` to a set of triggers (moved verbatim from
76
+ * execution-loop.ts:3079 as part of the extraction). */
77
+ function finalizerTriggers(stepDef) {
78
+ const raw = stepDef.on_outcome;
79
+ if (raw === undefined)
80
+ return new Set();
81
+ return new Set(Array.isArray(raw) ? raw : [raw]);
82
+ }
83
+ /**
84
+ * Selects the finalizer steps that fire for a terminal `outcome`, in the drain order (design
85
+ * record §4/§6; extracted from `buildFinalizedSeal`'s selection, execution-loop.ts :3117-3126):
86
+ * Group A (rank precedence) — `on_outcome` contains `outcome` (the specific catch/complete arm);
87
+ * Group B — `on_outcome` contains `'always'` but NOT `outcome` (a finalizer listing both runs
88
+ * once, in Group A). Each group in `Object.entries` declaration order; Group A then Group B.
89
+ * `settledStepNames` excludes any finalizer already at-most-once settled (resume/re-drive safety)
90
+ * — pass `completed_steps ∪ failed_steps`, NEVER the `RunRecord.settled` map (a different,
91
+ * per-step-outcome-keyed structure this selection does not consult).
92
+ */
93
+ export function selectFinalizers(definition, settledStepNames, outcome) {
94
+ const groupA = [];
95
+ const groupB = [];
96
+ for (const [name, step] of Object.entries(definition.steps)) {
97
+ if (step.execution !== 'finalizer')
98
+ continue;
99
+ if (settledStepNames.has(name))
100
+ continue; // at-most-once per run (resume / re-drive safety)
101
+ const triggers = finalizerTriggers(step);
102
+ if (triggers.has(outcome))
103
+ groupA.push(name);
104
+ else if (triggers.has('always'))
105
+ groupB.push(name);
106
+ }
107
+ return [...groupA, ...groupB];
108
+ }
109
+ // ---------------------------------------------------------------------------
110
+ // §4 mintFresh (terminal false→true edge only; same atomic write)
111
+ // ---------------------------------------------------------------------------
112
+ /**
113
+ * `mintFresh` (design record §4): on a terminal false→true edge, selects the matching finalizers
114
+ * and seeds a CLEAN `'pending'` entry for each one not already `completed`/`failed` (the
115
+ * never-downgrade guard — defensive; membership-skip in `selectFinalizers` should already exclude
116
+ * these). Rank totally orders the freshly-minted PENDING set only, starting at 0 for THIS mint
117
+ * pass — collisions with terminal-status entries are legal and inert (§1's "Resume VOIDS
118
+ * pendings, loudly" means no OTHER pending entry can coexist with a fresh mint in this
119
+ * increment's design). Non-selected entries keep their status verbatim (history:
120
+ * completed/failed/voided). Returns `record.finalizer_ledger` UNCHANGED (by reference) when
121
+ * nothing is selected — the zero-finalizer / no-matching-trigger case falls out of this naturally,
122
+ * without needing `buildFinalizedSeal`'s own explicit fast-path.
123
+ */
124
+ function mintFresh(record, definition, outcome) {
125
+ const settledStepNames = new Set([...record.completed_steps, ...record.failed_steps]);
126
+ const selected = selectFinalizers(definition, settledStepNames, outcome);
127
+ if (selected.length === 0)
128
+ return record.finalizer_ledger;
129
+ const ledger = { ...record.finalizer_ledger };
130
+ let rank = 0;
131
+ for (const name of selected) {
132
+ const prior = record.finalizer_ledger?.[name];
133
+ if (prior?.status === 'completed' || prior?.status === 'failed')
134
+ continue; // never-downgrade
135
+ ledger[name] = { status: 'pending', rank: rank++ }; // CLEAN mint — no lease fields cross an edge
136
+ }
137
+ return ledger;
138
+ }
139
+ // ---------------------------------------------------------------------------
140
+ // §3 settleStepArms
141
+ // ---------------------------------------------------------------------------
142
+ function applySettleStep(fresh, delta, definition, now) {
143
+ const { step, outcome, claimToken, evidence, failureMessage, abort } = delta;
144
+ // Idempotence arms BEFORE terminal/claim (L21 ii).
145
+ const existing = entryOf(fresh, step);
146
+ if (existing !== undefined) {
147
+ if (!tokensEqual(existing.token, claimToken)) {
148
+ return { applied: false, reason: 'already_settled_by_other', run: fresh };
149
+ }
150
+ if (toSettledOutcome(outcome) === existing.outcome) {
151
+ return { applied: false, reason: 'already_settled', run: fresh }; // drain-aware (§6)
152
+ }
153
+ return { applied: false, reason: 'settled_outcome_divergence', run: fresh };
154
+ }
155
+ if (isTerminal(fresh)) {
156
+ return { applied: false, reason: 'run_terminal', run: fresh };
157
+ }
158
+ const claim = fresh.claims?.[step];
159
+ if (claim === undefined || !tokensEqual(claim.token, claimToken)) {
160
+ return { applied: false, reason: 'claim_lost', run: fresh };
161
+ }
162
+ if (fresh.pending_gate?.step_name === step) {
163
+ return { applied: false, reason: 'gate_mismatch', run: fresh }; // legacy gates coexist in inc-1
164
+ }
165
+ if (outcome === 'abort' && abort === undefined) {
166
+ // Caller-programming-error, not a predicate outcome — see SettleStepDelta's own doc.
167
+ throw new Error(`applySettlement contract violation: settle_step delta for step '${step}' has ` +
168
+ `outcome:'abort' but no 'abort' payload`);
169
+ }
170
+ // APPLY (total; bound to source semantics by line — design record §3).
171
+ const settledOutcome = toSettledOutcome(outcome);
172
+ const withMembership = {
173
+ ...fresh,
174
+ in_progress_steps: fresh.in_progress_steps.filter((s) => s !== step),
175
+ claims: omitClaim(fresh.claims, step),
176
+ evidence: [...fresh.evidence, ...evidence],
177
+ settled: { ...fresh.settled, [step]: { token: norm(claimToken), outcome: settledOutcome } },
178
+ ...(outcome === 'complete' ? { completed_steps: [...fresh.completed_steps, step] } : {}),
179
+ ...(outcome === 'fail' ? { failed_steps: [...fresh.failed_steps, step] } : {}),
180
+ ...(outcome === 'abort' ? { skipped_steps: [...fresh.skipped_steps, step] } : {}),
181
+ };
182
+ if (outcome === 'abort') {
183
+ return applyAbortEdge(fresh, withMembership, step, abort, definition, now);
184
+ }
185
+ return applyCompleteOrFailEdge(withMembership, step, outcome, failureMessage, definition);
186
+ }
187
+ /**
188
+ * Handler-abort (execution-loop.ts :1784-1811 semantics): UNCONDITIONALLY terminal — never gated
189
+ * by the two-disjunct `isComplete` predicate (that predicate governs complete/fail only; an abort
190
+ * always ends the run immediately, mirroring `executeGuardStep`'s own guard-abort branch).
191
+ */
192
+ function applyAbortEdge(fresh, withMembership, step, abort, definition, now) {
193
+ const propagated = propagateSkips(withMembership, definition);
194
+ const withSkipped = {
195
+ ...withMembership,
196
+ skipped_steps: propagated.skipped,
197
+ skip_details: { ...propagated.details, [step]: { kind: 'handler_abort' } },
198
+ };
199
+ let aborted = {
200
+ ...withSkipped,
201
+ terminal_state: true,
202
+ terminal_reason: `Handler '${step}' aborted the run: ${abort.abortMessage}`,
203
+ aborted_at: { step_id: abort.stepId, abort_message: abort.abortMessage },
204
+ };
205
+ // Cancel an open gate on ANOTHER step in the SAME write (design record §3) — a genuinely NEW
206
+ // capability the legacy handler-abort path lacks today (it preserves pending_gate untouched,
207
+ // which is exactly the class of inconsistent state #279 exists to close). `fresh.pending_gate`
208
+ // is read (not `aborted.pending_gate`) only for clarity — both are identical at this point since
209
+ // nothing above has touched it.
210
+ if (fresh.pending_gate !== undefined && fresh.pending_gate.step_name !== step) {
211
+ const gateStepName = fresh.pending_gate.step_name;
212
+ const { pending_gate: _droppedGate, ...withoutGate } = aborted;
213
+ aborted = {
214
+ ...withoutGate,
215
+ in_progress_steps: withoutGate.in_progress_steps.filter((s) => s !== gateStepName),
216
+ claims: omitClaim(withoutGate.claims, gateStepName),
217
+ skipped_steps: [...withoutGate.skipped_steps, gateStepName],
218
+ skip_details: {
219
+ ...withoutGate.skip_details,
220
+ [gateStepName]: { kind: 'gate_cancelled_by_abort' },
221
+ },
222
+ evidence: [
223
+ ...withoutGate.evidence,
224
+ captureEvidence({
225
+ stepId: gateStepName,
226
+ startedAt: now,
227
+ completedAt: now,
228
+ input: {},
229
+ output: { gate_cancelled_by_abort: true, aborted_by: step },
230
+ }),
231
+ ],
232
+ };
233
+ }
234
+ // On terminal false→true edge: mintFresh (§4), same atomic write. abort NEVER stamps
235
+ // defaulted_steps (the FM-5/#232 guard — only the complete edge does).
236
+ const ledger = mintFresh(aborted, definition, 'abort');
237
+ const finalRun = {
238
+ ...aborted,
239
+ ...(ledger !== undefined ? { finalizer_ledger: ledger } : {}),
240
+ };
241
+ const withPhase = { ...finalRun, run_phase: deriveRunPhase(finalRun) };
242
+ return {
243
+ applied: true,
244
+ run: withPhase,
245
+ transitioned: true, // isTerminal(fresh) was already refused above — abort is always false→true
246
+ pendingFinalizers: pendingFinalizerNames(withPhase.finalizer_ledger),
247
+ };
248
+ }
249
+ /** complete / fail: the TWO-DISJUNCT `isComplete` predicate (execution-loop.ts :2579-2583 /
250
+ * :2237-2241 — named, not implied). */
251
+ function applyCompleteOrFailEdge(withMembership, step, outcome, failureMessage, definition) {
252
+ const propagated = propagateSkips(withMembership, definition);
253
+ const withSkipped = {
254
+ ...withMembership,
255
+ skipped_steps: propagated.skipped,
256
+ skip_details: propagated.details,
257
+ };
258
+ const isComplete = isWorkflowComplete(withSkipped, definition) ||
259
+ (withSkipped.in_progress_steps.length === 0 &&
260
+ findEligibleSteps(definition, withSkipped).length === 0 &&
261
+ findEligibleGuardSteps(definition, withSkipped).length === 0);
262
+ const draft = {
263
+ ...withSkipped,
264
+ terminal_state: isComplete,
265
+ ...(isComplete
266
+ ? {
267
+ terminal_reason: outcome === 'complete'
268
+ ? 'Workflow completed.' // eligibility.ts:47 keys deriveRunPhase's 'completed' on this
269
+ : `Step '${step}' failed: ${failureMessage ?? 'unknown error'}`,
270
+ }
271
+ : {}),
272
+ };
273
+ let sealed = draft;
274
+ if (isComplete) {
275
+ // On terminal edge: mintFresh (§4), same atomic write.
276
+ const ledger = mintFresh(draft, definition, outcome);
277
+ sealed = { ...draft, ...(ledger !== undefined ? { finalizer_ledger: ledger } : {}) };
278
+ // defaulted_steps stamped IFF complete-terminal edge (FM-5/#232 guard) — never on a fail seal,
279
+ // even one that terminalizes.
280
+ if (outcome === 'complete') {
281
+ const defaultedSteps = deriveDefaultedSteps(sealed.evidence);
282
+ if (defaultedSteps.length > 0)
283
+ sealed = { ...sealed, defaulted_steps: defaultedSteps };
284
+ }
285
+ }
286
+ const withPhase = { ...sealed, run_phase: deriveRunPhase(sealed) };
287
+ return {
288
+ applied: true,
289
+ run: withPhase,
290
+ transitioned: isComplete,
291
+ pendingFinalizers: pendingFinalizerNames(withPhase.finalizer_ledger),
292
+ };
293
+ }
294
+ // ---------------------------------------------------------------------------
295
+ // §3 leaseFinalizerArms — CALLER-MINTED token (lens-1 F3a)
296
+ // ---------------------------------------------------------------------------
297
+ function applyLeaseFinalizer(fresh, delta, now) {
298
+ // Defensive; unreachable in-contract under §5 void-at-resume (no pending survives a resume).
299
+ if (!isTerminal(fresh)) {
300
+ return { applied: false, reason: 'run_not_terminal', run: fresh };
301
+ }
302
+ const e = fresh.finalizer_ledger?.[delta.finalizer];
303
+ if (e === undefined) {
304
+ return { applied: false, reason: 'not_eligible', run: fresh }; // unknown id — drain loop ABORTS loud
305
+ }
306
+ if (e.status !== 'pending') {
307
+ return { applied: false, reason: 'ledger_not_pending', run: fresh }; // done/failed/voided — loop ADVANCES
308
+ }
309
+ const nowMs = now.getTime();
310
+ const eDeadlineMs = e.lease_deadline !== undefined ? new Date(e.lease_deadline).getTime() : undefined;
311
+ if (tokensEqual(e.lease_token, delta.leaseToken) &&
312
+ eDeadlineMs !== undefined &&
313
+ eDeadlineMs > nowMs) {
314
+ return { applied: false, reason: 'already_leased', run: fresh }; // own ambiguous retry — L21
315
+ }
316
+ const blocking = Object.values(fresh.finalizer_ledger ?? {}).find((other) => other.status === 'pending' && other.rank < e.rank);
317
+ if (blocking !== undefined) {
318
+ return { applied: false, reason: 'rank_blocked', run: fresh };
319
+ }
320
+ if (e.lease_token !== undefined && eDeadlineMs !== undefined && eDeadlineMs > nowMs) {
321
+ return { applied: false, reason: 'lease_held', run: fresh };
322
+ }
323
+ // APPLY: lease_token = delta.leaseToken; lease_deadline = now + clamp(leaseSeconds, DRAIN_LEASE_MAX).
324
+ const clampedSeconds = Math.min(delta.leaseSeconds, DRAIN_LEASE_MAX);
325
+ const leaseDeadline = new Date(nowMs + clampedSeconds * 1000).toISOString();
326
+ const ledger = {
327
+ ...fresh.finalizer_ledger,
328
+ [delta.finalizer]: { ...e, lease_token: delta.leaseToken, lease_deadline: leaseDeadline },
329
+ };
330
+ const run = { ...fresh, finalizer_ledger: ledger };
331
+ return {
332
+ applied: true,
333
+ run,
334
+ transitioned: false,
335
+ pendingFinalizers: pendingFinalizerNames(ledger),
336
+ };
337
+ }
338
+ // ---------------------------------------------------------------------------
339
+ // §3 markFinalizerArms
340
+ // ---------------------------------------------------------------------------
341
+ function applyMarkFinalizer(fresh, delta) {
342
+ const e = fresh.finalizer_ledger?.[delta.finalizer];
343
+ if (e === undefined) {
344
+ return { applied: false, reason: 'not_eligible', run: fresh };
345
+ }
346
+ if (e.status !== 'pending') {
347
+ if (tokensEqual(e.lease_token, delta.leaseToken) && e.status === delta.result) {
348
+ // Own retry — L21 (lens-1 F3b). APPLY does NOT clear lease fields.
349
+ return { applied: false, reason: 'already_marked', run: fresh };
350
+ }
351
+ return { applied: false, reason: 'ledger_not_pending', run: fresh }; // peer marked / voided — benign
352
+ }
353
+ if (!tokensEqual(e.lease_token, delta.leaseToken)) {
354
+ return { applied: false, reason: 'lease_lost', run: fresh };
355
+ }
356
+ // AFTER the token arms: defensive; voided-at-resume makes this unreachable in-contract (no
357
+ // pending survives resume — the §0.4 audit question dissolves).
358
+ if (!isTerminal(fresh)) {
359
+ return { applied: false, reason: 'run_not_terminal', run: fresh };
360
+ }
361
+ // APPLY: status = result; completed_steps/failed_steps += name; evidence — ONE compound
362
+ // atomic write (I14).
363
+ const ledger = {
364
+ ...fresh.finalizer_ledger,
365
+ [delta.finalizer]: { ...e, status: delta.result },
366
+ };
367
+ const withLedgerAndEvidence = delta.result === 'completed'
368
+ ? {
369
+ ...fresh,
370
+ finalizer_ledger: ledger,
371
+ completed_steps: [...fresh.completed_steps, delta.finalizer],
372
+ evidence: [...fresh.evidence, delta.evidence],
373
+ }
374
+ : {
375
+ ...fresh,
376
+ finalizer_ledger: ledger,
377
+ failed_steps: [...fresh.failed_steps, delta.finalizer],
378
+ evidence: [...fresh.evidence, delta.evidence],
379
+ };
380
+ const run = {
381
+ ...withLedgerAndEvidence,
382
+ run_phase: deriveRunPhase(withLedgerAndEvidence),
383
+ };
384
+ return {
385
+ applied: true,
386
+ run,
387
+ transitioned: false,
388
+ pendingFinalizers: pendingFinalizerNames(ledger),
389
+ };
390
+ }
391
+ // ---------------------------------------------------------------------------
392
+ // Dispatcher
393
+ // ---------------------------------------------------------------------------
394
+ /**
395
+ * Applies one {@link SettlementDelta} against `fresh` — pure, synchronous, no I/O, no registry
396
+ * (design record §7 CS-purity: `options` carries VALUES only). `definition` is passed per call
397
+ * (never cached) — `lease_finalizer`/`mark_finalizer` deltas do not use it (their arms never
398
+ * reference the workflow definition; only `settle_step`'s terminal-edge `mintFresh` does).
399
+ *
400
+ * `result.run` on `applied: true` is the AS-APPLIED transform output — see
401
+ * {@link SettlementResult}'s own doc for the never-a-re-read invariant this carries.
402
+ */
403
+ export function applySettlement(fresh, delta, definition, options) {
404
+ const now = options?.now ?? new Date();
405
+ switch (delta.kind) {
406
+ case 'settle_step':
407
+ return applySettleStep(fresh, delta, definition, now);
408
+ case 'lease_finalizer':
409
+ return applyLeaseFinalizer(fresh, delta, now);
410
+ case 'mark_finalizer':
411
+ return applyMarkFinalizer(fresh, delta);
412
+ }
413
+ }
414
+ //# sourceMappingURL=settlement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settlement.js","sourceRoot":"","sources":["../../src/engine/settlement.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -27,7 +27,13 @@ export type { SubmitGateOptions, ExecuteChainOptions } from './engine/execution-
27
27
  export { findEligibleSteps, isWorkflowComplete, deriveRunPhase, buildEvidenceByStep, buildSettlementNamespace, propagateSkips, isStepSettledOrInFlight, } from './engine/eligibility.js';
28
28
  export { adoptsLine, partitionBufferedEntries } from './engine/trace-adoption.js';
29
29
  export type { BufferedEntryPartition } from './engine/trace-adoption.js';
30
- export { TERMINAL_PHASES, RESUMABLE_PHASES, WAITING_PHASES, isTerminalPhase, TERMINAL_STATES, RESUMABLE_STATES, WAITING_STATES, isTerminalState, } from './engine/lifecycle.js';
30
+ export { deriveDefaultedSteps } from './engine/defaulted-steps.js';
31
+ export { applySettlement, selectFinalizers } from './engine/settlement.js';
32
+ export { applyResume } from './engine/apply-resume.js';
33
+ export type { ApplyResumeResult, ApplyResumeVoidedFinalizer } from './engine/apply-resume.js';
34
+ export { drainFinalizers } from './engine/execution-loop.js';
35
+ export type { SettlementDelta, SettleStepDelta, SettleStepOutcome, LeaseFinalizerDelta, MarkFinalizerDelta, MarkFinalizerResult, SettlementResult, SettlementRefusalReason, SettlementNoopReason, } from './types/settlement.js';
36
+ export { TERMINAL_PHASES, RESUMABLE_PHASES, WAITING_PHASES, isTerminalPhase, TERMINAL_STATES, RESUMABLE_STATES, WAITING_STATES, isTerminalState, DRAIN_LEASE_MAX, } from './engine/lifecycle.js';
31
37
  export { computeClaimDeadline, classifyClaim, classifyInProgressClaims, omitClaim, DEFAULT_STEP_TIMEOUT_SECONDS, DEFAULT_EXECUTION_TIMEOUT_SECONDS, RECLAIM_MARGIN_SECONDS, RECLAIM_FLOOR_SECONDS, shouldEnforceTimeout, worstCaseScheduleSeconds, resolveCapMs, } from './engine/claim-liveness.js';
32
38
  export type { ClaimState, InProgressClaimInfo } from './engine/claim-liveness.js';
33
39
  export { reclaimStep } from './engine/reclaim-step.js';
@@ -39,7 +45,7 @@ export type { Requirement, CapabilityBlockInfo } from './engine/capability.js';
39
45
  export { evaluatePrecondition, checkPreconditions, evaluateAllPreconditions, } from './engine/precondition.js';
40
46
  export type { PreconditionResult } from './engine/precondition.js';
41
47
  export type { StepDiagnostics } from './types/run-record.js';
42
- export declare const VERSION = "0.31.2";
48
+ export declare const VERSION = "0.32.0";
43
49
  export type { ToolCallRecord, McpServerConfig } from './types/mcp-types.js';
44
50
  export type { ServiceAdapter, ServiceResponse } from './extensions/service-adapter.js';
45
51
  export type { StepHandler, StepHandlerInputs, StepContext, StepHandlerResult, } from './extensions/step-handler.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -20,13 +20,22 @@ export { findEligibleSteps, isWorkflowComplete, deriveRunPhase, buildEvidenceByS
20
20
  // The unified writer partition (issue #197 PR-2) — the ONE authoritative adoption predicate;
21
21
  // see trace-adoption.ts's own module doc for the full contract.
22
22
  export { adoptsLine, partitionBufferedEntries } from './engine/trace-adoption.js';
23
- export { TERMINAL_PHASES, RESUMABLE_PHASES, WAITING_PHASES, isTerminalPhase, TERMINAL_STATES, RESUMABLE_STATES, WAITING_STATES, isTerminalState, } from './engine/lifecycle.js';
23
+ // The shared default-settled-step derivation (issue #232) the ONE authoritative scan of
24
+ // `evidence[].diagnostics.settled_by_default`; see defaulted-steps.ts's own module doc.
25
+ export { deriveDefaultedSteps } from './engine/defaulted-steps.js';
26
+ // Atomic settlement (issue #279, increment 1, PR-A) — the pure transform + finalizer selection.
27
+ // DORMANT: no engine/mcp call site constructs a SettlementDelta or calls settleStep in this
28
+ // release (enforced by an in-repo source-text guard — see its own test for the exact scope).
29
+ export { applySettlement, selectFinalizers } from './engine/settlement.js';
30
+ export { applyResume } from './engine/apply-resume.js';
31
+ export { drainFinalizers } from './engine/execution-loop.js';
32
+ export { TERMINAL_PHASES, RESUMABLE_PHASES, WAITING_PHASES, isTerminalPhase, TERMINAL_STATES, RESUMABLE_STATES, WAITING_STATES, isTerminalState, DRAIN_LEASE_MAX, } from './engine/lifecycle.js';
24
33
  export { computeClaimDeadline, classifyClaim, classifyInProgressClaims, omitClaim, DEFAULT_STEP_TIMEOUT_SECONDS, DEFAULT_EXECUTION_TIMEOUT_SECONDS, RECLAIM_MARGIN_SECONDS, RECLAIM_FLOOR_SECONDS, shouldEnforceTimeout, worstCaseScheduleSeconds, resolveCapMs, } from './engine/claim-liveness.js';
25
34
  export { reclaimStep } from './engine/reclaim-step.js';
26
35
  export { classifyRunHealth, DEFAULT_IDLE_THRESHOLD_MS } from './engine/run-health.js';
27
36
  export { requirementForStep, unmetCapabilities, findCapabilityBlockedSteps, capabilityWarning, } from './engine/capability.js';
28
37
  export { evaluatePrecondition, checkPreconditions, evaluateAllPreconditions, } from './engine/precondition.js';
29
- export const VERSION = '0.31.2';
38
+ export const VERSION = '0.32.0';
30
39
  export { ExtensionRegistry } from './extensions/registry.js';
31
40
  export { createDefaultRegistry } from './extensions/default-registry.js';
32
41
  export { validateDeploymentManifest, collectManifestSecretRefs, DEPLOYMENT_MANIFEST_JSON_SCHEMA, } from './manifest/deployment-manifest.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAC9E,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAI3D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EACL,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,wBAAwB,EACxB,yBAAyB,EACzB,2BAA2B,EAC3B,SAAS,EACT,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EACL,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,0CAA0C,CAAC;AAMlD,OAAO,EACL,kBAAkB,EAClB,gCAAgC,GACjC,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,8BAA8B,EAC9B,uCAAuC,GACxC,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,EACd,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AACjC,6FAA6F;AAC7F,gEAAgE;AAChE,OAAO,EAAE,UAAU,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAElF,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,wBAAwB,EACxB,SAAS,EACT,4BAA4B,EAC5B,iCAAiC,EACjC,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,EACxB,YAAY,GACb,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAEtF,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,EAC1B,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAGlC,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC;AAYhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,+BAA+B,GAChC,MAAM,mCAAmC,CAAC;AAS3C,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAQnC,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,WAAW;AACX,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD,WAAW;AACX,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAMvE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAG7D,eAAe;AACf,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGjG,aAAa;AACb,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,8BAA8B,CAAC;AAGtC,WAAW;AACX,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,mCAAmC,EACnC,qCAAqC,EACrC,aAAa,EACb,+BAA+B,GAChC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG5D,+DAA+D;AAC/D,OAAO,EACL,cAAc,EACd,eAAe,EACf,eAAe,EACf,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAGnC,qBAAqB;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAc1E,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,+BAA+B,EAC/B,iBAAiB,EACjB,0BAA0B,EAC1B,yBAAyB,EACzB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,GAClB,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,41 @@
1
1
  import type { RunRecord } from '../types/run-record.js';
2
2
  import type { WorkflowDefinition } from '../types/workflow-definition.js';
3
+ import type { SettlementDelta, SettlementResult } from '../types/settlement.js';
3
4
  import type { RunStore, CreateRunOptions, LoadBearingRunRecordField } from './store-interface.js';
4
5
  import type { PerRunArtifactStore } from './per-run-artifact-store.js';
6
+ /**
7
+ * Shared `proper-lockfile` retry policy for EVERY lock this store takes — the 4 run-file
8
+ * critical-section locks (`update`/`claimStep`/`save`/`deleteAllForRun`) and the 3 per-key locks
9
+ * (`create`'s resolve-or-claim section, `registerImportedKey`, `deleteAllForRun`'s pointer delete)
10
+ * (issue #191).
11
+ *
12
+ * `proper-lockfile` forwards this object VERBATIM to the `retry` package
13
+ * (`retry.operation(options.retries)` — see `node_modules/proper-lockfile/lib/lockfile.js`), which
14
+ * reads every field below itself (`node_modules/retry/lib/retry.js` + `retry_operation.js`) — no
15
+ * filtering at either layer.
16
+ *
17
+ * - `randomize: true` — the LOAD-BEARING fix: without it (the `retry` package's own default),
18
+ * every contender computes the IDENTICAL deterministic backoff schedule and re-collides in
19
+ * lockstep under fan-out (a thundering herd). With it, `retry`'s `createTimeout` multiplies each
20
+ * attempt's delay by a fresh `Math.random() + 1` draw — contenders de-synchronize.
21
+ * - `maxTimeout: 1000` — caps any SINGLE attempt's sleep (also closes the OLD per-key retry
22
+ * policy's latent worst-case: uncapped, its 10th attempt alone could sleep up to 25.6s).
23
+ * - `maxRetryTime: 5000` — a TOTAL-TIME budget (the SQLite `busy_timeout` model): `retry`'s
24
+ * `RetryOperation.retry()` checks elapsed wall-time against this on every failed attempt and
25
+ * gives up once exceeded, REGARDLESS of `retries` remaining — so contention degrades gracefully
26
+ * into one retryable `STATE_RUN_BUSY` (Fix C) at a bounded ~5s, rather than either a hard count
27
+ * bound (~6.5s+ worst case with 10 retries × up to 1s each, uncapped further by jitter) or (pre-
28
+ * #191) failing fatally. Confirmed forwarding (not just by the source read above): a live check
29
+ * in this file's test suite holds a lock and asserts a SMALL-scale `maxRetryTime` cuts off well
30
+ * before the count-bound worst case would.
31
+ */
32
+ export declare const LOCK_RETRIES: {
33
+ readonly retries: 10;
34
+ readonly minTimeout: 50;
35
+ readonly maxTimeout: 1000;
36
+ readonly randomize: true;
37
+ readonly maxRetryTime: 5000;
38
+ };
5
39
  /** Summary returned by {@link JsonFileStore.reconcileKeys}. */
6
40
  export interface ReconcileSummary {
7
41
  /** Number of distinct (workflow_id, idempotency_key) groups encountered. */
@@ -89,6 +123,19 @@ export declare class JsonFileStore implements RunStore, PerRunArtifactStore {
89
123
  get(runId: string): Promise<RunRecord>;
90
124
  update(record: RunRecord): Promise<RunRecord>;
91
125
  claimStep(runId: string, stepName: string, definition: WorkflowDefinition): Promise<RunRecord>;
126
+ /**
127
+ * Atomically applies one `SettlementDelta` to this run's fresh state (issue #279, increment 1).
128
+ * DORMANT until PR-B — see the JSDoc on `RunStore.settleStep` for the full contract (dormancy,
129
+ * write-surface obligations, atomicity, infra-throws/predicate-returns). Same lock/fresh-read
130
+ * shape as `update()` (ENOENT/ELOCKED mapping identical): LOCK_RETRIES lock → fresh read →
131
+ * `applySettlement` → a refusal returns WITHOUT any write (fresh state, version unchanged) → an
132
+ * apply writes the transform's own output with the write-tail `{version: fresh.version+1,
133
+ * updated_at}` (run_phase is already transform-derived; this store's own re-derivation below is
134
+ * idempotent on that already-correct value, exactly like `update()`'s own write-tail).
135
+ */
136
+ settleStep(runId: string, delta: SettlementDelta, definition: WorkflowDefinition, options?: {
137
+ now?: Date;
138
+ }): Promise<SettlementResult>;
92
139
  /**
93
140
  * Writes a run record with its existing ID to local storage.
94
141
  * Used for importing records fetched from a remote store.
@@ -135,9 +182,13 @@ export declare class JsonFileStore implements RunStore, PerRunArtifactStore {
135
182
  listRunIds(): Promise<ReadonlySet<string>>;
136
183
  /**
137
184
  * Builds the `STATE_RUN_BUSY` error thrown when `deleteAllForRun` cannot proceed because
138
- * another writer holds the run-file (or key) lock, or because the run is no longer terminal
139
- * (issue #184). Retryable: a live writer self-heals (the lock is released), and a genuinely
140
- * stale lock is eventually stolen by the next contender.
185
+ * another writer holds the run-file (or key) lock, because the run is no longer terminal
186
+ * (issue #184), or because a finalizer ledger entry is still `'pending'` (issue #279, increment
187
+ * 1, PR-B: `drain_pending` R11). Retryable: a live writer self-heals (the lock is released), a
188
+ * genuinely stale lock is eventually stolen by the next contender, and a pending finalizer is
189
+ * eventually drained or voided by an operator — but `drain_pending` is deliberately NOT
190
+ * force-bypassable at the CLI layer (residual R11, owner-ratified): the escape is `realm run
191
+ * drain` or `--void`, never `purge --force`.
141
192
  */
142
193
  private runBusyError;
143
194
  /**