{
  "format": "agent-article-v0",
  "article_id": "EA-243",
  "canonical_url": "/tools/ea-243-transactional-outbox-inbox-agent",
  "page_type": "reference",
  "claim_ids": [],
  "evidence_ids": [
    "EA-243-CURRENT-APPROVAL",
    "EA-243-CURRENT-BODY-READBACK"
  ],
  "unknown_ids": [
    "EA-243-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-EA243-FIRST-20261005-C2-RESCUE20261013",
    "BODY-SHA256:f9d4316ac39799220d2164d259bf6bf9475f1ac245f53fb9a1bcb8ac2f448e35"
  ],
  "article_sources": [
    {
      "id": "EA-243-CURRENT-APPROVAL",
      "evidence_class": "RESEARCH",
      "title": "現行本文の監査・revision対応",
      "supports": [
        "現行台帳のAUDIT_PASSと候補・revision・本文ハッシュの対応を確認しています。"
      ],
      "limit": "監査状態と来歴の記録です。外部根拠の最新性や本文の全主張を追加保証しません。",
      "origin_class": "AUDITED_CANONICAL_RESEARCH_PACKET",
      "source_or_experiment_ids": [
        "CANDIDATE-EA243-FIRST-20261005-C2-RESCUE20261013"
      ],
      "supporting_locators": [
        "1KqhJtiSb2S84rWmeYVwKcT_76dBwZ_B0ZZuAWQqH0rQ",
        "EA_REVISION_LEDGER!A46:U46",
        "EA-243-FIRST-20261005"
      ],
      "provenance_status": "CURRENT_CANONICAL_APPROVAL_READBACK"
    },
    {
      "id": "EA-243-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:f9d4316ac39799220d2164d259bf6bf9475f1ac245f53fb9a1bcb8ac2f448e35"
      ],
      "supporting_locators": [
        "content/staging/EA-243.md",
        "f9d4316ac39799220d2164d259bf6bf9475f1ac245f53fb9a1bcb8ac2f448e35",
        "EA-243-FIRST-20261005"
      ],
      "provenance_status": "CURRENT_APPROVED_BODY_HASH_MATCH"
    }
  ],
  "research_sections": [
    {
      "heading": "PUBLIC_CLAIM",
      "text": "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で確定します。"
    },
    {
      "heading": "PRODUCER_TRANSACTION",
      "text": "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を後生成する設計も避けます。"
    },
    {
      "heading": "RELAY_BOUNDARY",
      "text": "relayはpollingまたはtransaction-log/CDC。publish後checkpoint前crashで再publishし得るためone-publishを成功条件にしません。SKIP LOCKED等はqueue-like競合回避には使えてもstrict global ordering/consistent snapshot証明にはしません。"
    },
    {
      "heading": "EVENT_ID_AND_ORDERING",
      "text": "event_idはduplicate判定、aggregate_id+sequence/versionは同一aggregateのorder/gap/stale検出。timestampだけをstrict order根拠にせず、cross-partition/cross-source global orderを仮定しません。"
    },
    {
      "heading": "CONSUMER_INBOX",
      "text": "consumerはevent_idをInboxへ登録します。duplicate checkとbusiness mutationを別transactionに分けず、可能ならunique claimとmutationを同一transaction/atomic conditional writeでcommitします。duplicate redeliveryではmutationを再実行しません。"
    },
    {
      "heading": "BROKER_EXACTLY_ONCE_BOUNDARY",
      "text": "broker/stream processorのexactly-once semanticsを外部systemへ拡張しません。別DB、payment、email、SaaS API、physical actionにはstable idempotency key、resource precondition、status query/reconciliationを別途適用します。"
    },
    {
      "heading": "CDC_AND_DEBEZIUM",
      "text": "CDCはpollingを減らす一方、connector configuration/offset/snapshot/restart/schema/lag/topic routingをoperational stateとして持ちます。outbox以外のheartbeat/schema/transaction metadataへ誤ってtransformを適用しないようscopeを固定します。"
    },
    {
      "heading": "SCHEMA_EVOLUTION",
      "text": "delivery reliabilityとpayload compatibilityを分離。schema_versionとproducer/consumer contract testを保持します。"
    },
    {
      "heading": "AUTHORIZATION_AND_TENANCY",
      "text": "message possessionをauthorizationとみなしません。tenant/principal/action/target provenanceを保持し、必要なcurrent policy/preconditionをconsumerで確認します。"
    },
    {
      "heading": "RETENTION_AND_REPLAY",
      "text": "outbox/inbox cleanupは最大replay/reconciliation windowより短くしません。DLQ replay時は現在のbusiness state/schema/authorizationを再評価します。"
    },
    {
      "heading": "AGENT_BOUNDARY",
      "text": "LLM生成tool callや自然言語の「送信済み」をcommit evidenceにしません。authoritative commitはtransaction state、outbox/inbox、downstream operation ID、readback/reconciliationから判定します。"
    },
    {
      "heading": "OPERATING_CHECK",
      "text": "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化します。"
    },
    {
      "heading": "FAILURE_ENVELOPE",
      "text": "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。"
    },
    {
      "heading": "IMPLEMENTATION_STATE",
      "text": "2026-10-05時点のAWS、Debezium、Kafka、PostgreSQL、independent pattern referencesとbounded SQLite fixtureに基づきます。production broker/CDC/tool mutationは未実施です。"
    },
    {
      "heading": "SAFE_WORDING",
      "text": "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を別境界として設計してください。"
    },
    {
      "heading": "OPEN_UNKNOWN",
      "text": "対象Agent runtime、DB、broker、CDC/relay、version、isolation、ordering、schema registry、retention、DLQ/replay、tenant/auth、external tool idempotency、reconciliation、SLO、residency/audit retentionは未確認です。"
    },
    {
      "heading": "STOP_CONDITION",
      "text": "Outboxをexactly-once神話へ拡張せず、producer transaction、relay、consumer inbox、external side effect、ordering/schema/retention/authの境界を固定します。"
    }
  ],
  "human_url": "/tools/ea-243-transactional-outbox-inbox-agent",
  "markdown_url": "/agent/article.md?path=%2Ftools%2Fea-243-transactional-outbox-inbox-agent",
  "json_url": "/agent/article.json?path=%2Ftools%2Fea-243-transactional-outbox-inbox-agent"
}