Transactional Outbox/Inbox × Agent
記事状態: 公開 · 最終確認: 2026-10-05
要点
Agentがbusiness 状態を更新し、その結果をイベント/messageとして別システムへ通知する場合、DB commit→broker publishの二段処理を成功前提にしません。business 状態とoutbox イベントを同じローカル環境の transactionへ閉じ、relayがcommit済みoutboxを非同期publishします。Outboxは提供側側dual-write lossを抑えるpatternでありduplicate deliveryをなくす仕組みではありません。利用側側にはInbox/Idempotent 利用側を置き、duplicate 記述・判断とbusiness mutationを可能な限り同じtransactionで確定します。
現在の判断
Agentがbusiness 状態を更新し、その結果をイベント/messageとして別システムへ通知する場合、DB commit→broker publishの二段処理を成功前提にしません。business 状態とoutbox イベントを同じローカル環境の transactionへ閉じ、relayがcommit済みoutboxを非同期publishします。Outboxは提供側側dual-write lossを抑えるpatternでありduplicate deliveryをなくす仕組みではありません。利用側側にはInbox/Idempotent 利用側を置き、duplicate 記述・判断とbusiness mutationを可能な限り同じtransactionで確定します。
どこまで当てはまるか
Transactional Outbox/Inbox × Agent
詳しく理解する
PRODUCER TRANSACTION
business mutationとoutbox rowを一ローカル環境の transactionでcommitします。outboxにはimmutable event_id、aggregate_id、aggregate_version/sequence、event_type、schema_version、payload、監査 correlationを持たせます。以前の状態へ戻す操作時にイベントだけpublishせず、business 状態だけcommitしてイベントを後生成する設計も避けます。
RELAY BOUNDARY
relayはpollingまたはtransaction-log/CDC。publish後途中状態の保存地点前crashで再publishし得るためone-publishを成功条件にしません。SKIP LOCKED等はqueue-like競合回避には使えてもstrict global ordering/consistent snapshot証明にはしません。
EVENT ID AND ORDERING
event_idはduplicate判定、aggregate_id+sequence/バージョンは同一aggregateのorder/gap/要再確認検出。timestampだけをstrict order根拠にせず、cross-partition/cross-source global orderを仮定しません。
CONSUMER INBOX
利用側はevent_idをInboxへ登録します。duplicate checkとbusiness mutationを別transactionに分けず、可能ならunique 記述・判断とmutationを同一transaction/atomic conditional 書込みでcommitします。duplicate redeliveryではmutationを再実行しません。
BROKER EXACTLY ONCE BOUNDARY
broker/stream processorのexactly-once semanticsを外部システムへ拡張しません。別DB、payment、email、SaaS API、physical actionにはstable 重複実行を防ぐ性質 key、resource 実行前の条件、状態 query/reconciliationを別途適用します。
CDC AND DEBEZIUM
CDCはpollingを減らす一方、接続機能 設定/offset/snapshot/restart/データ形式の定義/lag/topic 処理先の振り分けをoperational 状態として持ちます。outbox以外のheartbeat/データ形式の定義/transaction 付随情報へ誤ってtransformを適用しないよう適用範囲を固定します。
データ形式の変更と互換性
delivery reliabilityとpayload compatibilityを分離。schema_versionと提供側/利用側 条件・契約 testを保持します。
セキュリティとプライバシー
message possessionを認可とみなしません。組織の利用環境/操作主体/action/対象 出典・来歴を保持し、必要な現在の policy/実行前の条件を利用側で確認します。
RETENTION AND REPLAY
outbox/inbox cleanupは最大replay/reconciliation windowより短くしません。DLQ replay時は現在のbusiness 状態/データ形式の定義/認可を再評価します。
AGENT BOUNDARY
LLM生成ツール callや自然言語の「送信済み」をcommit 根拠にしません。authoritative commitはtransaction 状態、outbox/inbox、downstream 操作内容 ID、結果の照合/reconciliationから判定します。
OPERATING CHECK
提供側 以前の状態へ戻す操作、publish後relay crash、利用側 commit後ack loss、concurrent relay、duplicate、sequence gap、CDC restart、poison/DLQ、保持期間・保持方針 expiry、外部 SaaS 成功後ローカル環境の 失敗をfault injectionし、lost-event/duplicate-publish/duplicate-side-effect/relay lag/sequence-gap/reconciliation/DLQ ageを別評価指標化します。
実装・運用
2026-10-05時点のAWS、Debezium、Kafka、PostgreSQL、independent pattern referencesとbounded SQLite fixtureに基づきます。本番環境 broker/CDC/ツール mutationは未実施です。
よくある失敗・反証
naive dual 書込み、relay duplicate、non-atomic inbox、イベント collision、sequence gap、multi-producer race、CDC lag/restart、データ形式の定義 incompatibility、poison/late replay、premature cleanup、組織の利用環境 collision、要再確認 認可、payload leakage、external-side-effect ambiguity、再試行 amplification。
Outboxをexactly-once神話へ拡張せず、提供側 transaction、relay、利用側 inbox、外部 外部への変更・送信、ordering/データ形式の定義/保持期間・保持方針/authの境界を固定します。
実務での使い方
2026-10-05時点のAWS、Debezium、Kafka、PostgreSQL、independent pattern referencesとbounded SQLite fixtureに基づきます。本番環境 broker/CDC/ツール mutationは未実施です。
まだ確認できていないこと
- EA-243-UNKNOWN-01
対象Agent 実行環境、DB、broker、CDC/relay、バージョン、isolation、ordering、データ形式の定義 registry、保持期間・保持方針、DLQ/replay、組織の利用環境/auth、外部 ツール 重複実行を防ぐ性質、reconciliation、SLO、residency/監査 保持期間・保持方針は未確認です。
根拠資料
この記事には、直接開ける外部出典が登録されていません。出典IDや検証情報は末尾で確認できます。
更新履歴
EA-243-FIRST-20261005: 正式な 監査/publication 対応付け
出典ID・検証情報・機械可読データ
根拠の種類と情報の鮮度は、ラベルとアイコンで確認できます。
- 記事ID
- EA-243
- 最終確認日
- 2026-10-05
- 提供元・モデル・プラン・利用環境
- —
- 対象地域
- —
元資料の全文と収録照合記録
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の境界を固定します。
EA-243-CURRENT-APPROVAL研究資料研究資料根拠の出所: AUDITED_CANONICAL_RESEARCH_PACKET現行本文の監査・revision対応
- 裏付ける内容
- 現行台帳のAUDIT_PASSと候補・revision・本文ハッシュの対応を確認しています。
- 確認日
- —
- 出典・実験ID
- CANDIDATE-EA243-FIRST-20261005-C2-RESCUE20261013
- 検証箇所
- 1KqhJtiSb2S84rWmeYVwKcT_76dBwZ_B0ZZuAWQqH0rQ · EA_REVISION_LEDGER!A46:U46 · EA-243-FIRST-20261005
- 適用範囲
- —
- 出典・来歴
- CURRENT_CANONICAL_APPROVAL_READBACK
- 限界
- 監査状態と来歴の記録です。外部根拠の最新性や本文の全主張を追加保証しません。
EA-243-CURRENT-BODY-READBACK実装資料実装資料根拠の出所: IMPLEMENTATION_READBACK現行本文の収録照合
- 裏付ける内容
- 公開生成入力の本文SHA-256が、監査済み候補に結び付いたハッシュと一致しています。
- 確認日
- 2026-10-13
- 出典・実験ID
- BODY-SHA256:f9d4316ac39799220d2164d259bf6bf9475f1ac245f53fb9a1bcb8ac2f448e35
- 検証箇所
- content/staging/EA-243.md · f9d4316ac39799220d2164d259bf6bf9475f1ac245f53fb9a1bcb8ac2f448e35 · EA-243-FIRST-20261005
- 適用範囲
- —
- 出典・来歴
- CURRENT_APPROVED_BODY_HASH_MATCH
- 限界
- 本文の同一性の検査です。外部システムの挙動や全主張の真偽を実証したものではありません。
- 出典ID
- CANDIDATE-EA243-FIRST-20261005-C2-RESCUE20261013, BODY-SHA256:f9d4316ac39799220d2164d259bf6bf9475f1ac245f53fb9a1bcb8ac2f448e35
- 追跡中のUNKNOWN ID
- EA-243-UNKNOWN-01
- 再確認のきっかけ
- 正式な 改訂版/publication 状態 change · 本文 成果物 hash change · 出典 現行性 change · new contradiction or 実装 結果の照合
機械検査: 通過 — 機械検査の結果です。情報の正確性や実行の承認を保証するものではありません。
同じ記事IDの機械可読データです。