DataModels are logical transactional state boundaries. DataObjects carry composite identity. Outboxes are typed logical message collections owned by a data model, atomically committed with their containing transaction.
A DataModel is a logical transactional state boundary containing persistent objects. It is not necessarily one database server, one vendor product, one schema namespace, or one physical storage engine. What matters is that a transaction declaring this data model is modeled as operating against this shared transactional boundary.
A DataObject is a logical class of persistent object instances. schema identifies the canonical state schema for an instance.identity is the complete, non-empty logical identity of one object instance. The vector contains the components of a single composite identity:
identity: - [tenant_id] - [account_id]
This means the object is identified by the tuple (tenant_id, account_id). It does not mean that tenant_id and account_id are alternative independent keys. Object identity is intrinsic to the logical object model: two distinct successfully created instances cannot share the same complete identity.
A DataObject declares no object-history requirement (such as linearizable). Transaction isolation, explicit locks, lock ordering, object identity, selector overlap, transaction conflicts, operation serialization, and operation ordering keep their declared meanings. The scope rule for this iteration is:
Conseqa models transaction and operation correctness without declaring end-to-end persistent-object history consistency requirements.
serializable continues to mean transaction serializability and must not be reinterpreted as linearizability.
messages is the set of schemas the outbox is permitted to durably contain. message_identity uses exactly the same MessageIdentity semantics as a topic: unspecified or keyed { mapping }, with the same per-schema mapping rules, arity constraints, and cross-schema collision rules.
Because an outbox belongs to the data model, a transaction declaring that data model may atomically mutate its objects and admit messages to its outboxes in one logical commit:
T aborts => no mutation commits AND the message is not admittedT commits => the mutations commit AND the message is durably admitted
There is no state of the L0 machine where the commit succeeds without the declared admission, or an admission survives an abort. This is the defining atomic-outbox property.
No DataObject named “outbox” acquires outbox semantics; they exist only through this explicit entity. An outbox message is durable typed application message data, not a captured effect instance awaiting execution, and not a typed value exported back into the same operation’s continuation.
Outbox messages are written only via a write_outbox transaction step. This is the sole legal execution site for an OutboxWriteEffect; it is rejected under execute_effect, execute_effect_async, establish_effect_intent, and among a transition’s side effects.
Outbox messages are consumed by an operation through an OutboxInput. Runtime facts for that consumption are declared in an OutboxRuntime.
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"Conseqa","colors":{"primary":"#5B4FCF","light":"#EDE9FF","dark":"#2D2460"},"favicon":"https://mintcdn.com/archspec/CgpsaKCVXill437h/favicon.svg?fit=max\u0026auto=format\u0026n=CgpsaKCVXill437h\u0026q=85\u0026s=fcfb437e6c8de76218c8ba7d2b92cc45","navbar":{"primary":{"type":"github","href":"https://github.com/umran/conseqa"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"archspec","hasAudioNarration":false,"actualSubdomain":"archspec","customDomains":["docs.conseqa.umran.ca"],"gitSource":{"type":"github","owner":"umran","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6aa2a2cbaa1ac635e5bd65c9","collectionId":"f56c2ea9-4331-4a26-b87e-2004157e0ead","liveDeploymentHistoryId":"6aa2a2cbaa1ac635e5bd65c9","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6aa2a2cbaa1ac635e5bd65c9","clientVersion":"0.0.4045","searchFilterCounts":[{"language":"default","tag":"Documentation","count":32},{"language":"default","tag":"Core Concepts","count":8},{"language":"default","tag":"DSL Reference","count":6},{"language":"default","tag":"Runtime Topology","count":5},{"language":"default","tag":"Visualization","count":4},{"language":"default","tag":"Guides","count":3},{"language":"default","tag":"Get Started","count":3},{"language":"default","tag":"Verification","count":3},{"language":"default","tag":"CLI Reference","count":2},{"language":"default","tag":"Commands","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"concepts/data-models-and-outboxes","slug":"/concepts/data-models-and-outboxes","pageMetadata":{"title":"Conseqa Data Models and Outboxes","sidebarTitle":"Data Models and Outboxes","description":"DataModels are logical transactional state boundaries. DataObjects carry composite identity. Outboxes are typed logical message collections owned by a data model, atomically committed with their containing transaction.","href":"/concepts/data-models-and-outboxes"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"DataModels are logical transactional state boundaries. DataObjects carry composite identity. Outboxes are typed logical message collections owned by a data model, atomically committed with their containing transaction.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,blockquote:`blockquote`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Note,Table}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`A `,_jsx(_components.code,{children:`DataModel`}),` is a logical transactional state boundary containing persistent objects. It is not necessarily one database server, one vendor product, one schema namespace, or one physical storage engine. What matters is that a transaction declaring this data model is modeled as operating against this shared transactional boundary.`]}),`\n`,_jsx(Heading,{level:`2`,id:`data-objects-and-identity`,children:`Data objects and identity`}),`\n`,_jsxs(_components.p,{children:[`A `,_jsx(_components.code,{children:`DataObject`}),` is a logical class of persistent object instances. `,_jsx(_components.code,{children:`schema`}),` identifies the canonical state schema for an instance.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`identity`}),` is the complete, non-empty logical identity of one object instance. The vector contains the components of a `,_jsx(_components.strong,{children:`single composite identity`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`identity`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`tenant_id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`account_id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`This means the object is identified by the tuple `,_jsx(_components.code,{children:`(tenant_id, account_id)`}),`. It does `,_jsx(_components.strong,{children:`not`}),` mean that `,_jsx(_components.code,{children:`tenant_id`}),` and `,_jsx(_components.code,{children:`account_id`}),` are alternative independent keys. Object identity is intrinsic to the logical object model: two distinct successfully created instances cannot share the same complete identity.`]}),`\n`,_jsx(Heading,{level:`3`,id:`object-history-requirements-are-deferred`,children:`Object-history requirements are deferred`}),`\n`,_jsxs(_components.p,{children:[`A `,_jsx(_components.code,{children:`DataObject`}),` declares no object-history requirement (such as `,_jsx(_components.code,{children:`linearizable`}),`). Transaction isolation, explicit locks, lock ordering, object identity, selector overlap, transaction conflicts, operation serialization, and operation ordering keep their declared meanings. The scope rule for this iteration is:`]}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsx(_components.p,{children:`Conseqa models transaction and operation correctness without declaring end-to-end persistent-object history consistency requirements.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`serializable`}),` continues to mean transaction serializability and must `,_jsx(_components.strong,{children:`not`}),` be reinterpreted as linearizability.`]}),`\n`,_jsx(Heading,{level:`2`,id:`outboxes`,children:`Outboxes`}),`\n`,_jsxs(_components.p,{children:[`A data model may also contain `,_jsx(_components.strong,{children:`outboxes`}),`: typed logical message collections belonging to the same transactional state boundary as its objects.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`16`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`16`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`data_models`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` data.orders`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` objects`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` obj.Order`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` schema`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`schema.Order`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` identity`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`order_id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` outboxes`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` outbox.order_events`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` messages`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`schema.OrderCreated`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` message_identity`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` kind`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`keyed`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` mapping`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` schema.OrderCreated`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`event_id`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`messages`}),` is the set of schemas the outbox is permitted to durably contain. `,_jsx(_components.code,{children:`message_identity`}),` uses exactly the same `,_jsx(_components.code,{children:`MessageIdentity`}),` semantics as a topic: `,_jsx(_components.code,{children:`unspecified`}),` or `,_jsx(_components.code,{children:`keyed { mapping }`}),`, with the same per-schema mapping rules, arity constraints, and cross-schema collision rules.`]}),`\n`,_jsx(Heading,{level:`3`,id:`atomicity`,children:`Atomicity`}),`\n`,_jsxs(_components.p,{children:[`Because an outbox belongs to the data model, a transaction declaring that data model may atomically mutate its objects `,_jsx(_components.strong,{children:`and`}),` admit messages to its outboxes in one logical commit:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`T aborts => no mutation commits AND the message is not admitted`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`T commits => the mutations commit AND the message is durably admitted`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`There is no state of the L0 machine where the commit succeeds without the declared admission, or an admission survives an abort. This is the defining atomic-outbox property.`}),`\n`,_jsx(Heading,{level:`3`,id:`what-an-outbox-is-not`,children:`What an outbox is not`}),`\n`,_jsx(_components.p,{children:`An outbox is:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`not`}),` a `,_jsx(_components.code,{children:`DataObject`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`not`}),` an `,_jsx(_components.code,{children:`EffectIntent`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`not`}),` a `,_jsx(_components.code,{children:`TransactionOutput`})]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`No `,_jsx(_components.code,{children:`DataObject`}),` named “outbox” acquires outbox semantics; they exist only through this explicit entity. An outbox message is durable typed application message data, not a captured effect instance awaiting execution, and not a typed value exported back into the same operation’s continuation.`]}),`\n`,_jsx(Heading,{level:`2`,id:`topic-versus-outbox`,children:`Topic versus outbox`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Concern`}),_jsx(_components.th,{children:`Topic`}),_jsx(_components.th,{children:`Outbox`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Layer`}),_jsx(_components.td,{children:`L0 logical channel`}),_jsxs(_components.td,{children:[`L0 `,_jsx(_components.code,{children:`DataModel`}),` entity`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Payload`}),_jsx(_components.td,{children:`typed message`}),_jsx(_components.td,{children:`typed message`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Allowed schemas`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`messages`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`messages`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Logical message identity`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`message_identity`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`message_identity`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Producer effect`}),_jsxs(_components.td,{children:[`publication (`,_jsx(_components.a,{href:`/dsl/effects`,children:`Effects`}),`)`]}),_jsxs(_components.td,{children:[`outbox write (`,_jsx(_components.a,{href:`/dsl/effects`,children:`Effects`}),`)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Producer execution`}),_jsx(_components.td,{children:`ordinary effect execution`}),_jsx(_components.td,{children:`transaction-exclusive`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Atomic with `,_jsx(_components.code,{children:`DataObject`}),` mutation`]}),_jsx(_components.td,{children:`not implied`}),_jsx(_components.td,{children:`yes, through the containing transaction`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Consumer input`}),_jsxs(_components.td,{children:[`subscription (`,_jsx(_components.a,{href:`/concepts/operations`,children:`Operations`}),`)`]}),_jsxs(_components.td,{children:[`outbox input (`,_jsx(_components.a,{href:`/concepts/operations`,children:`Operations`}),`)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Runtime`}),_jsxs(_components.td,{children:[`topic/subscription runtime (`,_jsx(_components.a,{href:`/runtime/topic-and-subscription-runtime`,children:`Topic and subscription runtime`}),`)`]}),_jsxs(_components.td,{children:[`outbox runtime (`,_jsx(_components.a,{href:`/runtime/outbox-runtime`,children:`Outbox runtime`}),`)`]})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`writing-to-an-outbox`,children:`Writing to an outbox`}),`\n`,_jsxs(_components.p,{children:[`Outbox messages are written only via a `,_jsx(_components.code,{children:`write_outbox`}),` transaction step. This is the `,_jsx(_components.strong,{children:`sole legal execution site`}),` for an `,_jsx(_components.code,{children:`OutboxWriteEffect`}),`; it is rejected under `,_jsx(_components.code,{children:`execute_effect`}),`, `,_jsx(_components.code,{children:`execute_effect_async`}),`, `,_jsx(_components.code,{children:`establish_effect_intent`}),`, and among a transition’s side effects.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`11`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`11`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`- `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`kind`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`write_outbox`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` effect_id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`effect.create_order.outbox_created`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` effect`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` outbox`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`outbox.order_events`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` schema`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`schema.OrderCreated`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` idempotency_key_propagation`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: []`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` values`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` kind`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`deterministic`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`source`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`input:input.create_order.request`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` path`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`order_id`})]}),`\n`]})})}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`write_outbox`}),` has no synchronous result, no `,_jsx(_components.code,{children:`bind`}),`, and no async variant. The transaction alone determines whether the staged write commits.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`consuming-an-outbox`,children:`Consuming an outbox`}),`\n`,_jsxs(_components.p,{children:[`Outbox messages are consumed by an operation through an `,_jsx(_components.a,{href:`/concepts/operations`,children:`OutboxInput`}),`. Runtime facts for that consumption are declared in an `,_jsx(_components.a,{href:`/runtime/outbox-runtime`,children:`OutboxRuntime`}),`.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Conseqa Data Models and Outboxes","sidebarTitle":"Data Models and Outboxes","description":"DataModels are logical transactional state boundaries. DataObjects carry composite identity. Outboxes are typed logical message collections owned by a data model, atomically committed with their containing transaction.","href":"/concepts/data-models-and-outboxes"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Data objects and identity","slug":"data-objects-and-identity","depth":2,"children":[{"title":"Object-history requirements are deferred","slug":"object-history-requirements-are-deferred","depth":3,"children":[]}]},{"title":"Outboxes","slug":"outboxes","depth":2,"children":[{"title":"Atomicity","slug":"atomicity","depth":3,"children":[]},{"title":"What an outbox is not","slug":"what-an-outbox-is-not","depth":3,"children":[]}]},{"title":"Topic versus outbox","slug":"topic-versus-outbox","depth":2,"children":[]},{"title":"Writing to an outbox","slug":"writing-to-an-outbox","depth":2,"children":[]},{"title":"Consuming an outbox","slug":"consuming-an-outbox","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"archspec","siteName":"Conseqa","title":"Conseqa Data Models and Outboxes - Conseqa","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-10T12:30:37.496Z","originalFileLocation":"concepts/data-models-and-outboxes.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"DataModels are logical transactional state boundaries. DataObjects carry composite identity. Outboxes are typed logical message collections owned by a data model, atomically committed with their containing transaction.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Conseqa\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/svg+xml\" sizes=\"180x180\" href=\"https://mintcdn.com/archspec/CgpsaKCVXill437h/favicon.svg?fit=max\u0026amp;auto=format\u0026amp;n=CgpsaKCVXill437h\u0026amp;q=85\u0026amp;s=fcfb437e6c8de76218c8ba7d2b92cc45\">\u003clink data-mint-head rel=\"icon\" type=\"image/svg+xml\" sizes=\"32x32\" href=\"https://mintcdn.com/archspec/CgpsaKCVXill437h/favicon.svg?fit=max\u0026amp;auto=format\u0026amp;n=CgpsaKCVXill437h\u0026amp;q=85\u0026amp;s=fcfb437e6c8de76218c8ba7d2b92cc45\">\u003clink data-mint-head rel=\"icon\" type=\"image/svg+xml\" sizes=\"16x16\" href=\"https://mintcdn.com/archspec/CgpsaKCVXill437h/favicon.svg?fit=max\u0026amp;auto=format\u0026amp;n=CgpsaKCVXill437h\u0026amp;q=85\u0026amp;s=fcfb437e6c8de76218c8ba7d2b92cc45\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/svg+xml\" href=\"https://mintcdn.com/archspec/CgpsaKCVXill437h/favicon.svg?fit=max\u0026amp;auto=format\u0026amp;n=CgpsaKCVXill437h\u0026amp;q=85\u0026amp;s=fcfb437e6c8de76218c8ba7d2b92cc45\">\u003cmeta data-mint-head property=\"og:title\" content=\"Conseqa Data Models and Outboxes - Conseqa\">\u003cmeta data-mint-head property=\"og:description\" content=\"DataModels are logical transactional state boundaries. DataObjects carry composite identity. Outboxes are typed logical message collections owned by a data model, atomically committed with their containing transaction.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Conseqa\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.conseqa.umran.ca/concepts/data-models-and-outboxes\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://archspec.mintlify.app/_mintlify/api/og/v2?division=Core+Concepts\u0026amp;title=Conseqa+Data+Models+and+Outboxes\u0026amp;description=DataModels+are+logical+transactional+state+boundaries.+DataObjects+carry+composite+identity.+Outboxes+are+typed+logical+message+collections+owned+by+a+data+mode\u0026amp;theme=58f7995d7e1441fc71279f43\u0026amp;signature=917d21dbbf44bf4bdcd8d75ef0528771283cefb6d842f76b32fc773c8f09e688\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Conseqa Data Models and Outboxes - Conseqa\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"DataModels are logical transactional state boundaries. DataObjects carry composite identity. Outboxes are typed logical message collections owned by a data model, atomically committed with their containing transaction.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://archspec.mintlify.app/_mintlify/api/og/v2?division=Core+Concepts\u0026amp;title=Conseqa+Data+Models+and+Outboxes\u0026amp;description=DataModels+are+logical+transactional+state+boundaries.+DataObjects+carry+composite+identity.+Outboxes+are+typed+logical+message+collections+owned+by+a+data+mode\u0026amp;theme=58f7995d7e1441fc71279f43\u0026amp;signature=917d21dbbf44bf4bdcd8d75ef0528771283cefb6d842f76b32fc773c8f09e688\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"https://mintlify.s3.us-west-1.amazonaws.com/archspec/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Conseqa\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#5B4FCF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.conseqa.umran.ca/concepts/data-models-and-outboxes\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/concepts/data-models-and-outboxes.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.conseqa.umran.ca/#organization\",\"name\":\"Conseqa\",\"url\":\"https://docs.conseqa.umran.ca\"},{\"@type\":\"WebSite\",\"@id\":\"https://docs.conseqa.umran.ca#website\",\"name\":\"Conseqa\",\"url\":\"https://docs.conseqa.umran.ca\",\"publisher\":{\"@id\":\"https://docs.conseqa.umran.ca/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.conseqa.umran.ca/concepts/data-models-and-outboxes#webpage\",\"url\":\"https://docs.conseqa.umran.ca/concepts/data-models-and-outboxes\",\"name\":\"Conseqa Data Models and Outboxes\",\"description\":\"DataModels are logical transactional state boundaries. DataObjects carry composite identity. Outboxes are typed logical message collections owned by a data model, atomically committed with their containing transaction.\",\"dateModified\":\"2026-09-10T12:30:37.496Z\",\"isPartOf\":{\"@id\":\"https://docs.conseqa.umran.ca#website\"},\"breadcrumb\":{\"@id\":\"https://docs.conseqa.umran.ca/concepts/data-models-and-outboxes#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.conseqa.umran.ca/concepts/data-models-and-outboxes#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Core Concepts\",\"item\":\"https://docs.conseqa.umran.ca/concepts/model-overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Conseqa Data Models and Outboxes\",\"item\":\"https://docs.conseqa.umran.ca/concepts/data-models-and-outboxes\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.conseqa.umran.ca/concepts/data-models-and-outboxes#article\",\"headline\":\"Conseqa Data Models and Outboxes\",\"name\":\"Conseqa Data Models and Outboxes\",\"description\":\"DataModels are logical transactional state boundaries. DataObjects carry composite identity. Outboxes are typed logical message collections owned by a data model, atomically committed with their containing transaction.\",\"url\":\"https://docs.conseqa.umran.ca/concepts/data-models-and-outboxes\",\"mainEntityOfPage\":{\"@id\":\"https://docs.conseqa.umran.ca/concepts/data-models-and-outboxes#webpage\"},\"dateModified\":\"2026-09-10T12:30:37.496Z\",\"publisher\":{\"@id\":\"https://docs.conseqa.umran.ca/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.conseqa.umran.ca#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Conseqa\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Conseqa","nav":{"global":null,"tabs":[{"tab":"Documentation","groups":[{"group":"Get Started","pages":[{"title":"Conseqa: Formal Proofs for Distributed Correctness","sidebarTitle":"Introduction","href":"/introduction"},{"title":"Quickstart: Verify Your First Conseqa Model in Minutes","sidebarTitle":"Quickstart","href":"/quickstart"},{"title":"Install Conseqa: Build from Source and Verify Setup","sidebarTitle":"Installation","href":"/installation"}]},{"group":"Core Concepts","pages":[{"title":"Conseqa Model Overview: Application Layer and Runtime Topology","sidebarTitle":"Model Overview","href":"/concepts/model-overview"},{"title":"Conseqa Services and Schemas Reference","sidebarTitle":"Services and Schemas","description":"Services are logical ownership boundaries with no execution-topology meaning. Schemas describe logical value shapes with scalar types, lists, optional flags, and fragment projections.","href":"/concepts/services-and-schemas"},{"title":"Conseqa Data Models and Outboxes","sidebarTitle":"Data Models and Outboxes","href":"/concepts/data-models-and-outboxes"},{"title":"Conseqa Operations: Inputs, Programs, and Effects","sidebarTitle":"Operations","description":"Operations are logical units of behavior with request, subscription, and outbox inputs. No operation-level concurrency exists; runtime concurrency lives in ExecutionPool.member_concurrency.","href":"/concepts/operations"},{"title":"Conseqa Transactions: Idempotency, Isolation, and Steps","sidebarTitle":"Transactions","href":"/concepts/transactions"},{"title":"Conseqa Topics: Logical Channels Without Runtime Facts","sidebarTitle":"Topics and Messaging","href":"/concepts/topics-and-messaging"},{"title":"Conseqa State Machines and Transition Side Effects","sidebarTitle":"State Machines","href":"/concepts/state-machines"},{"title":"Conseqa Operation Requirements: Serialization, Ordering, Idempotency, and Recoverability","sidebarTitle":"Requirements","href":"/concepts/requirements"}]},{"group":"Runtime Topology","pages":[{"title":"L1 Runtime Topology: How the Abstract Machine Runs","sidebarTitle":"Overview","href":"/runtime/overview"},{"title":"Topic and Subscription Runtime: Transport Semantics in Conseqa","sidebarTitle":"Topic \u0026 Subscription Runtime","href":"/runtime/topic-and-subscription-runtime"},{"title":"Outbox Runtime: Consumption and Dispatch Semantics","sidebarTitle":"Outbox Runtime","href":"/runtime/outbox-runtime"},{"title":"Routers and Execution Pools: Request Routing and Concurrency","sidebarTitle":"Routers \u0026 Pools","href":"/runtime/routers-and-pools"},{"title":"Storage Layouts: Physical Partitioning for Data Objects","sidebarTitle":"Storage Layouts","href":"/runtime/storage-layouts"}]},{"group":"DSL Reference","pages":[{"title":"Conseqa DSL Model Structure: All Top-Level Keys","sidebarTitle":"Model Structure","href":"/dsl/model-structure"},{"title":"Conseqa DSL Field Types, Scalars, and Schema Forms","sidebarTitle":"Field Types","href":"/dsl/field-types"},{"title":"Conseqa DSL Effects: Publication, Request, External","sidebarTitle":"Effects","href":"/dsl/effects"},{"title":"Conseqa Operation Program: All Steps and Control Flow","sidebarTitle":"Program Control","href":"/dsl/program-control"},{"title":"Async Effect Execution, Handles, and Synchronization Barriers","sidebarTitle":"Async Effects","href":"/dsl/async-effects"},{"title":"Value References, Field Paths, and Derivations DSL","sidebarTitle":"Value References","href":"/dsl/value-references"}]},{"group":"Verification","pages":[{"title":"How Conseqa Verifies Models: Validation, Forward Analysis, and Fixpoints","sidebarTitle":"How It Works","href":"/verification/how-it-works"},{"title":"Verification Verdicts: Proven, Unknown, and Disproven","sidebarTitle":"Verdicts","href":"/verification/verdicts"},{"title":"Obligation Report Format: JSON Structure and Fields","sidebarTitle":"Obligations Report","href":"/verification/obligations-report"}]},{"group":"Visualization","pages":[{"title":"Generate Interactive HTML Visualizations with conseqa-viz","sidebarTitle":"Overview","href":"/visualization/overview"},{"title":"System View: Services, Topics, Outboxes, and Routes in conseqa-viz","sidebarTitle":"System View","href":"/visualization/system-view"},{"title":"Operation View: Program Steps and Flow in conseqa-viz","sidebarTitle":"Operation View","href":"/visualization/operation-view"},{"title":"State Machine View: Lifecycle Diagrams in conseqa-viz","sidebarTitle":"State Machine View","href":"/visualization/state-machine-view"}]},{"group":"Guides","pages":[{"title":"Step-by-Step: Modeling a Flash-Sale Checkout in Conseqa","sidebarTitle":"Checkout Flow","href":"/guides/modeling-a-checkout-flow"},{"title":"Proving Idempotency Requirements in Conseqa Models","sidebarTitle":"Proving Idempotency","href":"/guides/proving-idempotency"},{"title":"Integrating Conseqa Verification into Your CI Pipeline","sidebarTitle":"CI Integration","href":"/guides/ci-integration"}]}]},{"tab":"CLI Reference","pages":[{"title":"CLI Reference","href":"/cli/conseqa"}]}]},"basePath":"","title":"Conseqa Data Models and Outboxes - Conseqa","buildId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","deploymentId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","dynamics":[],"chunks":[]}