@rulvar/core 1.56.0 → 1.57.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/index.d.ts CHANGED
@@ -2280,12 +2280,21 @@ declare function replayDisposition(entry: JournalEntry, fold: AbandonFold, optio
2280
2280
  registry?: DeriverRegistry;
2281
2281
  terminal?: JournalEntry;
2282
2282
  invalidated?: ReadonlySet<number>;
2283
+ /**
2284
+ * True when the loaded journal carries a run settle with runStatus
2285
+ * 'ok' (the resume is a pure replay of a finished run): unstamped
2286
+ * limit entries then replay instead of re-running live. Terminal
2287
+ * settles other than ok keep the retry semantics.
2288
+ */
2289
+ runSettledOk?: boolean;
2283
2290
  }): ReplayDisposition;
2284
2291
  /**
2285
2292
  * Adapts the predicate to the matcher's disposition hook: two-phase
2286
2293
  * operations dispatch on their terminal, single-phase on themselves.
2287
2294
  */
2288
- declare function dispositionHook(fold: AbandonFold, registry: DeriverRegistry, invalidated?: ReadonlySet<number>): (op: JournalOperation) => ReplayDisposition;
2295
+ declare function dispositionHook(fold: AbandonFold, registry: DeriverRegistry, invalidated?: ReadonlySet<number>, options?: {
2296
+ runSettledOk?: boolean;
2297
+ }): (op: JournalOperation) => ReplayDisposition;
2289
2298
  //#endregion
2290
2299
  //#region src/journal/resolution.d.ts
2291
2300
  type ResolutionAttempt = {
package/dist/index.js CHANGED
@@ -4340,11 +4340,13 @@ function buildAbandonFold(entries) {
4340
4340
  return isCovered(entry);
4341
4341
  } };
4342
4342
  }
4343
- function applyRule(rule, op) {
4343
+ function applyRule(rule, op, runSettledOk) {
4344
4344
  const terminal = op.terminal ?? op.running;
4345
4345
  switch (rule) {
4346
4346
  case "replay": return "replay";
4347
- case "memoize-limit": return terminal.memoizeOutcome ?? op.running.memoizeOutcome ?? false ? "replay" : "rerun";
4347
+ case "memoize-limit":
4348
+ if (terminal.memoizeOutcome ?? op.running.memoizeOutcome ?? false) return "replay";
4349
+ return runSettledOk ? "replay" : "rerun";
4348
4350
  case "memoize-task-error":
4349
4351
  if (!(terminal.memoizeOutcome ?? op.running.memoizeOutcome ?? false) || terminal.error === void 0) return "rerun";
4350
4352
  return classifyAgentError(agentErrorFromWireSafe(terminal)) === "task" ? "replay" : "rerun";
@@ -4381,17 +4383,18 @@ function replayDisposition(entry, fold, options) {
4381
4383
  if (options?.invalidated?.has(entry.seq) === true) return "rerun";
4382
4384
  const deriver = options?.registry?.get(entry.hashVersion) ?? deriverV2;
4383
4385
  const status = (options?.terminal ?? entry).status;
4384
- return applyRule(deriver.dispositionTable[status], op);
4386
+ return applyRule(deriver.dispositionTable[status], op, options?.runSettledOk ?? false);
4385
4387
  }
4386
4388
  /**
4387
4389
  * Adapts the predicate to the matcher's disposition hook: two-phase
4388
4390
  * operations dispatch on their terminal, single-phase on themselves.
4389
4391
  */
4390
- function dispositionHook(fold, registry, invalidated) {
4392
+ function dispositionHook(fold, registry, invalidated, options) {
4391
4393
  return (op) => replayDisposition(op.running, fold, {
4392
4394
  registry,
4393
4395
  ...op.terminal === void 0 ? {} : { terminal: op.terminal },
4394
- ...invalidated === void 0 ? {} : { invalidated }
4396
+ ...invalidated === void 0 ? {} : { invalidated },
4397
+ ...options?.runSettledOk === void 0 ? {} : { runSettledOk: options.runSettledOk }
4395
4398
  });
4396
4399
  }
4397
4400
  //#endregion
@@ -16684,8 +16687,9 @@ function createEngine(options) {
16684
16687
  strict: resumeCtx?.strict ?? false
16685
16688
  });
16686
16689
  for (const seqToInvalidate of invalidated) replayer.invalidate(seqToInvalidate);
16687
- replayer.setDisposition(dispositionHook(replayer.fold.abandonFold, registry, replayer.invalidatedSeqs));
16688
- replayer.setAliasDisposition(dispositionHook({ isAbandoned: () => false }, registry, replayer.invalidatedSeqs));
16690
+ const runSettledOk = resumeCtx !== void 0 && lastRunSettle(resumeCtx.priorEntries)?.runStatus === "ok";
16691
+ replayer.setDisposition(dispositionHook(replayer.fold.abandonFold, registry, replayer.invalidatedSeqs, { runSettledOk }));
16692
+ replayer.setAliasDisposition(dispositionHook({ isAbandoned: () => false }, registry, replayer.invalidatedSeqs, { runSettledOk }));
16689
16693
  if (resumeCtx !== void 0) {
16690
16694
  const prior = replayer.ledger();
16691
16695
  budgetSeed = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rulvar/core",
3
- "version": "1.56.0",
3
+ "version": "1.57.0",
4
4
  "description": "Rulvar core: L0 contracts, journal kernel, ctx primitives, agent runtime, model router, tool system, dynamic orchestrator, InMemory and JSONL stores, event stream.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",