{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition"]},"redocly_category":"Guides","type":"markdown"},"seo":{"title":"Development lifecycle","description":"Everything about Mosaic Journeys, SDKs, and APIs","siteUrl":"https://developer.transmitsecurity.com/"},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"development-lifecycle","__idx":0},"children":["Development lifecycle"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This guide walks you through how you develop, test, and release with Mosaic—working safely in the sandbox, then promoting configuration between tenants. Before you start, make sure you're familiar with how Mosaic is structured: see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/deployment/how_mosaic_is_organized"},"children":["How Mosaic is organized"]}," for a primer, and ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/deployment/understand_environments_regions_tenants"},"children":["Understand environments, regions, and tenants"]}," for how to choose an environment and region and plan your tenants."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Lifecycle"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["At a high level, you build and iterate in the sandbox, promote your configuration to a pre-production tenant for validation, and then promote it to your production tenant for live traffic."]}]},{"$$mdtype":"Tag","name":"Diagram","attributes":{"data-language":"mermaid","diagramType":"mermaid","diagramSource":"flowchart LR\n    subgraph SANDBOX[\"Sandbox environment\"]\n        DEV[\"Dev tenant<br/>Build and iterate\"]\n    end\n    subgraph PRODUCTION[\"Production environment (e.g., US region)\"]\n        PREPROD[\"Pre-production tenant<br/>UAT, QA, validation\"]\n        LIVE[\"Production tenant<br/>Live traffic\"]\n    end\n    DEV -->|Promote changes| PREPROD\n    PREPROD -->|Promote changes| LIVE\n","diagramHtml":"<svg id=\"diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1041.75px;\" viewBox=\"0 0 1041.75 164\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>\n    #diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 foreignObject {\n      overflow: visible;\n    }\n  </style><style>#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .error-icon{fill:#552222;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .error-text{fill:#552222;stroke:#552222;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .edge-thickness-normal{stroke-width:1px;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .edge-thickness-thick{stroke-width:3.5px;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .edge-pattern-solid{stroke-dasharray:0;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .edge-pattern-dashed{stroke-dasharray:3;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .edge-pattern-dotted{stroke-dasharray:2;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .marker{fill:#333333;stroke:#333333;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .marker.cross{stroke:#333333;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 svg{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:16px;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 p{margin:0;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .label{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;color:#333;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .cluster-label text{fill:#333;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .cluster-label span{color:#333;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .cluster-label span p{background-color:transparent;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .label text,#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 span{fill:#333;color:#333;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .node rect,#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .node circle,#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .node ellipse,#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .node polygon,#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .rough-node .label text,#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .node .label text,#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .image-shape .label,#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .icon-shape .label{text-anchor:middle;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .rough-node .label,#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .node .label,#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .image-shape .label,#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .icon-shape .label{text-align:center;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .node.clickable{cursor:pointer;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .arrowheadPath{fill:#333333;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .edgePath .path{stroke:#333333;stroke-width:1px;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .flowchart-link{stroke:#333333;fill:none;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .cluster text{fill:#333;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .cluster span{color:#333;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 rect.text{fill:none;stroke-width:0;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .icon-shape,#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .icon-shape p,#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .icon-shape .label rect,#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 .node .neo-node{stroke:#9370DB;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 [data-look=\"neo\"].node rect,#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 [data-look=\"neo\"].cluster rect,#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298 :root{--mermaid-font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;}</style><g><marker id=\"diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"><g class=\"cluster\" id=\"diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298-PRODUCTION\" data-look=\"classic\"><rect style=\"\" x=\"409.046875\" y=\"8\" width=\"624.703125\" height=\"148\"></rect><g class=\"cluster-label\" transform=\"translate(575.9921875, 8)\"><foreignObject width=\"290.8125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel\"><p>Production environment (e.g., US region)</p></span></div></foreignObject></g></g><g class=\"cluster\" id=\"diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298-SANDBOX\" data-look=\"classic\"><rect style=\"\" x=\"8\" y=\"8\" width=\"225.640625\" height=\"148\"></rect><g class=\"cluster-label\" transform=\"translate(42.9921875, 8)\"><foreignObject width=\"155.65625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel\"><p>Sandbox environment</p></span></div></foreignObject></g></g></g><g class=\"edgePaths\"><path d=\"M208.641,82L212.807,82C216.974,82,225.307,82,244.091,82C262.875,82,292.109,82,321.344,82C350.578,82,379.813,82,397.93,82C416.047,82,423.047,82,426.547,82L430.047,82\" id=\"diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298-L_DEV_PREPROD_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_DEV_PREPROD_0\" data-points=\"W3sieCI6MjA4LjY0MDYyNSwieSI6ODJ9LHsieCI6MjMzLjY0MDYyNSwieSI6ODJ9LHsieCI6MzIxLjM0Mzc1LCJ5Ijo4Mn0seyJ4Ijo0MDkuMDQ2ODc1LCJ5Ijo4Mn0seyJ4Ijo0MzQuMDQ2ODc1LCJ5Ijo4Mn1d\" data-look=\"classic\" marker-end=\"url(#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298_flowchart-v2-pointEnd)\"></path><path d=\"M647.922,82L662.539,82C677.156,82,706.391,82,734.958,82C763.526,82,791.427,82,805.378,82L819.328,82\" id=\"diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298-L_PREPROD_LIVE_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_PREPROD_LIVE_0\" data-points=\"W3sieCI6NjQ3LjkyMTg3NSwieSI6ODJ9LHsieCI6NzM1LjYyNSwieSI6ODJ9LHsieCI6ODIzLjMyODEyNSwieSI6ODJ9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(321.34375, 82)\"><g class=\"label\" data-id=\"L_DEV_PREPROD_0\" transform=\"translate(-62.703125, -12)\"><foreignObject width=\"125.40625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Promote changes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(735.625, 82)\"><g class=\"label\" data-id=\"L_PREPROD_LIVE_0\" transform=\"translate(-62.703125, -12)\"><foreignObject width=\"125.40625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Promote changes</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298-flowchart-DEV-0\" data-look=\"classic\" transform=\"translate(120.8203125, 82)\"><rect class=\"basic label-container\" style=\"\" x=\"-87.8203125\" y=\"-39\" width=\"175.640625\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-57.8203125, -24)\"><rect></rect><foreignObject width=\"115.640625\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Dev tenant<br>Build and iterate</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298-flowchart-PREPROD-1\" data-look=\"classic\" transform=\"translate(540.984375, 82)\"><rect class=\"basic label-container\" style=\"\" x=\"-106.9375\" y=\"-39\" width=\"213.875\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-76.9375, -24)\"><rect></rect><foreignObject width=\"153.875\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Pre-production tenant<br>UAT, QA, validation</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298-flowchart-LIVE-2\" data-look=\"classic\" transform=\"translate(916.0390625, 82)\"><rect class=\"basic label-container\" style=\"\" x=\"-92.7109375\" y=\"-39\" width=\"185.421875\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-62.7109375, -24)\"><rect></rect><foreignObject width=\"125.421875\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Production tenant<br>Live traffic</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"diagram-23c5561c048f5b882f8b8f30b14496632170c514f7013fc1316d45f1e4b8b298-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg>","diagramHtmlDark":"<svg id=\"diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1041.75px;\" viewBox=\"0 0 1041.75 164\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>\n    #diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 foreignObject {\n      overflow: visible;\n    }\n  </style><style>#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:16px;fill:#ccc;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .error-icon{fill:#a44141;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .error-text{fill:#ddd;stroke:#ddd;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .edge-thickness-normal{stroke-width:1px;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .edge-thickness-thick{stroke-width:3.5px;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .edge-pattern-solid{stroke-dasharray:0;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .edge-pattern-dashed{stroke-dasharray:3;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .edge-pattern-dotted{stroke-dasharray:2;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .marker{fill:lightgrey;stroke:lightgrey;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .marker.cross{stroke:lightgrey;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 svg{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:16px;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 p{margin:0;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .label{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;color:#ccc;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .cluster-label text{fill:#F9FFFE;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .cluster-label span{color:#F9FFFE;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .cluster-label span p{background-color:transparent;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .label text,#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 span{fill:#ccc;color:#ccc;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .node rect,#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .node circle,#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .node ellipse,#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .node polygon,#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .node path{fill:#1f2020;stroke:#ccc;stroke-width:1px;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .rough-node .label text,#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .node .label text,#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .image-shape .label,#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .icon-shape .label{text-anchor:middle;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .rough-node .label,#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .node .label,#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .image-shape .label,#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .icon-shape .label{text-align:center;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .node.clickable{cursor:pointer;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .root .anchor path{fill:lightgrey!important;stroke-width:0;stroke:lightgrey;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .arrowheadPath{fill:lightgrey;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .edgePath .path{stroke:lightgrey;stroke-width:1px;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .flowchart-link{stroke:lightgrey;fill:none;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .edgeLabel{background-color:hsl(0, 0%, 34.4117647059%);text-align:center;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .edgeLabel p{background-color:hsl(0, 0%, 34.4117647059%);}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .edgeLabel rect{opacity:0.5;background-color:hsl(0, 0%, 34.4117647059%);fill:hsl(0, 0%, 34.4117647059%);}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .labelBkg{background-color:rgba(87.75, 87.75, 87.75, 0.5);}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .cluster rect{fill:hsl(180, 1.5873015873%, 28.3529411765%);stroke:rgba(255, 255, 255, 0.25);stroke-width:1px;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .cluster text{fill:#F9FFFE;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .cluster span{color:#F9FFFE;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:12px;background:hsl(20, 1.5873015873%, 12.3529411765%);border:1px solid rgba(255, 255, 255, 0.25);border-radius:2px;pointer-events:none;z-index:100;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#ccc;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 rect.text{fill:none;stroke-width:0;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .icon-shape,#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .image-shape{background-color:hsl(0, 0%, 34.4117647059%);text-align:center;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .icon-shape p,#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .image-shape p{background-color:hsl(0, 0%, 34.4117647059%);padding:2px;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .icon-shape .label rect,#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .image-shape .label rect{opacity:0.5;background-color:hsl(0, 0%, 34.4117647059%);fill:hsl(0, 0%, 34.4117647059%);}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 .node .neo-node{stroke:#ccc;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 [data-look=\"neo\"].node rect,#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 [data-look=\"neo\"].cluster rect,#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 [data-look=\"neo\"].node polygon{stroke:url(#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 [data-look=\"neo\"].node path{stroke:url(#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8-gradient);stroke-width:1px;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 [data-look=\"neo\"].node .neo-line path{stroke:#ccc;filter:none;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 [data-look=\"neo\"].node circle{stroke:url(#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 [data-look=\"neo\"].icon-shape .icon{fill:url(#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8 :root{--mermaid-font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;}</style><g><marker id=\"diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"><g class=\"cluster\" id=\"diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8-PRODUCTION\" data-look=\"classic\"><rect style=\"\" x=\"409.046875\" y=\"8\" width=\"624.703125\" height=\"148\"></rect><g class=\"cluster-label\" transform=\"translate(575.9921875, 8)\"><foreignObject width=\"290.8125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel\"><p>Production environment (e.g., US region)</p></span></div></foreignObject></g></g><g class=\"cluster\" id=\"diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8-SANDBOX\" data-look=\"classic\"><rect style=\"\" x=\"8\" y=\"8\" width=\"225.640625\" height=\"148\"></rect><g class=\"cluster-label\" transform=\"translate(42.9921875, 8)\"><foreignObject width=\"155.65625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5;\"><span class=\"nodeLabel\"><p>Sandbox environment</p></span></div></foreignObject></g></g></g><g class=\"edgePaths\"><path d=\"M208.641,82L212.807,82C216.974,82,225.307,82,244.091,82C262.875,82,292.109,82,321.344,82C350.578,82,379.813,82,397.93,82C416.047,82,423.047,82,426.547,82L430.047,82\" id=\"diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8-L_DEV_PREPROD_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_DEV_PREPROD_0\" data-points=\"W3sieCI6MjA4LjY0MDYyNSwieSI6ODJ9LHsieCI6MjMzLjY0MDYyNSwieSI6ODJ9LHsieCI6MzIxLjM0Mzc1LCJ5Ijo4Mn0seyJ4Ijo0MDkuMDQ2ODc1LCJ5Ijo4Mn0seyJ4Ijo0MzQuMDQ2ODc1LCJ5Ijo4Mn1d\" data-look=\"classic\" marker-end=\"url(#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8_flowchart-v2-pointEnd)\"></path><path d=\"M647.922,82L662.539,82C677.156,82,706.391,82,734.958,82C763.526,82,791.427,82,805.378,82L819.328,82\" id=\"diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8-L_PREPROD_LIVE_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_PREPROD_LIVE_0\" data-points=\"W3sieCI6NjQ3LjkyMTg3NSwieSI6ODJ9LHsieCI6NzM1LjYyNSwieSI6ODJ9LHsieCI6ODIzLjMyODEyNSwieSI6ODJ9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(321.34375, 82)\"><g class=\"label\" data-id=\"L_DEV_PREPROD_0\" transform=\"translate(-62.703125, -12)\"><foreignObject width=\"125.40625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Promote changes</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(735.625, 82)\"><g class=\"label\" data-id=\"L_PREPROD_LIVE_0\" transform=\"translate(-62.703125, -12)\"><foreignObject width=\"125.40625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>Promote changes</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8-flowchart-DEV-0\" data-look=\"classic\" transform=\"translate(120.8203125, 82)\"><rect class=\"basic label-container\" style=\"\" x=\"-87.8203125\" y=\"-39\" width=\"175.640625\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-57.8203125, -24)\"><rect></rect><foreignObject width=\"115.640625\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Dev tenant<br>Build and iterate</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8-flowchart-PREPROD-1\" data-look=\"classic\" transform=\"translate(540.984375, 82)\"><rect class=\"basic label-container\" style=\"\" x=\"-106.9375\" y=\"-39\" width=\"213.875\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-76.9375, -24)\"><rect></rect><foreignObject width=\"153.875\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Pre-production tenant<br>UAT, QA, validation</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8-flowchart-LIVE-2\" data-look=\"classic\" transform=\"translate(916.0390625, 82)\"><rect class=\"basic label-container\" style=\"\" x=\"-92.7109375\" y=\"-39\" width=\"185.421875\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-62.7109375, -24)\"><rect></rect><foreignObject width=\"125.421875\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Production tenant<br>Live traffic</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#FFFFFF\"></feDropShadow></filter></defs><defs><filter id=\"diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#FFFFFF\"></feDropShadow></filter></defs><linearGradient id=\"diagram-63008915c4632ad75b4461c282ba1dc3817bf04d2ac1065f79a6e5ca56a808f8-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"#cccccc\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(180, 0%, 18.3529411765%)\" stop-opacity=\"1\"></stop></linearGradient></svg>"},"children":["flowchart LR\n    subgraph SANDBOX[\"Sandbox environment\"]\n        DEV[\"Dev tenant<br/>Build and iterate\"]\n    end\n    subgraph PRODUCTION[\"Production environment (e.g., US region)\"]\n        PREPROD[\"Pre-production tenant<br/>UAT, QA, validation\"]\n        LIVE[\"Production tenant<br/>Live traffic\"]\n    end\n    DEV -->|Promote changes| PREPROD\n    PREPROD -->|Promote changes| LIVE\n"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"develop-and-test-in-the-sandbox","__idx":1},"children":["Develop and test in the sandbox"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use the sandbox to develop and test your integration without affecting data or applications in production. It supports all the functionality provided by Mosaic APIs and SDKs, and it's also where you can use the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/dev-tools/dev_tools_overview"},"children":["API Explorer"]}," to try out APIs without writing code."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The sandbox is also your window into upcoming changes. All platform changes—including breaking changes—are deployed to sandbox before they reach production, giving you time to review release notes, test your integration, and validate behavior before a change rolls out to your live traffic. For details, see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/deployment/maintain_integration"},"children":["Maintain your integration"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Keep in mind that the sandbox is hosted in the US only, isn't designed for live traffic, and is subject to pre-production usage limits. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/deployment/understand_environments_regions_tenants#pre-production-usage-limits"},"children":["Understand environments, regions, and tenants"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"promote-changes-safely","__idx":2},"children":["Promote changes safely"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["As your configuration matures, you'll move it from one tenant to another—for example, from a development tenant hosted in sandbox to a pre-production (UAT) tenant in a production environment, and finally to production tenant with your live traffic."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"understand-the-scope","__idx":3},"children":["Understand the scope"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["It helps to think of a tenant's contents as separate categories when planning a promotion:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Version data"]},": The configuration that moves between tenants as a unit. It spans all Mosaic services, including journeys, sub-journeys, external connections, and typed lists, as well as applications, clients and client roles, user schema and user groups, service providers, resources, SSO configuration, and roles and role groups."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Environment data"]},": Keys, credentials, certificates, and other environment-specific values. These are managed per environment and never carried by value across tenants: only their aliases are exported, and the target tenant must already contain the actual values."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Identity store"]},": Users, devices, and runtime records generated by running flows. This stays where it's generated and is never part of a promotion. If needed, users are migrated separately. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/platform/migrate_to_mosaic"},"children":["Migrate to Mosaic"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Recommendations"]},", ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["identity verifications"]},": Recommendations produced by Fraud Prevention and Identity Verification results always stay in the tenant where they originated and are never part of a promotion."]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Note"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Because environment data isn't carried across, some items—secrets, certificates, per-tenant client credentials, and authentication provider settings—aren't exported and must be created manually in the target tenant before you import."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"choose-a-promotion-mode","__idx":4},"children":["Choose a promotion mode"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Promotion runs in one of the following modes, chosen per entity type within your version data:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Full"]},"—replaces the target's exported version data with the package and removes version data in the target that the package doesn't include. Use it for initial environment setup, cloning that configuration, or disaster recovery. Only the version data the export carries is replaced. Environment data values, the identity store, recommendations, identity verification results, and fields excluded from export are not part of the copy."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Partial"]},"—scopes the promotion to journeys, sub-journeys, external connections, and typed lists. Identity management data in the package, such as clients, user schema, and SSO configuration, is still applied in full. You can mix:",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Selective"]},"—promotes only the entities you choose and leaves everything else in the target untouched. Nothing is deleted, even if it's absent from what you're promoting. This is the default for incremental releases."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Sync"]},"—makes the target match the source exactly for the entity types you choose, including deletions. Use it deliberately when you want full alignment for a specific entity type—for example, keeping external connections identical across environments—without forcing a full-tenant move."]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Because you choose the mode per entity type, you can mix them in a single promotion. For example, you can sync journeys while staying selective on external connections."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["How often you promote—and in which mode—should follow your team's development practices. Teams iterating quickly often promote selectively and frequently, so each reviewed change moves on its own. Release-based teams tend to batch changes and promote on a fixed cadence, using full or sync mode at milestones to realign environments."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Note"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For step-by-step export and import procedures, see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/user/version_management_procedures"},"children":["Run CI/CD flow"]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"update-your-integration","__idx":5},"children":["Update your integration"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Promotion updates your Mosaic configuration, but your application must also point at the target environment. Before you go live in a new environment, update:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["API base URL."]}," Switch your backend to the target region's host—for example, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["api.sbx.transmitsecurity.io"]}," in sandbox or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["api.transmitsecurity.io"]}," for US production. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/deployment/understand_environments_regions_tenants"},"children":["Understand environments, regions, and tenants"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["SDK configuration."]}," Update the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["baseUrl"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["serverPath"]}," in your web, iOS, and Android SDKs to match the target region."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Client credentials."]}," Use relevant client ID and secret when authorizing API calls and SDK sessions."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Custom domain."]}," In production, you may serve requests through your own ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/deployment/custom_domains"},"children":["custom domain"]}," instead of the default host, which also involves DNS and certificates."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"best-practices-for-working-with-multiple-developers-in-a-shared-tenant","__idx":6},"children":["Best practices for working with multiple developers in a shared tenant"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When several developers share a tenant, the most direct way to avoid collisions is selective promotion: it moves only the entities you've actually changed and leaves everything else—including other developers' in-progress work—untouched."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Process discipline helps, but it has a real limit worth knowing going in. Assigning ownership by journey, or decomposing large journeys into smaller sub-journeys and shared components, reduces how often two people reach for the same object—it doesn't guarantee isolation. A sub-journey or external connection can be reused across multiple unrelated flows, the way a function is reused across a codebase, so two developers who each own a different top-level journey can still end up editing the same shared piece at the same time."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In order of priority:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Promote with selective mode"]},", so only your own reviewed changes move—not the whole tenant's state."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Assign ownership by journey or component"]}," to reduce how often two people reach for the same object, understanding this won't fully prevent collisions on shared sub-journeys or connections."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Layer external version control on top."]}," Export version data and manage and review it in a Git-like workflow—including PR review and conflict handling for anything shared—before promoting into a shared tenant."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Where a team's development volume genuinely can't be managed this way even with selective promotion in place, a second production tenant used purely as a pre-production/validation gate is the supported way to add further isolation—not an unbounded number of additional tenants."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For step-by-step export and import procedures, see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/user/version_management_procedures"},"children":["Run CI/CD flow"]},"."]}]},"headings":[{"value":"Development lifecycle","id":"development-lifecycle","depth":1},{"value":"Develop and test in the sandbox","id":"develop-and-test-in-the-sandbox","depth":2},{"value":"Promote changes safely","id":"promote-changes-safely","depth":2},{"value":"Understand the scope","id":"understand-the-scope","depth":3},{"value":"Choose a promotion mode","id":"choose-a-promotion-mode","depth":3},{"value":"Update your integration","id":"update-your-integration","depth":3},{"value":"Best practices for working with multiple developers in a shared tenant","id":"best-practices-for-working-with-multiple-developers-in-a-shared-tenant","depth":2}],"frontmatter":{"markdown":{"toc":{"depth":3}},"seo":{"title":"Development lifecycle"}},"lastModified":"2026-09-27T11:00:20.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/guides/deployment/development_lifecycle","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}