fabro/lib/components/fabro-workflow/src
Bryan Helmkamp 491babe5da
Add node-level on_failure override
A node can now set its own on_failure attribute to override the
graph-level failed-node routing policy in either direction: a
best-effort node can keep route inside an exit graph, and a critical
node can exit while the rest of the graph keeps the default. An absent
node attribute inherits the graph policy.

- Node::on_failure returns Option<OnFailure> so absence means inherit
- Graph::resolve_on_failure(node_id) is the single resolution point,
  returning ResolvedOnFailure { policy, scope } so the executor's
  end-of-run message names the scope that stopped routing
- The core Graph trait method becomes resolve_on_failure(node_id); the
  graph-scope failure message is unchanged
- The failed-human-gate fallthrough block stays independent of a
  node-level route override
- Validation now accepts and value-checks node-level on_failure (it
  previously warned that node placement had no effect) and keeps the
  edge-placement warning with updated wording
- Document precedence in transitions, failures, and the DOT reference,
  and extend today's changelog entry

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Chraa21RK7i2KqHdZSJLb8
2026-08-25 18:55:39 -04:00
..
event Merge pull request #783 from fabro-sh/codex/sqlite-blob-startup-activation 2026-08-24 16:32:59 -04:00
graph Add node-level on_failure override 2026-08-25 18:55:39 -04:00
handler refactor(sandbox): home the runtime directory under the system tmp dir 2026-08-25 07:21:24 -04:00
lifecycle Simplify blob activation and share the test store fixture 2026-08-24 14:02:35 -04:00
operations Merge pull request #789 from fabro-sh/codex/run-intent-none-target 2026-08-25 11:25:41 -04:00
pipeline Simplify blob activation and share the test store fixture 2026-08-24 14:02:35 -04:00
records refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
transforms Classify graph attributes with a graph-only reference kind 2026-08-17 17:58:46 -04:00
artifact.rs refactor(sandbox): home the runtime directory under the system tmp dir 2026-08-25 07:21:24 -04:00
artifact_snapshot.rs fix(glob): harden artifact traversal 2026-07-25 11:56:57 -04:00
artifact_upload.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
billing_rollup.rs Add a shared RunSpec test fixture and adopt it 2026-08-19 16:50:37 -04:00
command_log.rs Unify blob hash vocabulary 2026-08-17 13:56:19 -04:00
condition.rs Reuse existing helpers in the for_each fan-out 2026-07-28 18:42:23 -04:00
context.rs Tighten the prompt-demotion pass after review 2026-08-21 21:21:59 -04:00
error.rs Simplify run-event persistence failure plumbing 2026-08-21 19:29:14 -04:00
event.rs fix: fail runs when event persistence is lost 2026-08-21 18:31:22 -04:00
file_resolver.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
git.rs Simplify blob activation and share the test store fixture 2026-08-24 14:02:35 -04:00
git_bridge.rs refactor(github): deduplicate additional-repository access plumbing 2026-08-21 16:31:48 -04:00
graph.rs Add node-level on_failure override 2026-08-25 18:55:39 -04:00
hook_context.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
interview_runtime.rs refactor(workflow): tidy stall watchdog wiring and interview naming 2026-08-01 10:08:03 -04:00
lib.rs feat(workflow): bridge git and gh to the shared token 2026-08-21 14:47:31 -04:00
model_fallback.rs refactor(model): rename Kimi provider to Moonshot 2026-07-31 09:00:52 -04:00
node_handler.rs refactor(workflow): simplify interview block state and stall watchdog 2026-08-01 09:53:07 -04:00
outcome.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
pull_request.rs refactor: simplify publish pipeline and collapse duplicated stage errors 2026-07-28 15:09:10 -04:00
retry.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
run_control.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
run_dir.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
run_lookup.rs Simplify blob activation and share the test store fixture 2026-08-24 14:02:35 -04:00
run_materialization.rs refactor: simplify readiness-fallback plumbing 2026-07-24 08:49:01 -04:00
run_metadata.rs Add version-backed run intent creation 2026-08-24 11:55:43 -04:00
run_options.rs Remove stale env-interpolation promises from docs 2026-08-17 17:36:53 -04:00
run_status.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
runtime_store.rs Simplify blob activation and share the test store fixture 2026-08-24 14:02:35 -04:00
sandbox_git.rs Label sandbox git execs with git_op tracing spans 2026-08-20 19:37:44 -04:00
sandbox_git_runtime.rs Retry git pushes with a pinned token and record attempt history 2026-08-20 10:16:10 -04:00
services.rs Simplify blob activation and share the test store fixture 2026-08-24 14:02:35 -04:00
stage_execution.rs Add version-backed run intent creation 2026-08-24 11:55:43 -04:00
stage_scope.rs Merge origin/main into feat/stage-execution-identity-on-resume 2026-07-24 10:07:35 -04:00
steering_hub.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
test_support.rs Isolate the shared test blob store between tests 2026-08-24 14:02:35 -04:00
workflow_bundle.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00