Limited Release. The EDK is currently in limited release and is not available to all customers. Commands, generated file layouts, and package APIs may change before general availability. Confirm you’re on the latest EDK version before starting new projects.
The EDK compares authored TypeScript with state and the live Elementum target, then shows the changes required to make them match.
Run the workflow from the marked <instance>/<organization> workspace:
npx tsc --noEmitelementum planelementum applyelementum plan
Each command has a distinct purpose:
npx tsc --noEmit checks TypeScript without generating JavaScript.
elementum plan builds the current source, then previews the EDK changes for the selected Elementum target.
elementum apply builds again, then applies the reviewed changes.
A final elementum plan should report no changes.
You do not need to run elementum build before plan or apply. Use it when you want to generate and inspect .tf/out/ without contacting the platform. Use --skip-build only when you deliberately want plan or apply to use the existing .tf/out/ output.
plan and apply always operate on the full organization workspace. You can pass the organization root or any nested path:
elementum planelementum plan apps/intake/intake.ts
The nested path only helps locate the marked organization root. It does not limit the plan to one App, Element, or file.Before applying, account for every reported operation:
Add creates a resource that is configured but not bound in state.
Change updates a resource in place. The plan may instead report a replacement when the changed property cannot be updated.
Destroy removes a resource that remains in state but is absent from the built configuration.
Unexpected replacements and destroys are blockers. Resolve them before applying.
A converged workspace produces a zero-change plan. If the EDK still proposes changes, do not repeatedly apply. Compare the remaining diff with the authored source, generated diagnostics, selected profile, and backend binding.
Behind the EDK workflow, OpenTofu state provides the durable mapping between authored labels and live Elementum objects. Losing or using the wrong state can make existing objects appear new.For compatibility, an organization workspace without backend.tf uses a committed root terraform.tfstate through a generated local backend. This supports a single-author workspace but does not provide locking. Avoid concurrent plans or applies.Shared workspaces and CI should commit a non-secret <orgRoot>/backend.tf that declares a remote backend with verified locking. During build, the EDK copies that declaration to .tf/out/backend.tf. The backend locks state during plans, applies, pulls, renames, and repairs.Never commit:
.tf/ or .terraform/
Backend credentials
Saved plan files
Recovery snapshots
Keep credentials in the backend’s normal environment or workload-identity chain. EDK does not provision backend infrastructure and does not accept secrets in backend.tf.
Use the guarded migration command when moving local state to a declared remote backend or changing remote backends:
elementum migrate backend <orgRoot> --checkelementum migrate backend <orgRoot> --dry-runelementum migrate backend <orgRoot> --auto-approveelementum plan <orgRoot>
The migration creates an ignored recovery snapshot, verifies the result, and requires a final zero-change plan. Follow the exact rollback instructions printed if it fails.
If state is lost, do not run apply. The EDK can interpret live resources as new and attempt to create duplicates.
Restore the recovery snapshot when available. Otherwise, refresh organization references and re-pull each existing managed root:
elementum --profile <profile> pull org --data-onlycd <instance>/<organization>elementum pull app <namespace>elementum pull element <namespace>elementum pull table <name-or-handle>elementum pull task <namespace>
Pull verifies the expected state bindings and requires a clean follow-up plan without changing the live resources.
elementum plan and elementum apply reconcile authored source with the organization and environment selected by authentication. They do not perform Elementum’s cross-environment promotion workflow.After testing an EDK change in a lower environment, use the platform promotion workflow to move it to another environment. If the promotion reports missing environment configuration, the /elementum-deployments playbook can review and configure it from the admin URL or asyncTaskId.See Authentication for target selection and Playbooks for the promotion and UAT playbooks.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Elementum Documentation","colors":{"primary":"#3B82F6","light":"#60A5FA","dark":"#2563EB"},"logo":{"light":"https://mintcdn.com/elementum/zEtDA8cEluOX9_Yd/logo/light.svg?fit=max\u0026auto=format\u0026n=zEtDA8cEluOX9_Yd\u0026q=85\u0026s=6f2a0a929de00ded269314ca98595339","dark":"https://mintcdn.com/elementum/zEtDA8cEluOX9_Yd/logo/dark.svg?fit=max\u0026auto=format\u0026n=zEtDA8cEluOX9_Yd\u0026q=85\u0026s=d6be9d3c273193977ee10bd4e34e7c69"},"favicon":"https://mintcdn.com/elementum/HFcyqoOHMh59mvyA/favicon.ico?fit=max\u0026auto=format\u0026n=HFcyqoOHMh59mvyA\u0026q=85\u0026s=e813105031a6caa3ee74fd5f49883eb4","api":{"openapi":"api-reference/openapi.json"},"navbar":{"links":[],"primary":{"type":"button","label":"Open Elementum","href":"https://elementum.io"}},"footer":{"socials":{"linkedin":"https://linkedin.com/company/elementum-ai"}},"icons":{"library":"lucide"},"styling":{"latex":false},"navigation":{"global":{"anchors":[]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"elementum","hasAudioNarration":false,"actualSubdomain":"elementum","customDomains":["docs.elementum.io"],"gitSource":{"type":"github","owner":"elementumltd","repo":"documentation","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af4de184dc8af6833d36bc3","clientVersion":"0.0.4117","searchFilterCounts":[{"language":"default","tag":"Administration","count":31},{"language":"default","tag":"Workflows","count":31},{"language":"default","tag":"API Reference","count":29},{"language":"default","tag":"AI \u0026 Agents","count":28},{"language":"default","tag":"Overview","count":20},{"language":"default","tag":"EDK","count":13},{"language":"default","tag":"Record Management","count":12},{"language":"default","tag":"Platform Administration","count":11},{"language":"default","tag":"Connections","count":10},{"language":"default","tag":"Build agents","count":10}]},"assistantConfig":{"enableStarterQuestions":false,"deflection":{"enabled":true,"email":"support@elementum.elementum.io","showHelpButton":false}},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"#topbar-cta-button span{border-radius:.5rem}button{border-radius:.5rem!important}a.card{border-color:rgba(59, 130, 246, 0.4)!important;transition:border-color 0.2s ease, box-shadow 0.2s ease}a.card:hover{border-color:#3B82F6!important;box-shadow:0 2px 8px rgba(59, 130, 246, 0.2)}.dark a.card{border-color:rgba(96, 165, 250, 0.4)!important}.dark a.card:hover{border-color:#60A5FA!important;box-shadow:0 2px 8px rgba(96, 165, 250, 0.2)}.inline-ui-icon{display:inline!important;width:1em;height:1em;vertical-align:middle;margin:0}.dark .inline-ui-icon[src$=\".png\"]{background-color:#e5e7eb;border-radius:3px;box-shadow:0 0 0 2px #e5e7eb}p .inline-ui-icon,li .inline-ui-icon,td .inline-ui-icon{display:inline!important}p span:has(>svg),li span:has(>svg),td span:has(>svg){display:inline!important;vertical-align:middle}p span:has(>svg) svg,li span:has(>svg) svg,td span:has(>svg) svg{display:inline-block!important;vertical-align:middle;width:1em;height:1em}.update:has(h3)>div:first-child{display:none!important}.update:has(h3)>div:last-child{width:100%!important;max-width:100%!important}@media (min-width: 1024px){.update:not(:has(h3))>div:first-child{flex:0 0 260px!important;width:260px!important;max-width:260px!important}}.deprecation-schedule table,.deprecation-schedule th,.deprecation-schedule td{font-size:1rem!important}.deprecation-schedule th,.deprecation-schedule td{padding-top:0.65rem!important;padding-bottom:0.65rem!important}.deprecation-schedule td code,.deprecation-schedule th code{font-size:0.9375rem!important}.email-form input{color:rgb(24 24 27);caret-color:rgb(24 24 27)}.email-form input:-webkit-autofill,.email-form input:-webkit-autofill:hover,.email-form input:-webkit-autofill:focus,.email-form input:-webkit-autofill:active{-webkit-text-fill-color:rgb(24 24 27)!important;-webkit-box-shadow:0 0 0 1000px #ffffff inset!important;caret-color:rgb(24 24 27)!important;transition:background-color 5000s ease-in-out 0s}.dark .email-form input{color:rgb(244 244 245);caret-color:rgb(244 244 245)}.dark .email-form input:-webkit-autofill,.dark .email-form input:-webkit-autofill:hover,.dark .email-form input:-webkit-autofill:focus,.dark .email-form input:-webkit-autofill:active{-webkit-text-fill-color:rgb(244 244 245)!important;-webkit-box-shadow:0 0 0 1000px rgb(24 24 27) inset!important;caret-color:rgb(244 244 245)!important;transition:background-color 5000s ease-in-out 0s}"}],"page":{"pagePath":"edk/plan-and-apply","slug":"/edk/plan-and-apply","pageMetadata":{"title":"Plan and Apply","description":"Review, apply, and recover EDK changes.","href":"/edk/plan-and-apply"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Review, apply, and recover EDK changes.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Limited Release.`}),` The EDK is currently in limited release and is not available to all customers. Commands, generated file layouts, and package APIs may change before general availability. Confirm you’re on the latest EDK version before starting new projects.`]})}),`\n`,_jsx(_components.p,{children:`The EDK compares authored TypeScript with state and the live Elementum target, then shows the changes required to make them match.`}),`\n`,_jsx(Heading,{level:`2`,id:`plan-and-apply-workflow`,children:`Plan and apply workflow`}),`\n`,_jsxs(_components.p,{children:[`Run the workflow from the marked `,_jsx(_components.code,{children:`\u003cinstance>/\u003corganization>`}),` workspace:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`npx`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` tsc`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --noEmit`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`elementum`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` plan`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`elementum`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` apply`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`elementum`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` plan`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Each command has a distinct purpose:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`npx tsc --noEmit`}),` checks TypeScript without generating JavaScript.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`elementum plan`}),` builds the current source, then previews the EDK changes for the selected Elementum target.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`elementum apply`}),` builds again, then applies the reviewed changes.`]}),`\n`,_jsxs(_components.li,{children:[`A final `,_jsx(_components.code,{children:`elementum plan`}),` should report no changes.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`You do not need to run `,_jsx(_components.code,{children:`elementum build`}),` before `,_jsx(_components.code,{children:`plan`}),` or `,_jsx(_components.code,{children:`apply`}),`. Use it when you want to generate and inspect `,_jsx(_components.code,{children:`.tf/out/`}),` without contacting the platform. Use `,_jsx(_components.code,{children:`--skip-build`}),` only when you deliberately want `,_jsx(_components.code,{children:`plan`}),` or `,_jsx(_components.code,{children:`apply`}),` to use the existing `,_jsx(_components.code,{children:`.tf/out/`}),` output.`]}),`\n`,_jsx(Heading,{level:`2`,id:`review-the-complete-workspace`,children:`Review the complete workspace`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`plan`}),` and `,_jsx(_components.code,{children:`apply`}),` always operate on the full organization workspace. You can pass the organization root or any nested path:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`elementum`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` plan`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`elementum`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` plan`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` apps/intake/intake.ts`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`The nested path only helps locate the marked organization root. It does not limit the plan to one App, Element, or file.`}),`\n`,_jsx(_components.p,{children:`Before applying, account for every reported operation:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Add`}),` creates a resource that is configured but not bound in state.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Change`}),` updates a resource in place. The plan may instead report a replacement when the changed property cannot be updated.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Destroy`}),` removes a resource that remains in state but is absent from the built configuration.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Unexpected replacements and destroys are blockers. Resolve them before applying.`}),`\n`,_jsx(Heading,{level:`2`,id:`apply-and-confirm-the-result`,children:`Apply and confirm the result`}),`\n`,_jsx(_components.p,{children:`Apply only the plan you reviewed:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`elementum`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` apply`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Then plan again:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`elementum`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` plan`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`A converged workspace produces a zero-change plan. If the EDK still proposes changes, do not repeatedly apply. Compare the remaining diff with the authored source, generated diagnostics, selected profile, and backend binding.`}),`\n`,_jsx(Heading,{level:`2`,id:`backend-and-state`,children:`Backend and state`}),`\n`,_jsx(_components.p,{children:`Behind the EDK workflow, OpenTofu state provides the durable mapping between authored labels and live Elementum objects. Losing or using the wrong state can make existing objects appear new.`}),`\n`,_jsxs(_components.p,{children:[`For compatibility, an organization workspace without `,_jsx(_components.code,{children:`backend.tf`}),` uses a committed root `,_jsx(_components.code,{children:`terraform.tfstate`}),` through a generated local backend. This supports a single-author workspace but does not provide locking. Avoid concurrent plans or applies.`]}),`\n`,_jsxs(_components.p,{children:[`Shared workspaces and CI should commit a non-secret `,_jsx(_components.code,{children:`\u003corgRoot>/backend.tf`}),` that declares a remote backend with verified locking. During build, the EDK copies that declaration to `,_jsx(_components.code,{children:`.tf/out/backend.tf`}),`. The backend locks state during plans, applies, pulls, renames, and repairs.`]}),`\n`,_jsx(_components.p,{children:`Never commit:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`.tf/`}),` or `,_jsx(_components.code,{children:`.terraform/`})]}),`\n`,_jsx(_components.li,{children:`Backend credentials`}),`\n`,_jsx(_components.li,{children:`Saved plan files`}),`\n`,_jsx(_components.li,{children:`Recovery snapshots`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Keep credentials in the backend’s normal environment or workload-identity chain. EDK does not provision backend infrastructure and does not accept secrets in `,_jsx(_components.code,{children:`backend.tf`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`migrate-or-recover-state`,children:`Migrate or recover state`}),`\n`,_jsx(_components.p,{children:`Use the guarded migration command when moving local state to a declared remote backend or changing remote backends:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`elementum`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` migrate`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` backend`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`orgRoo`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`t`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --check`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`elementum`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` migrate`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` backend`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`orgRoo`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`t`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --dry-run`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`elementum`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` migrate`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` backend`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`orgRoo`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`t`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --auto-approve`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`elementum`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` plan`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`orgRoo`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`t`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`The migration creates an ignored recovery snapshot, verifies the result, and requires a final zero-change plan. Follow the exact rollback instructions printed if it fails.`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`If state is lost, do not run `,_jsx(_components.code,{children:`apply`}),`. The EDK can interpret live resources as new and attempt to create duplicates.`]})}),`\n`,_jsx(_components.p,{children:`Restore the recovery snapshot when available. Otherwise, refresh organization references and re-pull each existing managed root:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`elementum`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --profile`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`profil`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`e`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` pull`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` org`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --data-only`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`cd`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`instanc`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`e`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`organizatio`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`n`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`elementum`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` pull`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` app`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`namespac`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`e`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`elementum`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` pull`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` element`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`namespac`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`e`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`elementum`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` pull`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` table`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`name-or-handl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`e`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`elementum`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` pull`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` task`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`namespac`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`e`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Pull verifies the expected state bindings and requires a clean follow-up plan without changing the live resources.`}),`\n`,_jsx(Heading,{level:`2`,id:`apply-versus-environment-promotion`,children:`Apply versus environment promotion`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`elementum plan`}),` and `,_jsx(_components.code,{children:`elementum apply`}),` reconcile authored source with the organization and environment selected by authentication. They do not perform Elementum’s cross-environment promotion workflow.`]}),`\n`,_jsxs(_components.p,{children:[`After testing an EDK change in a lower environment, use the platform promotion workflow to move it to another environment. If the promotion reports missing environment configuration, the `,_jsx(_components.code,{children:`/elementum-deployments`}),` playbook can review and configure it from the admin URL or `,_jsx(_components.code,{children:`asyncTaskId`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/edk/authentication`,children:`Authentication`}),` for target selection and `,_jsx(_components.a,{href:`/edk/playbooks`,children:`Playbooks`}),` for the promotion and UAT playbooks.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Plan and Apply","description":"Review, apply, and recover EDK changes.","href":"/edk/plan-and-apply"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Plan and apply workflow","slug":"plan-and-apply-workflow","depth":2,"children":[]},{"title":"Review the complete workspace","slug":"review-the-complete-workspace","depth":2,"children":[]},{"title":"Apply and confirm the result","slug":"apply-and-confirm-the-result","depth":2,"children":[]},{"title":"Backend and state","slug":"backend-and-state","depth":2,"children":[]},{"title":"Migrate or recover state","slug":"migrate-or-recover-state","depth":2,"children":[]},{"title":"Apply versus environment promotion","slug":"apply-versus-environment-promotion","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"elementum","siteName":"Elementum Documentation","title":"Plan and Apply - Elementum Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-21T20:58:01.176Z","originalFileLocation":"edk/plan-and-apply.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Review, apply, and recover EDK changes.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Elementum Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/elementum/61PalhAEBeln8LgR/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/elementum/61PalhAEBeln8LgR/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/elementum/61PalhAEBeln8LgR/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/elementum/61PalhAEBeln8LgR/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/elementum/61PalhAEBeln8LgR/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/elementum/61PalhAEBeln8LgR/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/elementum/61PalhAEBeln8LgR/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/elementum/61PalhAEBeln8LgR/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/elementum/61PalhAEBeln8LgR/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Plan and Apply - Elementum Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Review, apply, and recover EDK changes.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Elementum Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.elementum.io/edk/plan-and-apply\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://elementum.mintlify.site/_mintlify/api/og/v2?division=Guides\u0026amp;title=Plan+and+Apply\u0026amp;description=Review%2C+apply%2C+and+recover+EDK+changes.\u0026amp;theme=f2077c0582052f05ca4a5fc0\u0026amp;signature=35f7d52d11efff2c935288fd80e876e2a7215b65c2f406a5001e1c2a5be22c1f\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Plan and Apply - Elementum Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Review, apply, and recover EDK changes.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://elementum.mintlify.site/_mintlify/api/og/v2?division=Guides\u0026amp;title=Plan+and+Apply\u0026amp;description=Review%2C+apply%2C+and+recover+EDK+changes.\u0026amp;theme=f2077c0582052f05ca4a5fc0\u0026amp;signature=35f7d52d11efff2c935288fd80e876e2a7215b65c2f406a5001e1c2a5be22c1f\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/elementum/61PalhAEBeln8LgR/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Elementum Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3B82F6\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.elementum.io/edk/plan-and-apply\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/edk/plan-and-apply.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.elementum.io/#organization\",\"name\":\"Elementum Documentation\",\"url\":\"https://docs.elementum.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/elementum/zEtDA8cEluOX9_Yd/logo/light.svg?fit=max\u0026auto=format\u0026n=zEtDA8cEluOX9_Yd\u0026q=85\u0026s=6f2a0a929de00ded269314ca98595339\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.elementum.io#website\",\"name\":\"Elementum Documentation\",\"url\":\"https://docs.elementum.io\",\"publisher\":{\"@id\":\"https://docs.elementum.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.elementum.io/edk/plan-and-apply#webpage\",\"url\":\"https://docs.elementum.io/edk/plan-and-apply\",\"name\":\"Plan and Apply\",\"description\":\"Review, apply, and recover EDK changes.\",\"dateModified\":\"2026-08-21T20:58:01.176Z\",\"isPartOf\":{\"@id\":\"https://docs.elementum.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.elementum.io/edk/plan-and-apply#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.elementum.io/edk/plan-and-apply#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Guides\",\"item\":\"https://docs.elementum.io/edk/installation\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Plan and Apply\",\"item\":\"https://docs.elementum.io/edk/plan-and-apply\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.elementum.io/edk/plan-and-apply#article\",\"headline\":\"Plan and Apply\",\"name\":\"Plan and Apply\",\"description\":\"Review, apply, and recover EDK changes.\",\"url\":\"https://docs.elementum.io/edk/plan-and-apply\",\"mainEntityOfPage\":{\"@id\":\"https://docs.elementum.io/edk/plan-and-apply#webpage\"},\"dateModified\":\"2026-08-21T20:58:01.176Z\",\"publisher\":{\"@id\":\"https://docs.elementum.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.elementum.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Elementum Documentation\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Elementum Documentation\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/edk/plan-and-apply.md","siteName":"Elementum Documentation","nav":{"global":{"anchors":[]},"tabs":[{"tab":"Overview","pages":[{"title":"Overview","href":"/getting-started/welcome-to-elementum"}]},{"tab":"Workflows","pages":[{"title":"Workflows","href":"/getting-started/build-an-app"}]},{"tab":"AI \u0026 Agents","pages":[{"title":"AI \u0026 Agents","href":"/ai-agents/ai-overview"}]},{"tab":"Data \u0026 Analytics","pages":[{"title":"Data \u0026 Analytics","href":"/data/data-best-practices"}]},{"tab":"Administration","pages":[{"title":"Administration","href":"/administration/access-overview"}]},{"tab":"EDK","groups":[{"group":"Get Started","pages":[{"title":"Overview","href":"/edk/getting-started"},{"title":"Quickstart","href":"/edk/quickstart"}]},{"group":"Guides","pages":[{"title":"Installation","href":"/edk/installation"},{"title":"Authentication","href":"/edk/authentication"},{"title":"Playbooks","href":"/edk/playbooks"},{"title":"Authoring","description":"Pull existing Elementum solutions, edit typed source safely, and validate changes before planning.","href":"/edk/authoring"},{"title":"Plan and Apply","href":"/edk/plan-and-apply"},{"title":"Acceptance Testing","description":"Test deployed records, files, automations, agents, and complete business journeys.","href":"/edk/guides/acceptance-testing"},{"title":"Troubleshooting","href":"/edk/guides/troubleshooting"}]},{"group":"Design","pages":[{"title":"Design with EDK","href":"/edk/design/overview"},{"title":"Record Experiences","href":"/edk/guides/design"},{"title":"Design Validation","href":"/edk/design/validation"}]},{"group":"Reference","pages":[{"title":"CLI Reference","href":"/edk/cli-reference"}]}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/api-introduction"}]}]},"basePath":"","title":"Plan and Apply - Elementum Documentation","buildId":"dpl_41S5Z2jG9QnfDRwN1KZrLdBwj7DM","deploymentId":"dpl_41S5Z2jG9QnfDRwN1KZrLdBwj7DM","dynamics":[],"chunks":[]}