fabro/test
Bryan Helmkamp a049f94042
Add on_failure="succeed" as an explicit failure policy
A failed node with an effective `succeed` policy and no explicit recovery
route now finishes as `succeeded` and follows normal success routing. The
original failure stays on the outcome so the stage.completed event and the
checkpoint keep the diagnostic, and the outcome notes record which scope
promoted it.

- OnFailure gains a Succeed variant; Node::on_failure resolves the
  deprecated auto_status=true attribute as an alias, with an explicit
  on_failure winning
- The core executor applies the policy before the lifecycle observes the
  result, so the recorded outcome, context keys, goal gates, events, and
  routing all see the effective outcome; this replaces AutoStatusLifecycle
- Explicit routes take priority: a matching condition, preferred label,
  suggested next node, or handler jump keeps the outcome failed. A failed
  outcome takes an unconditional edge only under route, so under succeed
  any edge selection is an explicit route
- succeed applies only to failed, matching exit; the auto_status alias no
  longer promotes partially_succeeded
- Parallel branches promote after their retry loop, so a failed succeed
  branch counts as succeeded in the parent aggregate
- Validation accepts succeed and adds an auto_status_deprecated warning
  that suggests on_failure="succeed"
- Document the policy table, semantics, and deprecation; add a changelog
  entry

Closes #807

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-26 07:34:24 -04:00
..
analysis feat(test): add DuckDB diff query for bench-tests CSVs 2026-04-28 09:27:05 -07:00
attractor feat(workflow): infer command nodes from the script attribute 2026-07-27 14:59:31 -04:00
bin feat(release): support prerelease builds 2026-04-14 15:43:00 -04:00
docs Shared-checkout parallel execution (recovered from run 01KY7YH7RYCJ1BDVTTP96ZA4HV) 2026-07-24 06:19:11 -04:00
dot-compatibility fix(graph): support dotted Fabro graph attributes (#324) 2026-05-20 09:31:08 -04:00
offline-fallbacks feat: add model-keyed fallback policies 2026-07-30 12:02:41 -04:00
templated_inputs fix(validate): pick up sibling workflow.toml inputs for bare .fabro path (#242) 2026-05-12 12:05:21 -04:00
templated_unbound_imported fix(validate): treat undefined template vars in @file prompts as warnings (#290) 2026-05-16 17:31:22 -04:00
templated_unbound_partial feat(template): resolve template error locations (#333) 2026-05-20 20:15:04 -04:00
templates fix(workflow): allow workflow-root template partials (#322) 2026-05-20 09:22:28 -04:00
twin fix(twin-openai): accept unknown chat fields 2026-08-24 16:41:02 -04:00
auto_status_deprecated.fabro Add on_failure="succeed" as an explicit failure policy 2026-08-26 07:34:24 -04:00
branching.fabro refactor(types): remove stage status compatibility 2026-04-30 06:48:47 -04:00
conditions.fabro refactor(types): remove stage status compatibility 2026-04-30 06:48:47 -04:00
edge_only_node.fabro Reject nodes referenced by an edge but never declared 2026-07-27 13:53:54 -04:00
inferred_command.fabro feat(workflow): infer command nodes from the script attribute 2026-07-27 14:59:31 -04:00
invalid.fabro Rename .dot files to .fabro and update all references 2026-03-13 22:27:19 -04:00
model_stylesheet_unbound.fabro Add model stylesheet templates 2026-08-25 18:14:25 -04:00
on_failure_invalid.fabro Add graph on_failure exit policy 2026-08-25 13:45:51 -04:00
on_failure_node_invalid.fabro Add node-level on_failure override 2026-08-25 18:55:39 -04:00
parallel.fabro Shared-checkout parallel execution (recovered from run 01KY7YH7RYCJ1BDVTTP96ZA4HV) 2026-07-24 06:19:11 -04:00
server-model.fabro refactor: collapse the split validation paths 2026-07-28 14:13:45 -04:00
simple.fabro Rename .dot files to .fabro and update all references 2026-03-13 22:27:19 -04:00
styled.fabro Rename .dot files to .fabro and update all references 2026-03-13 22:27:19 -04:00
templated_unbound.fabro fix(validate): pick up sibling workflow.toml inputs for bare .fabro path (#242) 2026-05-12 12:05:21 -04:00