{
  "format": "agent-article-v0",
  "article_id": "EA-242",
  "canonical_url": "/tools/ea-242-saga-compensating-action-agent",
  "page_type": "reference",
  "claim_ids": [],
  "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"
  ],
  "operational_object_ids": [],
  "provider": [],
  "models": [],
  "plans": [],
  "surfaces": [],
  "regions": [],
  "current_status": "CURRENT",
  "observation_status": "SPEC_ONLY",
  "freshness": "CURRENT",
  "last_verified": "2026-10-05",
  "supersedes": [],
  "superseded_by": [],
  "provenance": [
    "CANDIDATE-EA242-FIRST-20261005-C1",
    "BODY-SHA256:c0f1d29586c302301d41cce938b54eb49fd4f5185992f54357ab83e646b30276",
    "SRC-EA-242-URL-213C84BC0FEA",
    "SRC-EA-242-URL-2384C86AB18F",
    "SRC-EA-242-URL-653F8C3CC5A9",
    "SRC-EA-242-URL-ACED6E3D09AD",
    "SRC-EA-242-URL-78BD767B100B",
    "SRC-EA-242-URL-A8538CCBCB1A",
    "SRC-EA-242-URL-FF4E5883526D"
  ],
  "article_sources": [
    {
      "id": "EA-242-CURRENT-APPROVAL",
      "evidence_class": "RESEARCH",
      "title": "現行本文の監査・revision対応",
      "supports": [
        "現行台帳のAUDIT_PASSと候補・revision・本文ハッシュの対応を確認しています。"
      ],
      "limit": "監査状態と来歴の記録です。外部根拠の最新性や本文の全主張を追加保証しません。",
      "origin_class": "AUDITED_CANONICAL_RESEARCH_PACKET",
      "source_or_experiment_ids": [
        "CANDIDATE-EA242-FIRST-20261005-C1"
      ],
      "supporting_locators": [
        "1KqhJtiSb2S84rWmeYVwKcT_76dBwZ_B0ZZuAWQqH0rQ",
        "EA_REVISION_LEDGER!A45:U45",
        "EA-242-FIRST-20261005"
      ],
      "provenance_status": "CURRENT_CANONICAL_APPROVAL_READBACK"
    },
    {
      "id": "EA-242-CURRENT-BODY-READBACK",
      "evidence_class": "IMPL",
      "title": "現行本文の収録照合",
      "supports": [
        "公開生成入力の本文SHA-256が、監査済み候補に結び付いたハッシュと一致しています。"
      ],
      "limit": "本文の同一性の検査です。外部システムの挙動や全主張の真偽を実証したものではありません。",
      "checked_at": "2026-10-12",
      "origin_class": "IMPLEMENTATION_READBACK",
      "source_or_experiment_ids": [
        "BODY-SHA256:c0f1d29586c302301d41cce938b54eb49fd4f5185992f54357ab83e646b30276"
      ],
      "supporting_locators": [
        "content/staging/EA-242.md",
        "c0f1d29586c302301d41cce938b54eb49fd4f5185992f54357ab83e646b30276",
        "EA-242-FIRST-20261005"
      ],
      "provenance_status": "CURRENT_APPROVED_BODY_HASH_MATCH"
    },
    {
      "id": "EVD-EA-242-URL-213C84BC0FEA",
      "evidence_class": "RESEARCH",
      "title": "E1 Microsoft Azure Architecture Center, Saga distributed transactions pattern, accessed 2026-10-05,",
      "href": "https://learn.microsoft.com/en-us/azure/architecture/patterns/saga",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-242-URL-213C84BC0FEA"
      ],
      "supporting_locators": [
        "EVIDENCE TABLE",
        "E1 Microsoft Azure Architecture Center, Saga distributed transactions pattern, accessed 2026-10-05, https://learn.microsoft.com/en-us/azure/architecture/patterns/saga"
      ],
      "scope": "EVIDENCE TABLE",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-242-URL-2384C86AB18F",
      "evidence_class": "RESEARCH",
      "title": "E2 Microsoft Azure Architecture Center, Compensating Transaction pattern, accessed 2026-10-05,",
      "href": "https://learn.microsoft.com/ja-jp/azure/architecture/patterns/compensating-transaction",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-242-URL-2384C86AB18F"
      ],
      "supporting_locators": [
        "EVIDENCE TABLE",
        "E2 Microsoft Azure Architecture Center, Compensating Transaction pattern, accessed 2026-10-05, https://learn.microsoft.com/ja-jp/azure/architecture/patterns/compensating-transaction"
      ],
      "scope": "EVIDENCE TABLE",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-242-URL-653F8C3CC5A9",
      "evidence_class": "RESEARCH",
      "title": "E3 AWS Prescriptive Guidance, Saga orchestration pattern, accessed 2026-10-05,",
      "href": "https://docs.aws.amazon.com/prescriptive-guidance/latest/cloud-design-patterns/saga-orchestration.html",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-242-URL-653F8C3CC5A9"
      ],
      "supporting_locators": [
        "EVIDENCE TABLE",
        "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"
      ],
      "scope": "EVIDENCE TABLE",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-242-URL-ACED6E3D09AD",
      "evidence_class": "RESEARCH",
      "title": "E4 AWS Prescriptive Guidance, Saga patterns, accessed 2026-10-05,",
      "href": "https://docs.aws.amazon.com/prescriptive-guidance/latest/cloud-design-patterns/saga-patterns.html",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-242-URL-ACED6E3D09AD"
      ],
      "supporting_locators": [
        "EVIDENCE TABLE",
        "E4 AWS Prescriptive Guidance, Saga patterns, accessed 2026-10-05, https://docs.aws.amazon.com/prescriptive-guidance/latest/cloud-design-patterns/saga-patterns.html"
      ],
      "scope": "EVIDENCE TABLE",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-242-URL-78BD767B100B",
      "evidence_class": "RESEARCH",
      "title": "E5 Chris Richardson, microservices.io Pattern: Saga, accessed 2026-10-05,",
      "href": "https://microservices.io/patterns/data/saga.html",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-242-URL-78BD767B100B"
      ],
      "supporting_locators": [
        "EVIDENCE TABLE",
        "E5 Chris Richardson, microservices.io Pattern: Saga, accessed 2026-10-05, https://microservices.io/patterns/data/saga.html"
      ],
      "scope": "EVIDENCE TABLE",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-242-URL-A8538CCBCB1A",
      "evidence_class": "RESEARCH",
      "title": "E6 Temporal Community, Saga compensation failure/retry discussion, 2021, accessed 2026-10-05,",
      "href": "https://community.temporal.io/t/exception-in-saga-compensation-and-multiple-retries-even-though-retry-count-is-1/3562",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-242-URL-A8538CCBCB1A"
      ],
      "supporting_locators": [
        "EVIDENCE TABLE",
        "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"
      ],
      "scope": "EVIDENCE TABLE",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-242-URL-FF4E5883526D",
      "evidence_class": "RESEARCH",
      "title": "E7 Temporal Community, saga compensation registration ordering, 2026-06-10, accessed 2026-10-05,",
      "href": "https://community.temporal.io/t/saga-pattern-in-typescript/19615",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-242-URL-FF4E5883526D"
      ],
      "supporting_locators": [
        "EVIDENCE TABLE",
        "E7 Temporal Community, saga compensation registration ordering, 2026-06-10, accessed 2026-10-05, https://community.temporal.io/t/saga-pattern-in-typescript/19615"
      ],
      "scope": "EVIDENCE TABLE",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    }
  ],
  "research_sections": [
    {
      "heading": "要点と前提",
      "text": "Agentが複数の外部システムへ副作用を出す処理では、途中失敗時に「逆のtoolを呼ぶ」だけでは安全なrollbackになりません。既にcommitされた外部操作はACID transactionのように自動取消されず、回復はdomain-specificなcompensating actionまたはforward recoveryとして設計します。"
    },
    {
      "heading": "STEP CLASSIFICATION",
      "text": "実行前に各stepを `COMPENSABLE`、`PIVOT`、`RETRIABLE/FORWARD_ONLY` に分類します。失敗後にLLMが即興で分類・取消方法を決める設計は避けます。pivotを越えた後は、原則として後続をretriable/forward recoveryとして設計します。"
    },
    {
      "heading": "DURABLE JOURNAL",
      "text": "workflow ID、step ID、operation identity、request fingerprint、precondition、downstream operation ID、observed outcome、compensation definition/version、authorization/approval context、timestampをdurableに記録します。次stepへ進む前にreadback可能な状態を作ります。"
    },
    {
      "heading": "UNKNOWN IS NOT FAILED",
      "text": "timeout、disconnect、worker crashでは、remote side effectがcommit済みでもresponseだけ失われる場合があります。`UNKNOWN` を `FAILED` と同一視せず、status/query endpointやdownstream operation IDでreconcileしてから、forward retryかcompensationかを決定します。"
    },
    {
      "heading": "COMPENSATION IS A BUSINESS ACTION",
      "text": "補償は元操作の数学的な逆関数ではありません。返金手数料、取消不能な通知、外部settlement、法的記録、物理作業などでは完全な原状回復が不可能です。補償後のbusiness invariantと残留影響を明示します。"
    },
    {
      "heading": "COMPENSATION CAN FAIL",
      "text": "compensationにもtimeout、retry、idempotency、precondition、authorization、dead-letter/manual escalationが必要です。補償の進捗をdurableに記録し、同じ補償が再実行されても追加副作用を起こさない境界を設計します。"
    },
    {
      "heading": "REGISTRATION ORDER",
      "text": "forward actionが「副作用を起こした後にtimeout/failureを返す」可能性がある場合、compensation intentをforward callより後だけに記録するとcrash windowができます。一方、forward actionが実行されなかった場合にも補償が誤作用しないよう、compensationはdownstream stateを照合して安全にno-opできる設計にします。"
    },
    {
      "heading": "CONCURRENCY AND ISOLATION",
      "text": "SagaはACID isolationを自動提供しません。並行workflowが中間状態を観測・変更できるため、resource version/ETag、reservation、semantic lock、workflow-specific state等を利用し、stale compensationが新しい正当な変更を消さないようにします。"
    },
    {
      "heading": "AGENT POLICY BOUNDARY",
      "text": "LLMは、事前定義された回復policyの選択や人間へのescalation理由生成には利用できます。しかし、refund、delete、cancel、permission変更等の高影響compensationを、失敗時に未承認で新規生成させません。compensation実行時も現在のprincipal/tenant/target/policyを独立検証します。"
    },
    {
      "heading": "OPERATING TEST",
      "text": "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を測定します。"
    },
    {
      "heading": "SAFE WORDING",
      "text": "Agentの複数副作用を「失敗したら逆操作する」だけでSagaとみなしません。各stepを事前にcompensable/pivot/retriableへ分類し、forward resultとdownstream operation IDをdurableに記録します。UNKNOWNは照会/reconciliationしてから回復方向を決め、compensation自体もidempotent・再試行可能・監査可能にします。補償はACID rollbackでも完全な原状回復保証でもありません。"
    },
    {
      "heading": "OPEN UNKNOWN",
      "text": "対象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は未確認です。"
    }
  ],
  "human_url": "/tools/ea-242-saga-compensating-action-agent",
  "markdown_url": "/agent/article.md?path=%2Ftools%2Fea-242-saga-compensating-action-agent",
  "json_url": "/agent/article.json?path=%2Ftools%2Fea-242-saga-compensating-action-agent"
}