@sensigo/realm 0.33.0 → 0.34.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 (46) hide show
  1. package/dist/engine/execution-loop.d.ts +22 -1
  2. package/dist/engine/execution-loop.d.ts.map +1 -1
  3. package/dist/engine/execution-loop.js +345 -6
  4. package/dist/engine/execution-loop.js.map +1 -1
  5. package/dist/engine/gate-timing.d.ts +17 -0
  6. package/dist/engine/gate-timing.d.ts.map +1 -0
  7. package/dist/engine/gate-timing.js +19 -0
  8. package/dist/engine/gate-timing.js.map +1 -0
  9. package/dist/engine/reclaim-step.d.ts +8 -0
  10. package/dist/engine/reclaim-step.d.ts.map +1 -1
  11. package/dist/engine/reclaim-step.js +48 -3
  12. package/dist/engine/reclaim-step.js.map +1 -1
  13. package/dist/engine/run-health.d.ts +1 -1
  14. package/dist/engine/run-health.d.ts.map +1 -1
  15. package/dist/engine/run-health.js +39 -2
  16. package/dist/engine/run-health.js.map +1 -1
  17. package/dist/engine/settlement.d.ts +52 -14
  18. package/dist/engine/settlement.d.ts.map +1 -1
  19. package/dist/engine/settlement.js +258 -16
  20. package/dist/engine/settlement.js.map +1 -1
  21. package/dist/index.d.ts +5 -1
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +4 -1
  24. package/dist/index.js.map +1 -1
  25. package/dist/types/response-envelope.d.ts +16 -0
  26. package/dist/types/response-envelope.d.ts.map +1 -1
  27. package/dist/types/run-record.d.ts +106 -0
  28. package/dist/types/run-record.d.ts.map +1 -1
  29. package/dist/types/settlement.d.ts +31 -2
  30. package/dist/types/settlement.d.ts.map +1 -1
  31. package/dist/types/workflow-definition.d.ts +113 -32
  32. package/dist/types/workflow-definition.d.ts.map +1 -1
  33. package/dist/types/workflow-definition.js +20 -0
  34. package/dist/types/workflow-definition.js.map +1 -1
  35. package/dist/workflow/diagnostics.d.ts +1 -1
  36. package/dist/workflow/diagnostics.d.ts.map +1 -1
  37. package/dist/workflow/diagnostics.js +3 -0
  38. package/dist/workflow/diagnostics.js.map +1 -1
  39. package/dist/workflow/structured-output-eligibility.d.ts +81 -0
  40. package/dist/workflow/structured-output-eligibility.d.ts.map +1 -0
  41. package/dist/workflow/structured-output-eligibility.js +359 -0
  42. package/dist/workflow/structured-output-eligibility.js.map +1 -0
  43. package/dist/workflow/yaml-loader.d.ts.map +1 -1
  44. package/dist/workflow/yaml-loader.js +145 -2
  45. package/dist/workflow/yaml-loader.js.map +1 -1
  46. package/package.json +1 -1
