# Saga／Compensating Action × Agent

CURRENT_STATUS: CURRENT
OBSERVATION: SPEC_ONLY
FRESHNESS: CURRENT
PAGE_TYPE: reference
CANONICAL_URL: /tools/ea-242-saga-compensating-action-agent
CLAIM_IDS: none
EVIDENCE_IDS: EA-242-CURRENT-APPROVAL, EA-242-CURRENT-BODY-READBACK, EVD-EA-242-URL-213C84BC0FEA, EVD-EA-242-URL-2384C86AB18F, EVD-EA-242-URL-653F8C3CC5A9, EVD-EA-242-URL-ACED6E3D09AD, EVD-EA-242-URL-78BD767B100B, EVD-EA-242-URL-A8538CCBCB1A, EVD-EA-242-URL-FF4E5883526D
UNKNOWN_IDS: EA-242-UNKNOWN-01, EA-242-UNKNOWN-02
OPS_IDS: none

## Summary
Agentの複数副作用を「失敗したら逆操作する」だけでSagaとみなしません。各stepを事前にcompensable/pivot/retriableへ分類し、forward resultとdownstream operation IDをdurableに記録します。UNKNOWNは照会/reconciliationしてから回復方向を決め、compensation自体もidempotent・再試行可能・監査可能にします。補償はACID rollbackでも完全な原状回復保証でもありません。

## Current judgment
Agentの複数副作用を「失敗したら逆操作する」だけでSagaとみなしません。各stepを事前にcompensable/pivot/retriableへ分類し、forward resultとdownstream operation IDをdurableに記録します。UNKNOWNは照会/reconciliationしてから回復方向を決め、compensation自体もidempotent・再試行可能・監査可能にします。補償はACID rollbackでも完全な原状回復保証でもありません。

## Scope
Saga／Compensating Action × Agent

## Confirmed

## UNKNOWN
- EA-242-UNKNOWN-01: timeout、disconnect、worker crashでは、remote side effectがcommit済みでもresponseだけ失われる場合があります。`UNKNOWN` を `FAILED` と同一視せず、status/query endpointやdownstream operation IDでreconcileしてから、forward retryかcompensationかを決定します。
- EA-242-UNKNOWN-02: 対象workflow engine、tool graph、downstream idempotency/status API、compensation定義、pivot rule、authorization/approval lifetime、workflow versioning、outbox/inbox、retention、concurrency policy、irreversible-action policy、human escalation SLAは未確認です。

## Evidence
- EA-242-CURRENT-APPROVAL (RESEARCH): 現行本文の監査・revision対応
- EA-242-CURRENT-BODY-READBACK (IMPL): 現行本文の収録照合
- EVD-EA-242-URL-213C84BC0FEA (RESEARCH): E1 Microsoft Azure Architecture Center, Saga distributed transactions pattern, accessed 2026-10-05, — https://learn.microsoft.com/en-us/azure/architecture/patterns/saga
- EVD-EA-242-URL-2384C86AB18F (RESEARCH): E2 Microsoft Azure Architecture Center, Compensating Transaction pattern, accessed 2026-10-05, — https://learn.microsoft.com/ja-jp/azure/architecture/patterns/compensating-transaction
- EVD-EA-242-URL-653F8C3CC5A9 (RESEARCH): E3 AWS Prescriptive Guidance, Saga orchestration pattern, accessed 2026-10-05, — https://docs.aws.amazon.com/prescriptive-guidance/latest/cloud-design-patterns/saga-orchestration.html
- EVD-EA-242-URL-ACED6E3D09AD (RESEARCH): E4 AWS Prescriptive Guidance, Saga patterns, accessed 2026-10-05, — https://docs.aws.amazon.com/prescriptive-guidance/latest/cloud-design-patterns/saga-patterns.html
- EVD-EA-242-URL-78BD767B100B (RESEARCH): E5 Chris Richardson, microservices.io Pattern: Saga, accessed 2026-10-05, — https://microservices.io/patterns/data/saga.html
- EVD-EA-242-URL-A8538CCBCB1A (RESEARCH): E6 Temporal Community, Saga compensation failure/retry discussion, 2021, accessed 2026-10-05, — https://community.temporal.io/t/exception-in-saga-compensation-and-multiple-retries-even-though-retry-count-is-1/3562
- EVD-EA-242-URL-FF4E5883526D (RESEARCH): E7 Temporal Community, saga compensation registration ordering, 2026-06-10, accessed 2026-10-05, — https://community.temporal.io/t/saga-pattern-in-typescript/19615

