{
  "format": "agent-article-v0",
  "article_id": "EA-241",
  "canonical_url": "/tools/ea-241-agent-idempotency",
  "page_type": "reference",
  "claim_ids": [],
  "evidence_ids": [
    "EA-241-CURRENT-APPROVAL",
    "EA-241-CURRENT-BODY-READBACK"
  ],
  "unknown_ids": [
    "EA-241-UNKNOWN-01"
  ],
  "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-EA241-FIRST-20261005-C2-RESCUE20261013",
    "BODY-SHA256:e84b3249cbbd5627502241d057d409e53cf9d03df8af21d5822957e9028db333"
  ],
  "article_sources": [
    {
      "id": "EA-241-CURRENT-APPROVAL",
      "evidence_class": "RESEARCH",
      "title": "現行本文の監査・revision対応",
      "supports": [
        "現行台帳のAUDIT_PASSと候補・revision・本文ハッシュの対応を確認しています。"
      ],
      "limit": "監査状態と来歴の記録です。外部根拠の最新性や本文の全主張を追加保証しません。",
      "origin_class": "AUDITED_CANONICAL_RESEARCH_PACKET",
      "source_or_experiment_ids": [
        "CANDIDATE-EA241-FIRST-20261005-C2-RESCUE20261013"
      ],
      "supporting_locators": [
        "1KqhJtiSb2S84rWmeYVwKcT_76dBwZ_B0ZZuAWQqH0rQ",
        "EA_REVISION_LEDGER!A44:U44",
        "EA-241-FIRST-20261005"
      ],
      "provenance_status": "CURRENT_CANONICAL_APPROVAL_READBACK"
    },
    {
      "id": "EA-241-CURRENT-BODY-READBACK",
      "evidence_class": "IMPL",
      "title": "現行本文の収録照合",
      "supports": [
        "公開生成入力の本文SHA-256が、監査済み候補に結び付いたハッシュと一致しています。"
      ],
      "limit": "本文の同一性の検査です。外部システムの挙動や全主張の真偽を実証したものではありません。",
      "checked_at": "2026-10-13",
      "origin_class": "IMPLEMENTATION_READBACK",
      "source_or_experiment_ids": [
        "BODY-SHA256:e84b3249cbbd5627502241d057d409e53cf9d03df8af21d5822957e9028db333"
      ],
      "supporting_locators": [
        "content/staging/EA-241.md",
        "e84b3249cbbd5627502241d057d409e53cf9d03df8af21d5822957e9028db333",
        "EA-241-FIRST-20261005"
      ],
      "provenance_status": "CURRENT_APPROVED_BODY_HASH_MATCH"
    }
  ],
  "research_sections": [
    {
      "heading": "PUBLIC_CLAIM",
      "text": "Agentの重複実行防止は、promptで同じtoolを二度呼ばないと指示するだけでは成立しない。timeout、network disconnect、SDK retry、queue redelivery、webhook replay、double click、model/tool retryがあるため、副作用を持つ操作にはstableなbusiness operation identityとdurableな重複判定が必要である。idempotencyは定義したscope/lifetime内で追加副作用を抑制するprotocolであり、無条件のexactly-once保証ではない。"
    },
    {
      "heading": "OPERATION_IDENTITY",
      "text": "transport request IDとbusiness operation IDを分離する。retry時は同じoperation identityを再利用する。同じpayloadが正当な別注文・別送信の場合もあるためpayload hashだけをbusiness identityにしない。keyにsecret/PIIを埋め込まない。"
    },
    {
      "heading": "FINGERPRINT_AND_MISMATCH",
      "text": "同じkeyのrequestはcanonical operation fingerprintと照合する。amount、recipient、target、action等の意味が変わればfail closedにする。serialization順序やvolatile timestamp差はcanonicalization ruleで固定する。"
    },
    {
      "heading": "DURABLE_STATE_MACHINE",
      "text": "side effect前にdurable stateをatomic claimする。IN_PROGRESS / SUCCEEDED / FAILED_RETRYABLE / FAILED_TERMINAL / UNKNOWN_RECONCILIATIONを区別する。check-then-insertではなくunique constraint、compare-and-set、transaction等でownerを一意にする。成功済みduplicateには保存済みresultまたはstable downstream handleを返す。"
    },
    {
      "heading": "AMBIGUOUS_TIMEOUT",
      "text": "timeoutはfailureと同義ではない。remote commit後にresponseだけ失われ得る。未受付を証明できない場合はUNKNOWNとして、同一operation identityで安全にretryできるcontractまたはstatus/query endpointでreconcileする。"
    },
    {
      "heading": "TTL_AND_SCOPE",
      "text": "keyのscopeとTTLを明示する。TTL後のlate retryは新規操作になり得る。provider/API固有のregional/zonal等のscopeを無視してglobal onceと一般化しない。"
    },
    {
      "heading": "PRECONDITIONS",
      "text": "request dedupeとresource preconditionは別機能である。ETag、generation、version、revision等で対象状態を固定し、stale writeを拒否する。"
    },
    {
      "heading": "RETRY_POLICY",
      "text": "retryability、backoff、jitter、retry budgetを分離する。backoff/jitterはretry amplificationを抑えるがduplicate side effectは防がない。SDK hidden retryとapplication retryの積み重なりを把握する。"
    },
    {
      "heading": "MULTI_STEP_AGENT_ACTIONS",
      "text": "複数side effectを含むAgent actionはouter keyだけで全stepを保証しない。各side effectにstable identityを割り当て、workflow state、outbox/inbox、downstream operation ID等でcommit/reconcile状態を保持する。"
    },
    {
      "heading": "AUTHORIZATION_AND_REPLAY",
      "text": "idempotency key所持をauthorizationにしない。retry時もprincipal、tenant、target、policyを検証する。"
    },
    {
      "heading": "OPERATING_CHECK",
      "text": "concurrent duplicate、same-key mismatch、JSON順序差、timeout before acceptance、timeout after commit、process crash、stale IN_PROGRESS、TTL後replay、queue/webhook redelivery、stale resource version、SDK+application retry、cross-tenant/cross-region key、multi-step partial completionをfault injectionする。duplicate-side-effect rate、false-dedupe rate、UNKNOWN/reconciliation rate、retry amplification、late-replay exposureを別metricにする。"
    },
    {
      "heading": "FAILURE_ENVELOPE",
      "text": "new key on retry、key reuse mismatch、non-atomic dedupe、crash after side effect、stale IN_PROGRESS、TTL expiry、clock skew、cross-region scope、late queue replay、hidden SDK retry、webhook/model replay、partial multi-step commit、non-idempotent downstream、short downstream dedupe window、stale precondition、repeated compensation、replay attack、tenant collision、result-version drift。"
    },
    {
      "heading": "IMPLEMENTATION_STATE",
      "text": "2026-10-05時点のAWS EC2、Google Cloud retry/idempotency docs、AWS operations guidance、Stripe engineering、IETF HTTPAPI Idempotency-Key draft-07に基づくdesk research。IETF文書はexpired Internet-Draftでfinal RFCとして扱わない。production side-effect testは未実施。"
    },
    {
      "heading": "SAFE_WORDING",
      "text": "Agentの副作用操作にはstable operation identity、same-key mismatch拒否、atomic dedupe state、result replay/reconciliation、TTL、resource-version preconditionを設計する。idempotencyはretryを安全にする境界であり、無条件のexactly-once保証ではない。"
    },
    {
      "heading": "OPEN_UNKNOWN",
      "text": "対象Agent runtime、workflow/queue、downstream API、idempotency window、SDK hidden retry、dedupe store、multi-region topology、tenant namespace、authorization binding、fingerprint rule、TTL、reconciliation endpoint、outbox/inbox、compensation、audit retention、privacy requirementは未確認。"
    }
  ],
  "human_url": "/tools/ea-241-agent-idempotency",
  "markdown_url": "/agent/article.md?path=%2Ftools%2Fea-241-agent-idempotency",
  "json_url": "/agent/article.json?path=%2Ftools%2Fea-241-agent-idempotency"
}