@@ -0,0 +1,17 @@
1
+ import type { PendingGate } from '../types/run-record.js';
2
+ /**
3
+ * Read-time due/overdue state for a live gate. `overdue_ms` is present iff `expired`.
4
+ * `next_reminder_due_at` is present iff the gate carries a frozen `reminder_seconds` — the
5
+ * next-undelivered occurrence's scheduled instant (`opened_at + n·reminder_seconds`), computed
6
+ * PURELY from the schedule (no surface here has any record of which reminders were actually
7
+ * delivered — Slack posting is a side effect these read-only surfaces never observe — so this is
8
+ * honestly a SCHEDULE projection, not a delivery-confirmed fact; deliberately no "overdue"
9
+ * boolean on the reminder side for that reason — see the report's design-questions section).
10
+ */
11
+ export interface GateDueState {
12
+ expired: boolean;
13
+ overdue_ms?: number;
14
+ next_reminder_due_at?: string;
15
+ }
16
+ export declare function computeGateDueState(gate: PendingGate, now: Date): GateDueState;
17
+ //# sourceMappingURL=gate-timing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate-timing.d.ts","sourceRoot":"","sources":["../../src/engine/gate-timing.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,GAAG,YAAY,CAoB9E"}
@@ -0,0 +1,19 @@
1
+ export function computeGateDueState(gate, now) {
2
+ const nowMs = now.getTime();
3
+ const expiresAtMs = gate.expires_at !== undefined ? new Date(gate.expires_at).getTime() : undefined;
4
+ const expired = expiresAtMs !== undefined && nowMs >= expiresAtMs;
5
+ let nextReminderDueAt;
6
+ if (gate.reminder_seconds !== undefined) {
7
+ const openedAtMs = new Date(gate.opened_at).getTime();
8
+ const reminderMs = gate.reminder_seconds * 1000;
9
+ const elapsedMs = Math.max(0, nowMs - openedAtMs);
10
+ const n = Math.floor(elapsedMs / reminderMs) + 1; // next-undelivered occurrence number
11
+ nextReminderDueAt = new Date(openedAtMs + n * reminderMs).toISOString();
12
+ }
13
+ return {
14
+ expired,
15
+ ...(expired ? { overdue_ms: nowMs - expiresAtMs } : {}),
16
+ ...(nextReminderDueAt !== undefined ? { next_reminder_due_at: nextReminderDueAt } : {}),
17
+ };
18
+ }
19
+ //# sourceMappingURL=gate-timing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate-timing.js","sourceRoot":"","sources":["../../src/engine/gate-timing.ts"],"names":[],"mappings":"AAuBA,MAAM,UAAU,mBAAmB,CAAC,IAAiB,EAAE,GAAS;IAC9D,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;IAC5B,MAAM,WAAW,GACf,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAClF,MAAM,OAAO,GAAG,WAAW,KAAK,SAAS,IAAI,KAAK,IAAI,WAAW,CAAC;IAElE,IAAI,iBAAqC,CAAC;IAC1C,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,CAAC;QAClD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,qCAAqC;QACvF,iBAAiB,GAAG,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1E,CAAC;IAED,OAAO;QACL,OAAO;QACP,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,GAAG,WAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxF,CAAC;AACJ,CAAC"}
@@ -33,6 +33,14 @@ export interface ReclaimResult {
33
33
  /** The claim state observed at the initial read (for the caller's warning/audit output). */
34
34
  priorState: ClaimState;
35
35
  priorDeadline: string | null;
36
+ /**
37
+ * Issue #291 ([F7]: "reclaim = defer-to-drain WITH advisory — no new plumbing"). Present only
38
+ * when this run ALSO carries an expired, enactable gate (on a DIFFERENT step — the gate's own
39
+ * step is refused above and never reaches here) at the time this result was produced.
40
+ * `reclaimStep` never enacts it itself (no settlement write added to this verb); the advisory
41
+ * points the operator at `realm run drain --expired`, the guaranteed-reachable enactment lever.
42
+ */
43
+ gateAdvisory?: string;
36
44
  }
