fabro/lib/foundation
Bryan Helmkamp 37116758fa Resume a Petri run whose store failed, as after a crash
Petri now ends a run's lifetime at its first failed store write: it
records nothing after it, fails no firing for it, and returns
CoordinatorError::StoreFailed. The run is not over; the next lifetime
resumes it from what the store holds. Fabro read that error as an
unfinished run and failed it.

- engine: RunError::StoreFailed, returned without reading the record
  back, and Conclusion::Interrupted for it.
- worker: an interrupted run gets no terminal lifecycle record; the
  worker exits with EX_TEMPFAIL (75, the new ExitClass::Interrupted).
- server: WorkerExit carries the exit code. An interrupted worker's run
  goes back to the scheduler in resume mode through the relaunch a
  restart takes (lease release, recovery, start_requested + runnable),
  now shared with reconcile_on_startup. The in-process path does the
  same. A run is resumed at most MAX_STORE_INTERRUPTIONS (3) times per
  server; the next interruption fails it. A pending cancel, a run that
  ended or was deleted, and a shutdown also end it as before.

Tests: an engine run over a store whose first lease write fails is
interrupted with no finish, and a resume finishes it; the server
relaunches an interrupted worker in resume mode, fails the run after the
bound, and fails a worker that exits 1 as before; exit code 75.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 12:29:34 -04:00
..
build-support refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
fabro-api Restore configured artifact storage for workflow captures 2026-09-24 13:53:46 -04:00
fabro-auth Bump lithos-llm to 43a42ac and migrate catalogs to the codecs schema 2026-09-18 22:07:00 -04:00
fabro-client Harden artifact capture writes 2026-09-28 14:30:36 -04:00
fabro-config Simplify artifact capture writer and storage helpers 2026-09-25 13:32:13 -04:00
fabro-db Drop the run_events table and narrow the runs row 2026-09-18 14:37:18 -04:00
fabro-dev Fix the Mintlify docs deployment 2026-09-28 17:26:49 -04:00
fabro-http Depend on lithos-llm and the published twin-openai crate 2026-09-09 17:26:57 -06:00
fabro-macros refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
fabro-oauth refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
fabro-options-metadata refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
fabro-proc Fix platform blockers in nightly releases 2026-09-28 11:37:15 -04:00
fabro-redact Use pebble's sandbox-driver adapter and delete fabro-pebble-sandbox 2026-09-21 17:42:15 -04:00
fabro-static refactor: tidy the in-process sandbox provider wiring 2026-09-25 11:29:29 -04:00
fabro-telemetry refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
fabro-template Read workflow graphs through Petri's DOT parser 2026-09-19 12:23:57 -04:00
fabro-test fix: address review of the in-process sandbox providers 2026-09-25 12:31:37 -04:00
fabro-types Merge remote-tracking branch 'origin/main' into codex/restore-configured-artifact-storage 2026-09-28 16:27:30 -04:00
fabro-util Resume a Petri run whose store failed, as after a crash 2026-10-06 12:29:34 -04:00
fabro-vault refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00