## 要点と前提
Agentが複数の外部システムへ副作用を出す処理では、途中失敗時に「逆のtoolを呼ぶ」だけでは安全なrollbackになりません。既にcommitされた外部操作はACID transactionのように自動取消されず、回復はdomain-specificなcompensating actionまたはforward recoveryとして設計します。

## STEP CLASSIFICATION
実行前に各stepを `COMPENSABLE`、`PIVOT`、`RETRIABLE/FORWARD_ONLY` に分類します。失敗後にLLMが即興で分類・取消方法を決める設計は避けます。pivotを越えた後は、原則として後続をretriable/forward recoveryとして設計します。

## DURABLE JOURNAL
workflow ID、step ID、operation identity、request fingerprint、precondition、downstream operation ID、observed outcome、compensation definition/version、authorization/approval context、timestampをdurableに記録します。次stepへ進む前にreadback可能な状態を作ります。

## UNKNOWN IS NOT FAILED
timeout、disconnect、worker crashでは、remote side effectがcommit済みでもresponseだけ失われる場合があります。`UNKNOWN` を `FAILED` と同一視せず、status/query endpointやdownstream operation IDでreconcileしてから、forward retryかcompensationかを決定します。

## COMPENSATION IS A BUSINESS ACTION
補償は元操作の数学的な逆関数ではありません。返金手数料、取消不能な通知、外部settlement、法的記録、物理作業などでは完全な原状回復が不可能です。補償後のbusiness invariantと残留影響を明示します。

## COMPENSATION CAN FAIL
compensationにもtimeout、retry、idempotency、precondition、authorization、dead-letter/manual escalationが必要です。補償の進捗をdurableに記録し、同じ補償が再実行されても追加副作用を起こさない境界を設計します。

## REGISTRATION ORDER
forward actionが「副作用を起こした後にtimeout/failureを返す」可能性がある場合、compensation intentをforward callより後だけに記録するとcrash windowができます。一方、forward actionが実行されなかった場合にも補償が誤作用しないよう、compensationはdownstream stateを照合して安全にno-opできる設計にします。

## CONCURRENCY AND ISOLATION
SagaはACID isolationを自動提供しません。並行workflowが中間状態を観測・変更できるため、resource version/ETag、reservation、semantic lock、workflow-specific state等を利用し、stale compensationが新しい正当な変更を消さないようにします。

## AGENT POLICY BOUNDARY
LLMは、事前定義された回復policyの選択や人間へのescalation理由生成には利用できます。しかし、refund、delete、cancel、permission変更等の高影響compensationを、失敗時に未承認で新規生成させません。compensation実行時も現在のprincipal/tenant/target/policyを独立検証します。

## OPERATING TEST
forward call前、remote commit後response前、response後journal前、compensation途中、compensation commit後response前、pivot後、並行saga、credential失効、stale versionでfault injectionします。workflow成功率だけでなく、duplicate forward/compensation、UNKNOWN滞留、reconciliation成功、manual escalation、business invariant restorationを測定します。

## SAFE WORDING
Agentの複数副作用を「失敗したら逆操作する」だけでSagaとみなしません。各stepを事前にcompensable/pivot/retriableへ分類し、forward resultとdownstream operation IDをdurableに記録します。UNKNOWNは照会/reconciliationしてから回復方向を決め、compensation自体もidempotent・再試行可能・監査可能にします。補償はACID rollbackでも完全な原状回復保証でもありません。

## OPEN UNKNOWN
対象workflow engine、tool graph、downstream idempotency/status API、compensation定義、pivot rule、authorization/approval lifetime、workflow versioning、outbox/inbox、retention、concurrency policy、irreversible-action policy、human escalation SLAは未確認です。

NEXT: /agent/start.json
STOP: This is a knowledge projection, not an execution order.