37
45
  export interface ReclaimStepOptions {
38
46
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"reclaim-step.d.ts","sourceRoot":"","sources":["../../src/engine/reclaim-step.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAIvE,OAAO,EAA4B,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEhF,MAAM,MAAM,cAAc;AACxB,6FAA6F;AAC3F,WAAW;AACb,4FAA4F;GAC1F,iBAAiB;AACnB,oGAAoG;GAClG,YAAY;AACd;;;;;;;GAOG;GACD,iBAAiB,CAAC;AAEtB,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,SAAS,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,cAAc,CAAC;IACxB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,sBAAsB,GAAG,oBAAoB,CAAC;IACvD,4FAA4F;IAC5F,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAoCD,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,0EAA0E;IAC1E,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAsPD;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,aAAa,CAAC,CAuKxB"}
1
+ {"version":3,"file":"reclaim-step.d.ts","sourceRoot":"","sources":["../../src/engine/reclaim-step.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAIvE,OAAO,EAA4B,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEhF,MAAM,MAAM,cAAc;AACxB,6FAA6F;AAC3F,WAAW;AACb,4FAA4F;GAC1F,iBAAiB;AACnB,oGAAoG;GAClG,YAAY;AACd;;;;;;;GAOG;GACD,iBAAiB,CAAC;AAEtB,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,SAAS,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,cAAc,CAAC;IACxB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,sBAAsB,GAAG,oBAAoB,CAAC;IACvD,4FAA4F;IAC5F,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA0DD,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,0EAA0E;IAC1E,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAsPD;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,aAAa,CAAC,CAmMxB"}
@@ -2,6 +2,23 @@ import { storeDeclaresSeal } from '../store/trace-buffer-store.js';
2
2
  import { WorkflowError } from '../types/workflow-error.js';
3
3
  import { captureEvidence } from '../evidence/snapshot.js';
4
4
  import { classifyClaim, omitClaim } from './claim-liveness.js';
5
+ /**
6
+ * Issue #291 ([F7] reclaim advisory): builds the defer-to-drain advisory string when `record`
7
+ * carries an expired, enactable gate — undefined otherwise (a finding-only or non-expired gate,
8
+ * or no gate at all, produces no advisory). Pure, read-only; never used to decide reclaim's OWN
9
+ * outcome — purely informational.
10
+ */
11
+ function buildGateExpiryAdvisory(record, now) {
12
+ const gate = record.pending_gate;
13
+ if (gate === undefined ||
14
+ gate.expires_at === undefined ||
15
+ gate.on_expiry === undefined ||
16
+ now.getTime() < new Date(gate.expires_at).getTime()) {
17
+ return undefined;
18
+ }
19
+ return (`this run's gate '${gate.step_name}' has also expired (on_expiry: ${gate.on_expiry}) and is ` +
20
+ `awaiting enactment — 'realm run drain --expired' will enact it.`);
21
+ }
5
22
  /**
6
23
  * issue #221, B2-corrected discriminator: distinguishes a genuinely-settled step from a step with
7
24
  * no active claim that was never provably settled — reused at BOTH membership sites (the direct
@@ -265,6 +282,7 @@ export async function reclaimStep(store, runId, stepName, options) {
265
282
  // Guard — membership: not in_progress → discriminate settled vs no-active-claim (issue #221, B2).
266
283
  if (!run.in_progress_steps.includes(stepName)) {
267
284
  const { outcome, detail } = classifyNoActiveClaim(run, stepName);
285
+ const gateAdvisory = buildGateExpiryAdvisory(run, now);
268
286
  return {
269
287
  run,
270
288
  step: stepName,
@@ -272,6 +290,7 @@ export async function reclaimStep(store, runId, stepName, options) {
272
290
  ...(detail !== undefined ? { detail } : {}),
273
291
  priorState,
274
292
  priorDeadline,
293
+ ...(gateAdvisory !== undefined ? { gateAdvisory } : {}),
275
294
  };
276
295
  }
277
296
  // issue #207 PR-2: a declaring store's clear moves BEFORE the un-claiming update, version-fenced
@@ -300,7 +319,15 @@ export async function reclaimStep(store, runId, stepName, options) {
300
319
  if (!fenced) {
301
320
  await clearStaleWal(traceBufferStore, runId, stepName);
302
321
  }
303
- return { run: updated, step: stepName, outcome: 'reclaimed', priorState, priorDeadline };
322
+ const gateAdvisory = buildGateExpiryAdvisory(updated, now);
323
+ return {
324
+ run: updated,
325
+ step: stepName,
326
+ outcome: 'reclaimed',
327
+ priorState,
328
+ priorDeadline,
329
+ ...(gateAdvisory !== undefined ? { gateAdvisory } : {}),
330
+ };
304
331
  }
305
332
  catch (err) {
306
333
  if (!(err instanceof WorkflowError) || err.code !== 'STATE_SNAPSHOT_MISMATCH')
@@ -317,6 +344,7 @@ export async function reclaimStep(store, runId, stepName, options) {
317
344
  // NOW, after the concurrent write that caused this CAS mismatch, not at the stale decision
318
345
  // read).
319
346
  const { outcome, detail } = classifyNoActiveClaim(reloaded, stepName);
347
+ const gateAdvisory = buildGateExpiryAdvisory(reloaded, now);
320
348
  return {
321
349
  run: reloaded,
322
350
  step: stepName,
@@ -324,11 +352,20 @@ export async function reclaimStep(store, runId, stepName, options) {
324
352
  ...(detail !== undefined ? { detail } : {}),
325
353
  priorState,
326
354
  priorDeadline,
355
+ ...(gateAdvisory !== undefined ? { gateAdvisory } : {}),
327
356
  };
328
357
  }
329
358
  if (classifyClaim(reloaded.claims?.[stepName], now) === 'healthy') {
330
359
  // Re-claimed FRESH (a future deadline) → a live driver took over. Never stomp live work.
331
- return { run: reloaded, step: stepName, outcome: 'taken_over', priorState, priorDeadline };
360
+ const gateAdvisory = buildGateExpiryAdvisory(reloaded, now);
361
+ return {
362
+ run: reloaded,
363
+ step: stepName,
364
+ outcome: 'taken_over',
365
+ priorState,
366
+ priorDeadline,
367
+ ...(gateAdvisory !== undefined ? { gateAdvisory } : {}),
368
+ };
332
369
  }
333
370
  // Still a stale / unknown-age wedge after the concurrent write → re-apply ONCE on the fresh
334
371
  // record. A second mismatch propagates (reclaim loses, abandon-style — no retry loop).
@@ -347,7 +384,15 @@ export async function reclaimStep(store, runId, stepName, options) {
347
384
  if (!fenced) {
348
385
  await clearStaleWal(traceBufferStore, runId, stepName);
349
386
  }
350
- return { run: updated, step: stepName, outcome: 'reclaimed', priorState, priorDeadline };
387
+ const gateAdvisory = buildGateExpiryAdvisory(updated, now);
388
+ return {
389
+ run: updated,
390
+ step: stepName,
391
+ outcome: 'reclaimed',
392
+ priorState,
393
+ priorDeadline,
394
+ ...(gateAdvisory !== undefined ? { gateAdvisory } : {}),
395
+ };
351
396
  }
352
397
  }
353
398
  //# sourceMappingURL=reclaim-step.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reclaim-step.js","sourceRoot":"","sources":["../../src/engine/reclaim-step.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reclaim-step.js","sourceRoot":"","sources":["../../src/engine/reclaim-step.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@ export declare const DEFAULT_IDLE_THRESHOLD_MS: number;
13
13
  * renders from.
14
14
  */
15
15
  export interface RunHealthFinding {
16
- kind: 'never_claimed_idle' | 'stale_claim' | 'wedged_gate_sibling' | 'capability_block' | 'terminal_pending_finalizer' | 'terminal_with_stale_gate' | 'gate_corruption' | 'resolved_gate_with_eligible_guard';
16
+ kind: 'never_claimed_idle' | 'stale_claim' | 'wedged_gate_sibling' | 'capability_block' | 'terminal_pending_finalizer' | 'terminal_with_stale_gate' | 'gate_corruption' | 'resolved_gate_with_eligible_guard' | 'completed_with_failed_steps' | 'gate_expired_awaiting_drive';
17
17
  /** The affected step, when the finding is step-scoped. Absent for `never_claimed_idle` — a
18
18
  * run-level observation (no step is claimed at all). */
19
19
  step?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"run-health.d.ts","sourceRoot":"","sources":["../../src/engine/run-health.ts"],"names":[],"mappings":"AAyEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAK1E;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,QAAsB,CAAC;AAE7D;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EACA,oBAAoB,GACpB,aAAa,GACb,qBAAqB,GACrB,kBAAkB,GAClB,4BAA4B,GAE5B,0BAA0B,GAC1B,iBAAiB,GACjB,mCAAmC,CAAC;IACxC;6DACyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;yCAEqC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf;;;;4DAIwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;kDAC8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;mEAG+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AA+BD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,SAAS,EACd,IAAI,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,IAAI,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,kBAAkB,CAAA;CAAE,GAC/E,gBAAgB,EAAE,CA+GpB"}
1
+ {"version":3,"file":"run-health.d.ts","sourceRoot":"","sources":["../../src/engine/run-health.ts"],"names":[],"mappings":"AAuFA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAK1E;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,QAAsB,CAAC;AAE7D;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EACA,oBAAoB,GACpB,aAAa,GACb,qBAAqB,GACrB,kBAAkB,GAClB,4BAA4B,GAE5B,0BAA0B,GAC1B,iBAAiB,GACjB,mCAAmC,GAGnC,6BAA6B,GAM7B,6BAA6B,CAAC;IAClC;6DACyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;yCAEqC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf;;;;4DAIwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;kDAC8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;mEAG+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AA+BD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,SAAS,EACd,IAAI,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,IAAI,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,kBAAkB,CAAA;CAAE,GAC/E,gBAAgB,EAAE,CAyJpB"}
@@ -1,6 +1,6 @@
1
1
  import { classifyInProgressClaims } from './claim-liveness.js';
2
2
  import { findCapabilityBlockedSteps } from './capability.js';
3
- import { findEligibleSteps, findEligibleGuardSteps } from './eligibility.js';
3
+ import { findEligibleSteps, findEligibleGuardSteps, deriveRunPhase } from './eligibility.js';
4
4
  /**
5
5
  * Default age threshold for the `never_claimed_idle` finding (issue #221) — 24 hours. Engine-
6
6
  * minted so detection never REQUIRES an operator-supplied threshold; callers (surfaces) may
@@ -82,9 +82,22 @@ export function classifyRunHealth(run, opts) {
82
82
  const terminalGateCorruption = findGateCorruption(run);
83
83
  if (terminalGateCorruption !== undefined)
84
84
  pendingFindings.push(terminalGateCorruption);
85
+ // issue #302 (disclosure gaps, item 6 above): a completed seal that still carries failed_steps
86
+ // — designed recovery behavior, informational only. Keyed on the DERIVED phase (never the
87
+ // persisted run_phase field, never the byte-equivalent direct terminal_reason check).
88
+ if (deriveRunPhase(run) === 'completed' && run.failed_steps.length > 0) {
89
+ pendingFindings.push({
90
+ kind: 'completed_with_failed_steps',
91
+ reason: `completed with ${run.failed_steps.length} failed step(s): ${run.failed_steps.join(', ')} ` +
92
+ `— failure-triggered finalizers do not run on a completed seal`,
93
+ evidence: { failed_steps: run.failed_steps },
94
+ });
95
+ }
85
96
  if (pendingFindings.length > 0)
86
97
  return pendingFindings;
87
- return []; // terminal ∧ no pending ledger entries ⇒ [] (byte-identical to pre-#279 behavior)
98
+ // terminal ∧ no pending ledger entries ∧ not completed-with-failed-steps ⇒ [] (byte-identical
99
+ // to pre-#279 behavior for every OTHER class of terminal record).
100
+ return [];
88
101
  }
89
102
  const idleThresholdMs = opts?.idleThresholdMs ?? DEFAULT_IDLE_THRESHOLD_MS;
90
103
  const findings = [];
@@ -117,6 +130,30 @@ export function classifyRunHealth(run, opts) {
117
130
  const gateCorruption = findGateCorruption(run);
118
131
  if (gateCorruption !== undefined)
119
132
  findings.push(gateCorruption);
133
+ // issue #291: gate_expired_awaiting_drive — record-fields-only (never the definition), fires
134
+ // for BOTH an enactable gate AND a finding-only one (expires_at present, on_expiry absent) —
135
+ // the finding-only payload names its own disposition as 'finding_only' rather than omitting
136
+ // the finding entirely (a finding-only gate is STILL awaiting a human drive; the operator
137
+ // should still see it). Unreachable on a terminal record by construction (the terminal branch,
138
+ // above, returns before this line is ever reached).
139
+ if (run.pending_gate !== undefined &&
140
+ run.pending_gate.expires_at !== undefined &&
141
+ now.getTime() >= new Date(run.pending_gate.expires_at).getTime()) {
142
+ const overdueMs = now.getTime() - new Date(run.pending_gate.expires_at).getTime();
143
+ findings.push({
144
+ kind: 'gate_expired_awaiting_drive',
145
+ step: run.pending_gate.step_name,
146
+ reason: run.pending_gate.on_expiry !== undefined
147
+ ? `gate expired — awaiting enactment of the declared ${run.pending_gate.on_expiry}`
148
+ : 'gate expired — finding-only (no on_expiry declared), awaiting a human response',
149
+ evidence: {
150
+ gate_id: run.pending_gate.gate_id,
151
+ expires_at: run.pending_gate.expires_at,
152
+ overdue_ms: overdueMs,
153
+ disposition: run.pending_gate.on_expiry ?? 'finding_only',
154
+ },
155
+ });
156
+ }
120
157
  // issue #279 (increment 2, PR-D, design record §9, N8's surface): resolved-gate-with-eligible-
121
158
  // guard. findEligibleGuardSteps ALREADY self-filters both a terminal run and an open gate
122
159
  // (eligibility.ts), so no extra gating is needed beyond requiring a definition.
@@ -1 +1 @@
1
- {"version":3,"file":"run-health.js","sourceRoot":"","sources":["../../src/engine/run-health.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-health.js","sourceRoot":"","sources":["../../src/engine/run-health.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,48 @@
1
1
  import type { RunRecord } from '../types/run-record.js';
2
- import type { WorkflowDefinition } from '../types/workflow-definition.js';
2
+ import type { WorkflowDefinition, FinalizerTrigger } from '../types/workflow-definition.js';
3
3
  import type { SettlementDelta, SettlementResult, SettleStepOutcome } from '../types/settlement.js';
4
4
  /**
5
- * Selects the finalizer steps that fire for a terminal `outcome`, in the drain order (design
6
- * record §4/§6; extracted from `buildFinalizedSeal`'s selection, execution-loop.ts :3117-3126):
7
- * Group A (rank precedence) — `on_outcome` contains `outcome` (the specific catch/complete arm);
8
- * Group B — `on_outcome` contains `'always'` but NOT `outcome` (a finalizer listing both runs
9
- * once, in Group A). Each group in `Object.entries` declaration order; Group A then Group B.
5
+ * Selects the finalizer steps that fire for a terminal outcome, in the drain order (design
6
+ * record §4/§6, widened by #302's S2 fold; extracted from `buildFinalizedSeal`'s selection,
7
+ * execution-loop.ts :3117-3126): Group A (rank precedence) — the finalizer's OWN declared
8
+ * `on_outcome` set intersects the EFFECTIVE trigger set non-emptily; Group B — `on_outcome`
9
+ * contains `'always'` but the finalizer missed Group A (a finalizer listing both runs once, in
10
+ * Group A). Each group in `Object.entries` declaration order; Group A then Group B.
10
11
  * `settledStepNames` excludes any finalizer already at-most-once settled (resume/re-drive safety)
11
12
  * — pass `completed_steps ∪ failed_steps`, NEVER the `RunRecord.settled` map (a different,
12
13
  * per-step-outcome-keyed structure this selection does not consult).
14
+ *
15
+ * `outcome` accepts EITHER shape (issue #302, S2 — `selectFinalizers` is a PUBLIC export,
16
+ * `index.ts`, so widening the param rather than replacing it is an API-compat requirement, not a
17
+ * style choice):
18
+ * - a bare `SettleStepOutcome` string — every pre-#302 caller's shape, normalized internally to
19
+ * a singleton set; BYTE-IDENTICAL selection to the pre-widening behavior (pinned by the
20
+ * string-form compat test) and supported INDEFINITELY — this is not a deprecated compat shim.
21
+ * - a pre-derived `ReadonlySet<FinalizerTrigger>` (via {@link deriveEffectiveTriggers}) — the
22
+ * #302 call shape both engine chokepoints (`mintFresh`, `buildFinalizedSeal`) now use, letting
23
+ * a seal satisfy more than one trigger at once (e.g. `{'complete', 'completed_with_failed_steps'}`).
24
+ * Semver: additive or (minor) — no existing call site's behavior changes.
25
+ */
26
+ export declare function selectFinalizers(definition: WorkflowDefinition, settledStepNames: ReadonlySet<string>, outcome: SettleStepOutcome | ReadonlySet<FinalizerTrigger>): string[];
27
+ /**
28
+ * Derives the full set of finalizer triggers a terminal `outcome` satisfies for `record` (issue
29
+ * #302, design record §Mechanics-1): `{outcome}` — always — plus `'completed_with_failed_steps'`
30
+ * when `outcome === 'complete' ∧ record.failed_steps.length > 0` (a "mixed complete" seal — the
31
+ * SAME class #304's `completed_with_failed_steps` run-health finding already surfaces at read
32
+ * time; this is the mint-time trigger, sharing that one predicate).
33
+ *
34
+ * Uniform across epochs (design record M1, deliberate): a second-epoch complete seal whose ONLY
35
+ * `failed_steps` scar is a PRIOR epoch's finalizer self-failure (unresumable, so it never leaves
36
+ * `failed_steps`) still fires this trigger — no exclusion of finalizer-declared step names. The
37
+ * alternative (excluding finalizer names from the predicate) buys mint-time purity at the cost of
38
+ * diverging from the read-time #304 finding's own uniform predicate; this design keeps ONE
39
+ * predicate for both surfaces, deliberately.
40
+ *
41
+ * Pure; this ONE function is the seam a future authorable tolerance threshold (SFN-style: fire
42
+ * only when `failed_steps.length` exceeds some declared N) would extend — banked, not built
43
+ * (design record R2).
13
44
  */
14
- export declare function selectFinalizers(definition: WorkflowDefinition, settledStepNames: ReadonlySet<string>, outcome: SettleStepOutcome): string[];
45
+ export declare function deriveEffectiveTriggers(outcome: SettleStepOutcome, record: Pick<RunRecord, 'failed_steps'>): ReadonlySet<FinalizerTrigger>;
15
46
  /**
16
47
  * Applies one {@link SettlementDelta} against `fresh` — pure, synchronous, no I/O, no registry
17
48
  * (design record §7 CS-purity: `options` carries VALUES only). `definition` is passed per call
@@ -27,12 +58,19 @@ export declare function applySettlement(fresh: RunRecord, delta: SettlementDelta
27
58
  /**
28
59
  * Named constant (issue #279, increment 2, PR-C; design record §4.3) tying reclaim-step.ts's own
29
60
  * open-gate refusal (`reclaimStep`, ~line 389: "the claim is legitimately pinned by a human gate")
30
- * to this design's "unfenced-release soundness rests on reclaim" premise: `settle_step` abort's
31
- * cancel-gate write (`applyAbortEdge`, above) is the ONLY path that may release an open gate's
32
- * claim; `reclaimStep`/`isAutoReclaimable` must NEVER also release it, or the two paths could race
33
- * and double-release the same claim. Referenced (not asserted via) by this invariant's two
34
- * existing pinning tests (`reclaim-step.test.ts` + the CLI's `reclaim.test.ts`) so a future reader
35
- * can grep this name to find both, and reclaim-step.ts's own SOURCE stays untouched by this PR.
61
+ * to this design's "unfenced-release soundness rests on reclaim" premise. **Reworded (issue #291,
62
+ * [F6]):** the ORIGINAL text claimed `applyAbortEdge`'s cancel-gate write was "the ONLY path that
63
+ * may release an open gate's claim" issue #291's `applyExpireGate` (both dispositions) ALSO
64
+ * releases it now, making that literal claim false. The invariant this constant actually protects
65
+ * `reclaimStep`/`isAutoReclaimable` must NEVER release an open gate's claim, or a concurrent
66
+ * release could race and double-release the same claim still holds exactly; the closed set of
67
+ * paths that MAY release it is now: `settle_step` abort's cancel-gate write (another step's
68
+ * handler-abort), and `expire_gate`'s settle_default/abort dispositions (the gate's OWN step,
69
+ * enforce-clock-driven) — all three live inside `applySettlement`, under the SAME store lock,
70
+ * which is exactly WHY they can never race `reclaimStep`'s own (separate) CAS write. Referenced
71
+ * (not asserted via) by this invariant's two existing pinning tests (`reclaim-step.test.ts` +
72
+ * the CLI's `reclaim.test.ts`) so a future reader can grep this name to find both, and
73
+ * reclaim-step.ts's own SOURCE stays untouched by this PR.
36
74
  */
37
- export declare const RECLAIM_REFUSES_GATE_STEP = "reclaim never releases the open-gate claim (design record design-d5-increment2.md \u00A74.3, unfenced-release soundness)";
75
+ export declare const RECLAIM_REFUSES_GATE_STEP: string;
38
76
  //# sourceMappingURL=settlement.d.ts.map
@@ -1 +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,EAOlB,MAAM,wBAAwB,CAAC;AA4GhC;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,kBAAkB,EAC9B,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,EACrC,OAAO,EAAE,iBAAiB,GACzB,MAAM,EAAE,CAWV;AAuyBD;;;;;;;;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,CAkBlB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,6HACiF,CAAC"}
1
+ {"version":3,"file":"settlement.d.ts","sourceRoot":"","sources":["../../src/engine/settlement.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAC5F,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAEhB,iBAAiB,EAQlB,MAAM,wBAAwB,CAAC;AA4GhC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,kBAAkB,EAC9B,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,EACrC,OAAO,EAAE,iBAAiB,GAAG,WAAW,CAAC,gBAAgB,CAAC,GACzD,MAAM,EAAE,CAoBV;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,GACtC,WAAW,CAAC,gBAAgB,CAAC,CAM/B;AA8/BD;;;;;;;;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,CAoBlB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,yBAAyB,QAIE,CAAC"}