[{"data":1,"prerenderedAt":4559},["ShallowReactive",2],{"navigation":3,"/guides/composition-runtime-cost":1197,"/guides/composition-runtime-cost-surround":4554},[4,45,67,118,136,209,230],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Use it","/use","00.use/1.index",[9,11,16,21,26,30,35,40],{"title":5,"path":6,"stem":7,"icon":10},"i-lucide-list-checks",{"title":12,"path":13,"stem":14,"icon":15},"Run a workflow from an assistant","/use/run-from-an-assistant","00.use/2.run-from-an-assistant","i-lucide-bot",{"title":17,"path":18,"stem":19,"icon":20},"Connect a cloud and use it","/use/connect-a-cloud","00.use/3.connect-a-cloud","i-lucide-cloud",{"title":22,"path":23,"stem":24,"icon":25},"Put Orkestia in your app","/use/in-your-app","00.use/4.in-your-app","i-lucide-key-round",{"title":27,"path":28,"stem":29,"icon":15},"Stand up an actor","/use/stand-up-an-actor","00.use/5.stand-up-an-actor",{"title":31,"path":32,"stem":33,"icon":34},"Operate a run","/use/operate-a-run","00.use/6.operate-a-run","i-lucide-activity",{"title":36,"path":37,"stem":38,"icon":39},"Work from the desktop app","/use/work-from-the-desktop-app","00.use/7.work-from-the-desktop-app","i-lucide-app-window",{"title":41,"path":42,"stem":43,"icon":44},"Let an agent use your browser","/use/let-an-agent-use-your-browser","00.use/8.let-an-agent-use-your-browser","i-lucide-globe",{"title":46,"path":47,"stem":48,"children":49,"icon":52},"Getting Started","/getting-started","02.getting-started/1.index",[50,53,58,63],{"title":51,"path":47,"stem":48,"icon":52},"Quick Start","i-lucide-rocket",{"title":54,"path":55,"stem":56,"icon":57},"Architecture Overview","/getting-started/architecture-overview","02.getting-started/2.architecture-overview","i-lucide-layout-dashboard",{"title":59,"path":60,"stem":61,"icon":62},"Concepts at a Glance","/getting-started/concepts","02.getting-started/3.concepts","i-lucide-list",{"title":64,"path":65,"stem":66,"icon":15},"Connect an AI Assistant","/getting-started/connect-an-ai-assistant","02.getting-started/4.connect-an-ai-assistant",{"title":68,"path":69,"stem":70,"children":71,"icon":73},"Guides","/guides","04.guides/1.index",[72,74,79,84,89,94,99,104,109,113],{"title":68,"path":69,"stem":70,"icon":73},"i-lucide-compass",{"title":75,"path":76,"stem":77,"icon":78},"Receive webhooks with a re-query","/guides/webhooks-with-requery","04.guides/10.webhooks-with-requery","i-lucide-webhook",{"title":80,"path":81,"stem":82,"icon":83},"Keep scheduled compositions cheap","/guides/composition-runtime-cost","04.guides/11.composition-runtime-cost","i-lucide-gauge",{"title":85,"path":86,"stem":87,"icon":88},"Building with DGI","/guides/building-with-dgi","04.guides/2.building-with-dgi","i-lucide-brain-circuit",{"title":90,"path":91,"stem":92,"icon":93},"Creating & Exposing Virtual Workflows","/guides/virtual-workflows","04.guides/4.virtual-workflows","i-lucide-blocks",{"title":95,"path":96,"stem":97,"icon":98},"Runner Management & Provisioning","/guides/runner-management","04.guides/5.runner-management","i-lucide-server",{"title":100,"path":101,"stem":102,"icon":103},"Security & Compliance","/guides/security-and-compliance","04.guides/7.security-and-compliance","i-lucide-shield",{"title":105,"path":106,"stem":107,"icon":108},"Tickets & Software Delivery","/guides/tickets-and-software-delivery","04.guides/8.tickets-and-software-delivery","i-lucide-ticket",{"title":110,"path":111,"stem":112},"Orkestia for AI-driven cloud infrastructure automation","/guides/cloud-automation-alternatives","04.guides/9.cloud-automation-alternatives",{"title":114,"path":115,"stem":116,"icon":117},"Typed decisions with TypeSafe","/guides/typed-decisions-with-typesafe","04.guides/9.typed-decisions-with-typesafe","i-lucide-git-branch",{"title":119,"path":120,"stem":121,"children":122,"icon":125},"Introduction","/introduction","01.introduction/1.index",[123,126,131],{"title":124,"path":120,"stem":121,"icon":125},"What is Orkestia?","i-lucide-sparkles",{"title":127,"path":128,"stem":129,"icon":130},"Core Philosophy","/introduction/core-philosophy","01.introduction/2.core-philosophy","i-lucide-shield-check",{"title":132,"path":133,"stem":134,"icon":135},"Key Benefits","/introduction/key-benefits","01.introduction/3.key-benefits","i-lucide-trophy",{"title":137,"path":138,"stem":139,"children":140,"icon":142},"Core Concepts","/concepts","03.concepts/01.index",[141,143,148,153,158,163,167,172,176,181,186,191,195,200,204],{"title":137,"path":138,"stem":139,"icon":142},"i-lucide-book-open",{"title":144,"path":145,"stem":146,"icon":147},"Workflows","/concepts/workflows","03.concepts/02.workflows","i-lucide-workflow",{"title":149,"path":150,"stem":151,"icon":152},"DGI — Dialog Generative Interface","/concepts/dgi","03.concepts/03.dgi","i-lucide-brain",{"title":154,"path":155,"stem":156,"icon":157},"How DGI works","/concepts/dgi-how-it-works","03.concepts/03.dgi-how-it-works","i-lucide-cpu",{"title":159,"path":160,"stem":161,"icon":162},"Staff & AI Workforce Governance","/concepts/staff-governance","03.concepts/04.staff-governance","i-lucide-users-round",{"title":164,"path":165,"stem":166,"icon":15},"Agents — the execution substrate","/concepts/agents-platform","03.concepts/05.agents-platform",{"title":168,"path":169,"stem":170,"icon":171},"Runners & Execution Environments","/concepts/runners","03.concepts/06.runners","i-lucide-server-cog",{"title":173,"path":174,"stem":175,"icon":34},"Lumen Observability","/concepts/lumen","03.concepts/07.lumen",{"title":177,"path":178,"stem":179,"icon":180},"Identity & Multi-Tenancy","/concepts/identity-multi-tenancy","03.concepts/08.identity-multi-tenancy","i-lucide-users",{"title":182,"path":183,"stem":184,"icon":185},"Billing, Pricing & Seats","/concepts/billing-and-seats","03.concepts/09.billing-and-seats","i-lucide-credit-card",{"title":187,"path":188,"stem":189,"icon":190},"App Data","/concepts/appdata","03.concepts/10.appdata","i-lucide-database",{"title":192,"path":193,"stem":194,"icon":152},"Engram","/concepts/engram","03.concepts/11.engram",{"title":196,"path":197,"stem":198,"icon":199},"DevKit","/concepts/devkit","03.concepts/12.devkit","i-lucide-terminal",{"title":201,"path":202,"stem":203,"icon":44},"App Host","/concepts/app-host","03.concepts/13.app-host",{"title":205,"path":206,"stem":207,"icon":208},"Agent Exchange","/concepts/agent-exchange","03.concepts/14.agent-exchange","i-lucide-landmark",{"title":210,"path":211,"stem":212,"children":213,"icon":215},"Reference","/reference","05.reference/1.index",[214,216,221,225],{"title":210,"path":211,"stem":212,"icon":215},"i-lucide-library",{"title":217,"path":218,"stem":219,"icon":220},"MCP Integration","/reference/mcp-integration","05.reference/3.mcp-integration","i-lucide-plug-zap",{"title":222,"path":223,"stem":224,"icon":199},"API & Tooling","/reference/api-tooling","05.reference/4.api-tooling",{"title":226,"path":227,"stem":228,"icon":229},"Platform Services","/reference/platform-services","05.reference/7.platform-services","i-lucide-boxes",{"title":231,"path":232,"icon":215,"children":233},"Product pages","/product-pages",[234,261,282,311,346,369,412,439,472,495,565,590,636,650,672,742,785,808,820,910,938,986,1013,1049,1135,1153,1165,1184,1191],{"title":235,"path":236,"stem":237,"children":238,"icon":240},"Advanced Topics","/advanced","06.advanced/1.index",[239,241,246,251,256],{"title":235,"path":236,"stem":237,"icon":240},"i-lucide-flask-conical",{"title":242,"path":243,"stem":244,"icon":245},"Hybrid AI + Deterministic Execution","/advanced/hybrid-execution-model","06.advanced/2.hybrid-execution-model","i-lucide-git-merge",{"title":247,"path":248,"stem":249,"icon":250},"Drift Detection & Self-Healing","/advanced/drift-detection-self-healing","06.advanced/3.drift-detection-self-healing","i-lucide-heart-pulse",{"title":252,"path":253,"stem":254,"icon":255},"Governance & Approvals","/advanced/governance-and-approvals","06.advanced/4.governance-and-approvals","i-lucide-scale",{"title":257,"path":258,"stem":259,"icon":260},"Cost & Performance Optimization","/advanced/cost-and-performance","06.advanced/5.cost-and-performance","i-lucide-zap",{"title":262,"path":263,"stem":264,"children":265,"icon":267},"Operations","/operations","07.operations/1.index",[266,268,272,277],{"title":262,"path":263,"stem":264,"icon":267},"i-lucide-settings-2",{"title":269,"path":270,"stem":271,"icon":229},"Deployment Models","/operations/deployment-models","07.operations/2.deployment-models",{"title":273,"path":274,"stem":275,"icon":276},"Monitoring & Debugging","/operations/monitoring-and-debugging","07.operations/3.monitoring-and-debugging","i-lucide-bug",{"title":278,"path":279,"stem":280,"icon":281},"Best Practices","/operations/best-practices","07.operations/4.best-practices","i-lucide-check-check",{"title":283,"path":284,"stem":285,"children":286,"icon":288},"AWS Connections","/aws-connections","08.aws-connections/1.index",[287,289,292,297,302,307],{"title":283,"path":284,"stem":285,"icon":288},"i-simple-icons-amazonaws",{"title":46,"path":290,"stem":291,"icon":52},"/aws-connections/getting-started","08.aws-connections/2.getting-started",{"title":293,"path":294,"stem":295,"icon":296},"Setup Methods","/aws-connections/setup-methods","08.aws-connections/3.setup-methods","i-lucide-wrench",{"title":298,"path":299,"stem":300,"icon":301},"Managing Connections","/aws-connections/managing-connections","08.aws-connections/4.managing-connections","i-lucide-settings",{"title":303,"path":304,"stem":305,"icon":306},"Security Best Practices","/aws-connections/security-best-practices","08.aws-connections/5.security-best-practices","i-lucide-lock",{"title":308,"path":309,"stem":310,"icon":276},"Troubleshooting","/aws-connections/troubleshooting","08.aws-connections/6.troubleshooting",{"title":312,"path":313,"stem":314,"children":315,"icon":317},"Cloud Connections","/cloud-connections","09.cloud-connections/1.index",[316,318,323,328,332,337,341],{"title":312,"path":313,"stem":314,"icon":317},"i-lucide-cable",{"title":319,"path":320,"stem":321,"icon":322},"Google Cloud (GCP)","/cloud-connections/gcp","09.cloud-connections/2.gcp","i-simple-icons-googlecloud",{"title":324,"path":325,"stem":326,"icon":327},"Microsoft Azure","/cloud-connections/azure","09.cloud-connections/3.azure","i-simple-icons-microsoftazure",{"title":329,"path":330,"stem":331,"icon":20},"Magalu Cloud","/cloud-connections/magalu","09.cloud-connections/4.magalu",{"title":333,"path":334,"stem":335,"icon":336},"Kubernetes","/cloud-connections/kubernetes","09.cloud-connections/5.kubernetes","i-simple-icons-kubernetes",{"title":338,"path":339,"stem":340,"icon":255},"TypeSafe","/cloud-connections/typesafe","09.cloud-connections/6.typesafe",{"title":342,"path":343,"stem":344,"icon":345},"Email mailboxes","/cloud-connections/email","09.cloud-connections/7.email","i-lucide-mail",{"title":347,"path":348,"stem":349,"children":350,"icon":98},"DNS Providers","/dns-providers","10.dns-providers/1.index",[351,353,356,359,362,366],{"title":352,"path":348,"stem":349,"icon":98},"DNS Provider Connections",{"title":46,"path":354,"stem":355,"icon":52},"/dns-providers/getting-started","10.dns-providers/2.getting-started",{"title":293,"path":357,"stem":358,"icon":296},"/dns-providers/setup-methods","10.dns-providers/3.setup-methods",{"title":298,"path":360,"stem":361,"icon":301},"/dns-providers/managing-connections","10.dns-providers/4.managing-connections",{"title":363,"path":364,"stem":365,"icon":62},"Zones and Records","/dns-providers/zones-and-records","10.dns-providers/5.zones-and-records",{"title":308,"path":367,"stem":368,"icon":276},"/dns-providers/troubleshooting","10.dns-providers/6.troubleshooting",{"title":370,"path":371,"stem":372,"children":373,"icon":52},"Cloud Deploy","/cloud-deploy","11.cloud-deploy/01.index",[374,375,378,383,387,392,396,400,405,409],{"title":370,"path":371,"stem":372,"icon":52},{"title":46,"path":376,"stem":377,"icon":52},"/cloud-deploy/getting-started","11.cloud-deploy/02.getting-started",{"title":379,"path":380,"stem":381,"icon":382},"Creating a Site","/cloud-deploy/creating-a-site","11.cloud-deploy/03.creating-a-site","i-lucide-plus-circle",{"title":384,"path":385,"stem":386,"icon":57},"Site Overview and Deployments","/cloud-deploy/site-overview","11.cloud-deploy/04.site-overview",{"title":388,"path":389,"stem":390,"icon":391},"Deployment Progress and Success","/cloud-deploy/deployment-progress","11.cloud-deploy/05.deployment-progress","i-lucide-loader",{"title":393,"path":394,"stem":395,"icon":301},"Settings","/cloud-deploy/settings","11.cloud-deploy/06.settings",{"title":397,"path":398,"stem":399,"icon":44},"Custom Domains","/cloud-deploy/custom-domains","11.cloud-deploy/07.custom-domains",{"title":401,"path":402,"stem":403,"icon":404},"Resources, Releases, and Danger Zone","/cloud-deploy/resources-releases","11.cloud-deploy/08.resources-releases","i-lucide-package",{"title":406,"path":407,"stem":408,"icon":103},"Admin Dashboard","/cloud-deploy/admin-dashboard","11.cloud-deploy/09.admin-dashboard",{"title":308,"path":410,"stem":411,"icon":276},"/cloud-deploy/troubleshooting","11.cloud-deploy/10.troubleshooting",{"title":413,"path":414,"stem":415,"children":416,"icon":419},"User Onboarding","/user-onboarding","12.user-onboarding/1.index",[417,420,423,428,432,436],{"title":418,"path":414,"stem":415,"icon":419},"User Creation and Onboarding","i-lucide-user-plus",{"title":46,"path":421,"stem":422,"icon":52},"/user-onboarding/getting-started","12.user-onboarding/2.getting-started",{"title":424,"path":425,"stem":426,"icon":427},"Creating Your Organization","/user-onboarding/onboarding","12.user-onboarding/3.onboarding","i-lucide-building-2",{"title":429,"path":430,"stem":431,"icon":345},"Invitations","/user-onboarding/invitations","12.user-onboarding/4.invitations",{"title":433,"path":434,"stem":435,"icon":301},"Managing Your Account","/user-onboarding/managing-account","12.user-onboarding/5.managing-account",{"title":308,"path":437,"stem":438,"icon":276},"/user-onboarding/troubleshooting","12.user-onboarding/6.troubleshooting",{"title":393,"path":440,"stem":441,"children":442,"icon":444},"/settings","13.settings/1.index",[443,445,450,454,459,463,467],{"title":393,"path":440,"stem":441,"icon":444},"i-lucide-sliders-horizontal",{"title":446,"path":447,"stem":448,"icon":449},"General Settings","/settings/general","13.settings/2.general","i-lucide-user",{"title":451,"path":452,"stem":453,"icon":180},"Members Settings","/settings/members","13.settings/3.members",{"title":455,"path":456,"stem":457,"icon":458},"Notifications Settings","/settings/notifications","13.settings/4.notifications","i-lucide-bell",{"title":460,"path":461,"stem":462,"icon":103},"Security Settings","/settings/security","13.settings/5.security",{"title":464,"path":465,"stem":466,"icon":25},"Signing Keys","/settings/keys","13.settings/6.keys",{"title":468,"path":469,"stem":470,"icon":471},"API Tokens","/settings/api-tokens","13.settings/7.api-tokens","i-lucide-key",{"title":473,"path":474,"stem":475,"children":476,"icon":52},"App Enablement","/app-enablement","14.app-enablement/1.index",[477,478,482,486,490],{"title":473,"path":474,"stem":475,"icon":52},{"title":479,"path":480,"stem":481,"icon":25},"Sign in with Orkestia","/app-enablement/sign-in-with-orkestia","14.app-enablement/2.sign-in-with-orkestia",{"title":483,"path":484,"stem":485,"icon":190},"End-user data","/app-enablement/end-user-data","14.app-enablement/3.end-user-data",{"title":487,"path":488,"stem":489,"icon":93},"Compositions — use, invoke, share","/app-enablement/compositions","14.app-enablement/4.compositions",{"title":491,"path":492,"stem":493,"icon":494},"Scoped SQL on your own database","/app-enablement/scoped-sql","14.app-enablement/5.scoped-sql","i-lucide-database-zap",{"title":496,"path":497,"stem":498,"children":499,"icon":34},"Lumen","/lumen","15.lumen/1.index",[500,501,506,510,515,519,523,527,532,537,542,546,550,555,560],{"title":496,"path":497,"stem":498,"icon":34},{"title":502,"path":503,"stem":504,"icon":505},"Explore and correlate","/lumen/explore-and-correlate","15.lumen/10.explore-and-correlate","i-lucide-link-2",{"title":507,"path":508,"stem":509,"icon":125},"AI analytics in the Cockpit app","/lumen/ai-analytics-in-cockpit","15.lumen/11.ai-analytics-in-cockpit",{"title":511,"path":512,"stem":513,"icon":514},"Pulse in the Cockpit app","/lumen/pulse-in-cockpit","15.lumen/12.pulse-in-cockpit","i-lucide-bar-chart-3",{"title":516,"path":517,"stem":518,"icon":444},"Rules in the Cockpit app","/lumen/rules-in-cockpit","15.lumen/13.rules-in-cockpit",{"title":520,"path":521,"stem":522,"icon":185},"Plans, usage and API keys in the Cockpit app","/lumen/plans-usage-and-keys","15.lumen/14.plans-usage-and-keys",{"title":524,"path":525,"stem":526,"icon":267},"Settings and bulk actions","/lumen/settings-and-bulk-actions","15.lumen/15.settings-and-bulk-actions",{"title":528,"path":529,"stem":530,"icon":531},"Enable Lumen","/lumen/enable","15.lumen/2.enable","i-lucide-power",{"title":533,"path":534,"stem":535,"icon":536},"Send data","/lumen/send-data","15.lumen/3.send-data","i-lucide-upload",{"title":538,"path":539,"stem":540,"icon":541},"Collector","/lumen/collector","15.lumen/4.collector","i-lucide-container",{"title":543,"path":544,"stem":545,"icon":57},"Use Lumen","/lumen/observe","15.lumen/5.observe",{"title":547,"path":548,"stem":549,"icon":15},"Lumen MCP","/lumen/mcp","15.lumen/6.mcp",{"title":551,"path":552,"stem":553,"icon":554},"Query API","/lumen/query-api","15.lumen/7.query-api","i-lucide-search",{"title":556,"path":557,"stem":558,"icon":559},"Lumen in the Cockpit app","/lumen/cockpit-mode","15.lumen/8.cockpit-mode","i-lucide-monitor-smartphone",{"title":561,"path":562,"stem":563,"icon":564},"Dashboards in the Cockpit app","/lumen/dashboards-in-cockpit","15.lumen/9.dashboards-in-cockpit","i-lucide-layout-grid",{"title":566,"path":567,"stem":568,"children":569,"icon":571},"SDKs","/sdks","16.sdks/1.index",[570,572,577,582,586],{"title":566,"path":567,"stem":568,"icon":571},"i-lucide-code",{"title":573,"path":574,"stem":575,"icon":576},"Workflows SDK — Node / TypeScript","/sdks/workflows-nodejs","16.sdks/2.workflows-nodejs","i-lucide-file-ts",{"title":578,"path":579,"stem":580,"icon":581},"Workflows SDK — Python","/sdks/workflows-python","16.sdks/3.workflows-python","i-simple-icons-python",{"title":583,"path":584,"stem":585,"icon":25},"Auth SDK — Sign in with Orkestia","/sdks/auth","16.sdks/4.auth",{"title":587,"path":588,"stem":589,"icon":514},"Pulse SDK — product analytics for your app","/sdks/lumen-pulse","16.sdks/5.lumen-pulse",{"title":187,"path":591,"stem":592,"children":593,"icon":190},"/appdata","17.appdata/1.index",[594,595,599,604,609,613,617,622,627,632],{"title":187,"path":591,"stem":592,"icon":190},{"title":596,"path":597,"stem":598,"icon":15},"Agents over App Data","/appdata/end-user-agents","17.appdata/10.end-user-agents",{"title":600,"path":601,"stem":602,"icon":603},"Declare structures","/appdata/declare","17.appdata/2.declare","i-lucide-table",{"title":605,"path":606,"stem":607,"icon":608},"Records & Data API","/appdata/data-api","17.appdata/3.data-api","i-lucide-rows-3",{"title":610,"path":611,"stem":612,"icon":427},"Ownership & workspaces","/appdata/ownership","17.appdata/4.ownership",{"title":614,"path":615,"stem":616,"icon":39},"Expose App Data to end-users","/appdata/expose","17.appdata/5.expose",{"title":618,"path":619,"stem":620,"icon":621},"PostgREST HTTP","/appdata/postgrest","17.appdata/6.postgrest","i-lucide-unplug",{"title":623,"path":624,"stem":625,"icon":626},"Ordered append","/appdata/append","17.appdata/7.append","i-lucide-list-ordered",{"title":628,"path":629,"stem":630,"icon":631},"Databases and instances","/appdata/instances","17.appdata/8.instances","i-lucide-hard-drive",{"title":633,"path":634,"stem":635,"icon":199},"Query console and SQL","/appdata/query","17.appdata/9.query",{"title":192,"path":637,"stem":638,"children":639,"icon":152},"/engram","18.engram/1.index",[640,641,645],{"title":192,"path":637,"stem":638,"icon":152},{"title":642,"path":643,"stem":644,"icon":117},"Write & recall","/engram/write-recall","18.engram/2.write-recall",{"title":646,"path":647,"stem":648,"icon":649},"Field & feed","/engram/agent-memory","18.engram/3.agent-memory","i-lucide-radio",{"title":196,"path":651,"stem":652,"children":653,"icon":199},"/devkit","19.devkit/1.index",[654,655,660,664,668],{"title":196,"path":651,"stem":652,"icon":199},{"title":656,"path":657,"stem":658,"icon":659},"Install DevKit","/devkit/install","19.devkit/2.install","i-lucide-download",{"title":661,"path":662,"stem":663,"icon":621},"Hook redirect","/devkit/hooks","19.devkit/3.hooks",{"title":665,"path":666,"stem":667,"icon":157},"Local coding runner","/devkit/local-runner","19.devkit/4.local-runner",{"title":669,"path":670,"stem":671,"icon":93},"Compositions from DevKit","/devkit/compositions","19.devkit/5.compositions",{"title":673,"path":674,"stem":675,"children":676,"icon":15},"Staff & Agents","/staff-and-agents","20.staff-and-agents/01.index",[677,678,682,686,690,694,698,702,706,711,715,720,725,729,732,737],{"title":673,"path":674,"stem":675,"icon":15},{"title":679,"path":680,"stem":681,"icon":10},"Prerequisites","/staff-and-agents/prerequisites","20.staff-and-agents/02.prerequisites",{"title":683,"path":684,"stem":685,"icon":419},"Hire an actor","/staff-and-agents/hire-an-actor","20.staff-and-agents/03.hire-an-actor",{"title":687,"path":688,"stem":689,"icon":57},"Console","/staff-and-agents/console","20.staff-and-agents/04.console",{"title":691,"path":692,"stem":693,"icon":125},"Configs, skills, and MCP","/staff-and-agents/configs-skills-mcp","20.staff-and-agents/05.configs-skills-mcp",{"title":695,"path":696,"stem":697,"icon":98},"Agent runner groups","/staff-and-agents/runner-groups","20.staff-and-agents/06.runner-groups",{"title":699,"path":700,"stem":701,"icon":130},"Governance","/staff-and-agents/governance","20.staff-and-agents/07.governance",{"title":703,"path":704,"stem":705,"icon":25},"Identity and tokens","/staff-and-agents/identity","20.staff-and-agents/08.identity",{"title":707,"path":708,"stem":709,"icon":710},"Memory and cost","/staff-and-agents/memory-and-cost","20.staff-and-agents/09.memory-and-cost","i-lucide-wallet",{"title":712,"path":713,"stem":714,"icon":117},"Coding agents","/staff-and-agents/coding-agents","20.staff-and-agents/10.coding-agents",{"title":716,"path":717,"stem":718,"icon":719},"Wire a repository for coding agents","/staff-and-agents/wire-a-repository","20.staff-and-agents/11.wire-a-repository","i-lucide-link",{"title":721,"path":722,"stem":723,"icon":724},"Run a ticket end to end","/staff-and-agents/run-a-ticket","20.staff-and-agents/12.run-a-ticket","i-lucide-play",{"title":726,"path":727,"stem":728,"icon":162},"Build a product team of actors","/staff-and-agents/build-a-product-team","20.staff-and-agents/13.build-a-product-team",{"title":308,"path":730,"stem":731,"icon":296},"/staff-and-agents/troubleshooting","20.staff-and-agents/14.troubleshooting",{"title":733,"path":734,"stem":735,"icon":736},"Media actors","/staff-and-agents/media-actors","20.staff-and-agents/15.media-actors","i-lucide-clapperboard",{"title":738,"path":739,"stem":740,"icon":741},"Agents that serve people","/staff-and-agents/agents-that-serve-people","20.staff-and-agents/16.agents-that-serve-people","i-lucide-hand-helping",{"title":201,"path":743,"stem":744,"children":745,"icon":44},"/app-host","21.app-host/1.index",[746,747,752,756,759,764,768,773,777,781],{"title":201,"path":743,"stem":744,"icon":44},{"title":748,"path":749,"stem":750,"icon":751},"Static egress IP","/app-host/static-egress-ip","21.app-host/10.static-egress-ip","i-lucide-network",{"title":753,"path":754,"stem":755,"icon":39},"Your app and site","/app-host/your-app","21.app-host/2.your-app",{"title":187,"path":757,"stem":758,"icon":190},"/app-host/app-data","21.app-host/3.app-data",{"title":760,"path":761,"stem":762,"icon":763},"Website and process","/app-host/hosting","21.app-host/4.hosting","i-lucide-cloud-upload",{"title":765,"path":766,"stem":767,"icon":649},"Buzz","/app-host/buzz","21.app-host/5.buzz",{"title":769,"path":770,"stem":771,"icon":772},"Files","/app-host/files","21.app-host/6.files","i-lucide-folder",{"title":774,"path":775,"stem":776,"icon":44},"Your own domain","/app-host/your-domain","21.app-host/7.your-domain",{"title":778,"path":779,"stem":780,"icon":276},"Troubleshooting App Host","/app-host/troubleshooting","21.app-host/8.troubleshooting",{"title":782,"path":783,"stem":784,"icon":25},"Signing keys","/app-host/signing-keys","21.app-host/9.signing-keys",{"title":205,"path":786,"stem":787,"children":788,"icon":208},"/agent-exchange","22.agent-exchange/01.index",[789,790,793,797,801,805],{"title":205,"path":786,"stem":787,"icon":208},{"title":683,"path":791,"stem":792,"icon":419},"/agent-exchange/hire","22.agent-exchange/02.hire",{"title":794,"path":795,"stem":796,"icon":255},"List an actor","/agent-exchange/list","22.agent-exchange/03.list",{"title":798,"path":799,"stem":800,"icon":199},"Invoke & leases","/agent-exchange/invoke","22.agent-exchange/04.invoke",{"title":802,"path":803,"stem":804,"icon":103},"Settlement & trust","/agent-exchange/settlement","22.agent-exchange/05.settlement",{"title":144,"path":806,"stem":807,"icon":147},"/agent-exchange/workflows","22.agent-exchange/06.workflows",{"title":809,"path":810,"stem":811,"children":812,"icon":171},"Runners","/runners","23.runners/1.index",[813,815],{"title":814,"path":810,"stem":811,"icon":171},"Runner groups",{"title":816,"path":817,"stem":818,"icon":819},"Purposes & integrations","/runners/purposes","23.runners/16.purposes","i-lucide-layers",{"title":821,"path":822,"stem":823,"children":824,"icon":826},"Chat","/chat","24.chat/01.index",[825,827,831,836,840,845,850,854,859,863,868,873,877,882,887,891,895,900,905],{"title":821,"path":822,"stem":823,"icon":826},"i-lucide-messages-square",{"title":828,"path":829,"stem":830,"icon":531},"Enable and publish","/chat/enable-and-publish","24.chat/02.enable-and-publish",{"title":832,"path":833,"stem":834,"icon":835},"Theme and customization","/chat/theme-and-customization","24.chat/03.theme-and-customization","i-lucide-palette",{"title":837,"path":838,"stem":839,"icon":180},"Members and moderation","/chat/members-and-moderation","24.chat/04.members-and-moderation",{"title":841,"path":842,"stem":843,"icon":844},"Channels","/chat/channels","24.chat/05.channels","i-lucide-hash",{"title":846,"path":847,"stem":848,"icon":849},"Using the chat","/chat/using-the-chat","24.chat/06.using-the-chat","i-lucide-message-circle",{"title":851,"path":852,"stem":853,"icon":15},"Actors in chat","/chat/actors-in-chat","24.chat/07.actors-in-chat",{"title":855,"path":856,"stem":857,"icon":858},"Internal support actor","/chat/internal-support-actor","24.chat/08.internal-support-actor","i-lucide-life-buoy",{"title":860,"path":861,"stem":862,"icon":199},"API and console","/chat/api-and-console","24.chat/09.api-and-console",{"title":864,"path":865,"stem":866,"icon":867},"Limits","/chat/limits","24.chat/10.limits","i-lucide-triangle-alert",{"title":869,"path":870,"stem":871,"icon":872},"Structured chat with DGI","/chat/structured-chat","24.chat/11.structured-chat","i-lucide-layout-list",{"title":874,"path":875,"stem":876,"icon":44},"Option A: hosted chat with DGI","/chat/option-a-hosted-chat","24.chat/12.option-a-hosted-chat",{"title":878,"path":879,"stem":880,"icon":881},"Option B: embed the chat component","/chat/option-b-embed-component","24.chat/13.option-b-embed-component","i-lucide-component",{"title":883,"path":884,"stem":885,"icon":886},"Option C: custom client (wire contract)","/chat/option-c-custom-client","24.chat/14.option-c-custom-client","i-lucide-braces",{"title":888,"path":889,"stem":890,"icon":649},"Cards, live updates and proactive posts","/chat/cards-live-and-proactive","24.chat/16.cards-live-and-proactive",{"title":892,"path":893,"stem":894,"icon":130},"Structured chat security model","/chat/structured-chat-security","24.chat/17.structured-chat-security",{"title":896,"path":897,"stem":898,"icon":899},"Option D: any app or API (dgi.chat)","/chat/option-d-chat-api","24.chat/18.option-d-chat-api","i-lucide-plug",{"title":901,"path":902,"stem":903,"icon":904},"Living Surfaces","/chat/living-surfaces","24.chat/20.living-surfaces","i-lucide-sprout",{"title":906,"path":907,"stem":908,"icon":909},"Connect your WhatsApp number","/chat/whatsapp","24.chat/21.whatsapp","i-lucide-phone",{"title":911,"path":912,"stem":913,"children":914,"icon":152},"DGI","/dgi","25.dgi/1.index",[915,917,921,925,929,933],{"title":916,"path":912,"stem":913,"icon":152},"What is DGI",{"title":154,"path":918,"stem":919,"icon":920},"/dgi/how-it-works","25.dgi/2.how-it-works","i-lucide-cog",{"title":922,"path":923,"stem":924,"icon":564},"Interfaces","/dgi/interfaces","25.dgi/3.interfaces",{"title":926,"path":927,"stem":928,"icon":52},"Quickstart","/dgi/quickstart","25.dgi/4.quickstart",{"title":930,"path":931,"stem":932,"icon":130},"Trust and safety","/dgi/trust-and-safety","25.dgi/5.trust-and-safety",{"title":934,"path":935,"stem":936,"icon":937},"FAQ","/dgi/faq","25.dgi/6.faq","i-lucide-circle-help",{"title":939,"path":940,"stem":941,"children":942,"icon":736},"Media","/media","26.media/01.index",[943,944,948,953,957,962,967,971,975,979,982],{"title":939,"path":940,"stem":941,"icon":736},{"title":945,"path":946,"stem":947,"icon":899},"Set up the studio","/media/set-up","26.media/02.set-up",{"title":949,"path":950,"stem":951,"icon":952},"Files, covers and looks","/media/files-covers-and-looks","26.media/03.files-covers-and-looks","i-lucide-images",{"title":841,"path":954,"stem":955,"icon":956},"/media/channels","26.media/04.channels","i-lucide-tv",{"title":958,"path":959,"stem":960,"icon":961},"Posts and review","/media/posts-and-review","26.media/05.posts-and-review","i-lucide-send",{"title":963,"path":964,"stem":965,"icon":966},"Video templates","/media/video-templates","26.media/06.video-templates","i-lucide-film",{"title":968,"path":969,"stem":970,"icon":736},"Render videos","/media/render-videos","26.media/07.render-videos",{"title":972,"path":973,"stem":974,"icon":571},"Templates as code","/media/templates-as-code","26.media/08.templates-as-code",{"title":976,"path":977,"stem":978,"icon":15},"Agents and media","/media/agents-and-media","26.media/09.agents-and-media",{"title":210,"path":980,"stem":981,"icon":142},"/media/reference","26.media/10.reference",{"title":983,"path":984,"stem":985,"icon":858},"Limits and troubleshooting","/media/limits-and-troubleshooting","26.media/11.limits-and-troubleshooting",{"title":987,"path":988,"stem":989,"children":990,"icon":992},"Vault","/vault","27.vault/01.index",[991,993,997,1001,1005,1010],{"title":987,"path":988,"stem":989,"icon":992},"i-lucide-vault",{"title":994,"path":995,"stem":996,"icon":25},"Secrets","/vault/secrets","27.vault/02.secrets",{"title":998,"path":999,"stem":1000,"icon":130},"Access policies","/vault/access-policies","27.vault/03.access-policies",{"title":1002,"path":1003,"stem":1004,"icon":961},"API access","/vault/api-access","27.vault/04.api-access",{"title":1006,"path":1007,"stem":1008,"icon":1009},"Audit log and keys","/vault/audit-and-keys","27.vault/05.audit-and-keys","i-lucide-scroll-text",{"title":210,"path":1011,"stem":1012,"icon":142},"/vault/reference","27.vault/06.reference",{"title":1014,"path":1015,"stem":1016,"children":1017,"icon":39},"Build apps","/build-apps","28.build-apps/01.index",[1018,1019,1023,1028,1032,1036,1040,1045],{"title":1014,"path":1015,"stem":1016,"icon":39},{"title":1020,"path":1021,"stem":1022,"icon":147},"Backend","/build-apps/backend","28.build-apps/02.backend",{"title":1024,"path":1025,"stem":1026,"icon":1027},"Modules and feature flags","/build-apps/modules-and-feature-flags","28.build-apps/03.modules-and-feature-flags","i-lucide-toggle-right",{"title":1029,"path":1030,"stem":1031,"icon":117},"Environments","/build-apps/environments","28.build-apps/04.environments",{"title":1033,"path":1034,"stem":1035,"icon":83},"Pricing and limits","/build-apps/pricing-and-limits","28.build-apps/05.pricing-and-limits",{"title":1037,"path":1038,"stem":1039,"icon":162},"Workspaces","/build-apps/workspaces","28.build-apps/06.workspaces",{"title":1041,"path":1042,"stem":1043,"icon":1044},"End-user authoring","/build-apps/end-user-authoring","28.build-apps/07.end-user-authoring","i-lucide-pencil-ruler",{"title":1046,"path":1047,"stem":1048,"icon":34},"Operate","/build-apps/operate","28.build-apps/08.operate",{"title":1050,"path":1051,"stem":1052,"children":1053,"icon":39},"Cockpit app","/cockpit","28.cockpit/1.index",[1054,1055,1060,1064,1068,1072,1076,1080,1084,1088,1092,1096,1100,1105,1110,1114,1118,1122,1127,1132],{"title":1050,"path":1051,"stem":1052,"icon":39},{"title":1056,"path":1057,"stem":1058,"icon":1059},"Overview, Decisions and Activity","/cockpit/overview-decisions-activity","28.cockpit/10.overview-decisions-activity","i-lucide-inbox",{"title":1061,"path":1062,"stem":1063,"icon":108},"Tickets","/cockpit/tickets","28.cockpit/11.tickets",{"title":1065,"path":1066,"stem":1067,"icon":147},"Workflows builder","/cockpit/workflows-builder","28.cockpit/12.workflows-builder",{"title":1069,"path":1070,"stem":1071,"icon":15},"Agents and Coding","/cockpit/agents-and-coding","28.cockpit/13.agents-and-coding",{"title":1073,"path":1074,"stem":1075,"icon":39},"Runners and Connections","/cockpit/apps-runners-connections","28.cockpit/14.apps-runners-connections",{"title":1077,"path":1078,"stem":1079,"icon":427},"Organization — people, access and cost","/cockpit/organization-people-access-cost","28.cockpit/15.organization-people-access-cost",{"title":1081,"path":1082,"stem":1083,"icon":899},"AI tools and MCP","/cockpit/ai-tools-and-mcp","28.cockpit/16.ai-tools-and-mcp",{"title":1085,"path":1086,"stem":1087,"icon":826},"App chats and shared chats","/cockpit/app-chats","28.cockpit/17.app-chats",{"title":1089,"path":1090,"stem":1091,"icon":564},"Apps mode","/cockpit/apps-mode","28.cockpit/18.apps-mode",{"title":1093,"path":1094,"stem":1095,"icon":83},"App infrastructure","/cockpit/app-infrastructure","28.cockpit/19.app-infrastructure",{"title":1097,"path":1098,"stem":1099,"icon":659},"Install and sign in","/cockpit/install-and-sign-in","28.cockpit/2.install-and-sign-in",{"title":1101,"path":1102,"stem":1103,"icon":1104},"App files, settings and flags","/cockpit/app-files-settings-flags","28.cockpit/20.app-files-settings-flags","i-lucide-folder-cog",{"title":1106,"path":1107,"stem":1108,"icon":1109},"Cards in the chat","/cockpit/chat-cards","28.cockpit/21.chat-cards","i-lucide-layout-panel-left",{"title":1111,"path":1112,"stem":1113,"icon":229},"App modules","/cockpit/app-modules","28.cockpit/22.app-modules",{"title":1115,"path":1116,"stem":1117,"icon":117},"App environments","/cockpit/app-environments","28.cockpit/23.app-environments",{"title":1119,"path":1120,"stem":1121,"icon":125},"First run and onboarding","/cockpit/first-run-onboarding","28.cockpit/3.first-run-onboarding",{"title":1123,"path":1124,"stem":1125,"icon":1126},"Navigation and shortcuts","/cockpit/navigation-and-shortcuts","28.cockpit/4.navigation-and-shortcuts","i-lucide-keyboard",{"title":1128,"path":1129,"stem":1130,"icon":1131},"About, settings and updates","/cockpit/about-settings-and-updates","28.cockpit/5.about-settings-and-updates","i-lucide-info",{"title":308,"path":1133,"stem":1134,"icon":858},"/cockpit/troubleshooting","28.cockpit/6.troubleshooting",{"title":1136,"path":1137,"stem":1138,"children":1139,"icon":1141},"CRM","/crm","29.crm/01.index",[1140,1142,1146,1150],{"title":1136,"path":1137,"stem":1138,"icon":1141},"i-lucide-contact",{"title":1143,"path":1144,"stem":1145,"icon":180},"Contacts and leads","/crm/contacts-and-leads","29.crm/02.contacts-and-leads",{"title":1147,"path":1148,"stem":1149,"icon":130},"Privacy and erasure","/crm/privacy-and-erasure","29.crm/03.privacy-and-erasure",{"title":210,"path":1151,"stem":1152,"icon":142},"/crm/reference","29.crm/04.reference",{"title":1154,"path":1155,"stem":1156,"children":1157,"icon":631},"Storage","/storage","29.storage/1.index",[1158,1160],{"title":1159,"path":1155,"stem":1156,"icon":631},"Orkestia storage",{"title":1161,"path":1162,"stem":1163,"icon":1164},"Where to use it","/storage/where-to-use","29.storage/2.where-to-use","i-lucide-map",{"title":1166,"path":1167,"stem":1168,"children":1169,"icon":44},"Browser","/browser","30.browser/01.index",[1170,1172,1176,1180],{"title":1171,"path":1167,"stem":1168,"icon":44},"Orkestia Browser",{"title":1173,"path":1174,"stem":1175,"icon":899},"Connect your Chrome","/browser/connect","30.browser/02.connect",{"title":1177,"path":1178,"stem":1179,"icon":130},"Sessions and approvals","/browser/sessions-and-approvals","30.browser/03.sessions-and-approvals",{"title":1181,"path":1182,"stem":1183,"icon":296},"Agent tools","/browser/agent-tools","30.browser/04.agent-tools",{"title":1185,"path":1186,"stem":1187,"children":1188,"icon":541},"Registry","/registry","31.registry/1.index",[1189],{"title":1190,"path":1186,"stem":1187,"icon":541},"Orkestia Registry",{"title":1192,"path":1193,"stem":1194,"children":1195,"icon":404},"Packages and Git","/packages-and-git","32.packages-and-git/1.index",[1196],{"title":1192,"path":1193,"stem":1194,"icon":404},{"id":1198,"title":80,"body":1199,"description":4547,"extension":4548,"links":4549,"meta":4550,"navigation":4551,"path":81,"seo":4552,"stem":82,"__hash__":4553},"docs/04.guides/11.composition-runtime-cost.md",{"type":1200,"value":1201,"toc":4536},"minimark",[1202,1215,1218,1285,1288,1293,1395,1402,1406,1428,1431,1543,1606,1654,1664,1668,1671,1684,1862,1870,2078,2186,2192,2769,2778,2781,2839,2843,2846,2866,3853,3909,3922,3925,3929,3954,3967,4009,4023,4027,4088,4092,4107,4292,4341,4373,4415,4419,4429,4509,4513,4532],[1203,1204,1205,1206,1209,1210,1214],"p",{},"Every time a composition runs, the platform records its progress: a state row for the run, for each layer and for each step that executes. That record is what gives you history, retries and ",[1207,1208,496],"a",{"href":497}," visibility. It is also the cost, and it is paid ",[1211,1212,1213],"strong",{},"per run, whether or not the run had anything to do",".",[1203,1216,1217],{},"A queue polled every minute is 1,440 runs a day. If the queue is empty most of the time, almost all of that is spent confirming that there is nothing to do.",[1219,1220,1221,1237],"table",{},[1222,1223,1224],"thead",{},[1225,1226,1227,1231,1234],"tr",{},[1228,1229,1230],"th",{},"The same 6-row composition",[1228,1232,1233],{},"Runs per day",[1228,1235,1236],{},"State rows per day",[1238,1239,1240,1252,1263,1274],"tbody",{},[1225,1241,1242,1246,1249],{},[1243,1244,1245],"td",{},"Polled every minute",[1243,1247,1248],{},"1,440",[1243,1250,1251],{},"at least 8,640",[1225,1253,1254,1257,1260],{},[1243,1255,1256],{},"Every 15 minutes",[1243,1258,1259],{},"96",[1243,1261,1262],{},"at least 576",[1225,1264,1265,1268,1271],{},[1243,1266,1267],{},"Cron, weekdays at 08:00",[1243,1269,1270],{},"~0.7",[1243,1272,1273],{},"~4",[1225,1275,1276,1279,1282],{},[1243,1277,1278],{},"Change trigger, 20 new rows a day in 5 bursts",[1243,1280,1281],{},"5",[1243,1283,1284],{},"~30",[1203,1286,1287],{},"The rest of this page is how to get from the first row of that table to the last two.",[1289,1290,1292],"h2",{"id":1291},"_1-pick-what-starts-the-run","1. Pick what starts the run",[1219,1294,1295,1308],{},[1222,1296,1297],{},[1225,1298,1299,1302,1305],{},[1228,1300,1301],{},"The work starts when…",[1228,1303,1304],{},"Use",[1228,1306,1307],{},"Not",[1238,1309,1310,1332,1353,1366,1380],{},[1225,1311,1312,1318,1329],{},[1243,1313,1314,1315,1317],{},"A row is added or changed in an ",[1207,1316,187],{"href":591}," table (a queue, an inbox, a pending item)",[1243,1319,1320,1321,1324,1325],{},"A ",[1211,1322,1323],{},"change trigger"," on that table: ",[1326,1327,1328],"code",{},"trigger.create",[1243,1330,1331],{},"A 1-minute schedule that queries the table",[1225,1333,1334,1337,1350],{},[1243,1335,1336],{},"A fixed time: \"weekdays at 08:00\", \"the 1st of the month\"",[1243,1338,1339,1342,1343,1346,1347],{},[1326,1340,1341],{},"schedule.create"," with ",[1326,1344,1345],{},"schedule_expression"," and ",[1326,1348,1349],{},"timezone",[1243,1351,1352],{},"A short interval plus a \"is it 08:00 yet?\" check",[1225,1354,1355,1358,1363],{},[1243,1356,1357],{},"A periodic sweep you genuinely need",[1243,1359,1360,1362],{},[1326,1361,1341],{}," at the slowest interval the product tolerates (hourly is usually enough)",[1243,1364,1365],{},"Every 1 to 10 minutes",[1225,1367,1368,1371,1377],{},[1243,1369,1370],{},"A provider calls you",[1243,1372,1373,1374],{},"A Hook redirect pointed at the composition, see ",[1207,1375,1376],{"href":76},"Receive webhooks",[1243,1378,1379],{},"Polling the provider",[1225,1381,1382,1385,1392],{},[1243,1383,1384],{},"A user does something",[1243,1386,1387,1391],{},[1207,1388,1390],{"href":1389},"/guides/virtual-workflows#step-5-expose-to-end-users","Expose"," the composition and let the app start it",[1243,1393,1394],{},"A schedule",[1203,1396,1397,1398,1401],{},"Schedules your end users create from your app (",[1326,1399,1400],{},"schedule.app.create",") are created paused and fire at most every 15 minutes.",[1289,1403,1405],{"id":1404},"_2-fixed-times-cron-with-a-timezone","2. Fixed times: cron with a timezone",[1203,1407,1408,1410,1411,1414,1415,1417,1418,1421,1422,1424,1425,1427],{},[1326,1409,1341],{}," takes either ",[1326,1412,1413],{},"interval_minutes"," or ",[1326,1416,1345],{},", never both. The expression is five cron fields (",[1326,1419,1420],{},"minute hour day-of-month month day-of-week",") read in ",[1326,1423,1349],{},", an IANA name. Without ",[1326,1426,1349],{}," it is read in UTC.",[1203,1429,1430],{},"Weekdays at 08:00 in São Paulo:",[1432,1433,1438],"pre",{"className":1434,"code":1435,"language":1436,"meta":1437,"style":1437},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"target_workflow_type\": \"orn:orkestia:composition:\u003Corg>:lineage/\u003Clineage_uuid>\",\n  \"name\": \"Morning briefing (weekdays 08:00)\",\n  \"schedule_expression\": \"0 8 * * 1-5\",\n  \"timezone\": \"America/Sao_Paulo\"\n}\n","json","",[1326,1439,1440,1449,1477,1498,1518,1537],{"__ignoreMap":1437},[1441,1442,1445],"span",{"class":1443,"line":1444},"line",1,[1441,1446,1448],{"class":1447},"sMK4o","{\n",[1441,1450,1452,1455,1459,1462,1465,1468,1472,1474],{"class":1443,"line":1451},2,[1441,1453,1454],{"class":1447},"  \"",[1441,1456,1458],{"class":1457},"spNyl","target_workflow_type",[1441,1460,1461],{"class":1447},"\"",[1441,1463,1464],{"class":1447},":",[1441,1466,1467],{"class":1447}," \"",[1441,1469,1471],{"class":1470},"sfazB","orn:orkestia:composition:\u003Corg>:lineage/\u003Clineage_uuid>",[1441,1473,1461],{"class":1447},[1441,1475,1476],{"class":1447},",\n",[1441,1478,1480,1482,1485,1487,1489,1491,1494,1496],{"class":1443,"line":1479},3,[1441,1481,1454],{"class":1447},[1441,1483,1484],{"class":1457},"name",[1441,1486,1461],{"class":1447},[1441,1488,1464],{"class":1447},[1441,1490,1467],{"class":1447},[1441,1492,1493],{"class":1470},"Morning briefing (weekdays 08:00)",[1441,1495,1461],{"class":1447},[1441,1497,1476],{"class":1447},[1441,1499,1501,1503,1505,1507,1509,1511,1514,1516],{"class":1443,"line":1500},4,[1441,1502,1454],{"class":1447},[1441,1504,1345],{"class":1457},[1441,1506,1461],{"class":1447},[1441,1508,1464],{"class":1447},[1441,1510,1467],{"class":1447},[1441,1512,1513],{"class":1470},"0 8 * * 1-5",[1441,1515,1461],{"class":1447},[1441,1517,1476],{"class":1447},[1441,1519,1521,1523,1525,1527,1529,1531,1534],{"class":1443,"line":1520},5,[1441,1522,1454],{"class":1447},[1441,1524,1349],{"class":1457},[1441,1526,1461],{"class":1447},[1441,1528,1464],{"class":1447},[1441,1530,1467],{"class":1447},[1441,1532,1533],{"class":1470},"America/Sao_Paulo",[1441,1535,1536],{"class":1447},"\"\n",[1441,1538,1540],{"class":1443,"line":1539},6,[1441,1541,1542],{"class":1447},"}\n",[1219,1544,1545,1555],{},[1222,1546,1547],{},[1225,1548,1549,1552],{},[1228,1550,1551],{},"Expression",[1228,1553,1554],{},"Fires",[1238,1556,1557,1566,1576,1586,1596],{},[1225,1558,1559,1563],{},[1243,1560,1561],{},[1326,1562,1513],{},[1243,1564,1565],{},"08:00, Monday to Friday",[1225,1567,1568,1573],{},[1243,1569,1570],{},[1326,1571,1572],{},"30 18 * * *",[1243,1574,1575],{},"18:30 every day",[1225,1577,1578,1583],{},[1243,1579,1580],{},[1326,1581,1582],{},"0 9 1 * *",[1243,1584,1585],{},"09:00 on the 1st of each month",[1225,1587,1588,1593],{},[1243,1589,1590],{},[1326,1591,1592],{},"0 8-18 * * 1-5",[1243,1594,1595],{},"On the hour from 08:00 to 18:00, weekdays (11 runs instead of 1,440)",[1225,1597,1598,1603],{},[1243,1599,1600],{},[1326,1601,1602],{},"0 */6 * * *",[1243,1604,1605],{},"Every six hours",[1607,1608,1609,1617,1620,1639],"ul",{},[1610,1611,1612,1613,1616],"li",{},"The answer includes ",[1326,1614,1615],{},"next_occurrences",", the next instants (UTC) the schedule will really fire. Read it before you walk away.",[1610,1618,1619],{},"Daylight saving time is followed. A local time the clock skips does not fire that day; a local time it repeats fires once.",[1610,1621,1622,1623,1626,1627,1630,1631,1634,1635,1638],{},"Point the schedule at the composition's ",[1211,1624,1625],{},"lineage ORN"," (returned by ",[1326,1628,1629],{},"composition.save"," as ",[1326,1632,1633],{},"orn","). Every fire then runs the active version, so the schedule follows your saves. A concrete ",[1326,1636,1637],{},"virtual.\u003Cuuid>@\u003Cversion>"," pins that one version until you re-point it.",[1610,1640,1641,1642,1645,1646,1346,1648,1650,1651,1653],{},"To change an existing schedule, ",[1326,1643,1644],{},"schedule.update"," takes the same ",[1326,1647,1345],{},[1326,1649,1349],{},". ",[1326,1652,1349],{}," on its own re-reads the stored expression in the new zone.",[1655,1656,1657],"warning",{},[1203,1658,1659,1660,1663],{},"Do not build a time check inside the composition (",[1326,1661,1662],{},"control.time.now"," → compare the hour → stop if it is not time yet) and run it every few minutes. Every one of those runs is paid for, including all the ones that decide it is not time.",[1289,1665,1667],{"id":1666},"_3-queues-a-change-trigger-not-a-poll","3. Queues: a change trigger, not a poll",[1203,1669,1670],{},"A change trigger starts your composition when rows of one App Data table are inserted or updated. An idle queue then costs no runs at all, and a burst of inserts becomes one run.",[1203,1672,1673,1676,1677,1680,1681,1683],{},[1211,1674,1675],{},"Step 1."," Declare ",[1326,1678,1679],{},"events: true"," on the table in your data structure and apply it (see ",[1207,1682,600],{"href":601},"):",[1432,1685,1689],{"className":1686,"code":1687,"language":1688,"meta":1437,"style":1437},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","databases:\n  - slug: crm\n    tables:\n      - slug: signups\n        ownership: { kind: app }\n        events: true              # or { ops: [insert] } to capture inserts only\n        fields:\n          - { slug: email, type: text, required: true }\n          - { slug: status, type: text }\n          - { slug: welcomed_at, type: timestamp }\n","yaml",[1326,1690,1691,1700,1713,1720,1732,1753,1768,1776,1813,1837],{"__ignoreMap":1437},[1441,1692,1693,1697],{"class":1443,"line":1444},[1441,1694,1696],{"class":1695},"swJcz","databases",[1441,1698,1699],{"class":1447},":\n",[1441,1701,1702,1705,1708,1710],{"class":1443,"line":1451},[1441,1703,1704],{"class":1447},"  -",[1441,1706,1707],{"class":1695}," slug",[1441,1709,1464],{"class":1447},[1441,1711,1712],{"class":1470}," crm\n",[1441,1714,1715,1718],{"class":1443,"line":1479},[1441,1716,1717],{"class":1695},"    tables",[1441,1719,1699],{"class":1447},[1441,1721,1722,1725,1727,1729],{"class":1443,"line":1500},[1441,1723,1724],{"class":1447},"      -",[1441,1726,1707],{"class":1695},[1441,1728,1464],{"class":1447},[1441,1730,1731],{"class":1470}," signups\n",[1441,1733,1734,1737,1739,1742,1745,1747,1750],{"class":1443,"line":1520},[1441,1735,1736],{"class":1695},"        ownership",[1441,1738,1464],{"class":1447},[1441,1740,1741],{"class":1447}," {",[1441,1743,1744],{"class":1695}," kind",[1441,1746,1464],{"class":1447},[1441,1748,1749],{"class":1470}," app",[1441,1751,1752],{"class":1447}," }\n",[1441,1754,1755,1758,1760,1764],{"class":1443,"line":1539},[1441,1756,1757],{"class":1695},"        events",[1441,1759,1464],{"class":1447},[1441,1761,1763],{"class":1762},"sfNiH"," true",[1441,1765,1767],{"class":1766},"sHwdD","              # or { ops: [insert] } to capture inserts only\n",[1441,1769,1771,1774],{"class":1443,"line":1770},7,[1441,1772,1773],{"class":1695},"        fields",[1441,1775,1699],{"class":1447},[1441,1777,1779,1782,1784,1786,1788,1791,1794,1797,1799,1802,1804,1807,1809,1811],{"class":1443,"line":1778},8,[1441,1780,1781],{"class":1447},"          -",[1441,1783,1741],{"class":1447},[1441,1785,1707],{"class":1695},[1441,1787,1464],{"class":1447},[1441,1789,1790],{"class":1470}," email",[1441,1792,1793],{"class":1447},",",[1441,1795,1796],{"class":1695}," type",[1441,1798,1464],{"class":1447},[1441,1800,1801],{"class":1470}," text",[1441,1803,1793],{"class":1447},[1441,1805,1806],{"class":1695}," required",[1441,1808,1464],{"class":1447},[1441,1810,1763],{"class":1762},[1441,1812,1752],{"class":1447},[1441,1814,1816,1818,1820,1822,1824,1827,1829,1831,1833,1835],{"class":1443,"line":1815},9,[1441,1817,1781],{"class":1447},[1441,1819,1741],{"class":1447},[1441,1821,1707],{"class":1695},[1441,1823,1464],{"class":1447},[1441,1825,1826],{"class":1470}," status",[1441,1828,1793],{"class":1447},[1441,1830,1796],{"class":1695},[1441,1832,1464],{"class":1447},[1441,1834,1801],{"class":1470},[1441,1836,1752],{"class":1447},[1441,1838,1840,1842,1844,1846,1848,1851,1853,1855,1857,1860],{"class":1443,"line":1839},10,[1441,1841,1781],{"class":1447},[1441,1843,1741],{"class":1447},[1441,1845,1707],{"class":1695},[1441,1847,1464],{"class":1447},[1441,1849,1850],{"class":1470}," welcomed_at",[1441,1852,1793],{"class":1447},[1441,1854,1796],{"class":1695},[1441,1856,1464],{"class":1447},[1441,1858,1859],{"class":1470}," timestamp",[1441,1861,1752],{"class":1447},[1203,1863,1864,1867,1868,1464],{},[1211,1865,1866],{},"Step 2."," Create the trigger with ",[1326,1869,1328],{},[1432,1871,1873],{"className":1434,"code":1872,"language":1436,"meta":1437,"style":1437},"{\n  \"identity_app_uuid\": \"\u003Capp uuid>\",\n  \"table_slug\": \"signups\",\n  \"target_workflow_type\": \"orn:orkestia:composition:\u003Corg>:lineage/\u003Clineage_uuid>\",\n  \"run_as\": { \"kind\": \"staff_actor\", \"staff_actor_uuid\": \"\u003Cactor uuid>\" },\n  \"ops\": [\"insert\"],\n  \"where\": { \"status\": \"pending\" },\n  \"debounce_s\": 5,\n  \"max_batch\": 500\n}\n",[1326,1874,1875,1879,1899,1919,1937,1988,2012,2043,2060,2074],{"__ignoreMap":1437},[1441,1876,1877],{"class":1443,"line":1444},[1441,1878,1448],{"class":1447},[1441,1880,1881,1883,1886,1888,1890,1892,1895,1897],{"class":1443,"line":1451},[1441,1882,1454],{"class":1447},[1441,1884,1885],{"class":1457},"identity_app_uuid",[1441,1887,1461],{"class":1447},[1441,1889,1464],{"class":1447},[1441,1891,1467],{"class":1447},[1441,1893,1894],{"class":1470},"\u003Capp uuid>",[1441,1896,1461],{"class":1447},[1441,1898,1476],{"class":1447},[1441,1900,1901,1903,1906,1908,1910,1912,1915,1917],{"class":1443,"line":1479},[1441,1902,1454],{"class":1447},[1441,1904,1905],{"class":1457},"table_slug",[1441,1907,1461],{"class":1447},[1441,1909,1464],{"class":1447},[1441,1911,1467],{"class":1447},[1441,1913,1914],{"class":1470},"signups",[1441,1916,1461],{"class":1447},[1441,1918,1476],{"class":1447},[1441,1920,1921,1923,1925,1927,1929,1931,1933,1935],{"class":1443,"line":1500},[1441,1922,1454],{"class":1447},[1441,1924,1458],{"class":1457},[1441,1926,1461],{"class":1447},[1441,1928,1464],{"class":1447},[1441,1930,1467],{"class":1447},[1441,1932,1471],{"class":1470},[1441,1934,1461],{"class":1447},[1441,1936,1476],{"class":1447},[1441,1938,1939,1941,1944,1946,1948,1950,1952,1956,1958,1960,1962,1965,1967,1969,1971,1974,1976,1978,1980,1983,1985],{"class":1443,"line":1520},[1441,1940,1454],{"class":1447},[1441,1942,1943],{"class":1457},"run_as",[1441,1945,1461],{"class":1447},[1441,1947,1464],{"class":1447},[1441,1949,1741],{"class":1447},[1441,1951,1467],{"class":1447},[1441,1953,1955],{"class":1954},"sBMFI","kind",[1441,1957,1461],{"class":1447},[1441,1959,1464],{"class":1447},[1441,1961,1467],{"class":1447},[1441,1963,1964],{"class":1470},"staff_actor",[1441,1966,1461],{"class":1447},[1441,1968,1793],{"class":1447},[1441,1970,1467],{"class":1447},[1441,1972,1973],{"class":1954},"staff_actor_uuid",[1441,1975,1461],{"class":1447},[1441,1977,1464],{"class":1447},[1441,1979,1467],{"class":1447},[1441,1981,1982],{"class":1470},"\u003Cactor uuid>",[1441,1984,1461],{"class":1447},[1441,1986,1987],{"class":1447}," },\n",[1441,1989,1990,1992,1995,1997,1999,2002,2004,2007,2009],{"class":1443,"line":1539},[1441,1991,1454],{"class":1447},[1441,1993,1994],{"class":1457},"ops",[1441,1996,1461],{"class":1447},[1441,1998,1464],{"class":1447},[1441,2000,2001],{"class":1447}," [",[1441,2003,1461],{"class":1447},[1441,2005,2006],{"class":1470},"insert",[1441,2008,1461],{"class":1447},[1441,2010,2011],{"class":1447},"],\n",[1441,2013,2014,2016,2019,2021,2023,2025,2027,2030,2032,2034,2036,2039,2041],{"class":1443,"line":1770},[1441,2015,1454],{"class":1447},[1441,2017,2018],{"class":1457},"where",[1441,2020,1461],{"class":1447},[1441,2022,1464],{"class":1447},[1441,2024,1741],{"class":1447},[1441,2026,1467],{"class":1447},[1441,2028,2029],{"class":1954},"status",[1441,2031,1461],{"class":1447},[1441,2033,1464],{"class":1447},[1441,2035,1467],{"class":1447},[1441,2037,2038],{"class":1470},"pending",[1441,2040,1461],{"class":1447},[1441,2042,1987],{"class":1447},[1441,2044,2045,2047,2050,2052,2054,2058],{"class":1443,"line":1778},[1441,2046,1454],{"class":1447},[1441,2048,2049],{"class":1457},"debounce_s",[1441,2051,1461],{"class":1447},[1441,2053,1464],{"class":1447},[1441,2055,2057],{"class":2056},"sbssI"," 5",[1441,2059,1476],{"class":1447},[1441,2061,2062,2064,2067,2069,2071],{"class":1443,"line":1815},[1441,2063,1454],{"class":1447},[1441,2065,2066],{"class":1457},"max_batch",[1441,2068,1461],{"class":1447},[1441,2070,1464],{"class":1447},[1441,2072,2073],{"class":2056}," 500\n",[1441,2075,2076],{"class":1443,"line":1839},[1441,2077,1542],{"class":1447},[1219,2079,2080,2090],{},[1222,2081,2082],{},[1225,2083,2084,2087],{},[1228,2085,2086],{},"Field",[1228,2088,2089],{},"What it does",[1238,2091,2092,2107,2117,2137,2154,2163,2172],{},[1225,2093,2094,2098],{},[1243,2095,2096],{},[1326,2097,1994],{},[1243,2099,2100,2102,2103,2106],{},[1326,2101,2006],{}," and/or ",[1326,2104,2105],{},"update"," (default both). Deletes are not supported.",[1225,2108,2109,2114],{},[1243,2110,2111],{},[1326,2112,2113],{},"changed_fields",[1243,2115,2116],{},"For updates: fire only when one of these fields changed.",[1225,2118,2119,2123],{},[1243,2120,2121],{},[1326,2122,2018],{},[1243,2124,2125,2126,2129,2130,2129,2133,2136],{},"Filter on the row as it is now: ",[1326,2127,2128],{},"{field: value}",", ",[1326,2131,2132],{},"{field: [a, b]}",[1326,2134,2135],{},"{field: {\"ne\": v}}",". All fields must match.",[1225,2138,2139,2143],{},[1243,2140,2141],{},[1326,2142,1943],{},[1243,2144,2145,2146,2149,2150,2153],{},"Who the run acts as: a ",[1207,2147,2148],{"href":674},"Staff actor"," in ",[1326,2151,2152],{},"rbac_scoped"," mode. Never an admin, the organization or the system.",[1225,2155,2156,2160],{},[1243,2157,2158],{},[1326,2159,2049],{},[1243,2161,2162],{},"Quiet seconds after the newest change before firing (default 5).",[1225,2164,2165,2169],{},[1243,2166,2167],{},[1326,2168,2066],{},[1243,2170,2171],{},"Most records per run (default 500). A backlog is drained in batches.",[1225,2173,2174,2179],{},[1243,2175,2176],{},[1326,2177,2178],{},"sweep_interval_s",[1243,2180,2181,2182,2185],{},"Optional safety net: also start the target with ",[1326,2183,2184],{},"mode: \"sweep\""," every N seconds (minimum 300).",[1203,2187,2188,2191],{},[1211,2189,2190],{},"Step 3."," Let the target composition receive what the trigger sends. Declare these inputs, all optional; inputs the composition does not declare are dropped:",[1432,2193,2195],{"className":1434,"code":2194,"language":1436,"meta":1437,"style":1437},"{\n  \"name\": \"welcome_new_signups\",\n  \"inputs\": [\n    { \"name\": \"records\",      \"type\": \"list\" },\n    { \"name\": \"trigger_uuid\", \"type\": \"string\" },\n    { \"name\": \"gap\",          \"type\": \"boolean\" },\n    { \"name\": \"mode\",         \"type\": \"string\" }\n  ],\n  \"layers\": [\n    {\n      \"name\": \"load\",\n      \"steps\": [\n        {\n          \"name\": \"todo\",\n          \"workflow_type\": \"appdata.query.run\",\n          \"condition\": { \"field\": \"records\", \"op\": \"truthy\" },\n          \"input_mapping\": {\n            \"identity_app_uuid\": { \"source\": \"static\", \"value\": \"\u003Capp uuid>\" },\n            \"statement\": { \"source\": \"static\", \"value\": \"SELECT record_uuid, email FROM signups WHERE record_uuid::text = ANY($1) AND welcomed_at IS NULL\" },\n            \"params\": { \"source\": \"list\", \"items\": [{ \"source\": \"input\", \"field\": \"records\" }] }\n          }\n        }\n      ]\n    }\n  ]\n}\n",[1326,2196,2197,2201,2220,2234,2275,2313,2352,2390,2395,2408,2413,2433,2447,2453,2473,2494,2543,2558,2608,2655,2734,2740,2746,2752,2758,2764],{"__ignoreMap":1437},[1441,2198,2199],{"class":1443,"line":1444},[1441,2200,1448],{"class":1447},[1441,2202,2203,2205,2207,2209,2211,2213,2216,2218],{"class":1443,"line":1451},[1441,2204,1454],{"class":1447},[1441,2206,1484],{"class":1457},[1441,2208,1461],{"class":1447},[1441,2210,1464],{"class":1447},[1441,2212,1467],{"class":1447},[1441,2214,2215],{"class":1470},"welcome_new_signups",[1441,2217,1461],{"class":1447},[1441,2219,1476],{"class":1447},[1441,2221,2222,2224,2227,2229,2231],{"class":1443,"line":1479},[1441,2223,1454],{"class":1447},[1441,2225,2226],{"class":1457},"inputs",[1441,2228,1461],{"class":1447},[1441,2230,1464],{"class":1447},[1441,2232,2233],{"class":1447}," [\n",[1441,2235,2236,2239,2241,2243,2245,2247,2249,2252,2254,2256,2259,2262,2264,2266,2268,2271,2273],{"class":1443,"line":1500},[1441,2237,2238],{"class":1447},"    {",[1441,2240,1467],{"class":1447},[1441,2242,1484],{"class":1954},[1441,2244,1461],{"class":1447},[1441,2246,1464],{"class":1447},[1441,2248,1467],{"class":1447},[1441,2250,2251],{"class":1470},"records",[1441,2253,1461],{"class":1447},[1441,2255,1793],{"class":1447},[1441,2257,2258],{"class":1447},"      \"",[1441,2260,2261],{"class":1954},"type",[1441,2263,1461],{"class":1447},[1441,2265,1464],{"class":1447},[1441,2267,1467],{"class":1447},[1441,2269,2270],{"class":1470},"list",[1441,2272,1461],{"class":1447},[1441,2274,1987],{"class":1447},[1441,2276,2277,2279,2281,2283,2285,2287,2289,2292,2294,2296,2298,2300,2302,2304,2306,2309,2311],{"class":1443,"line":1520},[1441,2278,2238],{"class":1447},[1441,2280,1467],{"class":1447},[1441,2282,1484],{"class":1954},[1441,2284,1461],{"class":1447},[1441,2286,1464],{"class":1447},[1441,2288,1467],{"class":1447},[1441,2290,2291],{"class":1470},"trigger_uuid",[1441,2293,1461],{"class":1447},[1441,2295,1793],{"class":1447},[1441,2297,1467],{"class":1447},[1441,2299,2261],{"class":1954},[1441,2301,1461],{"class":1447},[1441,2303,1464],{"class":1447},[1441,2305,1467],{"class":1447},[1441,2307,2308],{"class":1470},"string",[1441,2310,1461],{"class":1447},[1441,2312,1987],{"class":1447},[1441,2314,2315,2317,2319,2321,2323,2325,2327,2330,2332,2334,2337,2339,2341,2343,2345,2348,2350],{"class":1443,"line":1539},[1441,2316,2238],{"class":1447},[1441,2318,1467],{"class":1447},[1441,2320,1484],{"class":1954},[1441,2322,1461],{"class":1447},[1441,2324,1464],{"class":1447},[1441,2326,1467],{"class":1447},[1441,2328,2329],{"class":1470},"gap",[1441,2331,1461],{"class":1447},[1441,2333,1793],{"class":1447},[1441,2335,2336],{"class":1447},"          \"",[1441,2338,2261],{"class":1954},[1441,2340,1461],{"class":1447},[1441,2342,1464],{"class":1447},[1441,2344,1467],{"class":1447},[1441,2346,2347],{"class":1470},"boolean",[1441,2349,1461],{"class":1447},[1441,2351,1987],{"class":1447},[1441,2353,2354,2356,2358,2360,2362,2364,2366,2369,2371,2373,2376,2378,2380,2382,2384,2386,2388],{"class":1443,"line":1770},[1441,2355,2238],{"class":1447},[1441,2357,1467],{"class":1447},[1441,2359,1484],{"class":1954},[1441,2361,1461],{"class":1447},[1441,2363,1464],{"class":1447},[1441,2365,1467],{"class":1447},[1441,2367,2368],{"class":1470},"mode",[1441,2370,1461],{"class":1447},[1441,2372,1793],{"class":1447},[1441,2374,2375],{"class":1447},"         \"",[1441,2377,2261],{"class":1954},[1441,2379,1461],{"class":1447},[1441,2381,1464],{"class":1447},[1441,2383,1467],{"class":1447},[1441,2385,2308],{"class":1470},[1441,2387,1461],{"class":1447},[1441,2389,1752],{"class":1447},[1441,2391,2392],{"class":1443,"line":1778},[1441,2393,2394],{"class":1447},"  ],\n",[1441,2396,2397,2399,2402,2404,2406],{"class":1443,"line":1815},[1441,2398,1454],{"class":1447},[1441,2400,2401],{"class":1457},"layers",[1441,2403,1461],{"class":1447},[1441,2405,1464],{"class":1447},[1441,2407,2233],{"class":1447},[1441,2409,2410],{"class":1443,"line":1839},[1441,2411,2412],{"class":1447},"    {\n",[1441,2414,2416,2418,2420,2422,2424,2426,2429,2431],{"class":1443,"line":2415},11,[1441,2417,2258],{"class":1447},[1441,2419,1484],{"class":1954},[1441,2421,1461],{"class":1447},[1441,2423,1464],{"class":1447},[1441,2425,1467],{"class":1447},[1441,2427,2428],{"class":1470},"load",[1441,2430,1461],{"class":1447},[1441,2432,1476],{"class":1447},[1441,2434,2436,2438,2441,2443,2445],{"class":1443,"line":2435},12,[1441,2437,2258],{"class":1447},[1441,2439,2440],{"class":1954},"steps",[1441,2442,1461],{"class":1447},[1441,2444,1464],{"class":1447},[1441,2446,2233],{"class":1447},[1441,2448,2450],{"class":1443,"line":2449},13,[1441,2451,2452],{"class":1447},"        {\n",[1441,2454,2456,2458,2460,2462,2464,2466,2469,2471],{"class":1443,"line":2455},14,[1441,2457,2336],{"class":1447},[1441,2459,1484],{"class":2056},[1441,2461,1461],{"class":1447},[1441,2463,1464],{"class":1447},[1441,2465,1467],{"class":1447},[1441,2467,2468],{"class":1470},"todo",[1441,2470,1461],{"class":1447},[1441,2472,1476],{"class":1447},[1441,2474,2476,2478,2481,2483,2485,2487,2490,2492],{"class":1443,"line":2475},15,[1441,2477,2336],{"class":1447},[1441,2479,2480],{"class":2056},"workflow_type",[1441,2482,1461],{"class":1447},[1441,2484,1464],{"class":1447},[1441,2486,1467],{"class":1447},[1441,2488,2489],{"class":1470},"appdata.query.run",[1441,2491,1461],{"class":1447},[1441,2493,1476],{"class":1447},[1441,2495,2497,2499,2502,2504,2506,2508,2510,2513,2515,2517,2519,2521,2523,2525,2527,2530,2532,2534,2536,2539,2541],{"class":1443,"line":2496},16,[1441,2498,2336],{"class":1447},[1441,2500,2501],{"class":2056},"condition",[1441,2503,1461],{"class":1447},[1441,2505,1464],{"class":1447},[1441,2507,1741],{"class":1447},[1441,2509,1467],{"class":1447},[1441,2511,2512],{"class":1695},"field",[1441,2514,1461],{"class":1447},[1441,2516,1464],{"class":1447},[1441,2518,1467],{"class":1447},[1441,2520,2251],{"class":1470},[1441,2522,1461],{"class":1447},[1441,2524,1793],{"class":1447},[1441,2526,1467],{"class":1447},[1441,2528,2529],{"class":1695},"op",[1441,2531,1461],{"class":1447},[1441,2533,1464],{"class":1447},[1441,2535,1467],{"class":1447},[1441,2537,2538],{"class":1470},"truthy",[1441,2540,1461],{"class":1447},[1441,2542,1987],{"class":1447},[1441,2544,2546,2548,2551,2553,2555],{"class":1443,"line":2545},17,[1441,2547,2336],{"class":1447},[1441,2549,2550],{"class":2056},"input_mapping",[1441,2552,1461],{"class":1447},[1441,2554,1464],{"class":1447},[1441,2556,2557],{"class":1447}," {\n",[1441,2559,2561,2564,2566,2568,2570,2572,2574,2578,2580,2582,2584,2587,2589,2591,2593,2596,2598,2600,2602,2604,2606],{"class":1443,"line":2560},18,[1441,2562,2563],{"class":1447},"            \"",[1441,2565,1885],{"class":1695},[1441,2567,1461],{"class":1447},[1441,2569,1464],{"class":1447},[1441,2571,1741],{"class":1447},[1441,2573,1467],{"class":1447},[1441,2575,2577],{"class":2576},"su27w","source",[1441,2579,1461],{"class":1447},[1441,2581,1464],{"class":1447},[1441,2583,1467],{"class":1447},[1441,2585,2586],{"class":1470},"static",[1441,2588,1461],{"class":1447},[1441,2590,1793],{"class":1447},[1441,2592,1467],{"class":1447},[1441,2594,2595],{"class":2576},"value",[1441,2597,1461],{"class":1447},[1441,2599,1464],{"class":1447},[1441,2601,1467],{"class":1447},[1441,2603,1894],{"class":1470},[1441,2605,1461],{"class":1447},[1441,2607,1987],{"class":1447},[1441,2609,2611,2613,2616,2618,2620,2622,2624,2626,2628,2630,2632,2634,2636,2638,2640,2642,2644,2646,2648,2651,2653],{"class":1443,"line":2610},19,[1441,2612,2563],{"class":1447},[1441,2614,2615],{"class":1695},"statement",[1441,2617,1461],{"class":1447},[1441,2619,1464],{"class":1447},[1441,2621,1741],{"class":1447},[1441,2623,1467],{"class":1447},[1441,2625,2577],{"class":2576},[1441,2627,1461],{"class":1447},[1441,2629,1464],{"class":1447},[1441,2631,1467],{"class":1447},[1441,2633,2586],{"class":1470},[1441,2635,1461],{"class":1447},[1441,2637,1793],{"class":1447},[1441,2639,1467],{"class":1447},[1441,2641,2595],{"class":2576},[1441,2643,1461],{"class":1447},[1441,2645,1464],{"class":1447},[1441,2647,1467],{"class":1447},[1441,2649,2650],{"class":1470},"SELECT record_uuid, email FROM signups WHERE record_uuid::text = ANY($1) AND welcomed_at IS NULL",[1441,2652,1461],{"class":1447},[1441,2654,1987],{"class":1447},[1441,2656,2658,2660,2663,2665,2667,2669,2671,2673,2675,2677,2679,2681,2683,2685,2687,2690,2692,2694,2697,2699,2702,2704,2706,2708,2711,2713,2715,2717,2719,2721,2723,2725,2727,2729,2732],{"class":1443,"line":2657},20,[1441,2659,2563],{"class":1447},[1441,2661,2662],{"class":1695},"params",[1441,2664,1461],{"class":1447},[1441,2666,1464],{"class":1447},[1441,2668,1741],{"class":1447},[1441,2670,1467],{"class":1447},[1441,2672,2577],{"class":2576},[1441,2674,1461],{"class":1447},[1441,2676,1464],{"class":1447},[1441,2678,1467],{"class":1447},[1441,2680,2270],{"class":1470},[1441,2682,1461],{"class":1447},[1441,2684,1793],{"class":1447},[1441,2686,1467],{"class":1447},[1441,2688,2689],{"class":2576},"items",[1441,2691,1461],{"class":1447},[1441,2693,1464],{"class":1447},[1441,2695,2696],{"class":1447}," [{",[1441,2698,1467],{"class":1447},[1441,2700,2577],{"class":2701},"s2Zo4",[1441,2703,1461],{"class":1447},[1441,2705,1464],{"class":1447},[1441,2707,1467],{"class":1447},[1441,2709,2710],{"class":1470},"input",[1441,2712,1461],{"class":1447},[1441,2714,1793],{"class":1447},[1441,2716,1467],{"class":1447},[1441,2718,2512],{"class":2701},[1441,2720,1461],{"class":1447},[1441,2722,1464],{"class":1447},[1441,2724,1467],{"class":1447},[1441,2726,2251],{"class":1470},[1441,2728,1461],{"class":1447},[1441,2730,2731],{"class":1447}," }]",[1441,2733,1752],{"class":1447},[1441,2735,2737],{"class":1443,"line":2736},21,[1441,2738,2739],{"class":1447},"          }\n",[1441,2741,2743],{"class":1443,"line":2742},22,[1441,2744,2745],{"class":1447},"        }\n",[1441,2747,2749],{"class":1443,"line":2748},23,[1441,2750,2751],{"class":1447},"      ]\n",[1441,2753,2755],{"class":1443,"line":2754},24,[1441,2756,2757],{"class":1447},"    }\n",[1441,2759,2761],{"class":1443,"line":2760},25,[1441,2762,2763],{"class":1447},"  ]\n",[1441,2765,2767],{"class":1443,"line":2766},26,[1441,2768,1542],{"class":1447},[1203,2770,2771,2773,2774,2777],{},[1326,2772,2251],{}," holds the ",[1211,2775,2776],{},"ids"," of the matching rows, not their values. Your first layer re-reads exactly those rows, so it always sees current data.",[1203,2779,2780],{},"What to know about delivery:",[1607,2782,2783,2797,2803,2809,2819],{},[1610,2784,2785,2788,2789,2792,2793,2796],{},[1211,2786,2787],{},"At least once."," A record can arrive twice. Make the work idempotent (the ",[1326,2790,2791],{},"welcomed_at IS NULL"," check above, a ",[1326,2794,2795],{},"unique"," field, or an idempotency key).",[1610,2798,2799,2802],{},[1211,2800,2801],{},"One run at a time per trigger."," Changes that arrive while a run is in flight are delivered together in the next run.",[1610,2804,2805,2808],{},[1211,2806,2807],{},"No self-loops."," Writes your own run makes through workflow steps do not fire the same trigger again.",[1610,2810,2811,2814,2815,2818],{},[1211,2812,2813],{},"It protects itself."," A trigger that fires in a storm, or whose starts keep failing, pauses itself. ",[1326,2816,2817],{},"trigger.resume"," starts it again; events that arrived meanwhile are kept and delivered.",[1610,2820,2821,2822,2129,2825,2129,2828,2129,2831,2129,2834,1346,2836,1214],{},"Creating, updating and deleting a trigger needs an organization admin. Manage them with ",[1326,2823,2824],{},"trigger.list",[1326,2826,2827],{},"trigger.get",[1326,2829,2830],{},"trigger.update",[1326,2832,2833],{},"trigger.pause",[1326,2835,2817],{},[1326,2837,2838],{},"trigger.delete",[1289,2840,2842],{"id":2841},"_4-skip-empty-work","4. Skip empty work",[1203,2844,2845],{},"When you do need a schedule, make the empty run as cheap as possible:",[2847,2848,2849,2858],"ol",{},[1610,2850,2851,2854,2855,1214],{},[1211,2852,2853],{},"Layer 1 is one cheap check",": a count, or a query with a ",[1326,2856,2857],{},"LIMIT",[1610,2859,2860,2865],{},[1211,2861,2862,2863],{},"Every later step carries a ",[1326,2864,2501],{}," on that check. A skipped step writes no rows, and a skipped sub-composition skips everything inside it.",[1432,2867,2869],{"className":1434,"code":2868,"language":1436,"meta":1437,"style":1437},"{\n  \"name\": \"mark_overdue_invoices\",\n  \"description\": \"Daily: mark open invoices past their due date as overdue\",\n  \"layers\": [\n    {\n      \"name\": \"check\",\n      \"steps\": [\n        {\n          \"name\": \"pending\",\n          \"workflow_type\": \"appdata.query.run\",\n          \"input_mapping\": {\n            \"identity_app_uuid\": { \"source\": \"static\", \"value\": \"\u003Capp uuid>\" },\n            \"statement\": { \"source\": \"static\", \"value\": \"SELECT json_build_object('record_uuid', record_uuid, 'patch', json_build_object('status', 'overdue')) FROM invoices WHERE status = 'open' AND due_date \u003C current_date ORDER BY record_uuid LIMIT 500\" }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"shape\",\n      \"steps\": [\n        {\n          \"name\": \"patches\",\n          \"workflow_type\": \"control.collection.flatten\",\n          \"condition\": { \"step\": \"pending\", \"field\": \"row_count\", \"op\": \"gt\", \"value\": 0 },\n          \"input_mapping\": {\n            \"items\": { \"source\": \"step\", \"step\": \"pending\", \"field\": \"rows\" },\n            \"depth\": { \"source\": \"static\", \"value\": 1 }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"write\",\n      \"steps\": [\n        {\n          \"name\": \"mark\",\n          \"workflow_type\": \"appdata.update-as-app\",\n          \"condition\": { \"step\": \"pending\", \"field\": \"row_count\", \"op\": \"gt\", \"value\": 0 },\n          \"input_mapping\": {\n            \"identity_app_uuid\": { \"source\": \"static\", \"value\": \"\u003Capp uuid>\" },\n            \"database_slug\": { \"source\": \"static\", \"value\": \"billing\" },\n            \"table_slug\": { \"source\": \"static\", \"value\": \"invoices\" },\n            \"patches\": { \"source\": \"step\", \"step\": \"patches\", \"field\": \"result\" },\n            \"source\": { \"source\": \"static\", \"value\": \"overdue-sweep\" }\n          }\n        }\n      ]\n    }\n  ]\n}\n",[1326,2870,2871,2875,2894,2914,2926,2930,2949,2961,2965,2983,3001,3013,3057,3102,3106,3110,3114,3119,3123,3142,3154,3158,3177,3196,3272,3284,3345,3388,3393,3398,3403,3408,3413,3433,3446,3451,3471,3491,3564,3577,3622,3669,3715,3777,3823,3828,3833,3838,3843,3848],{"__ignoreMap":1437},[1441,2872,2873],{"class":1443,"line":1444},[1441,2874,1448],{"class":1447},[1441,2876,2877,2879,2881,2883,2885,2887,2890,2892],{"class":1443,"line":1451},[1441,2878,1454],{"class":1447},[1441,2880,1484],{"class":1457},[1441,2882,1461],{"class":1447},[1441,2884,1464],{"class":1447},[1441,2886,1467],{"class":1447},[1441,2888,2889],{"class":1470},"mark_overdue_invoices",[1441,2891,1461],{"class":1447},[1441,2893,1476],{"class":1447},[1441,2895,2896,2898,2901,2903,2905,2907,2910,2912],{"class":1443,"line":1479},[1441,2897,1454],{"class":1447},[1441,2899,2900],{"class":1457},"description",[1441,2902,1461],{"class":1447},[1441,2904,1464],{"class":1447},[1441,2906,1467],{"class":1447},[1441,2908,2909],{"class":1470},"Daily: mark open invoices past their due date as overdue",[1441,2911,1461],{"class":1447},[1441,2913,1476],{"class":1447},[1441,2915,2916,2918,2920,2922,2924],{"class":1443,"line":1500},[1441,2917,1454],{"class":1447},[1441,2919,2401],{"class":1457},[1441,2921,1461],{"class":1447},[1441,2923,1464],{"class":1447},[1441,2925,2233],{"class":1447},[1441,2927,2928],{"class":1443,"line":1520},[1441,2929,2412],{"class":1447},[1441,2931,2932,2934,2936,2938,2940,2942,2945,2947],{"class":1443,"line":1539},[1441,2933,2258],{"class":1447},[1441,2935,1484],{"class":1954},[1441,2937,1461],{"class":1447},[1441,2939,1464],{"class":1447},[1441,2941,1467],{"class":1447},[1441,2943,2944],{"class":1470},"check",[1441,2946,1461],{"class":1447},[1441,2948,1476],{"class":1447},[1441,2950,2951,2953,2955,2957,2959],{"class":1443,"line":1770},[1441,2952,2258],{"class":1447},[1441,2954,2440],{"class":1954},[1441,2956,1461],{"class":1447},[1441,2958,1464],{"class":1447},[1441,2960,2233],{"class":1447},[1441,2962,2963],{"class":1443,"line":1778},[1441,2964,2452],{"class":1447},[1441,2966,2967,2969,2971,2973,2975,2977,2979,2981],{"class":1443,"line":1815},[1441,2968,2336],{"class":1447},[1441,2970,1484],{"class":2056},[1441,2972,1461],{"class":1447},[1441,2974,1464],{"class":1447},[1441,2976,1467],{"class":1447},[1441,2978,2038],{"class":1470},[1441,2980,1461],{"class":1447},[1441,2982,1476],{"class":1447},[1441,2984,2985,2987,2989,2991,2993,2995,2997,2999],{"class":1443,"line":1839},[1441,2986,2336],{"class":1447},[1441,2988,2480],{"class":2056},[1441,2990,1461],{"class":1447},[1441,2992,1464],{"class":1447},[1441,2994,1467],{"class":1447},[1441,2996,2489],{"class":1470},[1441,2998,1461],{"class":1447},[1441,3000,1476],{"class":1447},[1441,3002,3003,3005,3007,3009,3011],{"class":1443,"line":2415},[1441,3004,2336],{"class":1447},[1441,3006,2550],{"class":2056},[1441,3008,1461],{"class":1447},[1441,3010,1464],{"class":1447},[1441,3012,2557],{"class":1447},[1441,3014,3015,3017,3019,3021,3023,3025,3027,3029,3031,3033,3035,3037,3039,3041,3043,3045,3047,3049,3051,3053,3055],{"class":1443,"line":2435},[1441,3016,2563],{"class":1447},[1441,3018,1885],{"class":1695},[1441,3020,1461],{"class":1447},[1441,3022,1464],{"class":1447},[1441,3024,1741],{"class":1447},[1441,3026,1467],{"class":1447},[1441,3028,2577],{"class":2576},[1441,3030,1461],{"class":1447},[1441,3032,1464],{"class":1447},[1441,3034,1467],{"class":1447},[1441,3036,2586],{"class":1470},[1441,3038,1461],{"class":1447},[1441,3040,1793],{"class":1447},[1441,3042,1467],{"class":1447},[1441,3044,2595],{"class":2576},[1441,3046,1461],{"class":1447},[1441,3048,1464],{"class":1447},[1441,3050,1467],{"class":1447},[1441,3052,1894],{"class":1470},[1441,3054,1461],{"class":1447},[1441,3056,1987],{"class":1447},[1441,3058,3059,3061,3063,3065,3067,3069,3071,3073,3075,3077,3079,3081,3083,3085,3087,3089,3091,3093,3095,3098,3100],{"class":1443,"line":2449},[1441,3060,2563],{"class":1447},[1441,3062,2615],{"class":1695},[1441,3064,1461],{"class":1447},[1441,3066,1464],{"class":1447},[1441,3068,1741],{"class":1447},[1441,3070,1467],{"class":1447},[1441,3072,2577],{"class":2576},[1441,3074,1461],{"class":1447},[1441,3076,1464],{"class":1447},[1441,3078,1467],{"class":1447},[1441,3080,2586],{"class":1470},[1441,3082,1461],{"class":1447},[1441,3084,1793],{"class":1447},[1441,3086,1467],{"class":1447},[1441,3088,2595],{"class":2576},[1441,3090,1461],{"class":1447},[1441,3092,1464],{"class":1447},[1441,3094,1467],{"class":1447},[1441,3096,3097],{"class":1470},"SELECT json_build_object('record_uuid', record_uuid, 'patch', json_build_object('status', 'overdue')) FROM invoices WHERE status = 'open' AND due_date \u003C current_date ORDER BY record_uuid LIMIT 500",[1441,3099,1461],{"class":1447},[1441,3101,1752],{"class":1447},[1441,3103,3104],{"class":1443,"line":2455},[1441,3105,2739],{"class":1447},[1441,3107,3108],{"class":1443,"line":2475},[1441,3109,2745],{"class":1447},[1441,3111,3112],{"class":1443,"line":2496},[1441,3113,2751],{"class":1447},[1441,3115,3116],{"class":1443,"line":2545},[1441,3117,3118],{"class":1447},"    },\n",[1441,3120,3121],{"class":1443,"line":2560},[1441,3122,2412],{"class":1447},[1441,3124,3125,3127,3129,3131,3133,3135,3138,3140],{"class":1443,"line":2610},[1441,3126,2258],{"class":1447},[1441,3128,1484],{"class":1954},[1441,3130,1461],{"class":1447},[1441,3132,1464],{"class":1447},[1441,3134,1467],{"class":1447},[1441,3136,3137],{"class":1470},"shape",[1441,3139,1461],{"class":1447},[1441,3141,1476],{"class":1447},[1441,3143,3144,3146,3148,3150,3152],{"class":1443,"line":2657},[1441,3145,2258],{"class":1447},[1441,3147,2440],{"class":1954},[1441,3149,1461],{"class":1447},[1441,3151,1464],{"class":1447},[1441,3153,2233],{"class":1447},[1441,3155,3156],{"class":1443,"line":2736},[1441,3157,2452],{"class":1447},[1441,3159,3160,3162,3164,3166,3168,3170,3173,3175],{"class":1443,"line":2742},[1441,3161,2336],{"class":1447},[1441,3163,1484],{"class":2056},[1441,3165,1461],{"class":1447},[1441,3167,1464],{"class":1447},[1441,3169,1467],{"class":1447},[1441,3171,3172],{"class":1470},"patches",[1441,3174,1461],{"class":1447},[1441,3176,1476],{"class":1447},[1441,3178,3179,3181,3183,3185,3187,3189,3192,3194],{"class":1443,"line":2748},[1441,3180,2336],{"class":1447},[1441,3182,2480],{"class":2056},[1441,3184,1461],{"class":1447},[1441,3186,1464],{"class":1447},[1441,3188,1467],{"class":1447},[1441,3190,3191],{"class":1470},"control.collection.flatten",[1441,3193,1461],{"class":1447},[1441,3195,1476],{"class":1447},[1441,3197,3198,3200,3202,3204,3206,3208,3210,3213,3215,3217,3219,3221,3223,3225,3227,3229,3231,3233,3235,3238,3240,3242,3244,3246,3248,3250,3252,3255,3257,3259,3261,3263,3265,3267,3270],{"class":1443,"line":2754},[1441,3199,2336],{"class":1447},[1441,3201,2501],{"class":2056},[1441,3203,1461],{"class":1447},[1441,3205,1464],{"class":1447},[1441,3207,1741],{"class":1447},[1441,3209,1467],{"class":1447},[1441,3211,3212],{"class":1695},"step",[1441,3214,1461],{"class":1447},[1441,3216,1464],{"class":1447},[1441,3218,1467],{"class":1447},[1441,3220,2038],{"class":1470},[1441,3222,1461],{"class":1447},[1441,3224,1793],{"class":1447},[1441,3226,1467],{"class":1447},[1441,3228,2512],{"class":1695},[1441,3230,1461],{"class":1447},[1441,3232,1464],{"class":1447},[1441,3234,1467],{"class":1447},[1441,3236,3237],{"class":1470},"row_count",[1441,3239,1461],{"class":1447},[1441,3241,1793],{"class":1447},[1441,3243,1467],{"class":1447},[1441,3245,2529],{"class":1695},[1441,3247,1461],{"class":1447},[1441,3249,1464],{"class":1447},[1441,3251,1467],{"class":1447},[1441,3253,3254],{"class":1470},"gt",[1441,3256,1461],{"class":1447},[1441,3258,1793],{"class":1447},[1441,3260,1467],{"class":1447},[1441,3262,2595],{"class":1695},[1441,3264,1461],{"class":1447},[1441,3266,1464],{"class":1447},[1441,3268,3269],{"class":2056}," 0",[1441,3271,1987],{"class":1447},[1441,3273,3274,3276,3278,3280,3282],{"class":1443,"line":2760},[1441,3275,2336],{"class":1447},[1441,3277,2550],{"class":2056},[1441,3279,1461],{"class":1447},[1441,3281,1464],{"class":1447},[1441,3283,2557],{"class":1447},[1441,3285,3286,3288,3290,3292,3294,3296,3298,3300,3302,3304,3306,3308,3310,3312,3314,3316,3318,3320,3322,3324,3326,3328,3330,3332,3334,3336,3338,3341,3343],{"class":1443,"line":2766},[1441,3287,2563],{"class":1447},[1441,3289,2689],{"class":1695},[1441,3291,1461],{"class":1447},[1441,3293,1464],{"class":1447},[1441,3295,1741],{"class":1447},[1441,3297,1467],{"class":1447},[1441,3299,2577],{"class":2576},[1441,3301,1461],{"class":1447},[1441,3303,1464],{"class":1447},[1441,3305,1467],{"class":1447},[1441,3307,3212],{"class":1470},[1441,3309,1461],{"class":1447},[1441,3311,1793],{"class":1447},[1441,3313,1467],{"class":1447},[1441,3315,3212],{"class":2576},[1441,3317,1461],{"class":1447},[1441,3319,1464],{"class":1447},[1441,3321,1467],{"class":1447},[1441,3323,2038],{"class":1470},[1441,3325,1461],{"class":1447},[1441,3327,1793],{"class":1447},[1441,3329,1467],{"class":1447},[1441,3331,2512],{"class":2576},[1441,3333,1461],{"class":1447},[1441,3335,1464],{"class":1447},[1441,3337,1467],{"class":1447},[1441,3339,3340],{"class":1470},"rows",[1441,3342,1461],{"class":1447},[1441,3344,1987],{"class":1447},[1441,3346,3348,3350,3353,3355,3357,3359,3361,3363,3365,3367,3369,3371,3373,3375,3377,3379,3381,3383,3386],{"class":1443,"line":3347},27,[1441,3349,2563],{"class":1447},[1441,3351,3352],{"class":1695},"depth",[1441,3354,1461],{"class":1447},[1441,3356,1464],{"class":1447},[1441,3358,1741],{"class":1447},[1441,3360,1467],{"class":1447},[1441,3362,2577],{"class":2576},[1441,3364,1461],{"class":1447},[1441,3366,1464],{"class":1447},[1441,3368,1467],{"class":1447},[1441,3370,2586],{"class":1470},[1441,3372,1461],{"class":1447},[1441,3374,1793],{"class":1447},[1441,3376,1467],{"class":1447},[1441,3378,2595],{"class":2576},[1441,3380,1461],{"class":1447},[1441,3382,1464],{"class":1447},[1441,3384,3385],{"class":2056}," 1",[1441,3387,1752],{"class":1447},[1441,3389,3391],{"class":1443,"line":3390},28,[1441,3392,2739],{"class":1447},[1441,3394,3396],{"class":1443,"line":3395},29,[1441,3397,2745],{"class":1447},[1441,3399,3401],{"class":1443,"line":3400},30,[1441,3402,2751],{"class":1447},[1441,3404,3406],{"class":1443,"line":3405},31,[1441,3407,3118],{"class":1447},[1441,3409,3411],{"class":1443,"line":3410},32,[1441,3412,2412],{"class":1447},[1441,3414,3416,3418,3420,3422,3424,3426,3429,3431],{"class":1443,"line":3415},33,[1441,3417,2258],{"class":1447},[1441,3419,1484],{"class":1954},[1441,3421,1461],{"class":1447},[1441,3423,1464],{"class":1447},[1441,3425,1467],{"class":1447},[1441,3427,3428],{"class":1470},"write",[1441,3430,1461],{"class":1447},[1441,3432,1476],{"class":1447},[1441,3434,3436,3438,3440,3442,3444],{"class":1443,"line":3435},34,[1441,3437,2258],{"class":1447},[1441,3439,2440],{"class":1954},[1441,3441,1461],{"class":1447},[1441,3443,1464],{"class":1447},[1441,3445,2233],{"class":1447},[1441,3447,3449],{"class":1443,"line":3448},35,[1441,3450,2452],{"class":1447},[1441,3452,3454,3456,3458,3460,3462,3464,3467,3469],{"class":1443,"line":3453},36,[1441,3455,2336],{"class":1447},[1441,3457,1484],{"class":2056},[1441,3459,1461],{"class":1447},[1441,3461,1464],{"class":1447},[1441,3463,1467],{"class":1447},[1441,3465,3466],{"class":1470},"mark",[1441,3468,1461],{"class":1447},[1441,3470,1476],{"class":1447},[1441,3472,3474,3476,3478,3480,3482,3484,3487,3489],{"class":1443,"line":3473},37,[1441,3475,2336],{"class":1447},[1441,3477,2480],{"class":2056},[1441,3479,1461],{"class":1447},[1441,3481,1464],{"class":1447},[1441,3483,1467],{"class":1447},[1441,3485,3486],{"class":1470},"appdata.update-as-app",[1441,3488,1461],{"class":1447},[1441,3490,1476],{"class":1447},[1441,3492,3494,3496,3498,3500,3502,3504,3506,3508,3510,3512,3514,3516,3518,3520,3522,3524,3526,3528,3530,3532,3534,3536,3538,3540,3542,3544,3546,3548,3550,3552,3554,3556,3558,3560,3562],{"class":1443,"line":3493},38,[1441,3495,2336],{"class":1447},[1441,3497,2501],{"class":2056},[1441,3499,1461],{"class":1447},[1441,3501,1464],{"class":1447},[1441,3503,1741],{"class":1447},[1441,3505,1467],{"class":1447},[1441,3507,3212],{"class":1695},[1441,3509,1461],{"class":1447},[1441,3511,1464],{"class":1447},[1441,3513,1467],{"class":1447},[1441,3515,2038],{"class":1470},[1441,3517,1461],{"class":1447},[1441,3519,1793],{"class":1447},[1441,3521,1467],{"class":1447},[1441,3523,2512],{"class":1695},[1441,3525,1461],{"class":1447},[1441,3527,1464],{"class":1447},[1441,3529,1467],{"class":1447},[1441,3531,3237],{"class":1470},[1441,3533,1461],{"class":1447},[1441,3535,1793],{"class":1447},[1441,3537,1467],{"class":1447},[1441,3539,2529],{"class":1695},[1441,3541,1461],{"class":1447},[1441,3543,1464],{"class":1447},[1441,3545,1467],{"class":1447},[1441,3547,3254],{"class":1470},[1441,3549,1461],{"class":1447},[1441,3551,1793],{"class":1447},[1441,3553,1467],{"class":1447},[1441,3555,2595],{"class":1695},[1441,3557,1461],{"class":1447},[1441,3559,1464],{"class":1447},[1441,3561,3269],{"class":2056},[1441,3563,1987],{"class":1447},[1441,3565,3567,3569,3571,3573,3575],{"class":1443,"line":3566},39,[1441,3568,2336],{"class":1447},[1441,3570,2550],{"class":2056},[1441,3572,1461],{"class":1447},[1441,3574,1464],{"class":1447},[1441,3576,2557],{"class":1447},[1441,3578,3580,3582,3584,3586,3588,3590,3592,3594,3596,3598,3600,3602,3604,3606,3608,3610,3612,3614,3616,3618,3620],{"class":1443,"line":3579},40,[1441,3581,2563],{"class":1447},[1441,3583,1885],{"class":1695},[1441,3585,1461],{"class":1447},[1441,3587,1464],{"class":1447},[1441,3589,1741],{"class":1447},[1441,3591,1467],{"class":1447},[1441,3593,2577],{"class":2576},[1441,3595,1461],{"class":1447},[1441,3597,1464],{"class":1447},[1441,3599,1467],{"class":1447},[1441,3601,2586],{"class":1470},[1441,3603,1461],{"class":1447},[1441,3605,1793],{"class":1447},[1441,3607,1467],{"class":1447},[1441,3609,2595],{"class":2576},[1441,3611,1461],{"class":1447},[1441,3613,1464],{"class":1447},[1441,3615,1467],{"class":1447},[1441,3617,1894],{"class":1470},[1441,3619,1461],{"class":1447},[1441,3621,1987],{"class":1447},[1441,3623,3625,3627,3630,3632,3634,3636,3638,3640,3642,3644,3646,3648,3650,3652,3654,3656,3658,3660,3662,3665,3667],{"class":1443,"line":3624},41,[1441,3626,2563],{"class":1447},[1441,3628,3629],{"class":1695},"database_slug",[1441,3631,1461],{"class":1447},[1441,3633,1464],{"class":1447},[1441,3635,1741],{"class":1447},[1441,3637,1467],{"class":1447},[1441,3639,2577],{"class":2576},[1441,3641,1461],{"class":1447},[1441,3643,1464],{"class":1447},[1441,3645,1467],{"class":1447},[1441,3647,2586],{"class":1470},[1441,3649,1461],{"class":1447},[1441,3651,1793],{"class":1447},[1441,3653,1467],{"class":1447},[1441,3655,2595],{"class":2576},[1441,3657,1461],{"class":1447},[1441,3659,1464],{"class":1447},[1441,3661,1467],{"class":1447},[1441,3663,3664],{"class":1470},"billing",[1441,3666,1461],{"class":1447},[1441,3668,1987],{"class":1447},[1441,3670,3672,3674,3676,3678,3680,3682,3684,3686,3688,3690,3692,3694,3696,3698,3700,3702,3704,3706,3708,3711,3713],{"class":1443,"line":3671},42,[1441,3673,2563],{"class":1447},[1441,3675,1905],{"class":1695},[1441,3677,1461],{"class":1447},[1441,3679,1464],{"class":1447},[1441,3681,1741],{"class":1447},[1441,3683,1467],{"class":1447},[1441,3685,2577],{"class":2576},[1441,3687,1461],{"class":1447},[1441,3689,1464],{"class":1447},[1441,3691,1467],{"class":1447},[1441,3693,2586],{"class":1470},[1441,3695,1461],{"class":1447},[1441,3697,1793],{"class":1447},[1441,3699,1467],{"class":1447},[1441,3701,2595],{"class":2576},[1441,3703,1461],{"class":1447},[1441,3705,1464],{"class":1447},[1441,3707,1467],{"class":1447},[1441,3709,3710],{"class":1470},"invoices",[1441,3712,1461],{"class":1447},[1441,3714,1987],{"class":1447},[1441,3716,3718,3720,3722,3724,3726,3728,3730,3732,3734,3736,3738,3740,3742,3744,3746,3748,3750,3752,3754,3756,3758,3760,3762,3764,3766,3768,3770,3773,3775],{"class":1443,"line":3717},43,[1441,3719,2563],{"class":1447},[1441,3721,3172],{"class":1695},[1441,3723,1461],{"class":1447},[1441,3725,1464],{"class":1447},[1441,3727,1741],{"class":1447},[1441,3729,1467],{"class":1447},[1441,3731,2577],{"class":2576},[1441,3733,1461],{"class":1447},[1441,3735,1464],{"class":1447},[1441,3737,1467],{"class":1447},[1441,3739,3212],{"class":1470},[1441,3741,1461],{"class":1447},[1441,3743,1793],{"class":1447},[1441,3745,1467],{"class":1447},[1441,3747,3212],{"class":2576},[1441,3749,1461],{"class":1447},[1441,3751,1464],{"class":1447},[1441,3753,1467],{"class":1447},[1441,3755,3172],{"class":1470},[1441,3757,1461],{"class":1447},[1441,3759,1793],{"class":1447},[1441,3761,1467],{"class":1447},[1441,3763,2512],{"class":2576},[1441,3765,1461],{"class":1447},[1441,3767,1464],{"class":1447},[1441,3769,1467],{"class":1447},[1441,3771,3772],{"class":1470},"result",[1441,3774,1461],{"class":1447},[1441,3776,1987],{"class":1447},[1441,3778,3780,3782,3784,3786,3788,3790,3792,3794,3796,3798,3800,3802,3804,3806,3808,3810,3812,3814,3816,3819,3821],{"class":1443,"line":3779},44,[1441,3781,2563],{"class":1447},[1441,3783,2577],{"class":1695},[1441,3785,1461],{"class":1447},[1441,3787,1464],{"class":1447},[1441,3789,1741],{"class":1447},[1441,3791,1467],{"class":1447},[1441,3793,2577],{"class":2576},[1441,3795,1461],{"class":1447},[1441,3797,1464],{"class":1447},[1441,3799,1467],{"class":1447},[1441,3801,2586],{"class":1470},[1441,3803,1461],{"class":1447},[1441,3805,1793],{"class":1447},[1441,3807,1467],{"class":1447},[1441,3809,2595],{"class":2576},[1441,3811,1461],{"class":1447},[1441,3813,1464],{"class":1447},[1441,3815,1467],{"class":1447},[1441,3817,3818],{"class":1470},"overdue-sweep",[1441,3820,1461],{"class":1447},[1441,3822,1752],{"class":1447},[1441,3824,3826],{"class":1443,"line":3825},45,[1441,3827,2739],{"class":1447},[1441,3829,3831],{"class":1443,"line":3830},46,[1441,3832,2745],{"class":1447},[1441,3834,3836],{"class":1443,"line":3835},47,[1441,3837,2751],{"class":1447},[1441,3839,3841],{"class":1443,"line":3840},48,[1441,3842,2757],{"class":1447},[1441,3844,3846],{"class":1443,"line":3845},49,[1441,3847,2763],{"class":1447},[1441,3849,3851],{"class":1443,"line":3850},50,[1441,3852,1542],{"class":1447},[1203,3854,3855,3856,1650,3859,3861,3862,2129,3865,2129,3868,2129,3871,2129,3874,2129,3876,2129,3879,2129,3881,2129,3884,2129,3887,2129,3890,2129,3893,2129,3896,3899,3900,2129,3903,1346,3906,1214],{},"Conditions take ",[1326,3857,3858],{},"{\"step\": S, \"field\": F, \"op\": OP, \"value\": V}",[1326,3860,2512],{}," may be a dotted path into the step's output. Operators: ",[1326,3863,3864],{},"eq",[1326,3866,3867],{},"ne",[1326,3869,3870],{},"in",[1326,3872,3873],{},"not_in",[1326,3875,2538],{},[1326,3877,3878],{},"falsy",[1326,3880,3254],{},[1326,3882,3883],{},"gte",[1326,3885,3886],{},"lt",[1326,3888,3889],{},"lte",[1326,3891,3892],{},"contains",[1326,3894,3895],{},"not_contains",[1326,3897,3898],{},"regex",". Combine them with ",[1326,3901,3902],{},"{\"all_of\": [...]}",[1326,3904,3905],{},"{\"any_of\": [...]}",[1326,3907,3908],{},"{\"not\": ...}",[1655,3910,3911],{},[1203,3912,3913,3914,3917,3918,3921],{},"Do not use ",[1326,3915,3916],{},"control.flow.guard"," to stop early. A guard that does not hold ",[1211,3919,3920],{},"fails"," the run: you get a failed run on every empty pass, and the failures hide the real ones. Use conditions.",[1203,3923,3924],{},"An interval schedule whose runs keep finding nothing to do (ten in a row) may be slowed down automatically, up to 15 minutes between fires. The next run that does real work restores the normal pace. If the work needs a prompt reaction, that is the sign it should be a change trigger.",[1289,3926,3928],{"id":3927},"_5-keep-pure-logic-inline","5. Keep pure logic inline",[1203,3930,3931,3932,3935,3936,2129,3939,3942,3943,3946,3947,3950,3951,3953],{},"Pure ",[1326,3933,3934],{},"control.*"," steps (value, collection, predicate, ",[1326,3937,3938],{},"math.compute",[1326,3940,3941],{},"switch.select",", text and ",[1326,3944,3945],{},"time.now",") are ",[1211,3948,3949],{},"evaluated inside the run"," instead of starting a step of their own, so they add no state rows. Consecutive layers of pure steps are fused into one. In the example above, ",[1326,3952,3172],{}," is inline.",[1203,3955,3956,3957,1346,3960,3962,3963,3966],{},"You do not need to mark them. Check the result instead: ",[1326,3958,3959],{},"composition.validate",[1326,3961,1629],{}," return ",[1326,3964,3965],{},"inline_steps",", the steps that will run inline.",[1607,3968,3969,3979,3989,4006],{},[1610,3970,3971,3974,3975,3978],{},[1326,3972,3973],{},"\"inline\": false"," on a step opts it out. ",[1326,3976,3977],{},"\"inline\": true"," on a step that is not eligible is a validation error.",[1610,3980,3981,3982,1414,3985,3988],{},"A step with ",[1326,3983,3984],{},"fan_out",[1326,3986,3987],{},"transient"," is never inline.",[1610,3990,3991,2129,3993,2129,3996,2129,3999,1346,4002,4005],{},[1326,3992,3916],{},[1326,3994,3995],{},"control.flow.wait",[1326,3997,3998],{},"control.poll.until",[1326,4000,4001],{},"control.http.request",[1326,4003,4004],{},"control.math.random"," always run as their own step.",[1610,4007,4008],{},"Don't split pure logic into sub-compositions just for structure. A sub-composition is a run of its own.",[1203,4010,4011,4012,4015,4016,4018,4019,4022],{},"A version saved before inline evaluation was available keeps its old compiled form. To upgrade it, save again with ",[1326,4013,4014],{},"recompile_inline: true",". That writes a new version even if the definition is unchanged. Schedules and triggers that point at the lineage ORN pick it up; anything pinned to the old ",[1326,4017,1637],{}," is listed in ",[1326,4020,4021],{},"stale_dependents"," and must be re-pointed.",[1289,4024,4026],{"id":4025},"_6-write-only-what-changed-and-carry-little-data","6. Write only what changed, and carry little data",[1607,4028,4029,4039,4056,4065,4082],{},[1610,4030,4031,4034,4035,4038],{},[1211,4032,4033],{},"Write the difference."," Don't upsert every record on every pass. Select only the rows whose stored value differs from the value you would write, as the ",[1326,4036,4037],{},"WHERE status = 'open' AND due_date \u003C current_date"," clause does above, and write those.",[1610,4040,4041,4044,4045,4047,4048,4051,4052,4055],{},[1211,4042,4043],{},"Make writes idempotent."," Use ",[1326,4046,2795],{}," fields, upserts keyed on an external id (",[1326,4049,4050],{},"appdata.upsert-as-app",") or an ",[1326,4053,4054],{},"expected_updated_at"," precondition, so a retry or a repeated delivery is a no-op.",[1610,4057,4058,4061,4062,4064],{},[1211,4059,4060],{},"Pass ids, not documents."," Each layer's state carries the outputs of the steps before it. Select only the columns you need, ",[1326,4063,2857],{}," and page, and pass ids to later steps that can read what they need.",[1610,4066,4067,4070,4071,4073,4074,2129,4076,2129,4079,4081],{},[1211,4068,4069],{},"Read results, not echoes."," Pure ",[1326,4072,3934],{}," steps return their result fields (",[1326,4075,3772],{},[1326,4077,4078],{},"count",[1326,4080,2595],{},", …), not a copy of their inputs. Map from those fields.",[1610,4083,4084,4087],{},[1211,4085,4086],{},"Let poison items leave the queue."," An item that fails the same way every time (for example \"this name is already taken\") must be resolved, by adopting the existing resource or marking the item failed with a reason. Otherwise every run retries it forever.",[1289,4089,4091],{"id":4090},"_7-read-the-cost-before-you-activate","7. Read the cost before you activate",[1203,4093,4094,2129,4097,4099,4100,4102,4103,4106],{},[1211,4095,4096],{},"Before saving",[1326,4098,3959],{}," (and ",[1326,4101,1629],{},") return ",[1326,4104,4105],{},"cost_estimate",". For the overdue-invoices example:",[1432,4108,4110],{"className":1434,"code":4109,"language":1436,"meta":1437,"style":1437},"{\n  \"passed\": true,\n  \"inline_steps\": [\"patches\"],\n  \"cost_estimate\": {\n    \"floor\":   { \"steps\": 1, \"rows\": 6 },\n    \"ceiling\": { \"steps\": 3, \"rows\": 9 },\n    \"layers\": 3,\n    \"unbounded_fanouts\": [],\n    \"unresolved\": []\n  }\n}\n",[1326,4111,4112,4116,4130,4150,4162,4202,4241,4255,4269,4283,4288],{"__ignoreMap":1437},[1441,4113,4114],{"class":1443,"line":1444},[1441,4115,1448],{"class":1447},[1441,4117,4118,4120,4123,4125,4127],{"class":1443,"line":1451},[1441,4119,1454],{"class":1447},[1441,4121,4122],{"class":1457},"passed",[1441,4124,1461],{"class":1447},[1441,4126,1464],{"class":1447},[1441,4128,4129],{"class":1447}," true,\n",[1441,4131,4132,4134,4136,4138,4140,4142,4144,4146,4148],{"class":1443,"line":1479},[1441,4133,1454],{"class":1447},[1441,4135,3965],{"class":1457},[1441,4137,1461],{"class":1447},[1441,4139,1464],{"class":1447},[1441,4141,2001],{"class":1447},[1441,4143,1461],{"class":1447},[1441,4145,3172],{"class":1470},[1441,4147,1461],{"class":1447},[1441,4149,2011],{"class":1447},[1441,4151,4152,4154,4156,4158,4160],{"class":1443,"line":1500},[1441,4153,1454],{"class":1447},[1441,4155,4105],{"class":1457},[1441,4157,1461],{"class":1447},[1441,4159,1464],{"class":1447},[1441,4161,2557],{"class":1447},[1441,4163,4164,4167,4170,4172,4174,4177,4179,4181,4183,4185,4187,4189,4191,4193,4195,4197,4200],{"class":1443,"line":1520},[1441,4165,4166],{"class":1447},"    \"",[1441,4168,4169],{"class":1954},"floor",[1441,4171,1461],{"class":1447},[1441,4173,1464],{"class":1447},[1441,4175,4176],{"class":1447},"   {",[1441,4178,1467],{"class":1447},[1441,4180,2440],{"class":2056},[1441,4182,1461],{"class":1447},[1441,4184,1464],{"class":1447},[1441,4186,3385],{"class":2056},[1441,4188,1793],{"class":1447},[1441,4190,1467],{"class":1447},[1441,4192,3340],{"class":2056},[1441,4194,1461],{"class":1447},[1441,4196,1464],{"class":1447},[1441,4198,4199],{"class":2056}," 6",[1441,4201,1987],{"class":1447},[1441,4203,4204,4206,4209,4211,4213,4215,4217,4219,4221,4223,4226,4228,4230,4232,4234,4236,4239],{"class":1443,"line":1539},[1441,4205,4166],{"class":1447},[1441,4207,4208],{"class":1954},"ceiling",[1441,4210,1461],{"class":1447},[1441,4212,1464],{"class":1447},[1441,4214,1741],{"class":1447},[1441,4216,1467],{"class":1447},[1441,4218,2440],{"class":2056},[1441,4220,1461],{"class":1447},[1441,4222,1464],{"class":1447},[1441,4224,4225],{"class":2056}," 3",[1441,4227,1793],{"class":1447},[1441,4229,1467],{"class":1447},[1441,4231,3340],{"class":2056},[1441,4233,1461],{"class":1447},[1441,4235,1464],{"class":1447},[1441,4237,4238],{"class":2056}," 9",[1441,4240,1987],{"class":1447},[1441,4242,4243,4245,4247,4249,4251,4253],{"class":1443,"line":1770},[1441,4244,4166],{"class":1447},[1441,4246,2401],{"class":1954},[1441,4248,1461],{"class":1447},[1441,4250,1464],{"class":1447},[1441,4252,4225],{"class":2056},[1441,4254,1476],{"class":1447},[1441,4256,4257,4259,4262,4264,4266],{"class":1443,"line":1778},[1441,4258,4166],{"class":1447},[1441,4260,4261],{"class":1954},"unbounded_fanouts",[1441,4263,1461],{"class":1447},[1441,4265,1464],{"class":1447},[1441,4267,4268],{"class":1447}," [],\n",[1441,4270,4271,4273,4276,4278,4280],{"class":1443,"line":1815},[1441,4272,4166],{"class":1447},[1441,4274,4275],{"class":1954},"unresolved",[1441,4277,1461],{"class":1447},[1441,4279,1464],{"class":1447},[1441,4281,4282],{"class":1447}," []\n",[1441,4284,4285],{"class":1443,"line":1839},[1441,4286,4287],{"class":1447},"  }\n",[1441,4289,4290],{"class":1443,"line":2415},[1441,4291,1542],{"class":1447},[1219,4293,4294,4303],{},[1222,4295,4296],{},[1225,4297,4298,4300],{},[1228,4299,2086],{},[1228,4301,4302],{},"Meaning",[1238,4304,4305,4314,4323,4332],{},[1225,4306,4307,4311],{},[1243,4308,4309],{},[1326,4310,4169],{},[1243,4312,4313],{},"Rows of a run where every conditional step is skipped: the price of an empty run.",[1225,4315,4316,4320],{},[1243,4317,4318],{},[1326,4319,4208],{},[1243,4321,4322],{},"Rows of a run where every step runs. A ceiling over 100 rows adds a warning.",[1225,4324,4325,4329],{},[1243,4326,4327],{},[1326,4328,4261],{},[1243,4330,4331],{},"Steps that fan out over a list. Their cost grows with the list; bound the list.",[1225,4333,4334,4338],{},[1243,4335,4336],{},[1326,4337,4275],{},[1243,4339,4340],{},"Steps whose cost could not be estimated.",[1203,4342,4343,2129,4346,1346,4348,3962,4350,4353,4354,2129,4356,2129,4358,2129,4361,4364,4365,4368,4369,4372],{},[1211,4344,4345],{},"When scheduling",[1326,4347,1341],{},[1326,4349,1644],{},[1326,4351,4352],{},"estimated_rows_per_day"," (",[1326,4355,4169],{},[1326,4357,4208],{},[1326,4359,4360],{},"runs_per_day",[1326,4362,4363],{},"rows_per_run",") and ",[1326,4366,4367],{},"warnings",". A schedule that fires more often than every 5 minutes and writes more than 20,000 rows a day gets a cost warning. ",[1326,4370,4371],{},"cost_ack: true"," accepts it; only pass it when you can say why in the schedule's name.",[1203,4374,4375,4378,4379,4382,4383,4386,4387,4353,4390,4393,4394,2129,4397,2129,4399,2129,4401,1346,4404,4407,4408,4410,4411,4414],{},[1211,4376,4377],{},"After a day",", run ",[1326,4380,4381],{},"data.composition.cost"," with the composition's ",[1326,4384,4385],{},"lineage_uuid"," or the ",[1326,4388,4389],{},"schedule_uuid",[1326,4391,4392],{},"window_hours"," defaults to 24, up to 168). It reports ",[1326,4395,4396],{},"runs",[1326,4398,3340],{},[1326,4400,4363],{},[1326,4402,4403],{},"bytes",[1326,4405,4406],{},"empty_runs",", the runs that did nothing after layer 1. If ",[1326,4409,4406],{}," is more than about half of ",[1326,4412,4413],{},"runs_with_stats",", go back to sections 1 and 4.",[1289,4416,4418],{"id":4417},"checklist","Checklist",[1203,4420,4421,4422,2129,4425,1414,4427,1464],{},"Before ",[1326,4423,4424],{},"composition.activate",[1326,4426,1341],{},[1326,4428,1328],{},[1607,4430,4433,4442,4448,4456,4465,4474,4480,4486,4500],{"className":4431},[4432],"contains-task-list",[1610,4434,4437,4441],{"className":4435},[4436],"task-list-item",[2710,4438],{"disabled":4439,"type":4440},true,"checkbox"," What starts the run matches the table in section 1: a trigger for a queue, cron with a timezone for fixed times.",[1610,4443,4445,4447],{"className":4444},[4436],[2710,4446],{"disabled":4439,"type":4440}," Schedules and triggers point at the lineage ORN, or at the version you just saved.",[1610,4449,4451,4453,4454,1214],{"className":4450},[4436],[2710,4452],{"disabled":4439,"type":4440}," Layer 1 is one cheap check, and every later step and sub-composition has a ",[1326,4455,2501],{},[1610,4457,4459,4461,4462,4464],{"className":4458},[4436],[2710,4460],{"disabled":4439,"type":4440}," No ",[1326,4463,3916],{}," used as an early stop.",[1610,4466,4468,4470,4471,4473],{"className":4467},[4436],[2710,4469],{"disabled":4439,"type":4440}," ",[1326,4472,3965],{}," is not empty when the composition has pure logic.",[1610,4475,4477,4479],{"className":4476},[4436],[2710,4478],{"disabled":4439,"type":4440}," Writes are diff-only and idempotent; failing items leave the queue.",[1610,4481,4483,4485],{"className":4482},[4436],[2710,4484],{"disabled":4439,"type":4440}," Step outputs are small: ids and the columns you need.",[1610,4487,4489,4491,4492,1346,4494,4496,4497,1214],{"className":4488},[4436],[2710,4490],{"disabled":4439,"type":4440}," You have read ",[1326,4493,4105],{},[1326,4495,4352],{},", and there is no unexplained ",[1326,4498,4499],{},"cost_ack",[1610,4501,4503,4505,4506,4508],{"className":4502},[4436],[2710,4504],{"disabled":4439,"type":4440}," A day later, ",[1326,4507,4381],{}," shows a low share of empty runs.",[1289,4510,4512],{"id":4511},"related","Related",[1607,4514,4515,4519,4523,4527],{},[1610,4516,4517],{},[1207,4518,90],{"href":91},[1610,4520,4521],{},[1207,4522,75],{"href":76},[1610,4524,4525],{},[1207,4526,600],{"href":601},[1610,4528,4529],{},[1207,4530,4531],{"href":227},"Platform services",[4533,4534,4535],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .su27w, html code.shiki .su27w{--shiki-light:#916B53;--shiki-default:#916B53;--shiki-dark:#916B53}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":1437,"searchDepth":1444,"depth":1451,"links":4537},[4538,4539,4540,4541,4542,4543,4544,4545,4546],{"id":1291,"depth":1451,"text":1292},{"id":1404,"depth":1451,"text":1405},{"id":1666,"depth":1451,"text":1667},{"id":2841,"depth":1451,"text":2842},{"id":3927,"depth":1451,"text":3928},{"id":4025,"depth":1451,"text":4026},{"id":4090,"depth":1451,"text":4091},{"id":4417,"depth":1451,"text":4418},{"id":4511,"depth":1451,"text":4512},"Start compositions from data changes or cron times instead of minute polls, skip empty runs, keep pure logic inline, write only what changed, and read the cost estimate before you activate","md",null,{},{"icon":83},{"title":80,"description":4547},"2B8ugZ1GHtT7WHdhbeLcm061DWRxZ6TkhAZmKMld0FA",[4555,4557],{"title":75,"path":76,"stem":77,"description":4556,"icon":78,"children":-1},"Point a provider's webhook at a Hook URL, run a composition on each delivery, and act only on what the provider's API confirms. Worked example — Banco Inter Pix and boletos",{"title":85,"path":86,"stem":87,"description":4558,"icon":88,"children":-1},"Express a goal to DGI, review the workflow plan it assembles, and promote a good plan into a reusable deterministic virtual workflow",1794361932910]