@sensigo/realm 0.31.1 → 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.
- package/dist/engine/apply-resume.d.ts +34 -0
- package/dist/engine/apply-resume.d.ts.map +1 -0
- package/dist/engine/apply-resume.js +69 -0
- package/dist/engine/apply-resume.js.map +1 -0
- package/dist/engine/comparison-expr.d.ts.map +1 -1
- package/dist/engine/comparison-expr.js.map +1 -1
- package/dist/engine/defaulted-steps.d.ts +17 -0
- package/dist/engine/defaulted-steps.d.ts.map +1 -0
- package/dist/engine/defaulted-steps.js +26 -0
- package/dist/engine/defaulted-steps.js.map +1 -0
- package/dist/engine/execution-loop.d.ts +32 -0
- package/dist/engine/execution-loop.d.ts.map +1 -1
- package/dist/engine/execution-loop.js +704 -39
- package/dist/engine/execution-loop.js.map +1 -1
- package/dist/engine/lifecycle.d.ts +14 -0
- package/dist/engine/lifecycle.d.ts.map +1 -1
- package/dist/engine/lifecycle.js +14 -0
- package/dist/engine/lifecycle.js.map +1 -1
- package/dist/engine/run-health.d.ts +1 -1
- package/dist/engine/run-health.d.ts.map +1 -1
- package/dist/engine/run-health.js +26 -3
- package/dist/engine/run-health.js.map +1 -1
- package/dist/engine/settlement.d.ts +27 -0
- package/dist/engine/settlement.d.ts.map +1 -0
- package/dist/engine/settlement.js +414 -0
- package/dist/engine/settlement.js.map +1 -0
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -1
- package/dist/store/json-file-store.d.ts +54 -3
- package/dist/store/json-file-store.d.ts.map +1 -1
- package/dist/store/json-file-store.js +156 -17
- package/dist/store/json-file-store.js.map +1 -1
- package/dist/store/store-interface.d.ts +47 -1
- package/dist/store/store-interface.d.ts.map +1 -1
- package/dist/types/run-record.d.ts +67 -0
- package/dist/types/run-record.d.ts.map +1 -1
- package/dist/types/settlement.d.ts +124 -0
- package/dist/types/settlement.d.ts.map +1 -0
- package/dist/types/settlement.js +2 -0
- package/dist/types/settlement.js.map +1 -0
- package/dist/types/workflow-definition.d.ts.map +1 -1
- package/dist/types/workflow-definition.js.map +1 -1
- package/dist/types/workflow-error.d.ts +1 -1
- package/dist/types/workflow-error.d.ts.map +1 -1
- package/dist/types/workflow-error.js.map +1 -1
- package/package.json +2 -2
|
@@ -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 {
|
|
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.
|
|
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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,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;AAC3D,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,YAAY,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAC9F,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;AAC1B,YAAY,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,YAAY,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,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;AAClD,YAAY,EACV,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,0CAA0C,CAAC;AAClD,OAAO,EACL,kBAAkB,EAClB,gCAAgC,GACjC,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC/E,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,8BAA8B,EAC9B,uCAAuC,GACxC,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACzF,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,EACd,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,UAAU,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAClF,YAAY,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,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;AAC3D,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,YAAY,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAC9F,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;AAC1B,YAAY,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,YAAY,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,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;AAClD,YAAY,EACV,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,0CAA0C,CAAC;AAClD,OAAO,EACL,kBAAkB,EAClB,gCAAgC,GACjC,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC/E,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,8BAA8B,EAC9B,uCAAuC,GACxC,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACzF,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,EACd,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,UAAU,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAClF,YAAY,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAGzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAInE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAC9F,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,YAAY,EACV,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,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;AACpC,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACtF,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,EAC1B,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,eAAO,MAAM,OAAO,WAAW,CAAC;AAChC,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5E,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvF,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACtF,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,+BAA+B,GAChC,MAAM,mCAAmC,CAAC;AAC3C,YAAY,EACV,kBAAkB,EAClB,aAAa,EACb,qBAAqB,EACrB,uBAAuB,EACvB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACjF,YAAY,EACV,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAGzE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,YAAY,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAGpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,YAAY,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,YAAY,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,YAAY,EACV,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,YAAY,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,YAAY,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAGxE,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACjG,YAAY,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG1F,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAGlG,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;AAC5D,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAGjE,OAAO,EACL,cAAc,EACd,eAAe,EACf,eAAe,EACf,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG5E,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;AAG1E,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,aAAa,EACb,eAAe,EACf,UAAU,EACV,aAAa,EACb,cAAc,EACd,iBAAiB,GAClB,MAAM,+BAA+B,CAAC;AACvC,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"}
|
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
|
-
|
|
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.
|
|
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":"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"}
|
|
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,
|
|
139
|
-
* (issue #184)
|
|
140
|
-
*
|
|
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
|
/**
|