Skip to content

feat(automation): structured try/catch/retry block (ADR-0031, task 4) - #1499

Merged
os-zhuang merged 1 commit into
mainfrom
claude/try-catch-adr0031
Jun 2, 2026
Merged

feat(automation): structured try/catch/retry block (ADR-0031, task 4)#1499
os-zhuang merged 1 commit into
mainfrom
claude/try-catch-adr0031

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Implements ADR-0031 task 4 (issue #1479) — engine execution for the structured try_catch construct, completing the native control-flow execution trio (loop #1482 / parallel #1489 / try-catch). Builds on the schemas + runRegion + region validation already on main.

What's in this PR

@objectstack/service-automationbuiltin/try-catch-node.ts (new)

  • Runs the protected try region via runRegion in the enclosing variable scope.
  • On failure, retries the try region with exponential backoff (config.retry: maxRetries, retryDelayMs, backoffMultiplier, maxRetryDelayMs, jitter).
  • If it still fails, runs the optional catch region with the caught error bound to config.errorVariable (default $error).
  • Outcomes:try (or a retry) succeeds → node succeeds; catch handles the failure → node succeeds; no catch, or catch itself fails → node fails, surfacing to the flow's fault edge / error handling.
  • This surfaces the engine's existing fault + backoff-retry semantics as a construct (not BPMN boundary events). Registered as a built-in executor.

Well-formedness (single-entry/single-exit try/catch regions) is already enforced at registerFlow() by validateControlFlow from the loop PR.

Showcase / changeset

  • ResilientSyncFlow — pushes a task to an external system, retrying on failure and recording the error via catch.
  • Changeset added.

Tests

  • builtin/try-catch-node.test.ts — 8 tests: try-succeeds (catch not run), catch-on-failure (+error binding), retry-then-succeed, retry-exhausted→catch, no-catch→node fails, catch-itself-fails, malformed-try rejected at register, multi-node try ordering.
  • Local suites: service-automation 147 (9 files, incl. the 8 new); showcase build emits 13 flows; service-automation dts build clean.

Roadmap (#1479)

https://claude.ai/code/session_012ti8cx3TkdiQdjCnZXZg2Q


Generated by Claude Code

Add engine execution for the `try_catch` construct — the structured error
model (ADR-0031 §Decision 3), completing the native control-flow trio
(loop / parallel / try-catch).
- new builtin/try-catch-node.ts: runs the protected `try` region via
engine.runRegion; on failure retries with exponential backoff
(config.retry), then runs the optional `catch` region with the caught error
bound to config.errorVariable (default `$error`). try success (incl. a
retry) → node succeeds; catch handling a failure → node succeeds; no catch /
failing catch → node fails to the flow's fault edge / error handling.
- registered as a built-in node executor.
- well-formedness (single-entry/single-exit try/catch regions) already enforced
at registerFlow() by validateControlFlow (shipped with the loop container).
- showcase ResilientSyncFlow + 8 executor tests; changeset added.
https://claude.ai/code/session_012ti8cx3TkdiQdjCnZXZg2Q
@vercel

vercelBot commented Jun 2, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentActionsUpdated (UTC)
specReadyReadyPreview, CommentJun 2, 2026 12:59am

Request Review

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation tests tooling size/m labels Jun 2, 2026
@os-zhuang
os-zhuang marked this pull request as ready for review June 2, 2026 01:09
@os-zhuang
os-zhuang merged commit 4ee139d into mainJun 2, 2026
12 checks passed
os-zhuang added a commit that referenced this pull request Jun 2, 2026
The structured control-flow constructs (loop/parallel/try-catch) and the BPMN
interop mapping are implemented and merged (#1482, #1489, #1499, #1500; docs
#1497). Flip ADR-0031 from Proposed to Accepted and record the implementing PRs
and the deferred follow-ups (#1504 BPMN XML plugin, #1505 region step logs).
https://claude.ai/code/session_012ti8cx3TkdiQdjCnZXZg2Q
Co-authored-by: Claude <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/mteststooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@os-zhuang@claude