# Transactional Outbox／Inbox × Agent

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

## Summary
Agentがbusiness stateを更新し、その結果をevent/messageとして別systemへ通知する場合、DB commit→broker publishの二段処理を成功前提にしません。business stateとoutbox eventを同じlocal transactionへ閉じ、relayがcommit済みoutboxを非同期publishします。Outboxはproducer側dual-write lossを抑えるpatternでありduplicate deliveryをなくす仕組みではありません。consumer側にはInbox／Idempotent Consumerを置き、duplicate claimとbusiness mutationを可能な限り同じtransactionで確定します。

## Current judgment
Agentがbusiness stateを更新し、その結果をevent/messageとして別systemへ通知する場合、DB commit→broker publishの二段処理を成功前提にしません。business stateとoutbox eventを同じlocal transactionへ閉じ、relayがcommit済みoutboxを非同期publishします。Outboxはproducer側dual-write lossを抑えるpatternでありduplicate deliveryをなくす仕組みではありません。consumer側にはInbox／Idempotent Consumerを置き、duplicate claimとbusiness mutationを可能な限り同じtransactionで確定します。

## Scope
Transactional Outbox／Inbox × Agent

## Confirmed

## UNKNOWN
- EA-243-UNKNOWN-01: 対象Agent runtime、DB、broker、CDC/relay、version、isolation、ordering、schema registry、retention、DLQ/replay、tenant/auth、external tool idempotency、reconciliation、SLO、residency/audit retentionは未確認です。

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

## Failure / limits
naive dual write、relay duplicate、non-atomic inbox、event collision、sequence gap、multi-producer race、CDC lag/restart、schema incompatibility、poison/late replay、premature cleanup、tenant collision、stale authorization、payload leakage、external-side-effect ambiguity、retry amplification。
## Failure / limits
Outboxをexactly-once神話へ拡張せず、producer transaction、relay、consumer inbox、external side effect、ordering/schema/retention/authの境界を固定します。
## Practice
2026-10-05時点のAWS、Debezium、Kafka、PostgreSQL、independent pattern referencesとbounded SQLite fixtureに基づきます。production broker/CDC/tool mutationは未実施です。
## PUBLIC_CLAIM
Agentがbusiness stateを更新し、その結果をevent/messageとして別systemへ通知する場合、DB commit→broker publishの二段処理を成功前提にしません。business stateとoutbox eventを同じlocal transactionへ閉じ、relayがcommit済みoutboxを非同期publishします。Outboxはproducer側dual-write lossを抑えるpatternでありduplicate deliveryをなくす仕組みではありません。consumer側にはInbox／Idempotent Consumerを置き、duplicate claimとbusiness mutationを可能な限り同じtransactionで確定します。

## PRODUCER_TRANSACTION
business mutationとoutbox rowを一local transactionでcommitします。outboxにはimmutable event_id、aggregate_id、aggregate_version/sequence、event_type、schema_version、payload、audit correlationを持たせます。rollback時にeventだけpublishせず、business stateだけcommitしてeventを後生成する設計も避けます。

## RELAY_BOUNDARY
relayはpollingまたはtransaction-log/CDC。publish後checkpoint前crashで再publishし得るためone-publishを成功条件にしません。SKIP LOCKED等はqueue-like競合回避には使えてもstrict global ordering/consistent snapshot証明にはしません。

## EVENT_ID_AND_ORDERING
event_idはduplicate判定、aggregate_id+sequence/versionは同一aggregateのorder/gap/stale検出。timestampだけをstrict order根拠にせず、cross-partition/cross-source global orderを仮定しません。

## CONSUMER_INBOX
consumerはevent_idをInboxへ登録します。duplicate checkとbusiness mutationを別transactionに分けず、可能ならunique claimとmutationを同一transaction/atomic conditional writeでcommitします。duplicate redeliveryではmutationを再実行しません。

## BROKER_EXACTLY_ONCE_BOUNDARY
broker/stream processorのexactly-once semanticsを外部systemへ拡張しません。別DB、payment、email、SaaS API、physical actionにはstable idempotency key、resource precondition、status query/reconciliationを別途適用します。

## CDC_AND_DEBEZIUM
CDCはpollingを減らす一方、connector configuration/offset/snapshot/restart/schema/lag/topic routingをoperational stateとして持ちます。outbox以外のheartbeat/schema/transaction metadataへ誤ってtransformを適用しないようscopeを固定します。

## SCHEMA_EVOLUTION
delivery reliabilityとpayload compatibilityを分離。schema_versionとproducer/consumer contract testを保持します。

## AUTHORIZATION_AND_TENANCY
message possessionをauthorizationとみなしません。tenant/principal/action/target provenanceを保持し、必要なcurrent policy/preconditionをconsumerで確認します。

## RETENTION_AND_REPLAY
outbox/inbox cleanupは最大replay/reconciliation windowより短くしません。DLQ replay時は現在のbusiness state/schema/authorizationを再評価します。

## AGENT_BOUNDARY
LLM生成tool callや自然言語の「送信済み」をcommit evidenceにしません。authoritative commitはtransaction state、outbox/inbox、downstream operation ID、readback/reconciliationから判定します。

## OPERATING_CHECK
producer rollback、publish後relay crash、consumer commit後ack loss、concurrent relay、duplicate、sequence gap、CDC restart、poison/DLQ、retention expiry、external SaaS success後local failureをfault injectionし、lost-event/duplicate-publish/duplicate-side-effect/relay lag/sequence-gap/reconciliation/DLQ ageを別metric化します。

## FAILURE_ENVELOPE
naive dual write、relay duplicate、non-atomic inbox、event collision、sequence gap、multi-producer race、CDC lag/restart、schema incompatibility、poison/late replay、premature cleanup、tenant collision、stale authorization、payload leakage、external-side-effect ambiguity、retry amplification。

## IMPLEMENTATION_STATE
2026-10-05時点のAWS、Debezium、Kafka、PostgreSQL、independent pattern referencesとbounded SQLite fixtureに基づきます。production broker/CDC/tool mutationは未実施です。

## SAFE_WORDING
Transactional Outboxはproducer側のbusiness stateとevent記録をlocal transactionへ閉じますがduplicate deliveryを排除しません。consumer側Inbox/Idempotent Consumer、event identity、ordering/version、schema compatibility、replay window、authorization、外部副作用のidempotency/reconciliationを別境界として設計してください。

## OPEN_UNKNOWN
対象Agent runtime、DB、broker、CDC/relay、version、isolation、ordering、schema registry、retention、DLQ/replay、tenant/auth、external tool idempotency、reconciliation、SLO、residency/audit retentionは未確認です。

## STOP_CONDITION
Outboxをexactly-once神話へ拡張せず、producer transaction、relay、consumer inbox、external side effect、ordering/schema/retention/authの境界を固定します。

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