# Agent Idempotency／重複実行防止

CURRENT_STATUS: CURRENT
OBSERVATION: SPEC_ONLY
FRESHNESS: CURRENT
PAGE_TYPE: reference
CANONICAL_URL: /tools/ea-241-agent-idempotency
CLAIM_IDS: none
EVIDENCE_IDS: EA-241-CURRENT-APPROVAL, EA-241-CURRENT-BODY-READBACK
UNKNOWN_IDS: EA-241-UNKNOWN-01
OPS_IDS: none

## Summary
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保証ではない。

## Current judgment
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保証ではない。

## Scope
keyのscopeとTTLを明示する。TTL後のlate retryは新規操作になり得る。provider/API固有のregional/zonal等のscopeを無視してglobal onceと一般化しない。

## Confirmed

## UNKNOWN
- EA-241-UNKNOWN-01: 対象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は未確認。

## Evidence
- EA-241-CURRENT-APPROVAL (RESEARCH): 現行本文の監査・revision対応
- EA-241-CURRENT-BODY-READBACK (IMPL): 現行本文の収録照合

## Failure / limits
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。
## Practice
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は未実施。
## PUBLIC_CLAIM
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保証ではない。

## OPERATION_IDENTITY
transport request IDとbusiness operation IDを分離する。retry時は同じoperation identityを再利用する。同じpayloadが正当な別注文・別送信の場合もあるためpayload hashだけをbusiness identityにしない。keyにsecret/PIIを埋め込まない。

## FINGERPRINT_AND_MISMATCH
同じkeyのrequestはcanonical operation fingerprintと照合する。amount、recipient、target、action等の意味が変わればfail closedにする。serialization順序やvolatile timestamp差はcanonicalization ruleで固定する。

## DURABLE_STATE_MACHINE
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を返す。

## AMBIGUOUS_TIMEOUT
timeoutはfailureと同義ではない。remote commit後にresponseだけ失われ得る。未受付を証明できない場合はUNKNOWNとして、同一operation identityで安全にretryできるcontractまたはstatus/query endpointでreconcileする。

## TTL_AND_SCOPE
keyのscopeとTTLを明示する。TTL後のlate retryは新規操作になり得る。provider/API固有のregional/zonal等のscopeを無視してglobal onceと一般化しない。

## PRECONDITIONS
request dedupeとresource preconditionは別機能である。ETag、generation、version、revision等で対象状態を固定し、stale writeを拒否する。

## RETRY_POLICY
retryability、backoff、jitter、retry budgetを分離する。backoff/jitterはretry amplificationを抑えるがduplicate side effectは防がない。SDK hidden retryとapplication retryの積み重なりを把握する。

## MULTI_STEP_AGENT_ACTIONS
複数side effectを含むAgent actionはouter keyだけで全stepを保証しない。各side effectにstable identityを割り当て、workflow state、outbox/inbox、downstream operation ID等でcommit/reconcile状態を保持する。

## AUTHORIZATION_AND_REPLAY
idempotency key所持をauthorizationにしない。retry時もprincipal、tenant、target、policyを検証する。

## OPERATING_CHECK
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にする。

## FAILURE_ENVELOPE
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。

## IMPLEMENTATION_STATE
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は未実施。

## SAFE_WORDING
Agentの副作用操作にはstable operation identity、same-key mismatch拒否、atomic dedupe state、result replay/reconciliation、TTL、resource-version preconditionを設計する。idempotencyはretryを安全にする境界であり、無条件のexactly-once保証ではない。

## OPEN_UNKNOWN
対象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は未確認。

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