{"id":600,"date":"2026-07-22T20:38:23","date_gmt":"2026-07-22T20:38:23","guid":{"rendered":"https:\/\/scriptwise.pro\/?page_id=600"},"modified":"2026-07-27T12:38:59","modified_gmt":"2026-07-27T12:38:59","slug":"selected-work","status":"publish","type":"page","link":"https:\/\/scriptwise.pro\/?page_id=600","title":{"rendered":"Selected Work"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"600\" class=\"elementor elementor-600\">\n\t\t\t\t<div class=\"elementor-element elementor-element-75c5a0a e-con-full e-flex e-con e-parent\" data-id=\"75c5a0a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8fbfe83 elementor-widget-mobile__width-inherit elementor-widget elementor-widget-html\" data-id=\"8fbfe83\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t\n<style>\n\/* =========================================================\n   SCRIPTWISE \u2014 SELECTED WORK HERO\n   HARD RESET \/ FULL-BLEED ELEMENTOR VERSION\n   No CSS ID is required in Elementor.\n   Keep Width, Position, Margin and Padding at Default\/0.\n   ========================================================= *\/\n\n\/* 1) Force only the Elementor branch that contains this hero to be full width. *\/\nbody .elementor-widget-html:has(.sw-selected-hero-root),\nbody .elementor-widget-html:has(.sw-selected-hero-root) > .elementor-widget-container,\nbody .e-con:has(> .elementor-widget-html .sw-selected-hero-root),\nbody .e-con-inner:has(> .elementor-widget-html .sw-selected-hero-root){\n  width:100% !important;\n  max-width:none !important;\n  min-width:0 !important;\n  flex:0 0 100% !important;\n  align-self:stretch !important;\n  overflow:visible !important;\n  margin-left:0 !important;\n  margin-right:0 !important;\n  padding-left:0 !important;\n  padding-right:0 !important;\n  transform:none !important;\n}\n\n\/* 2) Prevent accidental horizontal scrolling caused by Elementor wrappers. *\/\nhtml,\nbody{\n  overflow-x:clip;\n}\n\n\/* 3) Component reset. *\/\n.sw-selected-hero-root,\n.sw-selected-hero-root *{\n  box-sizing:border-box;\n}\n\n.sw-selected-hero-root{\n  --sw-bg:#07090d;\n  --sw-panel:rgba(15,20,29,.84);\n  --sw-line:rgba(255,255,255,.09);\n  --sw-text:#f7f9fc;\n  --sw-muted:#aab3c2;\n  --sw-subtle:#7f8999;\n  --sw-cyan:#36d6ff;\n  --sw-violet:#8b7cff;\n  --sw-container:1480px;\n\n  position:relative;\n  isolation:isolate;\n\n  \/* Full viewport breakout, independent of Elementor content width. *\/\n  width:100vw;\n  max-width:100vw;\n  margin-left:calc(50% - 50vw);\n  margin-right:calc(50% - 50vw);\n\n  overflow:hidden;\n  padding:112px 28px 120px;\n  color:var(--sw-text);\n  background:\n    radial-gradient(circle at 84% 8%,rgba(54,214,255,.18),transparent 30%),\n    radial-gradient(circle at 8% 78%,rgba(139,124,255,.14),transparent 34%),\n    linear-gradient(145deg,#070b14 0%,#0a111d 55%,#0d1624 100%);\n  border-top:1px solid rgba(255,255,255,.045);\n  border-bottom:1px solid rgba(255,255,255,.045);\n  font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif;\n  -webkit-font-smoothing:antialiased;\n  text-rendering:optimizeLegibility;\n}\n\n.sw-selected-hero-root::before{\n  content:\"\";\n  position:absolute;\n  inset:0;\n  z-index:-2;\n  pointer-events:none;\n  opacity:.36;\n  background:\n    linear-gradient(rgba(255,255,255,.025) 1px,transparent 1px),\n    linear-gradient(90deg,rgba(255,255,255,.025) 1px,transparent 1px);\n  background-size:56px 56px;\n  -webkit-mask-image:linear-gradient(to bottom,transparent,#000 12%,#000 88%,transparent);\n  mask-image:linear-gradient(to bottom,transparent,#000 12%,#000 88%,transparent);\n}\n\n.sw-selected-hero-root::after{\n  content:\"\";\n  position:absolute;\n  z-index:-1;\n  width:620px;\n  height:620px;\n  right:-280px;\n  top:40px;\n  border-radius:50%;\n  background:radial-gradient(circle,rgba(102,163,255,.14),transparent 68%);\n  filter:blur(12px);\n  pointer-events:none;\n}\n\n.sw-selected-hero-root a{\n  color:inherit;\n  text-decoration:none;\n}\n\n.sw-selected-inner{\n  width:min(calc(100vw - 56px),var(--sw-container));\n  max-width:var(--sw-container);\n  min-width:0;\n  margin:0 auto;\n}\n\n.sw-selected-top{\n  display:grid;\n  grid-template-columns:minmax(0,1.24fr) minmax(320px,.76fr);\n  gap:56px;\n  align-items:end;\n}\n\n.sw-selected-main,\n.sw-selected-feature,\n.sw-selected-nav,\n.sw-selected-books,\n.sw-selected-nda{\n  min-width:0;\n}\n\n.sw-selected-kicker{\n  display:inline-flex;\n  align-items:center;\n  gap:10px;\n  max-width:100%;\n  margin-bottom:28px;\n  padding:10px 15px;\n  border:1px solid rgba(54,214,255,.28);\n  border-radius:999px;\n  background:rgba(54,214,255,.07);\n  color:var(--sw-cyan);\n  font-size:12px;\n  font-weight:800;\n  line-height:1.3;\n  letter-spacing:.13em;\n  text-transform:uppercase;\n}\n\n.sw-selected-kicker::before{\n  content:\"\";\n  width:8px;\n  height:8px;\n  flex:0 0 8px;\n  border-radius:50%;\n  background:var(--sw-cyan);\n  box-shadow:0 0 18px rgba(54,214,255,.9);\n}\n\n.sw-selected-title{\n  margin:0;\n  max-width:980px;\n  color:#fff;\n  font-size:clamp(54px,6.6vw,102px);\n  line-height:.95;\n  letter-spacing:-.058em;\n  font-weight:800;\n  word-break:normal !important;\n  overflow-wrap:normal !important;\n  hyphens:none !important;\n}\n\n.sw-selected-title span{\n  background:linear-gradient(105deg,#fff 2%,#d7d1ff 44%,#91efe3 100%);\n  -webkit-background-clip:text;\n  background-clip:text;\n  color:transparent;\n}\n\n.sw-selected-positioning{\n  margin:30px 0 0;\n  max-width:940px;\n  color:#fff;\n  font-size:clamp(24px,2.7vw,40px);\n  line-height:1.22;\n  letter-spacing:-.034em;\n  font-weight:750;\n}\n\n.sw-selected-positioning strong{color:var(--sw-cyan)}\n\n.sw-selected-intro{\n  margin:23px 0 0;\n  max-width:880px;\n  color:var(--sw-muted);\n  font-size:clamp(17px,1.4vw,21px);\n  line-height:1.72;\n}\n\n.sw-selected-actions{\n  display:flex;\n  flex-wrap:wrap;\n  gap:13px;\n  margin-top:36px;\n}\n\n.sw-selected-button{\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  min-height:54px;\n  max-width:100%;\n  padding:0 22px;\n  border-radius:14px;\n  font-size:14px;\n  font-weight:800;\n  line-height:1.3;\n  text-align:center;\n  transition:transform .22s ease,border-color .22s ease,background .22s ease;\n}\n\n.sw-selected-button:hover{transform:translateY(-2px)}\n\n.sw-selected-button--primary{\n  color:#061019!important;\n  background:linear-gradient(135deg,var(--sw-cyan),#72e6ff);\n  box-shadow:0 16px 40px rgba(54,214,255,.18);\n}\n\n.sw-selected-button--secondary{\n  border:1px solid var(--sw-line);\n  color:#fff!important;\n  background:rgba(255,255,255,.035);\n}\n\n.sw-selected-button--contact{\n  border:1px solid rgba(139,124,255,.32);\n  color:#f0edff!important;\n  background:linear-gradient(135deg,rgba(139,124,255,.18),rgba(139,124,255,.07));\n}\n\n.sw-selected-feature{\n  padding:27px;\n  border:1px solid var(--sw-line);\n  border-radius:24px;\n  background:linear-gradient(180deg,rgba(255,255,255,.055),rgba(255,255,255,.018));\n  box-shadow:0 28px 80px rgba(0,0,0,.22);\n  backdrop-filter:blur(18px);\n}\n\n.sw-selected-feature-label{\n  display:block;\n  margin-bottom:13px;\n  color:var(--sw-subtle);\n  font-size:10px;\n  font-weight:850;\n  letter-spacing:.13em;\n  text-transform:uppercase;\n}\n\n.sw-selected-feature h2{\n  margin:0 0 12px;\n  color:#fff;\n  font-size:25px;\n  line-height:1.18;\n  letter-spacing:-.03em;\n}\n\n.sw-selected-feature p{\n  margin:0;\n  color:var(--sw-muted);\n  font-size:14px;\n  line-height:1.65;\n}\n\n.sw-selected-proof{\n  display:grid;\n  grid-template-columns:repeat(3,minmax(0,1fr));\n  gap:10px;\n  margin-top:22px;\n}\n\n.sw-selected-proof-item{\n  min-width:0;\n  min-height:92px;\n  padding:15px;\n  border:1px solid var(--sw-line);\n  border-radius:15px;\n  background:rgba(255,255,255,.025);\n}\n\n.sw-selected-proof-item strong{\n  display:block;\n  color:#fff;\n  font-size:23px;\n  line-height:1;\n}\n\n.sw-selected-proof-item span{\n  display:block;\n  margin-top:7px;\n  color:var(--sw-subtle);\n  font-size:11px;\n  line-height:1.35;\n}\n\n.sw-selected-nav{\n  margin-top:56px;\n  padding-top:29px;\n  border-top:1px solid rgba(255,255,255,.09);\n}\n\n.sw-selected-nav-label{\n  display:block;\n  margin-bottom:15px;\n  color:var(--sw-subtle);\n  font-size:10px;\n  font-weight:850;\n  letter-spacing:.13em;\n  text-transform:uppercase;\n}\n\n.sw-selected-nav-grid{\n  display:grid;\n  grid-template-columns:repeat(5,minmax(0,1fr));\n  gap:10px;\n}\n\n.sw-selected-nav-link{\n  display:flex;\n  flex-direction:column;\n  min-width:0;\n  min-height:118px;\n  padding:17px;\n  border:1px solid var(--sw-line);\n  border-radius:16px;\n  background:rgba(255,255,255,.025);\n  transition:transform .22s ease,border-color .22s ease,background .22s ease;\n}\n\n.sw-selected-nav-link:hover{\n  transform:translateY(-3px);\n  border-color:rgba(54,214,255,.38);\n  background:rgba(54,214,255,.055);\n}\n\n.sw-selected-nav-link small{\n  display:block;\n  margin-bottom:9px;\n  color:var(--sw-cyan);\n  font-size:9px;\n  font-weight:850;\n  line-height:1.3;\n  letter-spacing:.1em;\n  text-transform:uppercase;\n}\n\n.sw-selected-nav-link strong{\n  display:block;\n  color:#fff;\n  font-size:14px;\n  line-height:1.3;\n}\n\n.sw-selected-nav-link span{\n  display:block;\n  margin-top:auto;\n  padding-top:13px;\n  color:var(--sw-subtle);\n  font-size:11px;\n  line-height:1.4;\n}\n\n.sw-selected-capabilities{\n  display:flex;\n  flex-wrap:wrap;\n  gap:10px;\n  margin-top:32px;\n}\n\n.sw-selected-capability{\n  display:inline-flex;\n  align-items:center;\n  padding:9px 13px;\n  border:1px solid rgba(255,255,255,.095);\n  border-radius:999px;\n  color:#d6e2ef;\n  background:rgba(255,255,255,.027);\n  font-size:12px;\n  font-weight:720;\n  line-height:1.35;\n}\n\n.sw-selected-books{\n  display:grid;\n  grid-template-columns:repeat(2,minmax(0,1fr));\n  gap:15px;\n  margin-top:50px;\n}\n\n.sw-selected-book{\n  display:flex;\n  flex-direction:column;\n  min-width:0;\n  min-height:220px;\n  padding:26px;\n  border:1px solid rgba(139,124,255,.25);\n  border-radius:22px;\n  background:\n    radial-gradient(circle at 92% 0%,rgba(139,124,255,.18),transparent 38%),\n    linear-gradient(145deg,#10182a,#0b1320);\n  transition:transform .22s ease,border-color .22s ease;\n}\n\n.sw-selected-book:hover{\n  transform:translateY(-4px);\n  border-color:rgba(139,124,255,.48);\n}\n\n.sw-selected-book-label{\n  color:#c9c2ff;\n  font-size:10px;\n  font-weight:850;\n  line-height:1.3;\n  letter-spacing:.12em;\n  text-transform:uppercase;\n}\n\n.sw-selected-book h3{\n  margin:17px 0 11px;\n  color:#fff;\n  font-size:clamp(23px,2.4vw,34px);\n  line-height:1.16;\n  letter-spacing:-.03em;\n}\n\n.sw-selected-book p{\n  margin:0;\n  color:var(--sw-muted);\n  font-size:14px;\n  line-height:1.65;\n}\n\n.sw-selected-book-link{\n  display:inline-flex;\n  align-items:center;\n  gap:8px;\n  margin-top:auto;\n  padding-top:24px;\n  color:#f0edff;\n  font-size:13px;\n  font-weight:820;\n}\n\n.sw-selected-book-link::after{\n  content:\"\u2197\";\n  color:var(--sw-cyan);\n}\n\n.sw-selected-nda{\n  display:grid;\n  grid-template-columns:auto minmax(0,1fr);\n  gap:20px;\n  margin-top:18px;\n  padding:24px 26px;\n  border:1px solid rgba(139,124,255,.22);\n  border-radius:20px;\n  background:linear-gradient(135deg,rgba(139,124,255,.095),rgba(15,23,38,.88));\n}\n\n.sw-selected-nda-mark{\n  display:grid;\n  place-items:center;\n  width:64px;\n  height:64px;\n  border:1px solid rgba(201,193,255,.22);\n  border-radius:17px;\n  color:#e3deff;\n  background:linear-gradient(135deg,rgba(139,124,255,.22),rgba(54,214,255,.1));\n  font-size:15px;\n  font-weight:900;\n  letter-spacing:.08em;\n}\n\n.sw-selected-nda p{\n  margin:0;\n  color:#c4d0df;\n  font-size:14px;\n  line-height:1.72;\n}\n\n.sw-selected-nda strong{color:#fff}\n\n@media(max-width:1180px){\n  .sw-selected-top{\n    grid-template-columns:1fr;\n    gap:28px;\n  }\n\n  .sw-selected-feature{max-width:760px}\n\n  .sw-selected-nav-grid{\n    grid-template-columns:repeat(3,minmax(0,1fr));\n  }\n}\n\n@media(max-width:900px){\n  .sw-selected-hero-root{\n    padding:88px 20px 96px;\n  }\n\n  .sw-selected-inner{\n    width:min(calc(100vw - 40px),var(--sw-container));\n  }\n\n  .sw-selected-nav-grid{\n    grid-template-columns:repeat(2,minmax(0,1fr));\n  }\n\n  .sw-selected-books{\n    grid-template-columns:1fr;\n  }\n}\n\n@media(max-width:620px){\n  .sw-selected-hero-root{\n    padding:72px 18px 80px;\n  }\n\n  .sw-selected-inner{\n    width:min(calc(100vw - 36px),var(--sw-container));\n  }\n\n  .sw-selected-title{\n    font-size:clamp(46px,14vw,68px);\n  }\n\n  .sw-selected-positioning{\n    font-size:clamp(23px,7vw,32px);\n  }\n\n  .sw-selected-actions{\n    flex-direction:column;\n  }\n\n  .sw-selected-button{\n    width:100%;\n  }\n\n  .sw-selected-proof,\n  .sw-selected-nav-grid{\n    grid-template-columns:1fr;\n  }\n\n  .sw-selected-nda{\n    grid-template-columns:1fr;\n    padding:21px;\n  }\n\n  .sw-selected-nda-mark{\n    width:58px;\n    height:58px;\n  }\n}\n\n@media(prefers-reduced-motion:reduce){\n  .sw-selected-hero-root *,\n  .sw-selected-hero-root *::before,\n  .sw-selected-hero-root *::after{\n    transition:none!important;\n    animation:none!important;\n  }\n}\n<\/style>\n\n<section id=\"selected-work-hero\" class=\"sw-selected-hero-root\" aria-label=\"Daria Bohdanova selected work and expertise\">\n  <div class=\"sw-selected-inner\">\n\n    <div class=\"sw-selected-top\">\n      <div class=\"sw-selected-main\">\n        <div class=\"sw-selected-kicker\">Documentation Strategy \u00b7 Product Communication<\/div>\n\n        <h1 class=\"sw-selected-title\">\n          Complex products. <span>Clear systems.<\/span>\n        <\/h1>\n\n        <p class=\"sw-selected-positioning\">\n          I design documentation ecosystems that help people\n          <strong>understand, adopt, trust, and use digital products.<\/strong>\n        <\/p>\n\n        <p class=\"sw-selected-intro\">\n          Senior technical writing, documentation strategy, developer documentation,\n          information architecture, UX writing, and AI-ready knowledge systems for\n          SaaS, AI, FinTech, eCommerce, healthcare, and enterprise products.\n        <\/p>\n\n        <div class=\"sw-selected-actions\">\n          <a class=\"sw-selected-button sw-selected-button--primary\" href=\"#documentation-showcase\">Explore documentation system<\/a>\n          <a class=\"sw-selected-button sw-selected-button--secondary\" href=\"#getting-started\">Start with Getting Started<\/a>\n          <a class=\"sw-selected-button sw-selected-button--secondary\" href=\"#books-publications\">View books &amp; publications<\/a>\n          <a class=\"sw-selected-button sw-selected-button--contact\" href=\"https:\/\/scriptwise.pro\/?page_id=16\">Discuss a role or project<\/a>\n        <\/div>\n      <\/div>\n\n      <aside class=\"sw-selected-feature\">\n        <span class=\"sw-selected-feature-label\">Featured documentation system<\/span>\n        <h2>NovaFlow Enterprise Documentation<\/h2>\n        <p>\n          An original end-to-end documentation prototype covering product adoption,\n          administration, APIs, integrations, production operations, release communication,\n          and controlled migration.\n        <\/p>\n\n        <div class=\"sw-selected-proof\">\n          <div class=\"sw-selected-proof-item\"><strong>10<\/strong><span>connected documentation types<\/span><\/div>\n          <div class=\"sw-selected-proof-item\"><strong>1<\/strong><span>complete documentation ecosystem<\/span><\/div>\n          <div class=\"sw-selected-proof-item\"><strong>2<\/strong><span>published books<\/span><\/div>\n        <\/div>\n      <\/aside>\n    <\/div>\n\n    <nav class=\"sw-selected-nav\" aria-label=\"NovaFlow documentation sections\">\n      <span class=\"sw-selected-nav-label\">Explore the documentation lifecycle<\/span>\n      <div class=\"sw-selected-nav-grid\">\n        <a class=\"sw-selected-nav-link\" href=\"#getting-started\"><small>Adoption<\/small><strong>Getting Started<\/strong><span>First successful product experience<\/span><\/a>\n        <a class=\"sw-selected-nav-link\" href=\"#onboarding-documentation\"><small>Enterprise<\/small><strong>Onboarding<\/strong><span>Structured implementation and rollout<\/span><\/a>\n        <a class=\"sw-selected-nav-link\" href=\"#feature-documentation\"><small>Product<\/small><strong>Feature Documentation<\/strong><span>Behavior, concepts, and user workflows<\/span><\/a>\n        <a class=\"sw-selected-nav-link\" href=\"#administrator-manual\"><small>Governance<\/small><strong>Administrator Manual<\/strong><span>Roles, configuration, and controls<\/span><\/a>\n        <a class=\"sw-selected-nav-link\" href=\"#api-quickstart\"><small>Developer Experience<\/small><strong>API Quickstart<\/strong><span>From authentication to first request<\/span><\/a>\n        <a class=\"sw-selected-nav-link\" href=\"#api-reference\"><small>Developer Reference<\/small><strong>API Reference<\/strong><span>Endpoints, schemas, and errors<\/span><\/a>\n        <a class=\"sw-selected-nav-link\" href=\"#integration-guide\"><small>Architecture<\/small><strong>Integration Guide<\/strong><span>Contracts, reliability, and rollout<\/span><\/a>\n        <a class=\"sw-selected-nav-link\" href=\"#troubleshooting-guide\"><small>Operations<\/small><strong>Troubleshooting<\/strong><span>Evidence-based production diagnosis<\/span><\/a>\n        <a class=\"sw-selected-nav-link\" href=\"#release-notes\"><small>Change Communication<\/small><strong>Release Notes<\/strong><span>Impact, compatibility, and action<\/span><\/a>\n        <a class=\"sw-selected-nav-link\" href=\"#migration-guide\"><small>Platform Change<\/small><strong>Migration Guide<\/strong><span>Validation, cutover, and rollback<\/span><\/a>\n      <\/div>\n    <\/nav>\n\n    <div class=\"sw-selected-capabilities\" aria-label=\"Areas of expertise\">\n      <span class=\"sw-selected-capability\">Documentation Strategy<\/span>\n      <span class=\"sw-selected-capability\">Technical Writing<\/span>\n      <span class=\"sw-selected-capability\">Developer Documentation<\/span>\n      <span class=\"sw-selected-capability\">API Documentation<\/span>\n      <span class=\"sw-selected-capability\">Information Architecture<\/span>\n      <span class=\"sw-selected-capability\">UX Writing<\/span>\n      <span class=\"sw-selected-capability\">Knowledge Systems<\/span>\n      <span class=\"sw-selected-capability\">AI-Ready Content<\/span>\n      <span class=\"sw-selected-capability\">Product Communication<\/span>\n      <span class=\"sw-selected-capability\">Enterprise Documentation<\/span>\n    <\/div>\n\n    <section id=\"books-publications\" class=\"sw-selected-books\" aria-label=\"Books and publications\">\n      <a class=\"sw-selected-book\" href=\"https:\/\/www.amazon.com\/dp\/B0FW5M7G3F\" target=\"_blank\" rel=\"noopener noreferrer\">\n        <span class=\"sw-selected-book-label\">Book \u00b7 AI Search &amp; Content<\/span>\n        <h3>AI Search and Content Strategy<\/h3>\n        <p>A practical publication focused on structuring modern content for people, search engines, and AI-driven discovery.<\/p>\n        <span class=\"sw-selected-book-link\">View the book on Amazon<\/span>\n      <\/a>\n\n      <a class=\"sw-selected-book\" href=\"https:\/\/www.amazon.com\/Trust-Strategy-Patients-Increase-Profitability\/dp\/B0DRW17197\/\" target=\"_blank\" rel=\"noopener noreferrer\">\n        <span class=\"sw-selected-book-label\">Book \u00b7 Trust &amp; Healthcare Communication<\/span>\n        <h3>Trust as a Strategy<\/h3>\n        <p>How healthcare organizations can attract patients, strengthen their brand, improve communication, and build sustainable profitability through trust.<\/p>\n        <span class=\"sw-selected-book-link\">View the book on Amazon<\/span>\n      <\/a>\n    <\/section>\n\n    <div class=\"sw-selected-nda\">\n      <div class=\"sw-selected-nda-mark\">NDA<\/div>\n      <p>\n        <strong>Most of my commercial work is protected by confidentiality agreements.<\/strong>\n        This portfolio combines original documentation prototypes, public thought leadership,\n        published books, and anonymized case studies to demonstrate how I approach product\n        communication without exposing proprietary client materials.\n      <\/p>\n    <\/div>\n\n  <\/div>\n<\/section>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-54d16d4 e-flex e-con-boxed e-con e-parent\" data-id=\"54d16d4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4ed0484 elementor-widget elementor-widget-html\" data-id=\"4ed0484\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"documentation-showcase\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\" \/>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/>\n  <title>NovaFlow Documentation Showcase<\/title>\n  <meta name=\"description\" content=\"An original documentation system prototype for NovaFlow, a fictional enterprise workflow platform.\" \/>\n  <style>\n    :root {\n      --bg: #07090d;\n      --bg-soft: #0b0f16;\n      --panel: rgba(15, 20, 29, 0.78);\n      --panel-strong: rgba(19, 25, 36, 0.94);\n      --line: rgba(255, 255, 255, 0.09);\n      --line-strong: rgba(255, 255, 255, 0.14);\n      --text: #f7f9fc;\n      --muted: #aab3c2;\n      --subtle: #7f8999;\n      --accent: #8b7cff;\n      --accent-2: #4fd1c5;\n      --accent-3: #66a3ff;\n      --success: #6ee7b7;\n      --shadow: 0 24px 80px rgba(0,0,0,.34);\n      --radius-xl: 28px;\n      --radius-lg: 22px;\n      --radius-md: 16px;\n      --container: 1480px;\n    }\n\n    * { box-sizing: border-box; }\n\n    html {\n      scroll-behavior: smooth;\n      background: var(--bg);\n    }\n\n    body {\n      margin: 0;\n      min-width: 320px;\n      color: var(--text);\n      background:\n        radial-gradient(circle at 12% 8%, rgba(139,124,255,.14), transparent 28%),\n        radial-gradient(circle at 86% 22%, rgba(79,209,197,.09), transparent 24%),\n        linear-gradient(180deg, #07090d 0%, #090d13 100%);\n      font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n      -webkit-font-smoothing: antialiased;\n      text-rendering: optimizeLegibility;\n    }\n\n    a {\n      color: inherit;\n      text-decoration: none;\n    }\n\n    button, a {\n      -webkit-tap-highlight-color: transparent;\n    }\n\n    .nf-section {\n      position: relative;\n      width: 100vw;\n      max-width: none;\n      margin-left: calc(50% - 50vw);\n      margin-right: calc(50% - 50vw);\n      overflow: hidden;\n      padding: 112px 28px 120px;\n      border-top: 1px solid rgba(255,255,255,.045);\n      border-bottom: 1px solid rgba(255,255,255,.045);\n      isolation: isolate;\n    }\n\n    .nf-section::before {\n      content: \"\";\n      position: absolute;\n      inset: 0;\n      background:\n        linear-gradient(rgba(255,255,255,.025) 1px, transparent 1px),\n        linear-gradient(90deg, rgba(255,255,255,.025) 1px, transparent 1px);\n      background-size: 56px 56px;\n      mask-image: linear-gradient(to bottom, transparent, black 16%, black 84%, transparent);\n      opacity: .36;\n      pointer-events: none;\n      z-index: -2;\n    }\n\n    .nf-section::after {\n      content: \"\";\n      position: absolute;\n      width: 620px;\n      height: 620px;\n      border-radius: 50%;\n      right: -280px;\n      top: 80px;\n      background: radial-gradient(circle, rgba(102,163,255,.13), transparent 68%);\n      filter: blur(12px);\n      pointer-events: none;\n      z-index: -1;\n    }\n\n    .nf-container {\n      width: min(calc(100vw - 56px), var(--container));\n      max-width: var(--container);\n      margin: 0 auto;\n    }\n\n    \/* Elementor full-bleed reset *\/\n    .elementor-widget-html,\n    .elementor-widget-html > .elementor-widget-container {\n      overflow: visible !important;\n    }\n\n    .nf-kicker-row {\n      display: flex;\n      flex-wrap: wrap;\n      align-items: center;\n      gap: 12px;\n      margin-bottom: 24px;\n    }\n\n    .nf-kicker {\n      display: inline-flex;\n      align-items: center;\n      gap: 9px;\n      padding: 9px 13px;\n      border: 1px solid rgba(139,124,255,.28);\n      border-radius: 999px;\n      background: rgba(139,124,255,.08);\n      color: #d7d1ff;\n      font-size: 12px;\n      font-weight: 700;\n      letter-spacing: .12em;\n      text-transform: uppercase;\n    }\n\n    .nf-kicker-dot {\n      width: 7px;\n      height: 7px;\n      border-radius: 50%;\n      background: linear-gradient(135deg, var(--accent), var(--accent-2));\n      box-shadow: 0 0 18px rgba(139,124,255,.7);\n    }\n\n    .nf-status {\n      display: inline-flex;\n      align-items: center;\n      gap: 8px;\n      padding: 9px 13px;\n      border: 1px solid rgba(110,231,183,.20);\n      border-radius: 999px;\n      background: rgba(110,231,183,.06);\n      color: #b8f4d9;\n      font-size: 12px;\n      font-weight: 650;\n      letter-spacing: .02em;\n    }\n\n    .nf-status::before {\n      content: \"\";\n      width: 7px;\n      height: 7px;\n      border-radius: 50%;\n      background: var(--success);\n      box-shadow: 0 0 14px rgba(110,231,183,.72);\n    }\n\n    .nf-heading-grid {\n      display: grid;\n      grid-template-columns: minmax(0, 1.25fr) minmax(300px, .75fr);\n      gap: 56px;\n      align-items: end;\n      margin-bottom: 54px;\n    }\n\n    .nf-title {\n      margin: 0;\n      max-width: 980px;\n      font-size: clamp(52px, 6.2vw, 96px);\n      line-height: .95;\n      letter-spacing: -.055em;\n      font-weight: 760;\n    }\n\n    .nf-title .gradient {\n      background: linear-gradient(105deg, #ffffff 2%, #d7d1ff 44%, #91efe3 100%);\n      -webkit-background-clip: text;\n      background-clip: text;\n      color: transparent;\n    }\n\n    .nf-intro {\n      margin: 0;\n      max-width: 560px;\n      color: var(--muted);\n      font-size: clamp(18px, 1.55vw, 22px);\n      line-height: 1.62;\n      letter-spacing: -.015em;\n    }\n\n    .nf-intro strong {\n      color: var(--text);\n      font-weight: 650;\n    }\n\n    .nf-meta-strip {\n      display: grid;\n      grid-template-columns: repeat(3, minmax(0, 1fr));\n      border: 1px solid var(--line);\n      border-radius: var(--radius-lg);\n      overflow: hidden;\n      background: rgba(255,255,255,.028);\n      backdrop-filter: blur(18px);\n      box-shadow: var(--shadow);\n      margin-bottom: 32px;\n    }\n\n    .nf-meta-item {\n      min-height: 104px;\n      padding: 24px 26px;\n      display: flex;\n      gap: 15px;\n      align-items: flex-start;\n      border-right: 1px solid var(--line);\n    }\n\n    .nf-meta-item:last-child {\n      border-right: 0;\n    }\n\n    .nf-meta-icon {\n      flex: 0 0 34px;\n      width: 34px;\n      height: 34px;\n      display: grid;\n      place-items: center;\n      border-radius: 11px;\n      background: linear-gradient(145deg, rgba(139,124,255,.18), rgba(79,209,197,.09));\n      border: 1px solid rgba(255,255,255,.09);\n      color: #ddd8ff;\n    }\n\n    .nf-meta-copy span {\n      display: block;\n      margin-bottom: 6px;\n      color: var(--subtle);\n      font-size: 11px;\n      line-height: 1.2;\n      font-weight: 750;\n      letter-spacing: .12em;\n      text-transform: uppercase;\n    }\n\n    .nf-meta-copy p {\n      margin: 0;\n      color: #d9dee8;\n      font-size: 14px;\n      line-height: 1.55;\n    }\n\n    .nf-product-shell {\n      position: relative;\n      margin-top: 28px;\n      padding: 1px;\n      border-radius: var(--radius-xl);\n      background: linear-gradient(135deg, rgba(139,124,255,.48), rgba(79,209,197,.13) 46%, rgba(255,255,255,.06));\n      box-shadow: var(--shadow);\n    }\n\n    .nf-product {\n      position: relative;\n      overflow: hidden;\n      border-radius: calc(var(--radius-xl) - 1px);\n      background:\n        linear-gradient(145deg, rgba(18,24,34,.98), rgba(9,13,19,.98)),\n        var(--panel-strong);\n      padding: 34px;\n    }\n\n    .nf-product::after {\n      content: \"\";\n      position: absolute;\n      width: 360px;\n      height: 360px;\n      border-radius: 50%;\n      right: -160px;\n      top: -160px;\n      background: radial-gradient(circle, rgba(139,124,255,.15), transparent 65%);\n      pointer-events: none;\n    }\n\n    .nf-product-top {\n      display: flex;\n      justify-content: space-between;\n      gap: 28px;\n      align-items: flex-start;\n      margin-bottom: 34px;\n    }\n\n    .nf-brand {\n      display: flex;\n      gap: 18px;\n      align-items: center;\n    }\n\n    .nf-logo {\n      width: 58px;\n      height: 58px;\n      border-radius: 18px;\n      display: grid;\n      place-items: center;\n      background:\n        linear-gradient(145deg, rgba(255,255,255,.12), rgba(255,255,255,.03)),\n        linear-gradient(135deg, #7f72ff, #4fd1c5);\n      border: 1px solid rgba(255,255,255,.18);\n      box-shadow: 0 16px 42px rgba(72,61,189,.32);\n    }\n\n    .nf-logo svg {\n      width: 31px;\n      height: 31px;\n    }\n\n    .nf-brand-name {\n      margin: 0 0 5px;\n      font-size: 25px;\n      line-height: 1;\n      letter-spacing: -.035em;\n      font-weight: 760;\n    }\n\n    .nf-brand-tagline {\n      margin: 0;\n      color: var(--muted);\n      font-size: 15px;\n      line-height: 1.5;\n    }\n\n    .nf-product-badge {\n      position: relative;\n      z-index: 1;\n      display: inline-flex;\n      align-items: center;\n      gap: 8px;\n      padding: 10px 13px;\n      border-radius: 999px;\n      border: 1px solid rgba(255,255,255,.10);\n      background: rgba(255,255,255,.035);\n      color: #cdd4df;\n      font-size: 12px;\n      font-weight: 650;\n      white-space: nowrap;\n    }\n\n    .nf-product-grid {\n      position: relative;\n      z-index: 1;\n      display: grid;\n      grid-template-columns: 1.05fr .95fr .95fr;\n      gap: 18px;\n    }\n\n    .nf-product-card {\n      min-height: 186px;\n      padding: 24px;\n      border-radius: var(--radius-md);\n      border: 1px solid var(--line);\n      background: rgba(255,255,255,.025);\n    }\n\n    .nf-product-card h3 {\n      margin: 0 0 18px;\n      color: #f0f3f8;\n      font-size: 13px;\n      line-height: 1.25;\n      letter-spacing: .10em;\n      text-transform: uppercase;\n    }\n\n    .nf-product-card p {\n      margin: 0;\n      color: var(--muted);\n      font-size: 15px;\n      line-height: 1.65;\n    }\n\n    .nf-tags {\n      display: flex;\n      flex-wrap: wrap;\n      gap: 9px;\n    }\n\n    .nf-tag {\n      display: inline-flex;\n      align-items: center;\n      min-height: 34px;\n      padding: 8px 11px;\n      border-radius: 10px;\n      border: 1px solid rgba(255,255,255,.08);\n      background: rgba(255,255,255,.028);\n      color: #d5dbe6;\n      font-size: 13px;\n      line-height: 1.2;\n    }\n\n    .nf-doc-shell {\n      display: grid;\n      grid-template-columns: 270px minmax(0,1fr);\n      gap: 20px;\n      margin-top: 32px;\n    }\n\n    .nf-sidebar {\n      position: sticky;\n      top: 24px;\n      align-self: start;\n      padding: 22px;\n      border: 1px solid var(--line);\n      border-radius: var(--radius-lg);\n      background: rgba(12,16,23,.82);\n      backdrop-filter: blur(18px);\n      box-shadow: 0 18px 50px rgba(0,0,0,.22);\n    }\n\n    .nf-sidebar-head {\n      display: flex;\n      align-items: center;\n      gap: 10px;\n      padding-bottom: 18px;\n      margin-bottom: 16px;\n      border-bottom: 1px solid var(--line);\n      color: #eef1f6;\n      font-size: 14px;\n      font-weight: 700;\n    }\n\n    .nf-sidebar-head svg {\n      color: #aaa1ff;\n    }\n\n    .nf-nav-group + .nf-nav-group {\n      margin-top: 22px;\n    }\n\n    .nf-nav-label {\n      display: block;\n      margin-bottom: 9px;\n      color: #6f7887;\n      font-size: 10px;\n      font-weight: 800;\n      letter-spacing: .13em;\n      text-transform: uppercase;\n    }\n\n    .nf-nav-link {\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      gap: 10px;\n      min-height: 38px;\n      padding: 9px 10px;\n      border-radius: 10px;\n      color: #aeb7c5;\n      font-size: 13px;\n      transition: .22s ease;\n    }\n\n    .nf-nav-link:hover,\n    .nf-nav-link:focus-visible {\n      color: #fff;\n      background: rgba(255,255,255,.045);\n      transform: translateX(2px);\n      outline: none;\n    }\n\n    .nf-nav-link.active {\n      color: #fff;\n      background: linear-gradient(90deg, rgba(139,124,255,.17), rgba(79,209,197,.06));\n      border: 1px solid rgba(139,124,255,.16);\n    }\n\n    .nf-doc-main {\n      min-width: 0;\n      padding: 30px;\n      border: 1px solid var(--line);\n      border-radius: var(--radius-xl);\n      background:\n        linear-gradient(180deg, rgba(255,255,255,.018), rgba(255,255,255,.008)),\n        rgba(10,14,20,.76);\n      box-shadow: var(--shadow);\n      backdrop-filter: blur(18px);\n    }\n\n    .nf-doc-heading {\n      display: flex;\n      align-items: flex-end;\n      justify-content: space-between;\n      gap: 24px;\n      margin-bottom: 26px;\n      padding-bottom: 24px;\n      border-bottom: 1px solid var(--line);\n    }\n\n    .nf-doc-heading h2 {\n      margin: 0 0 8px;\n      font-size: clamp(28px, 3vw, 42px);\n      line-height: 1;\n      letter-spacing: -.04em;\n    }\n\n    .nf-doc-heading p {\n      margin: 0;\n      max-width: 690px;\n      color: var(--muted);\n      font-size: 15px;\n      line-height: 1.65;\n    }\n\n    .nf-doc-count {\n      color: #8f98a7;\n      font-size: 12px;\n      white-space: nowrap;\n    }\n\n    .nf-cards {\n      display: grid;\n      grid-template-columns: repeat(2, minmax(0,1fr));\n      gap: 16px;\n    }\n\n    .nf-card {\n      position: relative;\n      min-height: 230px;\n      overflow: hidden;\n      padding: 24px;\n      display: flex;\n      flex-direction: column;\n      border: 1px solid var(--line);\n      border-radius: var(--radius-md);\n      background:\n        linear-gradient(155deg, rgba(255,255,255,.04), rgba(255,255,255,.015)),\n        rgba(14,19,27,.82);\n      transition: transform .24s ease, border-color .24s ease, background .24s ease, box-shadow .24s ease;\n    }\n\n    .nf-card::before {\n      content: \"\";\n      position: absolute;\n      width: 180px;\n      height: 180px;\n      border-radius: 50%;\n      right: -80px;\n      top: -90px;\n      background: radial-gradient(circle, rgba(139,124,255,.12), transparent 67%);\n      opacity: 0;\n      transition: opacity .24s ease;\n      pointer-events: none;\n    }\n\n    .nf-card:hover,\n    .nf-card:focus-visible {\n      transform: translateY(-4px);\n      border-color: rgba(139,124,255,.32);\n      background:\n        linear-gradient(155deg, rgba(139,124,255,.075), rgba(79,209,197,.022)),\n        rgba(14,19,27,.90);\n      box-shadow: 0 22px 54px rgba(0,0,0,.24);\n      outline: none;\n    }\n\n    .nf-card:hover::before,\n    .nf-card:focus-visible::before {\n      opacity: 1;\n    }\n\n    .nf-card-top {\n      position: relative;\n      z-index: 1;\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      gap: 12px;\n      margin-bottom: 24px;\n    }\n\n    .nf-card-icon {\n      width: 40px;\n      height: 40px;\n      display: grid;\n      place-items: center;\n      border-radius: 12px;\n      border: 1px solid rgba(255,255,255,.085);\n      background: rgba(255,255,255,.035);\n      color: #c7c0ff;\n    }\n\n    .nf-card-number {\n      color: #636d7c;\n      font-size: 11px;\n      font-weight: 800;\n      letter-spacing: .11em;\n    }\n\n    .nf-card h3 {\n      position: relative;\n      z-index: 1;\n      margin: 0 0 10px;\n      color: #f5f7fb;\n      font-size: 20px;\n      line-height: 1.18;\n      letter-spacing: -.025em;\n    }\n\n    .nf-card p {\n      position: relative;\n      z-index: 1;\n      margin: 0 0 20px;\n      color: #9fa9b8;\n      font-size: 14px;\n      line-height: 1.62;\n    }\n\n    .nf-card-footer {\n      position: relative;\n      z-index: 1;\n      margin-top: auto;\n      padding-top: 18px;\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      gap: 14px;\n      border-top: 1px solid rgba(255,255,255,.065);\n    }\n\n    .nf-mini-tags {\n      display: flex;\n      flex-wrap: wrap;\n      gap: 7px;\n    }\n\n    .nf-mini-tag {\n      color: #7f8998;\n      font-size: 10px;\n      font-weight: 750;\n      letter-spacing: .07em;\n      text-transform: uppercase;\n    }\n\n    .nf-open {\n      display: inline-flex;\n      align-items: center;\n      gap: 8px;\n      color: #d8d3ff;\n      font-size: 13px;\n      font-weight: 700;\n      white-space: nowrap;\n    }\n\n    .nf-open svg {\n      transition: transform .22s ease;\n    }\n\n    .nf-card:hover .nf-open svg,\n    .nf-card:focus-visible .nf-open svg {\n      transform: translateX(3px);\n    }\n\n    .nf-footnote {\n      margin-top: 22px;\n      padding: 18px 20px;\n      display: flex;\n      gap: 12px;\n      align-items: flex-start;\n      border: 1px solid rgba(255,255,255,.075);\n      border-radius: 14px;\n      background: rgba(255,255,255,.022);\n      color: #8791a0;\n      font-size: 13px;\n      line-height: 1.6;\n    }\n\n    .nf-footnote svg {\n      flex: 0 0 auto;\n      margin-top: 2px;\n      color: #8b7cff;\n    }\n\n    @media (max-width: 1180px) {\n      .nf-heading-grid {\n        grid-template-columns: 1fr;\n        gap: 24px;\n        align-items: start;\n      }\n\n      .nf-product-grid {\n        grid-template-columns: 1fr 1fr;\n      }\n\n      .nf-product-card:first-child {\n        grid-column: 1 \/ -1;\n      }\n\n      .nf-doc-shell {\n        grid-template-columns: 230px minmax(0,1fr);\n      }\n    }\n\n    @media (max-width: 900px) {\n      .nf-section {\n        padding: 88px 20px 96px;\n      }\n\n      .nf-container {\n        width: min(calc(100vw - 40px), var(--container));\n      }\n\n      .nf-meta-strip {\n        grid-template-columns: 1fr;\n      }\n\n      .nf-meta-item {\n        border-right: 0;\n        border-bottom: 1px solid var(--line);\n      }\n\n      .nf-meta-item:last-child {\n        border-bottom: 0;\n      }\n\n      .nf-doc-shell {\n        grid-template-columns: 1fr;\n      }\n\n      .nf-sidebar {\n        position: relative;\n        top: auto;\n        overflow-x: auto;\n      }\n\n      .nf-sidebar-head {\n        margin-bottom: 12px;\n      }\n\n      .nf-nav-scroll {\n        display: flex;\n        gap: 8px;\n        min-width: max-content;\n      }\n\n      .nf-nav-group,\n      .nf-nav-group + .nf-nav-group {\n        margin: 0;\n        display: contents;\n      }\n\n      .nf-nav-label {\n        display: none;\n      }\n\n      .nf-nav-link {\n        border: 1px solid rgba(255,255,255,.07);\n        background: rgba(255,255,255,.02);\n      }\n    }\n\n    @media (max-width: 720px) {\n      .nf-title {\n        font-size: clamp(44px, 14vw, 68px);\n      }\n\n      .nf-product {\n        padding: 24px;\n      }\n\n      .nf-product-top {\n        flex-direction: column;\n      }\n\n      .nf-product-grid {\n        grid-template-columns: 1fr;\n      }\n\n      .nf-product-card:first-child {\n        grid-column: auto;\n      }\n\n      .nf-doc-main {\n        padding: 22px;\n      }\n\n      .nf-doc-heading {\n        flex-direction: column;\n        align-items: flex-start;\n      }\n\n      .nf-cards {\n        grid-template-columns: 1fr;\n      }\n\n      .nf-card {\n        min-height: 220px;\n      }\n    }\n\n    @media (prefers-reduced-motion: reduce) {\n      html { scroll-behavior: auto; }\n      *, *::before, *::after {\n        transition: none !important;\n        animation: none !important;\n      }\n    }\n  <\/style>\n<\/head>\n<body>\n\n<section id=\"documentation-showcase\" class=\"nf-section\" aria-labelledby=\"documentation-showcase-title\">\n  <div class=\"nf-container\">\n\n    <div class=\"nf-kicker-row\">\n      <span class=\"nf-kicker\">\n        <span class=\"nf-kicker-dot\" aria-hidden=\"true\"><\/span>\n        Documentation prototypes\n      <\/span>\n      <span class=\"nf-status\">Original portfolio system<\/span>\n    <\/div>\n\n    <div class=\"nf-heading-grid\">\n      <div>\n        <h1 id=\"documentation-showcase-title\" class=\"nf-title\">\n          Documentation designed as a <span class=\"gradient\">product system.<\/span>\n        <\/h1>\n      <\/div>\n      <p class=\"nf-intro\">\n        A complete documentation ecosystem created from scratch for\n        <strong>NovaFlow<\/strong>, a fictional enterprise workflow platform.\n        Every example is an original prototype built specifically for this portfolio.\n      <\/p>\n    <\/div>\n\n    <div class=\"nf-meta-strip\" aria-label=\"Prototype principles\">\n      <div class=\"nf-meta-item\">\n        <div class=\"nf-meta-icon\" aria-hidden=\"true\">\n          <svg width=\"19\" height=\"19\" viewBox=\"0 0 24 24\" fill=\"none\">\n            <path d=\"M12 3l7 4v5c0 4.8-3 7.7-7 9-4-1.3-7-4.2-7-9V7l7-4Z\" stroke=\"currentColor\" stroke-width=\"1.7\"\/>\n            <path d=\"m9.3 12.2 1.8 1.8 3.8-4\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n          <\/svg>\n        <\/div>\n        <div class=\"nf-meta-copy\">\n          <span>NDA-safe<\/span>\n          <p>No client assets, confidential processes, or proprietary documentation are reproduced.<\/p>\n        <\/div>\n      <\/div>\n\n      <div class=\"nf-meta-item\">\n        <div class=\"nf-meta-icon\" aria-hidden=\"true\">\n          <svg width=\"19\" height=\"19\" viewBox=\"0 0 24 24\" fill=\"none\">\n            <path d=\"M4 6.5h16M4 12h16M4 17.5h10\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\"\/>\n          <\/svg>\n        <\/div>\n        <div class=\"nf-meta-copy\">\n          <span>System thinking<\/span>\n          <p>Information architecture, terminology, navigation, and content patterns work as one system.<\/p>\n        <\/div>\n      <\/div>\n\n      <div class=\"nf-meta-item\">\n        <div class=\"nf-meta-icon\" aria-hidden=\"true\">\n          <svg width=\"19\" height=\"19\" viewBox=\"0 0 24 24\" fill=\"none\">\n            <path d=\"M8 4h8l4 4v12H4V4h4Z\" stroke=\"currentColor\" stroke-width=\"1.7\"\/>\n            <path d=\"M8 13h8M8 17h5M14 4v5h5\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\"\/>\n          <\/svg>\n        <\/div>\n        <div class=\"nf-meta-copy\">\n          <span>Production-oriented<\/span>\n          <p>Each prototype is structured like documentation that could move into a real product workflow.<\/p>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"nf-product-shell\">\n      <div class=\"nf-product\">\n        <div class=\"nf-product-top\">\n          <div class=\"nf-brand\">\n            <div class=\"nf-logo\" aria-hidden=\"true\">\n              <svg viewBox=\"0 0 40 40\" fill=\"none\">\n                <path d=\"M8 27.5 19.6 8 32 27.5\" stroke=\"white\" stroke-width=\"3.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <path d=\"M12.3 21.3h15.4\" stroke=\"white\" stroke-width=\"3.4\" stroke-linecap=\"round\"\/>\n              <\/svg>\n            <\/div>\n            <div>\n              <h2 class=\"nf-brand-name\">NovaFlow<\/h2>\n              <p class=\"nf-brand-tagline\">Enterprise workflow platform for connected teams.<\/p>\n            <\/div>\n          <\/div>\n\n          <span class=\"nf-product-badge\">Fictional SaaS product<\/span>\n        <\/div>\n\n        <div class=\"nf-product-grid\">\n          <article class=\"nf-product-card\">\n            <h3>Product concept<\/h3>\n            <p>\n              NovaFlow helps operations teams design workflows, connect tools,\n              manage access, automate repetitive processes, and surface knowledge\n              through AI-assisted search.\n            <\/p>\n          <\/article>\n\n          <article class=\"nf-product-card\">\n            <h3>Primary audiences<\/h3>\n            <div class=\"nf-tags\">\n              <span class=\"nf-tag\">Workspace admins<\/span>\n              <span class=\"nf-tag\">Operations teams<\/span>\n              <span class=\"nf-tag\">Developers<\/span>\n              <span class=\"nf-tag\">End users<\/span>\n              <span class=\"nf-tag\">Product teams<\/span>\n            <\/div>\n          <\/article>\n\n          <article class=\"nf-product-card\">\n            <h3>Core terminology<\/h3>\n            <div class=\"nf-tags\">\n              <span class=\"nf-tag\">Workspace<\/span>\n              <span class=\"nf-tag\">Workflow<\/span>\n              <span class=\"nf-tag\">Trigger<\/span>\n              <span class=\"nf-tag\">Action<\/span>\n              <span class=\"nf-tag\">Connector<\/span>\n              <span class=\"nf-tag\">Role<\/span>\n            <\/div>\n          <\/article>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"nf-doc-shell\">\n      <aside class=\"nf-sidebar\" aria-label=\"Documentation navigation\">\n        <div class=\"nf-sidebar-head\">\n          <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n            <path d=\"M4 5.5h16v13H4v-13Z\" stroke=\"currentColor\" stroke-width=\"1.7\"\/>\n            <path d=\"M8 5.5v13M8 9h8M8 13h8\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\"\/>\n          <\/svg>\n          Documentation center\n        <\/div>\n\n        <div class=\"nf-nav-scroll\">\n          <div class=\"nf-nav-group\">\n            <span class=\"nf-nav-label\">Overview<\/span>\n            <a class=\"nf-nav-link active\" href=\"#documentation-showcase\">Documentation home<\/a>\n          <\/div>\n\n          <div class=\"nf-nav-group\">\n            <span class=\"nf-nav-label\">Get started<\/span>\n            <a class=\"nf-nav-link\" href=\"#getting-started\">Getting Started<\/a>\n            <a class=\"nf-nav-link\" href=\"#onboarding-documentation\">Onboarding<\/a>\n          <\/div>\n\n          <div class=\"nf-nav-group\">\n            <span class=\"nf-nav-label\">Product guides<\/span>\n            <a class=\"nf-nav-link\" href=\"#feature-documentation\">Feature Documentation<\/a>\n            <a class=\"nf-nav-link\" href=\"#administrator-manual\">Administrator Manual<\/a>\n          <\/div>\n\n          <div class=\"nf-nav-group\">\n            <span class=\"nf-nav-label\">Developers<\/span>\n            <a class=\"nf-nav-link\" href=\"#api-quickstart\">API Quickstart<\/a>\n            <a class=\"nf-nav-link\" href=\"#api-reference\">API Reference<\/a>\n            <a class=\"nf-nav-link\" href=\"#integration-guide\">Integration Guide<\/a>\n          <\/div>\n\n          <div class=\"nf-nav-group\">\n            <span class=\"nf-nav-label\">Operations<\/span>\n            <a class=\"nf-nav-link\" href=\"#troubleshooting-guide\">Troubleshooting<\/a>\n            <a class=\"nf-nav-link\" href=\"#release-notes\">Release Notes<\/a>\n            <a class=\"nf-nav-link\" href=\"#migration-guide\">Migration Guide<\/a>\n            <a class=\"nf-nav-link\" href=\"#knowledge-base\">Knowledge Base<\/a>\n          <\/div>\n        <\/div>\n      <\/aside>\n\n      <main class=\"nf-doc-main\">\n        <div class=\"nf-doc-heading\">\n          <div>\n            <h2>Explore the documentation system<\/h2>\n            <p>\n              Each prototype demonstrates a different documentation challenge,\n              audience, and content pattern within one coherent product ecosystem.\n            <\/p>\n          <\/div>\n          <div class=\"nf-doc-count\">11 prototype modules<\/div>\n        <\/div>\n\n        <div class=\"nf-cards\">\n\n          <a class=\"nf-card\" href=\"#getting-started\">\n            <div class=\"nf-card-top\">\n              <span class=\"nf-card-icon\" aria-hidden=\"true\">\n                <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n                  <path d=\"M5 18.5 18.5 5M10 5h8v8\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/span>\n              <span class=\"nf-card-number\">01<\/span>\n            <\/div>\n            <h3>Getting Started<\/h3>\n            <p>Set up a workspace and reach the first successful workflow with minimal friction.<\/p>\n            <div class=\"nf-card-footer\">\n              <div class=\"nf-mini-tags\">\n                <span class=\"nf-mini-tag\">Beginner<\/span>\n                <span class=\"nf-mini-tag\">User guide<\/span>\n              <\/div>\n              <span class=\"nf-open\">Open prototype\n                <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"m9 5 7 7-7 7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/span>\n            <\/div>\n          <\/a>\n\n          <a class=\"nf-card\" href=\"#feature-documentation\">\n            <div class=\"nf-card-top\">\n              <span class=\"nf-card-icon\" aria-hidden=\"true\">\n                <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n                  <path d=\"M4 7h16M7 4v6M17 14v6M4 17h16\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\"\/>\n                <\/svg>\n              <\/span>\n              <span class=\"nf-card-number\">02<\/span>\n            <\/div>\n            <h3>Feature Documentation<\/h3>\n            <p>Explain a complex workflow automation feature through concepts, use cases, and configuration steps.<\/p>\n            <div class=\"nf-card-footer\">\n              <div class=\"nf-mini-tags\">\n                <span class=\"nf-mini-tag\">Product guide<\/span>\n                <span class=\"nf-mini-tag\">Use cases<\/span>\n              <\/div>\n              <span class=\"nf-open\">Open prototype\n                <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"m9 5 7 7-7 7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/span>\n            <\/div>\n          <\/a>\n\n          <a class=\"nf-card\" href=\"#api-quickstart\">\n            <div class=\"nf-card-top\">\n              <span class=\"nf-card-icon\" aria-hidden=\"true\">\n                <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n                  <path d=\"m8 9-4 3 4 3M16 9l4 3-4 3M14 5l-4 14\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/span>\n              <span class=\"nf-card-number\">03<\/span>\n            <\/div>\n            <h3>API Quickstart<\/h3>\n            <p>Authenticate, send the first request, read the response, and handle an initial error.<\/p>\n            <div class=\"nf-card-footer\">\n              <div class=\"nf-mini-tags\">\n                <span class=\"nf-mini-tag\">Developer docs<\/span>\n                <span class=\"nf-mini-tag\">REST API<\/span>\n              <\/div>\n              <span class=\"nf-open\">Open prototype\n                <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"m9 5 7 7-7 7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/span>\n            <\/div>\n          <\/a>\n\n          <a class=\"nf-card\" href=\"#api-reference\">\n            <div class=\"nf-card-top\">\n              <span class=\"nf-card-icon\" aria-hidden=\"true\">\n                <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n                  <path d=\"M6 4h9l3 3v13H6V4Z\" stroke=\"currentColor\" stroke-width=\"1.7\"\/>\n                  <path d=\"M9 11h6M9 15h6M14 4v4h4\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\"\/>\n                <\/svg>\n              <\/span>\n              <span class=\"nf-card-number\">04<\/span>\n            <\/div>\n            <h3>API Reference<\/h3>\n            <p>Define endpoints, parameters, request schemas, response objects, and error behavior.<\/p>\n            <div class=\"nf-card-footer\">\n              <div class=\"nf-mini-tags\">\n                <span class=\"nf-mini-tag\">Reference<\/span>\n                <span class=\"nf-mini-tag\">Schemas<\/span>\n              <\/div>\n              <span class=\"nf-open\">Open prototype\n                <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"m9 5 7 7-7 7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/span>\n            <\/div>\n          <\/a>\n\n          <a class=\"nf-card\" href=\"#integration-guide\">\n            <div class=\"nf-card-top\">\n              <span class=\"nf-card-icon\" aria-hidden=\"true\">\n                <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n                  <path d=\"M8.5 8.5 5 12l3.5 3.5M15.5 8.5 19 12l-3.5 3.5M9.5 12h5\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/span>\n              <span class=\"nf-card-number\">05<\/span>\n            <\/div>\n            <h3>Integration Guide<\/h3>\n            <p>Connect NovaFlow to an external service and validate the data flow end to end.<\/p>\n            <div class=\"nf-card-footer\">\n              <div class=\"nf-mini-tags\">\n                <span class=\"nf-mini-tag\">Integration<\/span>\n                <span class=\"nf-mini-tag\">Configuration<\/span>\n              <\/div>\n              <span class=\"nf-open\">Open prototype\n                <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"m9 5 7 7-7 7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/span>\n            <\/div>\n          <\/a>\n\n          <a class=\"nf-card\" href=\"#onboarding-documentation\">\n            <div class=\"nf-card-top\">\n              <span class=\"nf-card-icon\" aria-hidden=\"true\">\n                <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n                  <path d=\"M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18Z\" stroke=\"currentColor\" stroke-width=\"1.7\"\/>\n                  <path d=\"M8.5 12.2 11 14.7l4.7-5\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/span>\n              <span class=\"nf-card-number\">06<\/span>\n            <\/div>\n            <h3>Onboarding Documentation<\/h3>\n            <p>Move a new team from account creation to first value through staged guidance.<\/p>\n            <div class=\"nf-card-footer\">\n              <div class=\"nf-mini-tags\">\n                <span class=\"nf-mini-tag\">Onboarding<\/span>\n                <span class=\"nf-mini-tag\">First value<\/span>\n              <\/div>\n              <span class=\"nf-open\">Open prototype\n                <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"m9 5 7 7-7 7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/span>\n            <\/div>\n          <\/a>\n\n          <a class=\"nf-card\" href=\"#troubleshooting-guide\">\n            <div class=\"nf-card-top\">\n              <span class=\"nf-card-icon\" aria-hidden=\"true\">\n                <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n                  <path d=\"M12 8v4M12 16h.01M10.3 4.8 3.8 16a2 2 0 0 0 1.7 3h13a2 2 0 0 0 1.7-3L13.7 4.8a2 2 0 0 0-3.4 0Z\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\"\/>\n                <\/svg>\n              <\/span>\n              <span class=\"nf-card-number\">07<\/span>\n            <\/div>\n            <h3>Troubleshooting Guide<\/h3>\n            <p>Diagnose failures through symptoms, likely causes, checks, and resolution paths.<\/p>\n            <div class=\"nf-card-footer\">\n              <div class=\"nf-mini-tags\">\n                <span class=\"nf-mini-tag\">Support<\/span>\n                <span class=\"nf-mini-tag\">Decision paths<\/span>\n              <\/div>\n              <span class=\"nf-open\">Open prototype\n                <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"m9 5 7 7-7 7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/span>\n            <\/div>\n          <\/a>\n\n          <a class=\"nf-card\" href=\"#release-notes\">\n            <div class=\"nf-card-top\">\n              <span class=\"nf-card-icon\" aria-hidden=\"true\">\n                <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n                  <path d=\"M5 5h14v14H5V5Z\" stroke=\"currentColor\" stroke-width=\"1.7\"\/>\n                  <path d=\"M8 9h8M8 13h8M8 17h5\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\"\/>\n                <\/svg>\n              <\/span>\n              <span class=\"nf-card-number\">08<\/span>\n            <\/div>\n            <h3>Release Notes<\/h3>\n            <p>Translate product changes into user impact, required action, and upgrade context.<\/p>\n            <div class=\"nf-card-footer\">\n              <div class=\"nf-mini-tags\">\n                <span class=\"nf-mini-tag\">Change communication<\/span>\n                <span class=\"nf-mini-tag\">Updates<\/span>\n              <\/div>\n              <span class=\"nf-open\">Open prototype\n                <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"m9 5 7 7-7 7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/span>\n            <\/div>\n          <\/a>\n\n          <a class=\"nf-card\" href=\"#migration-guide\">\n            <div class=\"nf-card-top\">\n              <span class=\"nf-card-icon\" aria-hidden=\"true\">\n                <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n                  <path d=\"M7 7h10M14 4l3 3-3 3M17 17H7M10 14l-3 3 3 3\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/span>\n              <span class=\"nf-card-number\">09<\/span>\n            <\/div>\n            <h3>Migration Guide<\/h3>\n            <p>Move safely between product or API versions with clear prerequisites and rollback logic.<\/p>\n            <div class=\"nf-card-footer\">\n              <div class=\"nf-mini-tags\">\n                <span class=\"nf-mini-tag\">Migration<\/span>\n                <span class=\"nf-mini-tag\">Risk control<\/span>\n              <\/div>\n              <span class=\"nf-open\">Open prototype\n                <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"m9 5 7 7-7 7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/span>\n            <\/div>\n          <\/a>\n\n          <a class=\"nf-card\" href=\"#knowledge-base\">\n            <div class=\"nf-card-top\">\n              <span class=\"nf-card-icon\" aria-hidden=\"true\">\n                <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n                  <path d=\"M4.5 5.5A2.5 2.5 0 0 1 7 3h12v15H7a2.5 2.5 0 0 0-2.5 2.5v-15Z\" stroke=\"currentColor\" stroke-width=\"1.7\"\/>\n                  <path d=\"M8 7h7M8 11h7\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\"\/>\n                <\/svg>\n              <\/span>\n              <span class=\"nf-card-number\">10<\/span>\n            <\/div>\n            <h3>Knowledge Base<\/h3>\n            <p>Resolve a common user problem through a concise, searchable support article.<\/p>\n            <div class=\"nf-card-footer\">\n              <div class=\"nf-mini-tags\">\n                <span class=\"nf-mini-tag\">Self-service<\/span>\n                <span class=\"nf-mini-tag\">Search intent<\/span>\n              <\/div>\n              <span class=\"nf-open\">Open prototype\n                <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"m9 5 7 7-7 7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/span>\n            <\/div>\n          <\/a>\n\n          <a class=\"nf-card\" href=\"#administrator-manual\">\n            <div class=\"nf-card-top\">\n              <span class=\"nf-card-icon\" aria-hidden=\"true\">\n                <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n                  <path d=\"M12 3 4.5 6.5v5.2c0 4.6 3 7.5 7.5 9.3 4.5-1.8 7.5-4.7 7.5-9.3V6.5L12 3Z\" stroke=\"currentColor\" stroke-width=\"1.7\"\/>\n                  <path d=\"M9 12h6M12 9v6\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\"\/>\n                <\/svg>\n              <\/span>\n              <span class=\"nf-card-number\">11<\/span>\n            <\/div>\n            <h3>Administrator Manual<\/h3>\n            <p>Configure roles, permissions, governance rules, and workspace-level controls.<\/p>\n            <div class=\"nf-card-footer\">\n              <div class=\"nf-mini-tags\">\n                <span class=\"nf-mini-tag\">Admin docs<\/span>\n                <span class=\"nf-mini-tag\">Governance<\/span>\n              <\/div>\n              <span class=\"nf-open\">Open prototype\n                <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"m9 5 7 7-7 7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/span>\n            <\/div>\n          <\/a>\n\n        <\/div>\n\n        <div class=\"nf-footnote\">\n          <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n            <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" stroke-width=\"1.7\"\/>\n            <path d=\"M12 10v6M12 7h.01\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\"\/>\n          <\/svg>\n          <span>\n            The cards already contain anchor links for the future prototype sections.\n            As each HTML block is added to the Selected Work page, these links will begin\n            scrolling directly to the corresponding document.\n          <\/span>\n        <\/div>\n      <\/main>\n    <\/div>\n\n  <\/div>\n<\/section>\n\n<\/body>\n<\/html>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0c7f22b e-con-full e-flex e-con e-parent\" data-id=\"0c7f22b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bba2034 elementor-widget elementor-widget-html\" data-id=\"bba2034\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"getting-started\" data-widget_type=\"html.default\">\n\t\t\t\t\t\n<style>\n\/* =========================================================\n   NOVAFLOW \u2014 GETTING STARTED\n   HARD RESET \/ FULL-BLEED ELEMENTOR VERSION\n   No CSS ID is required in Elementor.\n   Keep Width, Position, Margin and Padding at Default\/0.\n   ========================================================= *\/\n\n\/* Force only the Elementor branch containing this block to full width. *\/\nbody .elementor-widget-html:has(.gs-root),\nbody .elementor-widget-html:has(.gs-root) > .elementor-widget-container,\nbody .e-con:has(> .elementor-widget-html .gs-root),\nbody .e-con-inner:has(> .elementor-widget-html .gs-root){\n  width:100% !important;\n  max-width:none !important;\n  min-width:0 !important;\n  flex:0 0 100% !important;\n  align-self:stretch !important;\n  overflow:visible !important;\n  margin-left:0 !important;\n  margin-right:0 !important;\n  padding-left:0 !important;\n  padding-right:0 !important;\n  transform:none !important;\n}\n\nhtml,\nbody{\n  overflow-x:clip;\n}\n\n.gs-root,\n.gs-root *{\n  box-sizing:border-box;\n}\n\n.gs-root{\n  --gs-bg:#07090d;\n  --gs-bg-2:#0a0f16;\n  --gs-panel:rgba(14,19,27,.88);\n  --gs-panel-2:rgba(18,24,34,.92);\n  --gs-line:rgba(255,255,255,.085);\n  --gs-line-strong:rgba(255,255,255,.14);\n  --gs-text:#f6f8fb;\n  --gs-muted:#a5afbe;\n  --gs-subtle:#717b8a;\n  --gs-purple:#8b7cff;\n  --gs-cyan:#58d8e8;\n  --gs-green:#6ee7b7;\n  --gs-amber:#f5c76b;\n  --gs-max:1480px;\n\n  position:relative;\n  isolation:isolate;\n  width:100vw;\n  max-width:100vw;\n  margin-left:calc(50% - 50vw);\n  margin-right:calc(50% - 50vw);\n  overflow:hidden;\n  color:var(--gs-text);\n  background:\n    radial-gradient(circle at 12% 0%,rgba(139,124,255,.13),transparent 28%),\n    radial-gradient(circle at 92% 18%,rgba(88,216,232,.09),transparent 26%),\n    linear-gradient(180deg,#080b11 0%,#090e15 100%);\n  border-top:1px solid rgba(255,255,255,.05);\n  border-bottom:1px solid rgba(255,255,255,.05);\n  font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif;\n  -webkit-font-smoothing:antialiased;\n  text-rendering:optimizeLegibility;\n}\n\n.gs-root::before{\n  content:\"\";\n  position:absolute;\n  inset:0;\n  pointer-events:none;\n  z-index:-2;\n  opacity:.30;\n  background:\n    linear-gradient(rgba(255,255,255,.022) 1px,transparent 1px),\n    linear-gradient(90deg,rgba(255,255,255,.022) 1px,transparent 1px);\n  background-size:56px 56px;\n  -webkit-mask-image:linear-gradient(to bottom,transparent,#000 10%,#000 90%,transparent);\n  mask-image:linear-gradient(to bottom,transparent,#000 10%,#000 90%,transparent);\n}\n\n.gs-root a{\n  color:inherit;\n  text-decoration:none;\n}\n\n.gs-wrap{\n  width:min(calc(100vw - 48px),var(--gs-max));\n  max-width:var(--gs-max);\n  min-width:0;\n  margin:0 auto;\n  padding:104px 0 112px;\n}\n\n.gs-eyebrow{\n  display:flex;\n  flex-wrap:wrap;\n  align-items:center;\n  gap:12px;\n  margin-bottom:26px;\n}\n\n.gs-pill{\n  display:inline-flex;\n  align-items:center;\n  gap:9px;\n  min-height:38px;\n  padding:9px 14px;\n  border:1px solid rgba(139,124,255,.25);\n  border-radius:999px;\n  background:rgba(139,124,255,.07);\n  color:#d9d4ff;\n  font-size:12px;\n  font-weight:750;\n  letter-spacing:.10em;\n  text-transform:uppercase;\n}\n\n.gs-pill-dot{\n  width:7px;\n  height:7px;\n  border-radius:50%;\n  background:linear-gradient(135deg,var(--gs-purple),var(--gs-cyan));\n  box-shadow:0 0 14px rgba(139,124,255,.68);\n}\n\n.gs-time{\n  display:inline-flex;\n  align-items:center;\n  gap:8px;\n  color:#aab4c1;\n  font-size:13px;\n}\n\n.gs-time svg{color:#8b7cff}\n\n.gs-hero{\n  display:grid;\n  grid-template-columns:minmax(0,1.2fr) minmax(320px,.8fr);\n  gap:56px;\n  align-items:end;\n  margin-bottom:42px;\n  min-width:0;\n}\n\n.gs-hero > *{\n  min-width:0;\n}\n\n.gs-title{\n  margin:0 0 20px;\n  max-width:920px;\n  font-size:clamp(54px,6.8vw,104px);\n  line-height:.94;\n  letter-spacing:-.058em;\n  font-weight:770;\n  word-break:normal !important;\n  overflow-wrap:normal !important;\n  hyphens:none !important;\n}\n\n.gs-title span{\n  background:linear-gradient(105deg,#fff 0%,#d7d2ff 48%,#85edf0 100%);\n  -webkit-background-clip:text;\n  background-clip:text;\n  color:transparent;\n}\n\n.gs-lead{\n  margin:0;\n  max-width:860px;\n  color:var(--gs-muted);\n  font-size:clamp(18px,1.45vw,22px);\n  line-height:1.65;\n  letter-spacing:-.012em;\n}\n\n.gs-outcome{\n  min-width:0;\n  padding:24px;\n  border:1px solid var(--gs-line);\n  border-radius:20px;\n  background:rgba(255,255,255,.026);\n  box-shadow:0 18px 50px rgba(0,0,0,.22);\n}\n\n.gs-outcome-label{\n  margin-bottom:12px;\n  color:#7f8998;\n  font-size:11px;\n  font-weight:800;\n  letter-spacing:.12em;\n  text-transform:uppercase;\n}\n\n.gs-outcome p{\n  margin:0;\n  color:#dce1e9;\n  font-size:15px;\n  line-height:1.62;\n}\n\n.gs-layout{\n  display:grid;\n  grid-template-columns:244px minmax(0,1fr) 220px;\n  gap:22px;\n  align-items:start;\n  min-width:0;\n}\n\n.gs-layout > *{\n  min-width:0;\n}\n\n.gs-sidebar,\n.gs-toc{\n  position:sticky;\n  top:22px;\n  padding:20px;\n  border:1px solid var(--gs-line);\n  border-radius:18px;\n  background:rgba(10,14,20,.82);\n  backdrop-filter:blur(16px);\n  box-shadow:0 18px 48px rgba(0,0,0,.19);\n}\n\n.gs-side-brand{\n  display:flex;\n  align-items:center;\n  gap:11px;\n  padding-bottom:18px;\n  margin-bottom:18px;\n  border-bottom:1px solid var(--gs-line);\n}\n\n.gs-logo{\n  width:34px;\n  height:34px;\n  border-radius:11px;\n  display:grid;\n  place-items:center;\n  background:linear-gradient(135deg,#7f72ff,#4fd1c5);\n  box-shadow:0 12px 30px rgba(88,69,204,.28);\n}\n\n.gs-logo svg{width:20px;height:20px}\n\n.gs-side-brand strong{\n  display:block;\n  font-size:14px;\n  letter-spacing:-.02em;\n}\n\n.gs-side-brand span{\n  display:block;\n  margin-top:2px;\n  color:#778190;\n  font-size:11px;\n}\n\n.gs-nav-group+.gs-nav-group{margin-top:19px}\n\n.gs-nav-label{\n  display:block;\n  margin-bottom:8px;\n  color:#66707f;\n  font-size:10px;\n  font-weight:800;\n  letter-spacing:.12em;\n  text-transform:uppercase;\n}\n\n.gs-nav-link{\n  display:block;\n  padding:9px 10px;\n  border-radius:9px;\n  color:#a8b2c0;\n  font-size:13px;\n  line-height:1.35;\n  transition:.2s ease;\n}\n\n.gs-nav-link:hover,\n.gs-nav-link:focus-visible{\n  color:#fff;\n  background:rgba(255,255,255,.045);\n  outline:none;\n}\n\n.gs-nav-link.active{\n  color:#fff;\n  background:linear-gradient(90deg,rgba(139,124,255,.18),rgba(88,216,232,.05));\n  border:1px solid rgba(139,124,255,.15);\n}\n\n.gs-doc{\n  min-width:0;\n  padding:34px;\n  border:1px solid var(--gs-line);\n  border-radius:26px;\n  background:\n    linear-gradient(180deg,rgba(255,255,255,.018),rgba(255,255,255,.007)),\n    rgba(10,14,20,.78);\n  box-shadow:0 28px 84px rgba(0,0,0,.28);\n  backdrop-filter:blur(18px);\n}\n\n.gs-doc-section{\n  scroll-margin-top:30px;\n  padding:0 0 42px;\n  margin:0 0 42px;\n  border-bottom:1px solid var(--gs-line);\n}\n\n.gs-doc-section:last-child{\n  border-bottom:0;\n  margin-bottom:0;\n  padding-bottom:0;\n}\n\n.gs-doc h2{\n  margin:0 0 14px;\n  font-size:clamp(28px,3vw,44px);\n  line-height:1.06;\n  letter-spacing:-.043em;\n}\n\n.gs-doc h3{\n  margin:28px 0 12px;\n  font-size:21px;\n  line-height:1.25;\n  letter-spacing:-.025em;\n}\n\n.gs-doc p,\n.gs-doc li{\n  color:#aab4c1;\n  font-size:15px;\n  line-height:1.72;\n}\n\n.gs-doc p{margin:0 0 16px}\n\n.gs-doc ul,\n.gs-doc ol{\n  margin:14px 0 0;\n  padding-left:22px;\n}\n\n.gs-doc li+li{margin-top:8px}\n\n.gs-callout{\n  margin:24px 0;\n  padding:18px 20px;\n  display:flex;\n  gap:13px;\n  align-items:flex-start;\n  border:1px solid rgba(88,216,232,.17);\n  border-radius:14px;\n  background:rgba(88,216,232,.045);\n}\n\n.gs-callout svg{\n  flex:0 0 auto;\n  color:var(--gs-cyan);\n  margin-top:2px;\n}\n\n.gs-callout strong{\n  display:block;\n  margin-bottom:4px;\n  color:#eafcff;\n  font-size:14px;\n}\n\n.gs-callout p{\n  margin:0;\n  font-size:14px;\n}\n\n.gs-step{\n  display:grid;\n  grid-template-columns:52px minmax(0,1fr);\n  gap:16px;\n  margin-top:20px;\n  padding:22px;\n  border:1px solid var(--gs-line);\n  border-radius:16px;\n  background:rgba(255,255,255,.022);\n}\n\n.gs-step-no{\n  width:42px;\n  height:42px;\n  border-radius:13px;\n  display:grid;\n  place-items:center;\n  background:linear-gradient(145deg,rgba(139,124,255,.20),rgba(88,216,232,.07));\n  border:1px solid rgba(255,255,255,.09);\n  color:#ded9ff;\n  font-size:13px;\n  font-weight:800;\n}\n\n.gs-step h3{margin:2px 0 8px}\n.gs-step p{margin:0}\n\n.gs-ui{\n  margin:18px 0 0;\n  overflow:hidden;\n  border:1px solid var(--gs-line);\n  border-radius:15px;\n  background:#0c1118;\n}\n\n.gs-ui-top{\n  display:flex;\n  align-items:center;\n  justify-content:space-between;\n  gap:12px;\n  padding:12px 14px;\n  border-bottom:1px solid var(--gs-line);\n  background:rgba(255,255,255,.022);\n}\n\n.gs-dots{display:flex;gap:6px}\n.gs-dots span{width:7px;height:7px;border-radius:50%;background:#46505e}\n.gs-ui-top small{color:#6f7988;font-size:11px}\n\n.gs-ui-body{padding:18px}\n.gs-field{margin-bottom:14px}\n.gs-field:last-child{margin-bottom:0}\n\n.gs-field label{\n  display:block;\n  margin-bottom:7px;\n  color:#8993a1;\n  font-size:11px;\n  font-weight:700;\n}\n\n.gs-input{\n  min-height:42px;\n  padding:11px 13px;\n  border:1px solid rgba(255,255,255,.09);\n  border-radius:10px;\n  background:rgba(255,255,255,.025);\n  color:#dfe4eb;\n  font-size:13px;\n}\n\n.gs-button{\n  display:inline-flex;\n  align-items:center;\n  gap:8px;\n  min-height:42px;\n  padding:11px 15px;\n  border-radius:10px;\n  background:linear-gradient(135deg,#8b7cff,#5bbfd4);\n  color:#fff;\n  font-size:13px;\n  font-weight:750;\n  box-shadow:0 12px 28px rgba(89,72,201,.27);\n}\n\n.gs-code{\n  margin:18px 0 0;\n  overflow:auto;\n  border:1px solid var(--gs-line);\n  border-radius:15px;\n  background:#080c12;\n  -webkit-overflow-scrolling:touch;\n}\n\n.gs-code-head{\n  display:flex;\n  align-items:center;\n  justify-content:space-between;\n  padding:11px 14px;\n  border-bottom:1px solid var(--gs-line);\n  color:#7d8795;\n  font-size:11px;\n}\n\n.gs-code pre{\n  margin:0;\n  padding:18px;\n  min-width:560px;\n  color:#d6deeb;\n  font:13px\/1.65 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;\n  white-space:pre;\n}\n\n.gs-code .k{color:#c792ea}\n.gs-code .s{color:#c3e88d}\n.gs-code .v{color:#82aaff}\n.gs-code .c{color:#607080}\n\n.gs-checklist{\n  display:grid;\n  grid-template-columns:repeat(2,minmax(0,1fr));\n  gap:12px;\n  margin-top:20px;\n}\n\n.gs-check{\n  display:flex;\n  gap:11px;\n  align-items:flex-start;\n  padding:15px;\n  border:1px solid var(--gs-line);\n  border-radius:13px;\n  background:rgba(255,255,255,.02);\n}\n\n.gs-check svg{\n  flex:0 0 auto;\n  color:var(--gs-green);\n  margin-top:2px;\n}\n\n.gs-check span{\n  color:#aab4c1;\n  font-size:14px;\n  line-height:1.5;\n}\n\n.gs-toc h3{\n  margin:0 0 15px;\n  color:#e7ebf0;\n  font-size:13px;\n  letter-spacing:-.01em;\n}\n\n.gs-toc a{\n  display:block;\n  padding:7px 0;\n  color:#87919f;\n  font-size:12px;\n  line-height:1.4;\n  transition:.2s ease;\n}\n\n.gs-toc a:hover,\n.gs-toc a:focus-visible{\n  color:#fff;\n  outline:none;\n}\n\n.gs-next{\n  margin-top:36px;\n  display:grid;\n  grid-template-columns:1fr 1fr;\n  gap:14px;\n}\n\n.gs-next-card{\n  min-height:126px;\n  padding:20px;\n  border:1px solid var(--gs-line);\n  border-radius:15px;\n  background:rgba(255,255,255,.024);\n  transition:.22s ease;\n}\n\n.gs-next-card:hover,\n.gs-next-card:focus-visible{\n  transform:translateY(-3px);\n  border-color:rgba(139,124,255,.28);\n  background:rgba(139,124,255,.045);\n  outline:none;\n}\n\n.gs-next-card small{\n  display:block;\n  margin-bottom:8px;\n  color:#727c8a;\n  font-size:10px;\n  font-weight:800;\n  letter-spacing:.10em;\n  text-transform:uppercase;\n}\n\n.gs-next-card strong{\n  display:block;\n  margin-bottom:7px;\n  font-size:16px;\n}\n\n.gs-next-card span{\n  color:#929caa;\n  font-size:13px;\n  line-height:1.5;\n}\n\n@media(max-width:1180px){\n  .gs-hero{\n    grid-template-columns:1fr;\n    gap:24px;\n  }\n\n  .gs-layout{\n    grid-template-columns:220px minmax(0,1fr);\n  }\n\n  .gs-toc{\n    display:none;\n  }\n}\n\n@media(max-width:860px){\n  .gs-wrap{\n    width:min(calc(100vw - 32px),var(--gs-max));\n    padding:82px 0 92px;\n  }\n\n  .gs-layout{\n    grid-template-columns:1fr;\n  }\n\n  .gs-sidebar{\n    position:relative;\n    top:auto;\n    overflow-x:auto;\n  }\n\n  .gs-side-brand{\n    margin-bottom:12px;\n  }\n\n  .gs-nav-scroll{\n    display:flex;\n    gap:8px;\n    min-width:max-content;\n  }\n\n  .gs-nav-group,\n  .gs-nav-group+.gs-nav-group{\n    display:contents;\n    margin:0;\n  }\n\n  .gs-nav-label{\n    display:none;\n  }\n\n  .gs-nav-link{\n    border:1px solid var(--gs-line);\n    background:rgba(255,255,255,.02);\n  }\n\n  .gs-doc{\n    padding:25px;\n  }\n}\n\n@media(max-width:620px){\n  .gs-wrap{\n    width:min(calc(100vw - 28px),var(--gs-max));\n    padding:72px 0 80px;\n  }\n\n  .gs-title{\n    font-size:clamp(46px,15vw,70px);\n  }\n\n  .gs-checklist,\n  .gs-next{\n    grid-template-columns:1fr;\n  }\n\n  .gs-step{\n    grid-template-columns:1fr;\n  }\n\n  .gs-step-no{\n    width:38px;\n    height:38px;\n  }\n\n  .gs-doc{\n    padding:20px;\n  }\n}\n\n@media(prefers-reduced-motion:reduce){\n  .gs-root *,\n  .gs-root *::before,\n  .gs-root *::after{\n    transition:none!important;\n    animation:none!important;\n  }\n}\n<\/style>\n\n<section id=\"getting-started\" class=\"gs-root\" aria-labelledby=\"gs-page-title\">\n  <div class=\"gs-wrap\">\n\n    <div class=\"gs-eyebrow\">\n      <span class=\"gs-pill\">\n        <span class=\"gs-pill-dot\" aria-hidden=\"true\"><\/span>\n        NovaFlow Docs \u00b7 Get started\n      <\/span>\n\n      <span class=\"gs-time\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n          <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" stroke-width=\"1.7\"\/>\n          <path d=\"M12 7v5l3 2\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n        <\/svg>\n        7-minute setup\n      <\/span>\n    <\/div>\n\n    <div class=\"gs-hero\">\n      <div>\n        <h1 id=\"gs-page-title\" class=\"gs-title\">\n          Build your first <span>NovaFlow workflow.<\/span>\n        <\/h1>\n\n        <p class=\"gs-lead\">\n          Create a workspace, invite a teammate, connect an app, and publish a simple workflow.\n          By the end of this guide, NovaFlow will automatically route every new support request\n          to the right owner.\n        <\/p>\n      <\/div>\n\n      <aside class=\"gs-outcome\" aria-label=\"Guide outcome\">\n        <div class=\"gs-outcome-label\">What you will complete<\/div>\n        <p>\n          A working automation that watches a shared support inbox, creates a task,\n          assigns it by request type, and confirms the workflow ran successfully.\n        <\/p>\n      <\/aside>\n    <\/div>\n\n    <div class=\"gs-layout\">\n\n      <aside class=\"gs-sidebar\" aria-label=\"NovaFlow documentation navigation\">\n        <div class=\"gs-side-brand\">\n          <div class=\"gs-logo\" aria-hidden=\"true\">\n            <svg viewBox=\"0 0 40 40\" fill=\"none\">\n              <path d=\"M8 27.5 19.6 8 32 27.5\" stroke=\"white\" stroke-width=\"3.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n              <path d=\"M12.3 21.3h15.4\" stroke=\"white\" stroke-width=\"3.4\" stroke-linecap=\"round\"\/>\n            <\/svg>\n          <\/div>\n\n          <div>\n            <strong>NovaFlow<\/strong>\n            <span>Documentation<\/span>\n          <\/div>\n        <\/div>\n\n        <div class=\"gs-nav-scroll\">\n          <div class=\"gs-nav-group\">\n            <span class=\"gs-nav-label\">Get started<\/span>\n            <a class=\"gs-nav-link active\" href=\"#getting-started\">Getting Started<\/a>\n            <a class=\"gs-nav-link\" href=\"#onboarding-documentation\">Onboarding<\/a>\n          <\/div>\n\n          <div class=\"gs-nav-group\">\n            <span class=\"gs-nav-label\">Product guides<\/span>\n            <a class=\"gs-nav-link\" href=\"#feature-documentation\">Feature Documentation<\/a>\n            <a class=\"gs-nav-link\" href=\"#administrator-manual\">Administrator Manual<\/a>\n          <\/div>\n\n          <div class=\"gs-nav-group\">\n            <span class=\"gs-nav-label\">Developers<\/span>\n            <a class=\"gs-nav-link\" href=\"#api-quickstart\">API Quickstart<\/a>\n            <a class=\"gs-nav-link\" href=\"#api-reference\">API Reference<\/a>\n            <a class=\"gs-nav-link\" href=\"#integration-guide\">Integration Guide<\/a>\n          <\/div>\n\n          <div class=\"gs-nav-group\">\n            <span class=\"gs-nav-label\">Operations<\/span>\n            <a class=\"gs-nav-link\" href=\"#troubleshooting-guide\">Troubleshooting<\/a>\n            <a class=\"gs-nav-link\" href=\"#release-notes\">Release Notes<\/a>\n            <a class=\"gs-nav-link\" href=\"#migration-guide\">Migration Guide<\/a>\n            <a class=\"gs-nav-link\" href=\"#knowledge-base\">Knowledge Base<\/a>\n          <\/div>\n        <\/div>\n      <\/aside>\n\n      <main class=\"gs-doc\">\n\n        <section id=\"gs-before-you-begin\" class=\"gs-doc-section\">\n          <h2>Before you begin<\/h2>\n          <p>\n            This guide uses a sample support workflow so you can learn the core NovaFlow model:\n            a <strong>trigger<\/strong> detects an event, one or more <strong>actions<\/strong> process it,\n            and a published <strong>workflow<\/strong> runs the sequence automatically.\n          <\/p>\n\n          <div class=\"gs-callout\">\n            <svg width=\"19\" height=\"19\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n              <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" stroke-width=\"1.7\"\/>\n              <path d=\"M12 10v6M12 7h.01\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\"\/>\n            <\/svg>\n            <div>\n              <strong>Access required<\/strong>\n              <p>You need permission to create workflows and connect apps in your workspace.<\/p>\n            <\/div>\n          <\/div>\n\n          <h3>You will need<\/h3>\n          <ul>\n            <li>A NovaFlow account with an active workspace.<\/li>\n            <li>Access to a shared support inbox.<\/li>\n            <li>A project or task-management tool supported by NovaFlow.<\/li>\n            <li>One teammate to invite for the assignment step.<\/li>\n          <\/ul>\n        <\/section>\n\n        <section id=\"gs-create-workspace\" class=\"gs-doc-section\">\n          <h2>1. Create your workspace<\/h2>\n          <p>\n            A workspace contains your people, apps, workflows, permissions, and execution history.\n            Use one workspace for a single team or operating environment.\n          <\/p>\n\n          <div class=\"gs-step\">\n            <div class=\"gs-step-no\">01<\/div>\n            <div>\n              <h3>Name the workspace<\/h3>\n              <p>Choose a name that people can identify quickly, such as <strong>Customer Operations<\/strong>.<\/p>\n\n              <div class=\"gs-ui\" aria-label=\"NovaFlow workspace setup mock interface\">\n                <div class=\"gs-ui-top\">\n                  <div class=\"gs-dots\" aria-hidden=\"true\"><span><\/span><span><\/span><span><\/span><\/div>\n                  <small>Workspace setup<\/small>\n                <\/div>\n\n                <div class=\"gs-ui-body\">\n                  <div class=\"gs-field\">\n                    <label>Workspace name<\/label>\n                    <div class=\"gs-input\">Customer Operations<\/div>\n                  <\/div>\n\n                  <div class=\"gs-field\">\n                    <label>Workspace URL<\/label>\n                    <div class=\"gs-input\">novaflow.app\/customer-operations<\/div>\n                  <\/div>\n\n                  <span class=\"gs-button\">\n                    Create workspace\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n                      <path d=\"m9 5 7 7-7 7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                    <\/svg>\n                  <\/span>\n                <\/div>\n              <\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"gs-step\">\n            <div class=\"gs-step-no\">02<\/div>\n            <div>\n              <h3>Invite a teammate<\/h3>\n              <p>\n                Open <strong>Workspace settings \u2192 Members<\/strong>, enter the teammate\u2019s email address,\n                and assign the <strong>Member<\/strong> role. Members can use published workflows but cannot\n                change workspace-wide security settings.\n              <\/p>\n            <\/div>\n          <\/div>\n        <\/section>\n\n        <section id=\"gs-connect-apps\" class=\"gs-doc-section\">\n          <h2>2. Connect the apps<\/h2>\n          <p>\n            Connect the source app that creates the event and the destination app that receives the task.\n            NovaFlow stores each connection at workspace level so approved workflows can reuse it.\n          <\/p>\n\n          <div class=\"gs-step\">\n            <div class=\"gs-step-no\">01<\/div>\n            <div>\n              <h3>Connect the shared inbox<\/h3>\n              <p>\n                Go to <strong>Connections<\/strong>, select your email provider, and authorize access to the\n                shared support inbox. Choose the minimum permissions required to read new messages.\n              <\/p>\n            <\/div>\n          <\/div>\n\n          <div class=\"gs-step\">\n            <div class=\"gs-step-no\">02<\/div>\n            <div>\n              <h3>Connect the task tool<\/h3>\n              <p>\n                Add the project where support requests should become tasks. Confirm that NovaFlow can create\n                tasks and assign them to members.\n              <\/p>\n            <\/div>\n          <\/div>\n\n          <div class=\"gs-callout\">\n            <svg width=\"19\" height=\"19\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n              <path d=\"M12 3 4.5 6.5v5.2c0 4.6 3 7.5 7.5 9.3 4.5-1.8 7.5-4.7 7.5-9.3V6.5L12 3Z\" stroke=\"currentColor\" stroke-width=\"1.7\"\/>\n              <path d=\"m9.3 12.2 1.8 1.8 3.8-4\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n            <\/svg>\n            <div>\n              <strong>Security principle<\/strong>\n              <p>Use least-privilege access. Do not grant write permissions to an app unless the workflow needs them.<\/p>\n            <\/div>\n          <\/div>\n        <\/section>\n\n        <section id=\"gs-build-workflow\" class=\"gs-doc-section\">\n          <h2>3. Build the workflow<\/h2>\n          <p>\n            Create a workflow with one trigger and three actions. The trigger watches for a new email,\n            while the actions classify the request, create a task, and assign an owner.\n          <\/p>\n\n          <div class=\"gs-step\">\n            <div class=\"gs-step-no\">01<\/div>\n            <div>\n              <h3>Add the trigger<\/h3>\n              <p>\n                Select <strong>New email received<\/strong>. Set the inbox to <strong>support@company.com<\/strong>\n                and limit the trigger to unread messages.\n              <\/p>\n            <\/div>\n          <\/div>\n\n          <div class=\"gs-step\">\n            <div class=\"gs-step-no\">02<\/div>\n            <div>\n              <h3>Add the actions<\/h3>\n              <ol>\n                <li><strong>Classify request<\/strong> by billing, technical, or account topic.<\/li>\n                <li><strong>Create task<\/strong> with the email subject as the task title.<\/li>\n                <li><strong>Assign owner<\/strong> based on the classification result.<\/li>\n              <\/ol>\n            <\/div>\n          <\/div>\n\n          <div class=\"gs-code\" aria-label=\"Sample NovaFlow workflow configuration\">\n            <div class=\"gs-code-head\">\n              <span>workflow.yaml<\/span>\n              <span>Example<\/span>\n            <\/div>\n\n            <pre><code><span class=\"k\">name<\/span>: <span class=\"s\">Route support requests<\/span>\n<span class=\"k\">trigger<\/span>:\n  <span class=\"k\">type<\/span>: <span class=\"v\">email.received<\/span>\n  <span class=\"k\">inbox<\/span>: <span class=\"s\">support@company.com<\/span>\n\n<span class=\"k\">actions<\/span>:\n  - <span class=\"k\">type<\/span>: <span class=\"v\">ai.classify<\/span>\n    <span class=\"k\">labels<\/span>: [<span class=\"s\">billing<\/span>, <span class=\"s\">technical<\/span>, <span class=\"s\">account<\/span>]\n\n  - <span class=\"k\">type<\/span>: <span class=\"v\">task.create<\/span>\n    <span class=\"k\">title<\/span>: <span class=\"s\">\"{{ email.subject }}\"<\/span>\n\n  - <span class=\"k\">type<\/span>: <span class=\"v\">task.assign<\/span>\n    <span class=\"k\">rule<\/span>: <span class=\"s\">\"{{ classification.label }}\"<\/span><\/code><\/pre>\n          <\/div>\n        <\/section>\n\n        <section id=\"gs-test-workflow\" class=\"gs-doc-section\">\n          <h2>4. Test before publishing<\/h2>\n          <p>\n            Run the workflow with sample data before allowing it to process live messages.\n            NovaFlow shows the input, output, and status for every step.\n          <\/p>\n\n          <div class=\"gs-step\">\n            <div class=\"gs-step-no\">01<\/div>\n            <div>\n              <h3>Send a test message<\/h3>\n              <p>\n                Send an email with the subject <strong>Cannot update payment method<\/strong>.\n                The classifier should identify it as a billing request.\n              <\/p>\n            <\/div>\n          <\/div>\n\n          <div class=\"gs-step\">\n            <div class=\"gs-step-no\">02<\/div>\n            <div>\n              <h3>Review the run<\/h3>\n              <p>\n                Confirm that every step shows <strong>Successful<\/strong>, the task contains the correct subject,\n                and the billing owner is assigned.\n              <\/p>\n            <\/div>\n          <\/div>\n\n          <div class=\"gs-checklist\">\n            <div class=\"gs-check\">\n              <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n                <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" stroke-width=\"1.7\"\/>\n                <path d=\"m8.5 12.2 2.2 2.2 4.8-5\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n              <\/svg>\n              <span>The trigger received the correct inbox event.<\/span>\n            <\/div>\n\n            <div class=\"gs-check\">\n              <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n                <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" stroke-width=\"1.7\"\/>\n                <path d=\"m8.5 12.2 2.2 2.2 4.8-5\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n              <\/svg>\n              <span>The request was classified as billing.<\/span>\n            <\/div>\n\n            <div class=\"gs-check\">\n              <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n                <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" stroke-width=\"1.7\"\/>\n                <path d=\"m8.5 12.2 2.2 2.2 4.8-5\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n              <\/svg>\n              <span>The destination task was created once.<\/span>\n            <\/div>\n\n            <div class=\"gs-check\">\n              <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n                <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" stroke-width=\"1.7\"\/>\n                <path d=\"m8.5 12.2 2.2 2.2 4.8-5\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n              <\/svg>\n              <span>The correct owner received the assignment.<\/span>\n            <\/div>\n          <\/div>\n        <\/section>\n\n        <section id=\"gs-publish\" class=\"gs-doc-section\">\n          <h2>5. Publish and monitor<\/h2>\n          <p>\n            Select <strong>Publish workflow<\/strong>, review the permissions summary, and confirm.\n            NovaFlow begins listening for new inbox events immediately.\n          <\/p>\n\n          <div class=\"gs-callout\">\n            <svg width=\"19\" height=\"19\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n              <path d=\"M12 4v10M8 8l4-4 4 4M5 14v5h14v-5\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n            <\/svg>\n            <div>\n              <strong>After publishing<\/strong>\n              <p>\n                Open <strong>Runs<\/strong> to review execution history, duration, failed steps, and retried actions.\n                Pause the workflow before changing a live connection or assignment rule.\n              <\/p>\n            <\/div>\n          <\/div>\n\n          <h3>You are ready<\/h3>\n          <p>\n            You have created a working NovaFlow automation and used the four core concepts:\n            workspace, connection, trigger, and action.\n          <\/p>\n\n          <div class=\"gs-next\">\n            <a class=\"gs-next-card\" href=\"#feature-documentation\">\n              <small>Next guide<\/small>\n              <strong>Feature Documentation<\/strong>\n              <span>Learn how conditional workflow branches work.<\/span>\n            <\/a>\n\n            <a class=\"gs-next-card\" href=\"#api-quickstart\">\n              <small>For developers<\/small>\n              <strong>API Quickstart<\/strong>\n              <span>Create your first workflow through the NovaFlow API.<\/span>\n            <\/a>\n          <\/div>\n        <\/section>\n\n      <\/main>\n\n      <aside class=\"gs-toc\" aria-label=\"On this page\">\n        <h3>On this page<\/h3>\n        <a href=\"#gs-before-you-begin\">Before you begin<\/a>\n        <a href=\"#gs-create-workspace\">Create a workspace<\/a>\n        <a href=\"#gs-connect-apps\">Connect apps<\/a>\n        <a href=\"#gs-build-workflow\">Build the workflow<\/a>\n        <a href=\"#gs-test-workflow\">Test the workflow<\/a>\n        <a href=\"#gs-publish\">Publish and monitor<\/a>\n      <\/aside>\n\n    <\/div>\n  <\/div>\n<\/section>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-02cd9c7 e-flex e-con-boxed e-con e-parent\" data-id=\"02cd9c7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1ccbd28 elementor-widget elementor-widget-html\" data-id=\"1ccbd28\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"feature-documentation\" data-widget_type=\"html.default\">\n\t\t\t\t\t\n<style>\n\/* =========================================================\n   NOVAFLOW \u2014 FEATURE DOCUMENTATION\n   HARD RESET \/ FULL-BLEED ELEMENTOR VERSION\n   No CSS ID is required in Elementor.\n   Keep Width, Position, Margin and Padding at Default\/0.\n   ========================================================= *\/\n\n\/* Force only the Elementor branch containing this block to full width. *\/\nbody .elementor-widget-html:has(.fd-root),\nbody .elementor-widget-html:has(.fd-root) > .elementor-widget-container,\nbody .e-con:has(> .elementor-widget-html .fd-root),\nbody .e-con-inner:has(> .elementor-widget-html .fd-root){\n  width:100% !important;\n  max-width:none !important;\n  min-width:0 !important;\n  flex:0 0 100% !important;\n  align-self:stretch !important;\n  overflow:visible !important;\n  margin-left:0 !important;\n  margin-right:0 !important;\n  padding-left:0 !important;\n  padding-right:0 !important;\n  transform:none !important;\n}\n\nhtml,\nbody{\n  overflow-x:clip;\n}\n\n.fd-root,\n.fd-root *{\n  box-sizing:border-box;\n}\n\n.fd-root{\n  --fd-bg:#07090d;\n  --fd-panel:rgba(14,19,27,.88);\n  --fd-line:rgba(255,255,255,.085);\n  --fd-text:#f6f8fb;\n  --fd-muted:#a6b0bf;\n  --fd-purple:#8b7cff;\n  --fd-cyan:#58d8e8;\n  --fd-green:#6ee7b7;\n  --fd-amber:#f3c969;\n  --fd-red:#ff8e9d;\n  --fd-max:1480px;\n\n  position:relative;\n  isolation:isolate;\n  width:100vw;\n  max-width:100vw;\n  margin-left:calc(50% - 50vw);\n  margin-right:calc(50% - 50vw);\n  overflow:hidden;\n  color:var(--fd-text);\n  background:\n    radial-gradient(circle at 12% 3%,rgba(139,124,255,.14),transparent 28%),\n    radial-gradient(circle at 90% 15%,rgba(88,216,232,.10),transparent 24%),\n    linear-gradient(180deg,#080b11 0%,#090e15 100%);\n  border-top:1px solid rgba(255,255,255,.05);\n  border-bottom:1px solid rgba(255,255,255,.05);\n  font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif;\n  -webkit-font-smoothing:antialiased;\n  text-rendering:optimizeLegibility;\n}\n\n.fd-root::before{\n  content:\"\";\n  position:absolute;\n  inset:0;\n  z-index:-2;\n  pointer-events:none;\n  opacity:.30;\n  background:\n    linear-gradient(rgba(255,255,255,.022) 1px,transparent 1px),\n    linear-gradient(90deg,rgba(255,255,255,.022) 1px,transparent 1px);\n  background-size:56px 56px;\n  -webkit-mask-image:linear-gradient(to bottom,transparent,#000 10%,#000 90%,transparent);\n  mask-image:linear-gradient(to bottom,transparent,#000 10%,#000 90%,transparent);\n}\n\n.fd-root a{\n  color:inherit;\n  text-decoration:none;\n}\n\n.fd-wrap{\n  width:min(calc(100vw - 48px),var(--fd-max));\n  max-width:var(--fd-max);\n  min-width:0;\n  margin:0 auto;\n  padding:104px 0 112px;\n}\n\n.fd-eyebrow{\n  display:flex;\n  flex-wrap:wrap;\n  align-items:center;\n  gap:12px;\n  margin-bottom:26px;\n}\n\n.fd-pill{\n  display:inline-flex;\n  align-items:center;\n  gap:9px;\n  min-height:38px;\n  padding:9px 14px;\n  border:1px solid rgba(139,124,255,.25);\n  border-radius:999px;\n  background:rgba(139,124,255,.07);\n  color:#d9d4ff;\n  font-size:12px;\n  font-weight:750;\n  letter-spacing:.10em;\n  text-transform:uppercase;\n}\n\n.fd-pill-dot{\n  width:7px;\n  height:7px;\n  border-radius:50%;\n  background:linear-gradient(135deg,var(--fd-purple),var(--fd-cyan));\n  box-shadow:0 0 14px rgba(139,124,255,.68);\n}\n\n.fd-meta{\n  color:#aab4c1;\n  font-size:13px;\n}\n\n.fd-hero{\n  display:grid;\n  grid-template-columns:minmax(0,1.18fr) minmax(330px,.82fr);\n  gap:56px;\n  align-items:end;\n  margin-bottom:42px;\n  min-width:0;\n}\n\n.fd-hero > *{\n  min-width:0;\n}\n\n.fd-title{\n  margin:0 0 20px;\n  max-width:980px;\n  font-size:clamp(54px,6.6vw,100px);\n  line-height:.94;\n  letter-spacing:-.058em;\n  font-weight:770;\n  word-break:normal !important;\n  overflow-wrap:normal !important;\n  hyphens:none !important;\n}\n\n.fd-title span{\n  background:linear-gradient(105deg,#fff 0%,#d7d2ff 48%,#85edf0 100%);\n  -webkit-background-clip:text;\n  background-clip:text;\n  color:transparent;\n}\n\n.fd-lead{\n  margin:0;\n  max-width:880px;\n  color:var(--fd-muted);\n  font-size:clamp(18px,1.45vw,22px);\n  line-height:1.65;\n  letter-spacing:-.012em;\n}\n\n.fd-summary{\n  min-width:0;\n  padding:24px;\n  border:1px solid var(--fd-line);\n  border-radius:20px;\n  background:rgba(255,255,255,.026);\n  box-shadow:0 18px 50px rgba(0,0,0,.22);\n}\n\n.fd-summary small{\n  display:block;\n  margin-bottom:12px;\n  color:#7f8998;\n  font-size:11px;\n  font-weight:800;\n  letter-spacing:.12em;\n  text-transform:uppercase;\n}\n\n.fd-summary p{\n  margin:0;\n  color:#dce1e9;\n  font-size:14px;\n  line-height:1.62;\n}\n\n.fd-layout{\n  display:grid;\n  grid-template-columns:244px minmax(0,1fr) 220px;\n  gap:22px;\n  align-items:start;\n  min-width:0;\n}\n\n.fd-layout > *{\n  min-width:0;\n}\n\n.fd-side,\n.fd-toc{\n  position:sticky;\n  top:22px;\n  padding:20px;\n  border:1px solid var(--fd-line);\n  border-radius:18px;\n  background:rgba(10,14,20,.82);\n  backdrop-filter:blur(16px);\n  box-shadow:0 18px 48px rgba(0,0,0,.19);\n}\n\n.fd-brand{\n  display:flex;\n  align-items:center;\n  gap:11px;\n  padding-bottom:18px;\n  margin-bottom:18px;\n  border-bottom:1px solid var(--fd-line);\n}\n\n.fd-logo{\n  width:34px;\n  height:34px;\n  border-radius:11px;\n  display:grid;\n  place-items:center;\n  background:linear-gradient(135deg,#7f72ff,#4fd1c5);\n  box-shadow:0 12px 30px rgba(88,69,204,.28);\n  font-weight:900;\n}\n\n.fd-brand strong{\n  display:block;\n  font-size:14px;\n}\n\n.fd-brand span{\n  display:block;\n  margin-top:2px;\n  color:#778190;\n  font-size:11px;\n}\n\n.fd-group+.fd-group{margin-top:19px}\n\n.fd-label{\n  display:block;\n  margin-bottom:8px;\n  color:#66707f;\n  font-size:10px;\n  font-weight:800;\n  letter-spacing:.12em;\n  text-transform:uppercase;\n}\n\n.fd-link{\n  display:block;\n  padding:9px 10px;\n  border-radius:9px;\n  color:#a8b2c0;\n  font-size:13px;\n  line-height:1.35;\n  transition:.2s ease;\n}\n\n.fd-link:hover,\n.fd-link:focus-visible{\n  color:#fff;\n  background:rgba(255,255,255,.045);\n  outline:none;\n}\n\n.fd-link.active{\n  color:#fff;\n  background:linear-gradient(90deg,rgba(139,124,255,.18),rgba(88,216,232,.05));\n  border:1px solid rgba(139,124,255,.15);\n}\n\n.fd-doc{\n  min-width:0;\n  padding:34px;\n  border:1px solid var(--fd-line);\n  border-radius:26px;\n  background:\n    linear-gradient(180deg,rgba(255,255,255,.018),rgba(255,255,255,.007)),\n    rgba(10,14,20,.78);\n  box-shadow:0 28px 84px rgba(0,0,0,.28);\n  backdrop-filter:blur(18px);\n}\n\n.fd-section{\n  scroll-margin-top:30px;\n  padding:0 0 44px;\n  margin:0 0 44px;\n  border-bottom:1px solid var(--fd-line);\n}\n\n.fd-section:last-child{\n  border-bottom:0;\n  margin-bottom:0;\n  padding-bottom:0;\n}\n\n.fd-doc h2{\n  margin:0 0 14px;\n  font-size:clamp(28px,3vw,44px);\n  line-height:1.06;\n  letter-spacing:-.043em;\n}\n\n.fd-doc h3{\n  margin:28px 0 12px;\n  font-size:21px;\n  line-height:1.25;\n  letter-spacing:-.025em;\n}\n\n.fd-doc p,\n.fd-doc li{\n  color:#aab4c1;\n  font-size:15px;\n  line-height:1.72;\n}\n\n.fd-doc p{margin:0 0 16px}\n\n.fd-doc ul,\n.fd-doc ol{\n  margin:14px 0 0;\n  padding-left:22px;\n}\n\n.fd-doc li+li{margin-top:8px}\n\n.fd-callout{\n  margin:24px 0;\n  padding:18px 20px;\n  border:1px solid rgba(88,216,232,.17);\n  border-radius:14px;\n  background:rgba(88,216,232,.045);\n}\n\n.fd-callout strong{\n  display:block;\n  margin-bottom:4px;\n  color:#edf4f7;\n  font-size:14px;\n}\n\n.fd-callout p{\n  margin:0;\n  font-size:14px;\n}\n\n.fd-callout.warning{\n  border-color:rgba(243,201,105,.19);\n  background:rgba(243,201,105,.045);\n}\n\n.fd-callout.danger{\n  border-color:rgba(255,142,157,.18);\n  background:rgba(255,142,157,.045);\n}\n\n.fd-callout.success{\n  border-color:rgba(110,231,183,.18);\n  background:rgba(110,231,183,.045);\n}\n\n.fd-concepts{\n  display:grid;\n  grid-template-columns:repeat(3,minmax(0,1fr));\n  gap:12px;\n  margin-top:20px;\n}\n\n.fd-card{\n  min-height:154px;\n  padding:18px;\n  border:1px solid var(--fd-line);\n  border-radius:14px;\n  background:rgba(255,255,255,.022);\n}\n\n.fd-icon{\n  width:36px;\n  height:36px;\n  margin-bottom:16px;\n  display:grid;\n  place-items:center;\n  border-radius:11px;\n  background:rgba(139,124,255,.10);\n  border:1px solid rgba(139,124,255,.17);\n  color:#cfc8ff;\n  font-size:12px;\n  font-weight:800;\n}\n\n.fd-card h3{\n  margin:0 0 7px;\n  font-size:16px;\n}\n\n.fd-card p{\n  margin:0;\n  font-size:13px;\n  line-height:1.55;\n}\n\n.fd-flow{\n  display:grid;\n  grid-template-columns:repeat(5,minmax(0,1fr));\n  gap:10px;\n  align-items:center;\n  margin-top:22px;\n}\n\n.fd-flow-node{\n  position:relative;\n  min-height:112px;\n  padding:16px;\n  border:1px solid var(--fd-line);\n  border-radius:14px;\n  background:rgba(255,255,255,.022);\n}\n\n.fd-flow-node:not(:last-child)::after{\n  content:\"\u2192\";\n  position:absolute;\n  right:-17px;\n  top:50%;\n  transform:translateY(-50%);\n  color:#6f7988;\n  font-weight:800;\n}\n\n.fd-flow-node small{\n  display:block;\n  margin-bottom:7px;\n  color:#747e8d;\n  font-size:10px;\n  font-weight:800;\n  letter-spacing:.1em;\n  text-transform:uppercase;\n}\n\n.fd-flow-node strong{\n  display:block;\n  margin-bottom:6px;\n  font-size:14px;\n}\n\n.fd-flow-node span{\n  color:#98a2b1;\n  font-size:12px;\n  line-height:1.45;\n}\n\n.fd-ui{\n  margin:20px 0 0;\n  overflow:hidden;\n  border:1px solid var(--fd-line);\n  border-radius:15px;\n  background:#0c1118;\n}\n\n.fd-ui-head{\n  display:flex;\n  align-items:center;\n  justify-content:space-between;\n  gap:12px;\n  padding:12px 14px;\n  border-bottom:1px solid var(--fd-line);\n  background:rgba(255,255,255,.022);\n  color:#7b8593;\n  font-size:11px;\n}\n\n.fd-ui-body{padding:18px}\n\n.fd-builder{\n  display:grid;\n  grid-template-columns:1fr 42px 1fr;\n  gap:12px;\n  align-items:stretch;\n}\n\n.fd-branch{\n  padding:16px;\n  border:1px solid var(--fd-line);\n  border-radius:12px;\n  background:rgba(255,255,255,.02);\n}\n\n.fd-branch small{\n  display:block;\n  margin-bottom:8px;\n  color:#7a8492;\n  font-size:10px;\n  font-weight:800;\n  letter-spacing:.1em;\n  text-transform:uppercase;\n}\n\n.fd-branch strong{\n  display:block;\n  margin-bottom:6px;\n  font-size:14px;\n}\n\n.fd-branch span{\n  color:#9ba5b3;\n  font-size:13px;\n  line-height:1.5;\n}\n\n.fd-or{\n  display:grid;\n  place-items:center;\n  color:#687280;\n  font-size:11px;\n  font-weight:800;\n}\n\n.fd-code{\n  margin:18px 0 0;\n  overflow:auto;\n  border:1px solid var(--fd-line);\n  border-radius:15px;\n  background:#080c12;\n  -webkit-overflow-scrolling:touch;\n}\n\n.fd-code-head{\n  display:flex;\n  align-items:center;\n  justify-content:space-between;\n  padding:11px 14px;\n  border-bottom:1px solid var(--fd-line);\n  color:#7d8795;\n  font-size:11px;\n}\n\n.fd-code pre{\n  margin:0;\n  padding:18px;\n  min-width:620px;\n  color:#d6deeb;\n  font:13px\/1.65 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;\n  white-space:pre;\n}\n\n.fd-code .k{color:#c792ea}\n.fd-code .s{color:#c3e88d}\n.fd-code .v{color:#82aaff}\n.fd-code .n{color:#f78c6c}\n\n.fd-md{\n  margin-top:20px;\n  padding:22px;\n  border:1px solid var(--fd-line);\n  border-radius:15px;\n  background:rgba(255,255,255,.018);\n}\n\n.fd-md h4{\n  margin:0 0 10px;\n  color:#edf1f5;\n  font-size:17px;\n}\n\n.fd-md p{margin-bottom:10px}\n\n.fd-md code{\n  padding:2px 6px;\n  border-radius:6px;\n  background:rgba(139,124,255,.10);\n  color:#d7d1ff;\n  font:12px ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;\n}\n\n.fd-md blockquote{\n  margin:16px 0 0;\n  padding:14px 16px;\n  border-left:3px solid var(--fd-purple);\n  background:rgba(139,124,255,.045);\n  color:#aeb7c5;\n  font-size:14px;\n  line-height:1.6;\n}\n\n.fd-table{\n  overflow:auto;\n  margin-top:20px;\n  border:1px solid var(--fd-line);\n  border-radius:15px;\n  background:rgba(255,255,255,.018);\n  -webkit-overflow-scrolling:touch;\n}\n\n.fd-table table{\n  width:100%;\n  min-width:760px;\n  border-collapse:collapse;\n}\n\n.fd-table th,\n.fd-table td{\n  padding:15px 16px;\n  text-align:left;\n  border-bottom:1px solid var(--fd-line);\n  border-right:1px solid var(--fd-line);\n}\n\n.fd-table th:last-child,\n.fd-table td:last-child{\n  border-right:0;\n}\n\n.fd-table tr:last-child td{\n  border-bottom:0;\n}\n\n.fd-table th{\n  color:#8f99a8;\n  background:rgba(255,255,255,.022);\n  font-size:10px;\n  font-weight:800;\n  letter-spacing:.10em;\n  text-transform:uppercase;\n}\n\n.fd-table td{\n  color:#aeb8c6;\n  font-size:13px;\n  line-height:1.5;\n}\n\n.fd-table td:first-child{\n  color:#eef1f5;\n  font-weight:700;\n}\n\n.fd-checks{\n  display:grid;\n  grid-template-columns:repeat(2,minmax(0,1fr));\n  gap:12px;\n  margin-top:20px;\n}\n\n.fd-check{\n  display:flex;\n  gap:11px;\n  align-items:flex-start;\n  padding:15px;\n  border:1px solid var(--fd-line);\n  border-radius:13px;\n  background:rgba(255,255,255,.02);\n}\n\n.fd-check b{\n  color:var(--fd-green);\n}\n\n.fd-check span{\n  color:#aab4c1;\n  font-size:14px;\n  line-height:1.5;\n}\n\n.fd-toc h3{\n  margin:0 0 15px;\n  color:#e7ebf0;\n  font-size:13px;\n}\n\n.fd-toc a{\n  display:block;\n  padding:7px 0;\n  color:#87919f;\n  font-size:12px;\n  line-height:1.4;\n  transition:.2s ease;\n}\n\n.fd-toc a:hover,\n.fd-toc a:focus-visible{\n  color:#fff;\n  outline:none;\n}\n\n.fd-next{\n  margin-top:36px;\n  display:grid;\n  grid-template-columns:1fr 1fr;\n  gap:14px;\n}\n\n.fd-next a{\n  min-height:126px;\n  padding:20px;\n  border:1px solid var(--fd-line);\n  border-radius:15px;\n  background:rgba(255,255,255,.024);\n  transition:.22s ease;\n}\n\n.fd-next a:hover,\n.fd-next a:focus-visible{\n  transform:translateY(-3px);\n  border-color:rgba(139,124,255,.28);\n  background:rgba(139,124,255,.045);\n  outline:none;\n}\n\n.fd-next small{\n  display:block;\n  margin-bottom:8px;\n  color:#727c8a;\n  font-size:10px;\n  font-weight:800;\n  letter-spacing:.10em;\n  text-transform:uppercase;\n}\n\n.fd-next strong{\n  display:block;\n  margin-bottom:7px;\n  font-size:16px;\n}\n\n.fd-next span{\n  color:#929caa;\n  font-size:13px;\n  line-height:1.5;\n}\n\n@media(max-width:1180px){\n  .fd-hero{\n    grid-template-columns:1fr;\n    gap:24px;\n  }\n\n  .fd-layout{\n    grid-template-columns:220px minmax(0,1fr);\n  }\n\n  .fd-toc{\n    display:none;\n  }\n\n  .fd-flow{\n    grid-template-columns:1fr;\n  }\n\n  .fd-flow-node:not(:last-child)::after{\n    content:\"\u2193\";\n    right:50%;\n    top:auto;\n    bottom:-20px;\n    transform:translateX(50%);\n  }\n}\n\n@media(max-width:860px){\n  .fd-wrap{\n    width:min(calc(100vw - 32px),var(--fd-max));\n    padding:82px 0 92px;\n  }\n\n  .fd-layout{\n    grid-template-columns:1fr;\n  }\n\n  .fd-side{\n    position:relative;\n    top:auto;\n    overflow-x:auto;\n  }\n\n  .fd-brand{\n    margin-bottom:12px;\n  }\n\n  .fd-scroll{\n    display:flex;\n    gap:8px;\n    min-width:max-content;\n  }\n\n  .fd-group,\n  .fd-group+.fd-group{\n    display:contents;\n    margin:0;\n  }\n\n  .fd-label{\n    display:none;\n  }\n\n  .fd-link{\n    border:1px solid var(--fd-line);\n    background:rgba(255,255,255,.02);\n  }\n\n  .fd-doc{\n    padding:25px;\n  }\n\n  .fd-concepts{\n    grid-template-columns:repeat(2,minmax(0,1fr));\n  }\n}\n\n@media(max-width:620px){\n  .fd-wrap{\n    width:min(calc(100vw - 28px),var(--fd-max));\n    padding:72px 0 80px;\n  }\n\n  .fd-title{\n    font-size:clamp(46px,15vw,70px);\n  }\n\n  .fd-concepts,\n  .fd-checks,\n  .fd-next,\n  .fd-builder{\n    grid-template-columns:1fr;\n  }\n\n  .fd-or{\n    min-height:28px;\n  }\n\n  .fd-doc{\n    padding:20px;\n  }\n}\n\n@media(prefers-reduced-motion:reduce){\n  .fd-root *,\n  .fd-root *::before,\n  .fd-root *::after{\n    transition:none!important;\n    animation:none!important;\n  }\n}\n<\/style>\n\n<section id=\"feature-documentation\" class=\"fd-root\" aria-labelledby=\"fd-page-title\">\n  <div class=\"fd-wrap\">\n\n    <div class=\"fd-eyebrow\">\n      <span class=\"fd-pill\">\n        <span class=\"fd-pill-dot\" aria-hidden=\"true\"><\/span>\n        NovaFlow Docs \u00b7 Product guide\n      <\/span>\n      <span class=\"fd-meta\">Feature documentation<\/span>\n    <\/div>\n\n    <div class=\"fd-hero\">\n      <div>\n        <h1 id=\"fd-page-title\" class=\"fd-title\">\n          Build reliable logic with <span>conditional branches.<\/span>\n        <\/h1>\n        <p class=\"fd-lead\">\n          Use conditional branches to route workflow runs through different paths based on field values,\n          classification results, user attributes, or external data. This guide explains the feature model,\n          configuration options, validation rules, edge cases, and implementation patterns.\n        <\/p>\n      <\/div>\n\n      <aside class=\"fd-summary\">\n        <small>Feature outcome<\/small>\n        <p>\n          By the end of this guide, you will be able to design, configure, test,\n          and govern a multi-branch NovaFlow workflow without creating ambiguous\n          or unreachable logic.\n        <\/p>\n      <\/aside>\n    <\/div>\n\n    <div class=\"fd-layout\">\n\n      <aside class=\"fd-side\">\n        <div class=\"fd-brand\">\n          <div class=\"fd-logo\">A<\/div>\n          <div>\n            <strong>NovaFlow<\/strong>\n            <span>Documentation<\/span>\n          <\/div>\n        <\/div>\n\n        <div class=\"fd-scroll\">\n          <div class=\"fd-group\">\n            <span class=\"fd-label\">Get started<\/span>\n            <a class=\"fd-link\" href=\"#getting-started\">Getting Started<\/a>\n            <a class=\"fd-link\" href=\"#onboarding-documentation\">Onboarding<\/a>\n          <\/div>\n\n          <div class=\"fd-group\">\n            <span class=\"fd-label\">Product guides<\/span>\n            <a class=\"fd-link active\" href=\"#feature-documentation\">Feature Documentation<\/a>\n            <a class=\"fd-link\" href=\"#administrator-manual\">Administrator Manual<\/a>\n          <\/div>\n\n          <div class=\"fd-group\">\n            <span class=\"fd-label\">Developers<\/span>\n            <a class=\"fd-link\" href=\"#api-quickstart\">API Quickstart<\/a>\n            <a class=\"fd-link\" href=\"#api-reference\">API Reference<\/a>\n            <a class=\"fd-link\" href=\"#integration-guide\">Integration Guide<\/a>\n          <\/div>\n\n          <div class=\"fd-group\">\n            <span class=\"fd-label\">Operations<\/span>\n            <a class=\"fd-link\" href=\"#troubleshooting-guide\">Troubleshooting<\/a>\n            <a class=\"fd-link\" href=\"#release-notes\">Release Notes<\/a>\n            <a class=\"fd-link\" href=\"#migration-guide\">Migration Guide<\/a>\n            <a class=\"fd-link\" href=\"#knowledge-base\">Knowledge Base<\/a>\n          <\/div>\n        <\/div>\n      <\/aside>\n\n      <main class=\"fd-doc\">\n\n        <section id=\"fd-overview\" class=\"fd-section\">\n          <h2>What conditional branches do<\/h2>\n          <p>\n            A conditional branch evaluates one or more rules during a workflow run\n            and selects the first matching path. Each path can contain its own actions,\n            approvals, notifications, or nested logic.\n          <\/p>\n\n          <div class=\"fd-concepts\">\n            <article class=\"fd-card\">\n              <div class=\"fd-icon\">IF<\/div>\n              <h3>Condition<\/h3>\n              <p>A rule that compares runtime data with a value, set, pattern, or expression.<\/p>\n            <\/article>\n\n            <article class=\"fd-card\">\n              <div class=\"fd-icon\">BR<\/div>\n              <h3>Branch<\/h3>\n              <p>A named execution path that runs only when its condition evaluates to true.<\/p>\n            <\/article>\n\n            <article class=\"fd-card\">\n              <div class=\"fd-icon\">EL<\/div>\n              <h3>Fallback<\/h3>\n              <p>An optional default path that runs when no explicit condition matches.<\/p>\n            <\/article>\n          <\/div>\n\n          <div class=\"fd-callout\">\n            <strong>Evaluation model<\/strong>\n            <p>Branches are evaluated from top to bottom. NovaFlow runs the first matching branch and skips the rest.<\/p>\n          <\/div>\n        <\/section>\n\n        <section id=\"fd-use-cases\" class=\"fd-section\">\n          <h2>When to use this feature<\/h2>\n          <p>Conditional branches are best for decisions with clear, stable rules and distinct outcomes.<\/p>\n\n          <div class=\"fd-table\">\n            <table>\n              <thead>\n                <tr>\n                  <th>Use case<\/th>\n                  <th>Input<\/th>\n                  <th>Example branches<\/th>\n                  <th>Business outcome<\/th>\n                <\/tr>\n              <\/thead>\n              <tbody>\n                <tr>\n                  <td>Support routing<\/td>\n                  <td>Request category<\/td>\n                  <td>Billing \/ Technical \/ Account<\/td>\n                  <td>Assign the correct team automatically<\/td>\n                <\/tr>\n                <tr>\n                  <td>Approval control<\/td>\n                  <td>Purchase amount<\/td>\n                  <td>Under 5k \/ 5k\u201325k \/ Above 25k<\/td>\n                  <td>Apply the correct approval chain<\/td>\n                <\/tr>\n                <tr>\n                  <td>Risk handling<\/td>\n                  <td>Risk score<\/td>\n                  <td>Low \/ Medium \/ High<\/td>\n                  <td>Escalate higher-risk records<\/td>\n                <\/tr>\n                <tr>\n                  <td>Customer experience<\/td>\n                  <td>Plan type<\/td>\n                  <td>Starter \/ Growth \/ Enterprise<\/td>\n                  <td>Tailor onboarding and notifications<\/td>\n                <\/tr>\n              <\/tbody>\n            <\/table>\n          <\/div>\n\n          <div class=\"fd-callout warning\">\n            <strong>Do not use branches for every variation<\/strong>\n            <p>\n              If many branches differ only by a value, use a lookup table or reusable mapping instead.\n              Excessive branching makes workflows harder to test and maintain.\n            <\/p>\n          <\/div>\n        <\/section>\n\n        <section id=\"fd-logic-model\" class=\"fd-section\">\n          <h2>How branch evaluation works<\/h2>\n          <p>\n            NovaFlow resolves the input, evaluates the branches in order, runs the first true branch,\n            and records the decision in the workflow history.\n          <\/p>\n\n          <div class=\"fd-flow\">\n            <div class=\"fd-flow-node\">\n              <small>Step 1<\/small>\n              <strong>Resolve input<\/strong>\n              <span>Read runtime field values and prior action outputs.<\/span>\n            <\/div>\n            <div class=\"fd-flow-node\">\n              <small>Step 2<\/small>\n              <strong>Evaluate<\/strong>\n              <span>Test the first condition using the selected operator.<\/span>\n            <\/div>\n            <div class=\"fd-flow-node\">\n              <small>Step 3<\/small>\n              <strong>Select path<\/strong>\n              <span>Choose the first branch that evaluates to true.<\/span>\n            <\/div>\n            <div class=\"fd-flow-node\">\n              <small>Step 4<\/small>\n              <strong>Execute<\/strong>\n              <span>Run only the actions contained in the selected branch.<\/span>\n            <\/div>\n            <div class=\"fd-flow-node\">\n              <small>Step 5<\/small>\n              <strong>Record result<\/strong>\n              <span>Store the decision, inputs, and branch output in history.<\/span>\n            <\/div>\n          <\/div>\n        <\/section>\n\n        <section id=\"fd-configure\" class=\"fd-section\">\n          <h2>Configure a conditional branch<\/h2>\n          <p>\n            This example routes purchase requests by amount and applies a different approval path\n            to each spending tier.\n          <\/p>\n\n          <h3>1. Add a branch step<\/h3>\n          <p>\n            In the workflow builder, select <strong>Logic \u2192 Conditional branch<\/strong>.\n            Choose the purchase amount from the trigger payload as the input field.\n          <\/p>\n\n          <div class=\"fd-ui\">\n            <div class=\"fd-ui-head\">\n              <span>Conditional branch<\/span>\n              <span>Purchase approval workflow<\/span>\n            <\/div>\n\n            <div class=\"fd-ui-body\">\n              <div class=\"fd-builder\">\n                <div class=\"fd-branch\">\n                  <small>Branch 1<\/small>\n                  <strong>Standard approval<\/strong>\n                  <span>amount is less than 5000<\/span>\n                <\/div>\n\n                <div class=\"fd-or\">OR<\/div>\n\n                <div class=\"fd-branch\">\n                  <small>Branch 2<\/small>\n                  <strong>Finance review<\/strong>\n                  <span>amount is between 5000 and 25000<\/span>\n                <\/div>\n              <\/div>\n            <\/div>\n          <\/div>\n\n          <h3>2. Add the high-value branch<\/h3>\n          <p>\n            Create a third branch for amounts above 25,000 and route it to Finance plus the executive approver.\n          <\/p>\n\n          <h3>3. Add a fallback<\/h3>\n          <p>\n            Use the fallback branch for missing, invalid, or unexpected values.\n            Do not silently continue when a required decision input is unavailable.\n          <\/p>\n        <\/section>\n\n        <section id=\"fd-yaml\" class=\"fd-section\">\n          <h2>YAML configuration example<\/h2>\n          <p>\n            NovaFlow stores feature configuration as structured workflow definitions.\n            The following example mirrors the purchase approval branch created in the visual builder.\n          <\/p>\n\n          <div class=\"fd-code\">\n            <div class=\"fd-code-head\">\n              <span>workflow.yaml<\/span>\n              <span>Conditional branch<\/span>\n            <\/div>\n\n            <pre><code><span class=\"k\">name<\/span>: <span class=\"s\">Purchase approval routing<\/span>\n\n<span class=\"k\">trigger<\/span>:\n  <span class=\"k\">type<\/span>: <span class=\"v\">purchase.requested<\/span>\n\n<span class=\"k\">steps<\/span>:\n  - <span class=\"k\">id<\/span>: <span class=\"s\">approval_path<\/span>\n    <span class=\"k\">type<\/span>: <span class=\"v\">conditional<\/span>\n    <span class=\"k\">input<\/span>: <span class=\"s\">\"{{ trigger.amount }}\"<\/span>\n\n    <span class=\"k\">branches<\/span>:\n      - <span class=\"k\">name<\/span>: <span class=\"s\">standard_approval<\/span>\n        <span class=\"k\">when<\/span>:\n          <span class=\"k\">operator<\/span>: <span class=\"v\">less_than<\/span>\n          <span class=\"k\">value<\/span>: <span class=\"n\">5000<\/span>\n        <span class=\"k\">run<\/span>:\n          - <span class=\"k\">type<\/span>: <span class=\"v\">approval.request<\/span>\n            <span class=\"k\">approver<\/span>: <span class=\"s\">team_manager<\/span>\n\n      - <span class=\"k\">name<\/span>: <span class=\"s\">finance_review<\/span>\n        <span class=\"k\">when<\/span>:\n          <span class=\"k\">operator<\/span>: <span class=\"v\">between<\/span>\n          <span class=\"k\">min<\/span>: <span class=\"n\">5000<\/span>\n          <span class=\"k\">max<\/span>: <span class=\"n\">25000<\/span>\n        <span class=\"k\">run<\/span>:\n          - <span class=\"k\">type<\/span>: <span class=\"v\">approval.request<\/span>\n            <span class=\"k\">approver<\/span>: <span class=\"s\">finance_team<\/span>\n\n      - <span class=\"k\">name<\/span>: <span class=\"s\">executive_review<\/span>\n        <span class=\"k\">when<\/span>:\n          <span class=\"k\">operator<\/span>: <span class=\"v\">greater_than<\/span>\n          <span class=\"k\">value<\/span>: <span class=\"n\">25000<\/span>\n        <span class=\"k\">run<\/span>:\n          - <span class=\"k\">type<\/span>: <span class=\"v\">approval.request<\/span>\n            <span class=\"k\">approver<\/span>: <span class=\"s\">finance_team<\/span>\n          - <span class=\"k\">type<\/span>: <span class=\"v\">approval.request<\/span>\n            <span class=\"k\">approver<\/span>: <span class=\"s\">executive_sponsor<\/span>\n\n    <span class=\"k\">fallback<\/span>:\n      - <span class=\"k\">type<\/span>: <span class=\"v\">workflow.fail<\/span>\n        <span class=\"k\">message<\/span>: <span class=\"s\">\"Purchase amount is missing or invalid.\"<\/span><\/code><\/pre>\n          <\/div>\n        <\/section>\n\n        <section id=\"fd-json\" class=\"fd-section\">\n          <h2>JSON payload example<\/h2>\n          <p>\n            The branch input may come from a trigger, API request, form submission, or previous workflow action.\n          <\/p>\n\n          <div class=\"fd-code\">\n            <div class=\"fd-code-head\">\n              <span>purchase-request.json<\/span>\n              <span>Runtime payload<\/span>\n            <\/div>\n\n            <pre><code>{\n  <span class=\"k\">\"event\"<\/span>: <span class=\"s\">\"purchase.requested\"<\/span>,\n  <span class=\"k\">\"request_id\"<\/span>: <span class=\"s\">\"pr_8F42A1\"<\/span>,\n  <span class=\"k\">\"amount\"<\/span>: <span class=\"n\">18450<\/span>,\n  <span class=\"k\">\"currency\"<\/span>: <span class=\"s\">\"USD\"<\/span>,\n  <span class=\"k\">\"requester\"<\/span>: {\n    <span class=\"k\">\"user_id\"<\/span>: <span class=\"s\">\"usr_2841\"<\/span>,\n    <span class=\"k\">\"department\"<\/span>: <span class=\"s\">\"Marketing\"<\/span>\n  },\n  <span class=\"k\">\"metadata\"<\/span>: {\n    <span class=\"k\">\"cost_center\"<\/span>: <span class=\"s\">\"MKT-410\"<\/span>,\n    <span class=\"k\">\"vendor_status\"<\/span>: <span class=\"s\">\"approved\"<\/span>\n  }\n}<\/code><\/pre>\n          <\/div>\n\n          <div class=\"fd-callout success\">\n            <strong>Expected result<\/strong>\n            <p>The amount 18,450 matches the <code>finance_review<\/code> branch and skips the other paths.<\/p>\n          <\/div>\n        <\/section>\n\n        <section id=\"fd-markdown\" class=\"fd-section\">\n          <h2>Markdown-style authoring pattern<\/h2>\n          <p>\n            Feature documentation should explain concepts, behavior, configuration, and consequences\u2014not just list controls.\n            The following pattern is suitable for a production Markdown source file.\n          <\/p>\n\n          <div class=\"fd-md\">\n            <h4>## Configure a fallback branch<\/h4>\n            <p>\n              Add a fallback branch when the workflow may receive missing, invalid, or unexpected values.\n              A fallback prevents the run from continuing with an undefined decision.\n            <\/p>\n            <p><strong>Use:<\/strong> <code>fallback<\/code> for values that do not match any explicit condition.<\/p>\n            <p><strong>Avoid:<\/strong> routing unknown values into the lowest-risk branch without review.<\/p>\n            <blockquote>\n              Tip: Send fallback runs to a monitored queue so an operator can inspect the input\n              and update the rule safely.\n            <\/blockquote>\n          <\/div>\n        <\/section>\n\n        <section id=\"fd-operators\" class=\"fd-section\">\n          <h2>Supported operators<\/h2>\n\n          <div class=\"fd-table\">\n            <table>\n              <thead>\n                <tr>\n                  <th>Operator<\/th>\n                  <th>Supported types<\/th>\n                  <th>Behavior<\/th>\n                  <th>Example<\/th>\n                <\/tr>\n              <\/thead>\n              <tbody>\n                <tr>\n                  <td>equals<\/td>\n                  <td>String, number, boolean<\/td>\n                  <td>Matches an exact normalized value<\/td>\n                  <td>plan equals enterprise<\/td>\n                <\/tr>\n                <tr>\n                  <td>contains<\/td>\n                  <td>String, array<\/td>\n                  <td>Checks whether a value or member is present<\/td>\n                  <td>tags contains urgent<\/td>\n                <\/tr>\n                <tr>\n                  <td>between<\/td>\n                  <td>Number, date<\/td>\n                  <td>Matches an inclusive lower and upper bound<\/td>\n                  <td>amount between 5000 and 25000<\/td>\n                <\/tr>\n                <tr>\n                  <td>matches<\/td>\n                  <td>String<\/td>\n                  <td>Evaluates a regular expression pattern<\/td>\n                  <td>email matches company domain<\/td>\n                <\/tr>\n                <tr>\n                  <td>is_empty<\/td>\n                  <td>String, array, object<\/td>\n                  <td>Matches null, absent, or empty values<\/td>\n                  <td>cost_center is empty<\/td>\n                <\/tr>\n              <\/tbody>\n            <\/table>\n          <\/div>\n        <\/section>\n\n        <section id=\"fd-edge-cases\" class=\"fd-section\">\n          <h2>Edge cases and limits<\/h2>\n\n          <div class=\"fd-callout danger\">\n            <strong>Overlapping conditions<\/strong>\n            <p>\n              When two branches can match the same input, only the first branch runs.\n              Reorder branches or make the conditions mutually exclusive.\n            <\/p>\n          <\/div>\n\n          <div class=\"fd-callout warning\">\n            <strong>Missing values<\/strong>\n            <p>\n              A missing field does not equal zero, false, or an empty string.\n              Use an explicit <code>is_empty<\/code> condition or fallback branch.\n            <\/p>\n          <\/div>\n\n          <ul>\n            <li>Each conditional step supports up to 20 branches.<\/li>\n            <li>Nested branches are supported up to five levels.<\/li>\n            <li>Regular expressions must complete within the platform execution limit.<\/li>\n            <li>Branch names must be unique within the same conditional step.<\/li>\n            <li>Changing branch order affects future runs but does not modify historical results.<\/li>\n          <\/ul>\n        <\/section>\n\n        <section id=\"fd-testing\" class=\"fd-section\">\n          <h2>Test and validate branch logic<\/h2>\n          <p>Test each branch independently, then test ambiguous, missing, and boundary values.<\/p>\n\n          <div class=\"fd-checks\">\n            <div class=\"fd-check\"><b>\u2713<\/b><span>Use one test input for every explicit branch.<\/span><\/div>\n            <div class=\"fd-check\"><b>\u2713<\/b><span>Test exact boundaries such as 5000 and 25000.<\/span><\/div>\n            <div class=\"fd-check\"><b>\u2713<\/b><span>Test missing, null, and malformed values.<\/span><\/div>\n            <div class=\"fd-check\"><b>\u2713<\/b><span>Confirm only one branch runs for each input.<\/span><\/div>\n            <div class=\"fd-check\"><b>\u2713<\/b><span>Review actions and permissions inside every branch.<\/span><\/div>\n            <div class=\"fd-check\"><b>\u2713<\/b><span>Verify the fallback creates a visible, actionable result.<\/span><\/div>\n          <\/div>\n        <\/section>\n\n        <section id=\"fd-best-practices\" class=\"fd-section\">\n          <h2>Best practices<\/h2>\n\n          <ol>\n            <li><strong>Name branches by outcome.<\/strong> Use <em>Finance review<\/em>, not <em>Branch 2<\/em>.<\/li>\n            <li><strong>Keep conditions mutually exclusive.<\/strong> Avoid relying on order to resolve ambiguity.<\/li>\n            <li><strong>Use a fallback.<\/strong> Unknown values should create a visible exception path.<\/li>\n            <li><strong>Separate business rules from credentials.<\/strong> Branch logic should not contain secrets.<\/li>\n            <li><strong>Document ownership.<\/strong> Identify who approves rule changes and who handles failures.<\/li>\n            <li><strong>Test before publishing.<\/strong> Validate every branch and every boundary value.<\/li>\n          <\/ol>\n\n          <div class=\"fd-next\">\n            <a href=\"#api-quickstart\">\n              <small>Next guide<\/small>\n              <strong>API Quickstart<\/strong>\n              <span>Create and test a NovaFlow workflow through the API.<\/span>\n            <\/a>\n\n            <a href=\"#troubleshooting-guide\">\n              <small>Related guide<\/small>\n              <strong>Troubleshooting<\/strong>\n              <span>Diagnose unexpected branch selection and failed workflow runs.<\/span>\n            <\/a>\n          <\/div>\n        <\/section>\n\n      <\/main>\n\n      <aside class=\"fd-toc\">\n        <h3>On this page<\/h3>\n        <a href=\"#fd-overview\">Feature overview<\/a>\n        <a href=\"#fd-use-cases\">Use cases<\/a>\n        <a href=\"#fd-logic-model\">Evaluation model<\/a>\n        <a href=\"#fd-configure\">Configure branches<\/a>\n        <a href=\"#fd-yaml\">YAML example<\/a>\n        <a href=\"#fd-json\">JSON payload<\/a>\n        <a href=\"#fd-markdown\">Markdown pattern<\/a>\n        <a href=\"#fd-operators\">Supported operators<\/a>\n        <a href=\"#fd-edge-cases\">Edge cases<\/a>\n        <a href=\"#fd-testing\">Testing<\/a>\n        <a href=\"#fd-best-practices\">Best practices<\/a>\n      <\/aside>\n\n    <\/div>\n  <\/div>\n<\/section>\n\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d11a7e5 e-flex e-con-boxed e-con e-parent\" data-id=\"d11a7e5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9f507b2 elementor-widget elementor-widget-html\" data-id=\"9f507b2\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"administrator-manual\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n<title>NovaFlow Administrator Manual<\/title>\n<style>\n:root{--bg:#07090d;--panel:#0d131c;--line:rgba(255,255,255,.09);--text:#f7f9fc;--muted:#a8b1bf;--purple:#8b7cff;--cyan:#58d8e8;--green:#6ee7b7;--amber:#f3c969;--red:#ff8e9d;--max:1480px}\n*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--text);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif}a{color:inherit;text-decoration:none}\n#administrator-manual{position:relative;left:50%;width:100vw;margin-left:-50vw;overflow:hidden;background:radial-gradient(circle at 12% 4%,rgba(139,124,255,.14),transparent 28%),radial-gradient(circle at 90% 14%,rgba(88,216,232,.10),transparent 24%),linear-gradient(180deg,#080b11,#090e15);border-top:1px solid rgba(255,255,255,.05);border-bottom:1px solid rgba(255,255,255,.05)}\n#administrator-manual:before{content:\"\";position:absolute;inset:0;pointer-events:none;opacity:.3;background:linear-gradient(rgba(255,255,255,.022) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.022) 1px,transparent 1px);background-size:56px 56px}\n.wrap{position:relative;width:min(calc(100% - 48px),var(--max));margin:auto;padding:104px 0 112px}.kicker{display:flex;flex-wrap:wrap;gap:12px;align-items:center;margin-bottom:26px}.pill{display:inline-flex;align-items:center;gap:9px;padding:9px 14px;border-radius:999px;border:1px solid rgba(139,124,255,.25);background:rgba(139,124,255,.07);color:#ddd8ff;font-size:12px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}.dot{width:7px;height:7px;border-radius:50%;background:linear-gradient(135deg,var(--purple),var(--cyan));box-shadow:0 0 14px rgba(139,124,255,.7)}.meta{color:#aab4c1;font-size:13px}\n.hero{display:grid;grid-template-columns:minmax(0,1.18fr) minmax(330px,.82fr);gap:56px;align-items:end;margin-bottom:42px}.title{margin:0 0 20px;font-size:clamp(54px,6.6vw,100px);line-height:.94;letter-spacing:-.058em;font-weight:780}.title span{background:linear-gradient(105deg,#fff,#d8d2ff 48%,#86edf0);-webkit-background-clip:text;background-clip:text;color:transparent}.lead{margin:0;color:var(--muted);font-size:clamp(18px,1.45vw,22px);line-height:1.65}.summary{padding:24px;border:1px solid var(--line);border-radius:20px;background:rgba(255,255,255,.026);box-shadow:0 18px 50px rgba(0,0,0,.22)}.summary small{display:block;margin-bottom:12px;color:#7d8795;font-size:11px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.summary ul{margin:0;padding-left:18px}.summary li{color:#dce1e9;font-size:14px;line-height:1.58}.summary li+li{margin-top:7px}\n.layout{display:grid;grid-template-columns:244px minmax(0,1fr) 220px;gap:22px;align-items:start}.side,.toc{position:sticky;top:22px;padding:20px;border:1px solid var(--line);border-radius:18px;background:rgba(10,14,20,.84);backdrop-filter:blur(16px);box-shadow:0 18px 48px rgba(0,0,0,.2)}.brand{display:flex;gap:11px;align-items:center;padding-bottom:18px;margin-bottom:18px;border-bottom:1px solid var(--line)}.logo{width:34px;height:34px;border-radius:11px;display:grid;place-items:center;background:linear-gradient(135deg,#7f72ff,#4fd1c5);font-weight:900}.brand strong{display:block;font-size:14px}.brand span{display:block;margin-top:2px;color:#778190;font-size:11px}.group+.group{margin-top:19px}.label{display:block;margin-bottom:8px;color:#66707f;font-size:10px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.nav{display:block;padding:9px 10px;border-radius:9px;color:#a8b2c0;font-size:13px;transition:.2s ease}.nav:hover,.nav:focus-visible{color:#fff;background:rgba(255,255,255,.045);outline:none}.nav.active{color:#fff;background:linear-gradient(90deg,rgba(139,124,255,.18),rgba(88,216,232,.05));border:1px solid rgba(139,124,255,.15)}\n.doc{min-width:0;padding:34px;border:1px solid var(--line);border-radius:26px;background:linear-gradient(180deg,rgba(255,255,255,.018),rgba(255,255,255,.007)),rgba(10,14,20,.8);box-shadow:0 28px 84px rgba(0,0,0,.28)}.section{scroll-margin-top:30px;padding:0 0 44px;margin:0 0 44px;border-bottom:1px solid var(--line)}.section:last-child{border-bottom:0;margin-bottom:0;padding-bottom:0}.doc h2{margin:0 0 14px;font-size:clamp(28px,3vw,44px);line-height:1.06;letter-spacing:-.043em}.doc h3{margin:28px 0 12px;font-size:21px;line-height:1.25}.doc p,.doc li{color:#aab4c1;font-size:15px;line-height:1.72}.doc p{margin:0 0 16px}.doc ul,.doc ol{margin:14px 0 0;padding-left:22px}.doc li+li{margin-top:8px}\n.cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:20px}.card{padding:18px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.022)}.icon{width:36px;height:36px;margin-bottom:16px;display:grid;place-items:center;border-radius:11px;background:rgba(139,124,255,.10);border:1px solid rgba(139,124,255,.17);color:#cfc8ff;font-size:12px;font-weight:800}.card h3{margin:0 0 7px;font-size:16px}.card p{margin:0;font-size:13px;line-height:1.55}.callout{margin:24px 0;padding:18px 20px;border:1px solid rgba(88,216,232,.17);border-radius:14px;background:rgba(88,216,232,.045)}.callout strong{display:block;margin-bottom:4px;color:#edf4f7;font-size:14px}.callout p{margin:0;font-size:14px}.callout.warning{border-color:rgba(243,201,105,.19);background:rgba(243,201,105,.045)}.callout.danger{border-color:rgba(255,142,157,.18);background:rgba(255,142,157,.045)}.callout.success{border-color:rgba(110,231,183,.18);background:rgba(110,231,183,.045)}\n.table{overflow:auto;margin-top:20px;border:1px solid var(--line);border-radius:15px;background:rgba(255,255,255,.018)}.table table{width:100%;min-width:760px;border-collapse:collapse}.table th,.table td{padding:15px 16px;text-align:left;border-bottom:1px solid var(--line);border-right:1px solid var(--line)}.table th:last-child,.table td:last-child{border-right:0}.table tr:last-child td{border-bottom:0}.table th{color:#8f99a8;background:rgba(255,255,255,.022);font-size:10px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}.table td{color:#aeb8c6;font-size:13px;line-height:1.5}.table td:first-child{color:#eef1f5;font-weight:700}\n.code{margin-top:20px;overflow:auto;border:1px solid var(--line);border-radius:15px;background:#080c12}.code-head{display:flex;justify-content:space-between;padding:11px 14px;border-bottom:1px solid var(--line);color:#7d8795;font-size:11px}.code pre{margin:0;padding:18px;min-width:650px;color:#d6deeb;font:13px\/1.65 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;white-space:pre}.k{color:#c792ea}.s{color:#c3e88d}.v{color:#82aaff}.n{color:#f78c6c}.c{color:#607080}\n.checks{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:20px}.check{display:flex;gap:11px;padding:15px;border:1px solid var(--line);border-radius:13px;background:rgba(255,255,255,.02);color:#aab4c1;font-size:14px;line-height:1.5}.check b{color:var(--green)}.steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-top:20px}.step{padding:18px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.022)}.step small{display:block;margin-bottom:10px;color:#7e8896;font-size:10px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}.step strong{display:block;margin-bottom:7px;font-size:15px}.step span{color:#9ca6b4;font-size:13px;line-height:1.5}.toc h3{margin:0 0 15px;font-size:13px}.toc a{display:block;padding:7px 0;color:#87919f;font-size:12px}.toc a:hover{color:#fff}.next{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:36px}.next a{min-height:126px;padding:20px;border:1px solid var(--line);border-radius:15px;background:rgba(255,255,255,.024);transition:.22s ease}.next a:hover{transform:translateY(-3px);border-color:rgba(139,124,255,.28);background:rgba(139,124,255,.045)}.next small{display:block;margin-bottom:8px;color:#727c8a;font-size:10px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}.next strong{display:block;margin-bottom:7px;font-size:16px}.next span{color:#929caa;font-size:13px;line-height:1.5}\n@media(max-width:1180px){.hero{grid-template-columns:1fr;gap:24px}.layout{grid-template-columns:220px minmax(0,1fr)}.toc{display:none}.steps{grid-template-columns:repeat(2,minmax(0,1fr))}}\n@media(max-width:860px){.wrap{width:min(calc(100% - 32px),var(--max));padding:82px 0 92px}.layout{grid-template-columns:1fr}.side{position:relative;top:auto;overflow-x:auto}.scroll{display:flex;gap:8px;min-width:max-content}.group,.group+.group{display:contents;margin:0}.label{display:none}.nav{border:1px solid var(--line);background:rgba(255,255,255,.02)}.doc{padding:25px}.cards{grid-template-columns:repeat(2,minmax(0,1fr))}}\n@media(max-width:620px){.title{font-size:clamp(46px,15vw,70px)}.cards,.checks,.steps,.next{grid-template-columns:1fr}}\n\n\/* =========================================================\n   HARD RESET \/ FULL-BLEED ELEMENTOR OVERRIDES\n   Strong centering fix for Elementor and neighboring HTML blocks.\n   ========================================================= *\/\nbody .elementor-widget-html:has(.am-root),\nbody .elementor-widget-html:has(.am-root) > .elementor-widget-container,\nbody .e-con:has(> .elementor-widget-html .am-root),\nbody .e-con-inner:has(> .elementor-widget-html .am-root){\n  width:100% !important;\n  max-width:none !important;\n  min-width:0 !important;\n  flex:0 0 100% !important;\n  align-self:stretch !important;\n  overflow:visible !important;\n  margin:0 !important;\n  padding:0 !important;\n}\n\nhtml,\nbody{\n  overflow-x:clip;\n}\n\n\/* Full viewport breakout: use the original reliable 50% \/ -50vw method. *\/\n#administrator-manual.am-root{\n  position:relative !important;\n  left:50% !important;\n  right:auto !important;\n  width:100vw !important;\n  max-width:100vw !important;\n  margin-left:-50vw !important;\n  margin-right:-50vw !important;\n  transform:none !important;\n  isolation:isolate;\n}\n\n\/* Force the actual document container to the exact visual center. *\/\n#administrator-manual.am-root > .wrap{\n  position:relative !important;\n  left:auto !important;\n  right:auto !important;\n  width:min(calc(100vw - 48px),var(--max)) !important;\n  max-width:var(--max) !important;\n  min-width:0 !important;\n  margin-left:auto !important;\n  margin-right:auto !important;\n  transform:none !important;\n}\n\n#administrator-manual.am-root .hero,\n#administrator-manual.am-root .layout,\n#administrator-manual.am-root .cards,\n#administrator-manual.am-root .checks,\n#administrator-manual.am-root .steps,\n#administrator-manual.am-root .next{\n  min-width:0;\n}\n\n#administrator-manual.am-root .hero > *,\n#administrator-manual.am-root .layout > *,\n#administrator-manual.am-root .cards > *,\n#administrator-manual.am-root .checks > *,\n#administrator-manual.am-root .steps > *,\n#administrator-manual.am-root .next > *{\n  min-width:0;\n}\n\n#administrator-manual.am-root .table,\n#administrator-manual.am-root .code{\n  -webkit-overflow-scrolling:touch;\n}\n\n@media(max-width:860px){\n  #administrator-manual.am-root > .wrap{\n    width:min(calc(100vw - 32px),var(--max)) !important;\n  }\n}\n\n@media(max-width:620px){\n  #administrator-manual.am-root > .wrap{\n    width:min(calc(100vw - 28px),var(--max)) !important;\n  }\n\n  #administrator-manual.am-root .doc{\n    padding:20px;\n  }\n}\n<\/style>\n<\/head>\n<body>\n<section id=\"administrator-manual\" class=\"am-root\" aria-labelledby=\"am-title\">\n<div class=\"wrap\">\n  <div class=\"kicker\"><span class=\"pill\"><span class=\"dot\"><\/span>NovaFlow Docs \u00b7 Administration<\/span><span class=\"meta\">Enterprise administrator manual<\/span><\/div>\n  <div class=\"hero\">\n    <div><h1 id=\"am-title\" class=\"title\">Govern NovaFlow with <span>control and confidence.<\/span><\/h1><p class=\"lead\">Configure identity, access, integrations, workflow governance, auditability, retention, and recovery across your organization. This manual is written for workspace administrators, platform owners, security teams, and operations leaders.<\/p><\/div>\n    <aside class=\"summary\"><small>Administrator responsibilities<\/small><ul><li>Protect privileged access and credentials.<\/li><li>Define roles, policies, and publishing controls.<\/li><li>Approve integrations and data boundaries.<\/li><li>Monitor workflow health and audit activity.<\/li><li>Maintain ownership, continuity, and recovery plans.<\/li><\/ul><\/aside>\n  <\/div>\n  <div class=\"layout\">\n    <aside class=\"side\" aria-label=\"NovaFlow documentation navigation\">\n      <div class=\"brand\"><div class=\"logo\">A<\/div><div><strong>NovaFlow<\/strong><span>Documentation<\/span><\/div><\/div>\n      <div class=\"scroll\">\n        <div class=\"group\"><span class=\"label\">Get started<\/span><a class=\"nav\" href=\"#getting-started\">Getting Started<\/a><a class=\"nav\" href=\"#onboarding-documentation\">Onboarding<\/a><\/div>\n        <div class=\"group\"><span class=\"label\">Product guides<\/span><a class=\"nav\" href=\"#feature-documentation\">Feature Documentation<\/a><a class=\"nav active\" href=\"#administrator-manual\">Administrator Manual<\/a><\/div>\n        <div class=\"group\"><span class=\"label\">Developers<\/span><a class=\"nav\" href=\"#api-quickstart\">API Quickstart<\/a><a class=\"nav\" href=\"#api-reference\">API Reference<\/a><a class=\"nav\" href=\"#integration-guide\">Integration Guide<\/a><\/div>\n        <div class=\"group\"><span class=\"label\">Operations<\/span><a class=\"nav\" href=\"#troubleshooting-guide\">Troubleshooting<\/a><a class=\"nav\" href=\"#release-notes\">Release Notes<\/a><a class=\"nav\" href=\"#migration-guide\">Migration Guide<\/a><a class=\"nav\" href=\"#knowledge-base\">Knowledge Base<\/a><\/div>\n      <\/div>\n    <\/aside>\n    <main class=\"doc\">\n      <section id=\"am-overview\" class=\"section\"><h2>Administration overview<\/h2><p>Administrators maintain the operating environment in which NovaFlow workflows are created, published, monitored, and retired. Administrative decisions affect every user, connection, and automated process in the workspace.<\/p><div class=\"cards\"><article class=\"card\"><div class=\"icon\">ID<\/div><h3>Identity<\/h3><p>Control authentication, provisioning, sessions, domains, and privileged access.<\/p><\/article><article class=\"card\"><div class=\"icon\">GV<\/div><h3>Governance<\/h3><p>Define ownership, approvals, naming, lifecycle, and publishing requirements.<\/p><\/article><article class=\"card\"><div class=\"icon\">AU<\/div><h3>Auditability<\/h3><p>Monitor security events, configuration changes, and workflow activity.<\/p><\/article><\/div><div class=\"callout\"><strong>Use least privilege by default<\/strong><p>Grant only the permissions required for a person's current responsibilities. Review privileged access on a fixed cadence.<\/p><\/div><\/section>\n      <section id=\"am-workspace\" class=\"section\"><h2>Configure workspace settings<\/h2><p>Set durable organization-level defaults before inviting large user groups or connecting production systems.<\/p><div class=\"table\"><table><thead><tr><th>Setting<\/th><th>Recommended value<\/th><th>Why it matters<\/th><\/tr><\/thead><tbody><tr><td>Workspace name<\/td><td>Durable business or platform name<\/td><td>Avoid temporary project names that lose meaning<\/td><\/tr><tr><td>Primary domain<\/td><td>Verified corporate domain<\/td><td>Supports trusted provisioning and domain controls<\/td><\/tr><tr><td>Default time zone<\/td><td>Operational reporting time zone<\/td><td>Keeps schedules, logs, and reviews consistent<\/td><\/tr><tr><td>Default language<\/td><td>Primary operating language<\/td><td>Standardizes notifications and system guidance<\/td><\/tr><tr><td>Data region<\/td><td>Approved residency region<\/td><td>Aligns storage with legal and policy requirements<\/td><\/tr><\/tbody><\/table><\/div><\/section>\n      <section id=\"am-roles\" class=\"section\"><h2>Manage users, roles, and permissions<\/h2><p>Separate workspace administration, workflow publishing, workflow building, daily use, and auditing into distinct permission profiles.<\/p><div class=\"table\"><table><thead><tr><th>Role<\/th><th>Build workflows<\/th><th>Publish<\/th><th>Manage integrations<\/th><th>Manage access<\/th><th>View audit logs<\/th><\/tr><\/thead><tbody><tr><td>Workspace Admin<\/td><td>Yes<\/td><td>Yes<\/td><td>Yes<\/td><td>Yes<\/td><td>Yes<\/td><\/tr><tr><td>Workflow Manager<\/td><td>Yes<\/td><td>Yes<\/td><td>Approved only<\/td><td>No<\/td><td>Limited<\/td><\/tr><tr><td>Builder<\/td><td>Yes<\/td><td>By approval<\/td><td>No<\/td><td>No<\/td><td>No<\/td><\/tr><tr><td>Member<\/td><td>No<\/td><td>No<\/td><td>No<\/td><td>No<\/td><td>No<\/td><\/tr><tr><td>Auditor<\/td><td>No<\/td><td>No<\/td><td>No<\/td><td>No<\/td><td>Read only<\/td><\/tr><\/tbody><\/table><\/div><div class=\"callout warning\"><strong>Maintain two administrators<\/strong><p>Keep at least two active workspace administrators to prevent lockout and ownership gaps.<\/p><\/div><\/section>\n      <section id=\"am-identity\" class=\"section\"><h2>Configure identity and access<\/h2><p>Enterprise workspaces should centralize authentication and lifecycle management through SSO and directory provisioning.<\/p><div class=\"cards\"><article class=\"card\"><div class=\"icon\">SSO<\/div><h3>SAML SSO<\/h3><p>Authenticate through the organization's identity provider.<\/p><\/article><article class=\"card\"><div class=\"icon\">SC<\/div><h3>SCIM<\/h3><p>Provision, update, and deactivate users automatically.<\/p><\/article><article class=\"card\"><div class=\"icon\">MFA<\/div><h3>MFA<\/h3><p>Require an additional verification factor for privileged users.<\/p><\/article><\/div><div class=\"code\"><div class=\"code-head\"><span>sso-config.yaml<\/span><span>Identity policy<\/span><\/div><pre><code><span class=\"k\">identity<\/span>:\n  <span class=\"k\">sso<\/span>:\n    <span class=\"k\">protocol<\/span>: <span class=\"v\">saml_2_0<\/span>\n    <span class=\"k\">enforced<\/span>: <span class=\"v\">true<\/span>\n    <span class=\"k\">jit_provisioning<\/span>: <span class=\"v\">false<\/span>\n\n  <span class=\"k\">mfa<\/span>:\n    <span class=\"k\">required_for<\/span>:\n      - <span class=\"s\">workspace_admin<\/span>\n      - <span class=\"s\">workflow_manager<\/span>\n\n  <span class=\"k\">sessions<\/span>:\n    <span class=\"k\">maximum_duration_hours<\/span>: <span class=\"n\">12<\/span>\n    <span class=\"k\">idle_timeout_minutes<\/span>: <span class=\"n\">30<\/span>\n\n  <span class=\"k\">domains<\/span>:\n    <span class=\"k\">verified<\/span>:\n      - <span class=\"s\">company.com<\/span><\/code><\/pre><\/div><\/section>\n      <section id=\"am-integrations\" class=\"section\"><h2>Govern integrations and credentials<\/h2><p>Every production connection should have an approved owner, documented scopes, a rotation plan, and a defined fallback when access fails.<\/p><div class=\"checks\"><div class=\"check\"><b>\u2713<\/b><span>Approve connectors before they become available to builders.<\/span><\/div><div class=\"check\"><b>\u2713<\/b><span>Use service accounts for business-critical automations.<\/span><\/div><div class=\"check\"><b>\u2713<\/b><span>Grant only the OAuth scopes required by the workflow.<\/span><\/div><div class=\"check\"><b>\u2713<\/b><span>Document credential owners and rotation dates.<\/span><\/div><div class=\"check\"><b>\u2713<\/b><span>Separate sandbox and production credentials.<\/span><\/div><div class=\"check\"><b>\u2713<\/b><span>Revoke unused or orphaned connections immediately.<\/span><\/div><\/div><\/section>\n      <section id=\"am-governance\" class=\"section\"><h2>Apply workflow governance<\/h2><p>Standardize how workflows are named, reviewed, published, changed, monitored, deprecated, and archived.<\/p><div class=\"code\"><div class=\"code-head\"><span>workspace-policy.yaml<\/span><span>Governance policy<\/span><\/div><pre><code><span class=\"k\">workspace_policy<\/span>:\n  <span class=\"k\">require_mfa_for_admins<\/span>: <span class=\"v\">true<\/span>\n  <span class=\"k\">publish_approval_required<\/span>: <span class=\"v\">true<\/span>\n  <span class=\"k\">minimum_publish_approvers<\/span>: <span class=\"n\">1<\/span>\n  <span class=\"k\">require_named_owner<\/span>: <span class=\"v\">true<\/span>\n  <span class=\"k\">require_rollback_notes<\/span>: <span class=\"v\">true<\/span>\n\n  <span class=\"k\">naming<\/span>:\n    <span class=\"k\">pattern<\/span>: <span class=\"s\">\"{team}-{process}-{environment}\"<\/span>\n\n  <span class=\"k\">audit<\/span>:\n    <span class=\"k\">retention_days<\/span>: <span class=\"n\">365<\/span>\n\n  <span class=\"k\">connections<\/span>:\n    <span class=\"k\">allow_personal_accounts<\/span>: <span class=\"v\">false<\/span><\/code><\/pre><\/div><\/section>\n      <section id=\"am-audit\" class=\"section\"><h2>Monitor audit logs<\/h2><p>Audit logs record security-sensitive and administrative actions. Export them to the organization's monitoring or SIEM platform when centralized retention is required.<\/p><div class=\"code\"><div class=\"code-head\"><span>audit-event.json<\/span><span>Role update event<\/span><\/div><pre><code>{\n  <span class=\"k\">\"event\"<\/span>: <span class=\"s\">\"role.updated\"<\/span>,\n  <span class=\"k\">\"event_id\"<\/span>: <span class=\"s\">\"evt_9F21C4\"<\/span>,\n  <span class=\"k\">\"actor\"<\/span>: {\n    <span class=\"k\">\"user_id\"<\/span>: <span class=\"s\">\"usr_2841\"<\/span>,\n    <span class=\"k\">\"role\"<\/span>: <span class=\"s\">\"workspace_admin\"<\/span>\n  },\n  <span class=\"k\">\"target\"<\/span>: {\n    <span class=\"k\">\"user_id\"<\/span>: <span class=\"s\">\"usr_3920\"<\/span>,\n    <span class=\"k\">\"previous_role\"<\/span>: <span class=\"s\">\"member\"<\/span>,\n    <span class=\"k\">\"new_role\"<\/span>: <span class=\"s\">\"workflow_manager\"<\/span>\n  },\n  <span class=\"k\">\"source_ip\"<\/span>: <span class=\"s\">\"203.0.113.42\"<\/span>,\n  <span class=\"k\">\"timestamp\"<\/span>: <span class=\"s\">\"2026-07-23T00:42:18Z\"<\/span>\n}<\/code><\/pre><\/div><div class=\"table\"><table><thead><tr><th>Event category<\/th><th>Examples<\/th><th>Recommended alert<\/th><\/tr><\/thead><tbody><tr><td>Identity<\/td><td>SSO disabled, admin MFA changed<\/td><td>Immediate<\/td><\/tr><tr><td>Access<\/td><td>Admin assigned, role elevated<\/td><td>Immediate<\/td><\/tr><tr><td>Integration<\/td><td>Connection created, scope changed<\/td><td>High priority<\/td><\/tr><tr><td>Workflow<\/td><td>Published, disabled, ownership changed<\/td><td>Daily review<\/td><\/tr><tr><td>Data<\/td><td>Export requested, retention changed<\/td><td>Immediate<\/td><\/tr><\/tbody><\/table><\/div><\/section>\n      <section id=\"am-data\" class=\"section\"><h2>Manage data and retention<\/h2><p>Classify the data processed by each workflow and apply retention, export, deletion, and access rules that match organizational policy.<\/p><div class=\"cards\"><article class=\"card\"><div class=\"icon\">CL<\/div><h3>Classify<\/h3><p>Identify personal, financial, confidential, and regulated data.<\/p><\/article><article class=\"card\"><div class=\"icon\">RT<\/div><h3>Retain<\/h3><p>Set limits for run history, logs, attachments, and exports.<\/p><\/article><article class=\"card\"><div class=\"icon\">DL<\/div><h3>Delete<\/h3><p>Define deletion ownership, evidence, exceptions, and legal holds.<\/p><\/article><\/div><\/section>\n      <section id=\"am-incident\" class=\"section\"><h2>Respond to incidents and recover safely<\/h2><p>Use a controlled response sequence when a credential is compromised, a workflow creates harmful output, or a critical connection fails.<\/p><div class=\"steps\"><article class=\"step\"><small>Step 1<\/small><strong>Contain<\/strong><span>Pause the workflow or disable the affected connection.<\/span><\/article><article class=\"step\"><small>Step 2<\/small><strong>Preserve evidence<\/strong><span>Record run IDs, timestamps, actors, inputs, and outputs.<\/span><\/article><article class=\"step\"><small>Step 3<\/small><strong>Correct<\/strong><span>Rotate credentials, repair logic, or restore the approved version.<\/span><\/article><article class=\"step\"><small>Step 4<\/small><strong>Validate<\/strong><span>Test in sandbox before resuming production execution.<\/span><\/article><\/div><div class=\"callout danger\"><strong>Emergency stop<\/strong><p>Pause the workflow before editing live logic. Do not attempt to correct a harmful production run while new events continue entering the workflow.<\/p><\/div><\/section>\n      <section id=\"am-offboarding\" class=\"section\"><h2>Offboard users and transfer ownership<\/h2><p>When a user leaves or changes roles, remove access, transfer owned assets, rotate affected credentials, and verify that no critical workflow depends on a personal account.<\/p><div class=\"checks\"><div class=\"check\"><b>\u2713<\/b><span>Deactivate the user through SCIM or the admin console.<\/span><\/div><div class=\"check\"><b>\u2713<\/b><span>Transfer owned workflows and connections.<\/span><\/div><div class=\"check\"><b>\u2713<\/b><span>Revoke personal tokens and active sessions.<\/span><\/div><div class=\"check\"><b>\u2713<\/b><span>Rotate shared secrets the user could access.<\/span><\/div><div class=\"check\"><b>\u2713<\/b><span>Review recent privileged actions in the audit log.<\/span><\/div><div class=\"check\"><b>\u2713<\/b><span>Confirm a new operational owner is documented.<\/span><\/div><\/div><\/section>\n      <section id=\"am-review\" class=\"section\"><h2>Administrator review cadence<\/h2><div class=\"table\"><table><thead><tr><th>Cadence<\/th><th>Review<\/th><th>Owner<\/th><\/tr><\/thead><tbody><tr><td>Weekly<\/td><td>Failed runs, expiring credentials, unresolved incidents<\/td><td>Platform operations<\/td><\/tr><tr><td>Monthly<\/td><td>Unused connections, orphaned workflows, publish activity<\/td><td>Workspace admin<\/td><\/tr><tr><td>Quarterly<\/td><td>Privileged roles, access recertification, policy exceptions<\/td><td>Security and compliance<\/td><\/tr><tr><td>Annually<\/td><td>Retention, recovery procedures, workspace architecture<\/td><td>Platform owner<\/td><\/tr><\/tbody><\/table><\/div><div class=\"callout success\"><strong>Administration is continuous<\/strong><p>A secure workspace is maintained through recurring review, not a one-time configuration project.<\/p><\/div><div class=\"next\"><a href=\"#api-quickstart\"><small>Next section<\/small><strong>API Quickstart<\/strong><span>Create a NovaFlow API client and send the first authenticated request.<\/span><\/a><a href=\"#troubleshooting-guide\"><small>Related operations guide<\/small><strong>Troubleshooting<\/strong><span>Diagnose failed runs, expired credentials, and configuration issues.<\/span><\/a><\/div><\/section>\n    <\/main>\n    <aside class=\"toc\" aria-label=\"On this page\"><h3>On this page<\/h3><a href=\"#am-overview\">Overview<\/a><a href=\"#am-workspace\">Workspace settings<\/a><a href=\"#am-roles\">Roles and permissions<\/a><a href=\"#am-identity\">Identity and access<\/a><a href=\"#am-integrations\">Integration governance<\/a><a href=\"#am-governance\">Workflow governance<\/a><a href=\"#am-audit\">Audit logs<\/a><a href=\"#am-data\">Data management<\/a><a href=\"#am-incident\">Incident recovery<\/a><a href=\"#am-offboarding\">Offboarding<\/a><a href=\"#am-review\">Review cadence<\/a><\/aside>\n  <\/div>\n<\/div>\n<\/section>\n<\/body>\n<\/html>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-196e069 e-flex e-con-boxed e-con e-parent\" data-id=\"196e069\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4fc6797 elementor-widget elementor-widget-html\" data-id=\"4fc6797\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"api-quickstart\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n<title>NovaFlow Administrator Manual<\/title>\n<style>\n#administrator-manual.am-root{--bg:#07090d;--panel:#0d131c;--line:rgba(255,255,255,.09);--text:#f7f9fc;--muted:#a8b1bf;--purple:#8b7cff;--cyan:#58d8e8;--green:#6ee7b7;--amber:#f3c969;--red:#ff8e9d;--max:1480px}\n#administrator-manual.am-root,#administrator-manual.am-root *{box-sizing:border-box}#administrator-manual.am-root{color:var(--text);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif}#administrator-manual.am-root a{color:inherit;text-decoration:none}\n#administrator-manual.am-root{position:relative!important;left:50%!important;right:auto!important;width:100vw!important;max-width:100vw!important;margin-left:-50vw!important;margin-right:0!important;transform:none!important;overflow:hidden;background:radial-gradient(circle at 12% 4%,rgba(139,124,255,.14),transparent 28%),radial-gradient(circle at 90% 14%,rgba(88,216,232,.10),transparent 24%),linear-gradient(180deg,#080b11,#090e15);border-top:1px solid rgba(255,255,255,.05);border-bottom:1px solid rgba(255,255,255,.05)}\n#administrator-manual:before{content:\"\";position:absolute;inset:0;pointer-events:none;opacity:.3;background:linear-gradient(rgba(255,255,255,.022) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.022) 1px,transparent 1px);background-size:56px 56px}\n.am-wrap{position:relative;width:min(calc(100% - 48px),var(--max));margin:auto;padding:104px 0 112px}.am-kicker{display:flex;flex-wrap:wrap;gap:12px;align-items:center;margin-bottom:26px}.am-pill{display:inline-flex;align-items:center;gap:9px;padding:9px 14px;border-radius:999px;border:1px solid rgba(139,124,255,.25);background:rgba(139,124,255,.07);color:#ddd8ff;font-size:12px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}.am-dot{width:7px;height:7px;border-radius:50%;background:linear-gradient(135deg,var(--purple),var(--cyan));box-shadow:0 0 14px rgba(139,124,255,.7)}.am-meta{color:#aab4c1;font-size:13px}\n.am-hero{display:grid;grid-template-columns:minmax(0,1.18fr) minmax(330px,.82fr);gap:56px;align-items:end;margin-bottom:42px}.am-title{margin:0 0 20px;font-size:clamp(54px,6.6vw,100px);line-height:.94;letter-spacing:-.058em;font-weight:780}.am-title span{background:linear-gradient(105deg,#fff,#d8d2ff 48%,#86edf0);-webkit-background-clip:text;background-clip:text;color:transparent}.am-lead{margin:0;color:var(--muted);font-size:clamp(18px,1.45vw,22px);line-height:1.65}.am-summary{padding:24px;border:1px solid var(--line);border-radius:20px;background:rgba(255,255,255,.026);box-shadow:0 18px 50px rgba(0,0,0,.22)}.am-summary small{display:block;margin-bottom:12px;color:#7d8795;font-size:11px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.am-summary ul{margin:0;padding-left:18px}.am-summary li{color:#dce1e9;font-size:14px;line-height:1.58}.am-summary li+li{margin-top:7px}\n.am-layout{display:grid;grid-template-columns:244px minmax(0,1fr) 220px;gap:22px;align-items:start}.am-side,.am-toc{position:sticky;top:22px;padding:20px;border:1px solid var(--line);border-radius:18px;background:rgba(10,14,20,.84);backdrop-filter:blur(16px);box-shadow:0 18px 48px rgba(0,0,0,.2)}.am-brand{display:flex;gap:11px;align-items:center;padding-bottom:18px;margin-bottom:18px;border-bottom:1px solid var(--line)}.am-logo{width:34px;height:34px;border-radius:11px;display:grid;place-items:center;background:linear-gradient(135deg,#7f72ff,#4fd1c5);font-weight:900}.am-brand strong{display:block;font-size:14px}.am-brand span{display:block;margin-top:2px;color:#778190;font-size:11px}.am-group+.am-group{margin-top:19px}.am-label{display:block;margin-bottom:8px;color:#66707f;font-size:10px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.am-nav{display:block;padding:9px 10px;border-radius:9px;color:#a8b2c0;font-size:13px;transition:.2s ease}.am-nav:hover,.am-nav:focus-visible{color:#fff;background:rgba(255,255,255,.045);outline:none}.am-nav.active{color:#fff;background:linear-gradient(90deg,rgba(139,124,255,.18),rgba(88,216,232,.05));border:1px solid rgba(139,124,255,.15)}\n.am-doc{min-width:0;padding:34px;border:1px solid var(--line);border-radius:26px;background:linear-gradient(180deg,rgba(255,255,255,.018),rgba(255,255,255,.007)),rgba(10,14,20,.8);box-shadow:0 28px 84px rgba(0,0,0,.28)}.am-section{scroll-margin-top:30px;padding:0 0 44px;margin:0 0 44px;border-bottom:1px solid var(--line)}.am-section:last-child{border-bottom:0;margin-bottom:0;padding-bottom:0}.am-doc h2{margin:0 0 14px;font-size:clamp(28px,3vw,44px);line-height:1.06;letter-spacing:-.043em}.am-doc h3{margin:28px 0 12px;font-size:21px;line-height:1.25}.am-doc p,.am-doc li{color:#aab4c1;font-size:15px;line-height:1.72}.am-doc p{margin:0 0 16px}.am-doc ul,.am-doc ol{margin:14px 0 0;padding-left:22px}.am-doc li+li{margin-top:8px}\n.am-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:20px}.am-card{padding:18px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.022)}.am-icon{width:36px;height:36px;margin-bottom:16px;display:grid;place-items:center;border-radius:11px;background:rgba(139,124,255,.10);border:1px solid rgba(139,124,255,.17);color:#cfc8ff;font-size:12px;font-weight:800}.am-card h3{margin:0 0 7px;font-size:16px}.am-card p{margin:0;font-size:13px;line-height:1.55}.am-callout{margin:24px 0;padding:18px 20px;border:1px solid rgba(88,216,232,.17);border-radius:14px;background:rgba(88,216,232,.045)}.am-callout strong{display:block;margin-bottom:4px;color:#edf4f7;font-size:14px}.am-callout p{margin:0;font-size:14px}.am-callout.warning{border-color:rgba(243,201,105,.19);background:rgba(243,201,105,.045)}.am-callout.danger{border-color:rgba(255,142,157,.18);background:rgba(255,142,157,.045)}.am-callout.success{border-color:rgba(110,231,183,.18);background:rgba(110,231,183,.045)}\n.am-table{overflow:auto;margin-top:20px;border:1px solid var(--line);border-radius:15px;background:rgba(255,255,255,.018)}.am-table table{width:100%;min-width:760px;border-collapse:collapse}.am-table th,.am-table td{padding:15px 16px;text-align:left;border-bottom:1px solid var(--line);border-right:1px solid var(--line)}.am-table th:last-child,.am-table td:last-child{border-right:0}.am-table tr:last-child td{border-bottom:0}.am-table th{color:#8f99a8;background:rgba(255,255,255,.022);font-size:10px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}.am-table td{color:#aeb8c6;font-size:13px;line-height:1.5}.am-table td:first-child{color:#eef1f5;font-weight:700}\n.am-code{margin-top:20px;overflow:auto;border:1px solid var(--line);border-radius:15px;background:#080c12}.am-code-head{display:flex;justify-content:space-between;padding:11px 14px;border-bottom:1px solid var(--line);color:#7d8795;font-size:11px}.am-code pre{margin:0;padding:18px;min-width:650px;color:#d6deeb;font:13px\/1.65 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;white-space:pre}.am-k{color:#c792ea}.am-s{color:#c3e88d}.am-v{color:#82aaff}.am-n{color:#f78c6c}.am-c{color:#607080}\n.am-checks{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:20px}.am-check{display:flex;gap:11px;padding:15px;border:1px solid var(--line);border-radius:13px;background:rgba(255,255,255,.02);color:#aab4c1;font-size:14px;line-height:1.5}.am-check b{color:var(--green)}.am-steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-top:20px}.am-step{padding:18px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.022)}.am-step small{display:block;margin-bottom:10px;color:#7e8896;font-size:10px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}.am-step strong{display:block;margin-bottom:7px;font-size:15px}.am-step span{color:#9ca6b4;font-size:13px;line-height:1.5}.am-toc h3{margin:0 0 15px;font-size:13px}.am-toc a{display:block;padding:7px 0;color:#87919f;font-size:12px}.am-toc a:hover{color:#fff}.am-next{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:36px}.am-next a{min-height:126px;padding:20px;border:1px solid var(--line);border-radius:15px;background:rgba(255,255,255,.024);transition:.22s ease}.am-next a:hover{transform:translateY(-3px);border-color:rgba(139,124,255,.28);background:rgba(139,124,255,.045)}.am-next small{display:block;margin-bottom:8px;color:#727c8a;font-size:10px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}.am-next strong{display:block;margin-bottom:7px;font-size:16px}.am-next span{color:#929caa;font-size:13px;line-height:1.5}\n@media(max-width:1180px){.am-hero{grid-template-columns:1fr;gap:24px}.am-layout{grid-template-columns:220px minmax(0,1fr)}.am-toc{display:none}.am-steps{grid-template-columns:repeat(2,minmax(0,1fr))}}\n@media(max-width:860px){.am-wrap{width:min(calc(100% - 32px),var(--max));padding:82px 0 92px}.am-layout{grid-template-columns:1fr}.am-side{position:relative;top:auto;overflow-x:auto}.am-scroll{display:flex;gap:8px;min-width:max-content}.am-group,.am-group+.am-group{display:contents;margin:0}.am-label{display:none}.am-nav{border:1px solid var(--line);background:rgba(255,255,255,.02)}.am-doc{padding:25px}.am-cards{grid-template-columns:repeat(2,minmax(0,1fr))}}\n@media(max-width:620px){.am-title{font-size:clamp(46px,15vw,70px)}.am-cards,.am-checks,.am-steps,.am-next{grid-template-columns:1fr}}\n\n\/* =========================================================\n   HARD RESET \/ FULL-BLEED ELEMENTOR OVERRIDES\n   Strong centering fix for Elementor and neighboring HTML blocks.\n   ========================================================= *\/\nbody .elementor-widget-html:has(.am-root),\nbody .elementor-widget-html:has(.am-root) > .elementor-widget-container,\nbody .e-con:has(> .elementor-widget-html .am-root),\nbody .e-con-inner:has(> .elementor-widget-html .am-root){\n  width:100% !important;\n  max-width:none !important;\n  min-width:0 !important;\n  flex:0 0 100% !important;\n  align-self:stretch !important;\n  overflow:visible !important;\n  margin:0 !important;\n  padding:0 !important;\n}\n\nhtml,\nbody{\n  overflow-x:clip;\n}\n\n\/* Full viewport breakout: use the original reliable 50% \/ -50vw method. *\/\n#administrator-manual.am-root{\n  position:relative !important;\n  left:50% !important;\n  right:auto !important;\n  width:100vw !important;\n  max-width:100vw !important;\n  margin-left:-50vw !important;\n  margin-right:-50vw !important;\n  transform:none !important;\n  isolation:isolate;\n}\n\n\/* Force the actual document container to the exact visual center. *\/\n#administrator-manual.am-root > .am-wrap{\n  position:relative !important;\n  left:auto !important;\n  right:auto !important;\n  width:min(calc(100vw - 48px),var(--max)) !important;\n  max-width:var(--max) !important;\n  min-width:0 !important;\n  margin-left:auto !important;\n  margin-right:auto !important;\n  transform:none !important;\n}\n\n#administrator-manual.am-root .am-hero,\n#administrator-manual.am-root .am-layout,\n#administrator-manual.am-root .am-cards,\n#administrator-manual.am-root .am-checks,\n#administrator-manual.am-root .am-steps,\n#administrator-manual.am-root .am-next{\n  min-width:0;\n}\n\n#administrator-manual.am-root .am-hero > *,\n#administrator-manual.am-root .am-layout > *,\n#administrator-manual.am-root .am-cards > *,\n#administrator-manual.am-root .am-checks > *,\n#administrator-manual.am-root .am-steps > *,\n#administrator-manual.am-root .am-next > *{\n  min-width:0;\n}\n\n#administrator-manual.am-root .am-table,\n#administrator-manual.am-root .am-code{\n  -webkit-overflow-scrolling:touch;\n}\n\n@media(max-width:860px){\n  #administrator-manual.am-root > .am-wrap{\n    width:min(calc(100vw - 32px),var(--max)) !important;\n  }\n}\n\n@media(max-width:620px){\n  #administrator-manual.am-root > .am-wrap{\n    width:min(calc(100vw - 28px),var(--max)) !important;\n  }\n\n  #administrator-manual.am-root .am-doc{\n    padding:20px;\n  }\n}\n<\/style>\n<\/head>\n<body>\n<section id=\"administrator-manual\" class=\"am-root\" aria-labelledby=\"am-title\">\n<div class=\"am-wrap\">\n  <div class=\"am-kicker\"><span class=\"am-pill\"><span class=\"am-dot\"><\/span>NovaFlow Docs \u00b7 Administration<\/span><span class=\"am-meta\">Enterprise administrator manual<\/span><\/div>\n  <div class=\"am-hero\">\n    <div><h1 id=\"am-title\" class=\"am-title\">Govern NovaFlow with <span>control and confidence.<\/span><\/h1><p class=\"am-lead\">Configure identity, access, integrations, workflow governance, auditability, retention, and recovery across your organization. This manual is written for workspace administrators, platform owners, security teams, and operations leaders.<\/p><\/div>\n    <aside class=\"am-summary\"><small>Administrator responsibilities<\/small><ul><li>Protect privileged access and credentials.<\/li><li>Define roles, policies, and publishing controls.<\/li><li>Approve integrations and data boundaries.<\/li><li>Monitor workflow health and audit activity.<\/li><li>Maintain ownership, continuity, and recovery plans.<\/li><\/ul><\/aside>\n  <\/div>\n  <div class=\"am-layout\">\n    <aside class=\"am-side\" aria-label=\"NovaFlow documentation navigation\">\n      <div class=\"am-brand\"><div class=\"am-logo\">A<\/div><div><strong>NovaFlow<\/strong><span>Documentation<\/span><\/div><\/div>\n      <div class=\"am-scroll\">\n        <div class=\"am-group\"><span class=\"am-label\">Get started<\/span><a class=\"am-nav\" href=\"#getting-started\">Getting Started<\/a><a class=\"am-nav\" href=\"#onboarding-documentation\">Onboarding<\/a><\/div>\n        <div class=\"am-group\"><span class=\"am-label\">Product guides<\/span><a class=\"am-nav\" href=\"#feature-documentation\">Feature Documentation<\/a><a class=\"am-nav am-active\" href=\"#administrator-manual\">Administrator Manual<\/a><\/div>\n        <div class=\"am-group\"><span class=\"am-label\">Developers<\/span><a class=\"am-nav\" href=\"#api-quickstart\">API Quickstart<\/a><a class=\"am-nav\" href=\"#api-reference\">API Reference<\/a><a class=\"am-nav\" href=\"#integration-guide\">Integration Guide<\/a><\/div>\n        <div class=\"am-group\"><span class=\"am-label\">Operations<\/span><a class=\"am-nav\" href=\"#troubleshooting-guide\">Troubleshooting<\/a><a class=\"am-nav\" href=\"#release-notes\">Release Notes<\/a><a class=\"am-nav\" href=\"#migration-guide\">Migration Guide<\/a><a class=\"am-nav\" href=\"#knowledge-base\">Knowledge Base<\/a><\/div>\n      <\/div>\n    <\/aside>\n    <main class=\"am-doc\">\n      <section id=\"am-overview\" class=\"am-section\"><h2>Administration overview<\/h2><p>Administrators maintain the operating environment in which NovaFlow workflows are created, published, monitored, and retired. Administrative decisions affect every user, connection, and automated process in the workspace.<\/p><div class=\"am-cards\"><article class=\"am-card\"><div class=\"am-icon\">ID<\/div><h3>Identity<\/h3><p>Control authentication, provisioning, sessions, domains, and privileged access.<\/p><\/article><article class=\"am-card\"><div class=\"am-icon\">GV<\/div><h3>Governance<\/h3><p>Define ownership, approvals, naming, lifecycle, and publishing requirements.<\/p><\/article><article class=\"am-card\"><div class=\"am-icon\">AU<\/div><h3>Auditability<\/h3><p>Monitor security events, configuration changes, and workflow activity.<\/p><\/article><\/div><div class=\"am-callout\"><strong>Use least privilege by default<\/strong><p>Grant only the permissions required for a person's current responsibilities. Review privileged access on a fixed cadence.<\/p><\/div><\/section>\n      <section id=\"am-workspace\" class=\"am-section\"><h2>Configure workspace settings<\/h2><p>Set durable organization-level defaults before inviting large user groups or connecting production systems.<\/p><div class=\"am-table\"><table><thead><tr><th>Setting<\/th><th>Recommended value<\/th><th>Why it matters<\/th><\/tr><\/thead><tbody><tr><td>Workspace name<\/td><td>Durable business or platform name<\/td><td>Avoid temporary project names that lose meaning<\/td><\/tr><tr><td>Primary domain<\/td><td>Verified corporate domain<\/td><td>Supports trusted provisioning and domain controls<\/td><\/tr><tr><td>Default time zone<\/td><td>Operational reporting time zone<\/td><td>Keeps schedules, logs, and reviews consistent<\/td><\/tr><tr><td>Default language<\/td><td>Primary operating language<\/td><td>Standardizes notifications and system guidance<\/td><\/tr><tr><td>Data region<\/td><td>Approved residency region<\/td><td>Aligns storage with legal and policy requirements<\/td><\/tr><\/tbody><\/table><\/div><\/section>\n      <section id=\"am-roles\" class=\"am-section\"><h2>Manage users, roles, and permissions<\/h2><p>Separate workspace administration, workflow publishing, workflow building, daily use, and auditing into distinct permission profiles.<\/p><div class=\"am-table\"><table><thead><tr><th>Role<\/th><th>Build workflows<\/th><th>Publish<\/th><th>Manage integrations<\/th><th>Manage access<\/th><th>View audit logs<\/th><\/tr><\/thead><tbody><tr><td>Workspace Admin<\/td><td>Yes<\/td><td>Yes<\/td><td>Yes<\/td><td>Yes<\/td><td>Yes<\/td><\/tr><tr><td>Workflow Manager<\/td><td>Yes<\/td><td>Yes<\/td><td>Approved only<\/td><td>No<\/td><td>Limited<\/td><\/tr><tr><td>Builder<\/td><td>Yes<\/td><td>By approval<\/td><td>No<\/td><td>No<\/td><td>No<\/td><\/tr><tr><td>Member<\/td><td>No<\/td><td>No<\/td><td>No<\/td><td>No<\/td><td>No<\/td><\/tr><tr><td>Auditor<\/td><td>No<\/td><td>No<\/td><td>No<\/td><td>No<\/td><td>Read only<\/td><\/tr><\/tbody><\/table><\/div><div class=\"am-callout am-warning\"><strong>Maintain two administrators<\/strong><p>Keep at least two am-active workspace administrators to prevent lockout and ownership gaps.<\/p><\/div><\/section>\n      <section id=\"am-identity\" class=\"am-section\"><h2>Configure identity and access<\/h2><p>Enterprise workspaces should centralize authentication and lifecycle management through SSO and directory provisioning.<\/p><div class=\"am-cards\"><article class=\"am-card\"><div class=\"am-icon\">SSO<\/div><h3>SAML SSO<\/h3><p>Authenticate through the organization's identity provider.<\/p><\/article><article class=\"am-card\"><div class=\"am-icon\">SC<\/div><h3>SCIM<\/h3><p>Provision, update, and deactivate users automatically.<\/p><\/article><article class=\"am-card\"><div class=\"am-icon\">MFA<\/div><h3>MFA<\/h3><p>Require an additional verification factor for privileged users.<\/p><\/article><\/div><div class=\"am-code\"><div class=\"am-code-head\"><span>sso-config.yaml<\/span><span>Identity policy<\/span><\/div><pre><code><span class=\"am-k\">identity<\/span>:\n  <span class=\"am-k\">sso<\/span>:\n    <span class=\"am-k\">protocol<\/span>: <span class=\"am-v\">saml_2_0<\/span>\n    <span class=\"am-k\">enforced<\/span>: <span class=\"am-v\">true<\/span>\n    <span class=\"am-k\">jit_provisioning<\/span>: <span class=\"am-v\">false<\/span>\n\n  <span class=\"am-k\">mfa<\/span>:\n    <span class=\"am-k\">required_for<\/span>:\n      - <span class=\"am-s\">workspace_admin<\/span>\n      - <span class=\"am-s\">workflow_manager<\/span>\n\n  <span class=\"am-k\">sessions<\/span>:\n    <span class=\"am-k\">maximum_duration_hours<\/span>: <span class=\"am-n\">12<\/span>\n    <span class=\"am-k\">idle_timeout_minutes<\/span>: <span class=\"am-n\">30<\/span>\n\n  <span class=\"am-k\">domains<\/span>:\n    <span class=\"am-k\">verified<\/span>:\n      - <span class=\"am-s\">company.com<\/span><\/code><\/pre><\/div><\/section>\n      <section id=\"am-integrations\" class=\"am-section\"><h2>Govern integrations and credentials<\/h2><p>Every production connection should have an approved owner, documented scopes, a rotation plan, and a defined fallback when access fails.<\/p><div class=\"am-checks\"><div class=\"am-check\"><b>\u2713<\/b><span>Approve connectors before they become available to builders.<\/span><\/div><div class=\"am-check\"><b>\u2713<\/b><span>Use service accounts for business-critical automations.<\/span><\/div><div class=\"am-check\"><b>\u2713<\/b><span>Grant only the OAuth scopes required by the workflow.<\/span><\/div><div class=\"am-check\"><b>\u2713<\/b><span>Document credential owners and rotation dates.<\/span><\/div><div class=\"am-check\"><b>\u2713<\/b><span>Separate sandbox and production credentials.<\/span><\/div><div class=\"am-check\"><b>\u2713<\/b><span>Revoke unused or orphaned connections immediately.<\/span><\/div><\/div><\/section>\n      <section id=\"am-governance\" class=\"am-section\"><h2>Apply workflow governance<\/h2><p>Standardize how workflows are named, reviewed, published, changed, monitored, deprecated, and archived.<\/p><div class=\"am-code\"><div class=\"am-code-head\"><span>workspace-policy.yaml<\/span><span>Governance policy<\/span><\/div><pre><code><span class=\"am-k\">workspace_policy<\/span>:\n  <span class=\"am-k\">require_mfa_for_admins<\/span>: <span class=\"am-v\">true<\/span>\n  <span class=\"am-k\">publish_approval_required<\/span>: <span class=\"am-v\">true<\/span>\n  <span class=\"am-k\">minimum_publish_approvers<\/span>: <span class=\"am-n\">1<\/span>\n  <span class=\"am-k\">require_named_owner<\/span>: <span class=\"am-v\">true<\/span>\n  <span class=\"am-k\">require_rollback_notes<\/span>: <span class=\"am-v\">true<\/span>\n\n  <span class=\"am-k\">naming<\/span>:\n    <span class=\"am-k\">pattern<\/span>: <span class=\"am-s\">\"{team}-{process}-{environment}\"<\/span>\n\n  <span class=\"am-k\">audit<\/span>:\n    <span class=\"am-k\">retention_days<\/span>: <span class=\"am-n\">365<\/span>\n\n  <span class=\"am-k\">connections<\/span>:\n    <span class=\"am-k\">allow_personal_accounts<\/span>: <span class=\"am-v\">false<\/span><\/code><\/pre><\/div><\/section>\n      <section id=\"am-audit\" class=\"am-section\"><h2>Monitor audit logs<\/h2><p>Audit logs record security-sensitive and administrative actions. Export them to the organization's monitoring or SIEM platform when centralized retention is required.<\/p><div class=\"am-code\"><div class=\"am-code-head\"><span>audit-event.json<\/span><span>Role update event<\/span><\/div><pre><code>{\n  <span class=\"am-k\">\"event\"<\/span>: <span class=\"am-s\">\"role.updated\"<\/span>,\n  <span class=\"am-k\">\"event_id\"<\/span>: <span class=\"am-s\">\"evt_9F21C4\"<\/span>,\n  <span class=\"am-k\">\"actor\"<\/span>: {\n    <span class=\"am-k\">\"user_id\"<\/span>: <span class=\"am-s\">\"usr_2841\"<\/span>,\n    <span class=\"am-k\">\"role\"<\/span>: <span class=\"am-s\">\"workspace_admin\"<\/span>\n  },\n  <span class=\"am-k\">\"target\"<\/span>: {\n    <span class=\"am-k\">\"user_id\"<\/span>: <span class=\"am-s\">\"usr_3920\"<\/span>,\n    <span class=\"am-k\">\"previous_role\"<\/span>: <span class=\"am-s\">\"member\"<\/span>,\n    <span class=\"am-k\">\"new_role\"<\/span>: <span class=\"am-s\">\"workflow_manager\"<\/span>\n  },\n  <span class=\"am-k\">\"source_ip\"<\/span>: <span class=\"am-s\">\"203.0.113.42\"<\/span>,\n  <span class=\"am-k\">\"timestamp\"<\/span>: <span class=\"am-s\">\"2026-07-23T00:42:18Z\"<\/span>\n}<\/code><\/pre><\/div><div class=\"am-table\"><table><thead><tr><th>Event category<\/th><th>Examples<\/th><th>Recommended alert<\/th><\/tr><\/thead><tbody><tr><td>Identity<\/td><td>SSO disabled, admin MFA changed<\/td><td>Immediate<\/td><\/tr><tr><td>Access<\/td><td>Admin assigned, role elevated<\/td><td>Immediate<\/td><\/tr><tr><td>Integration<\/td><td>Connection created, scope changed<\/td><td>High priority<\/td><\/tr><tr><td>Workflow<\/td><td>Published, disabled, ownership changed<\/td><td>Daily review<\/td><\/tr><tr><td>Data<\/td><td>Export requested, retention changed<\/td><td>Immediate<\/td><\/tr><\/tbody><\/table><\/div><\/section>\n      <section id=\"am-data\" class=\"am-section\"><h2>Manage data and retention<\/h2><p>Classify the data processed by each workflow and apply retention, export, deletion, and access rules that match organizational policy.<\/p><div class=\"am-cards\"><article class=\"am-card\"><div class=\"am-icon\">CL<\/div><h3>Classify<\/h3><p>Identify personal, financial, confidential, and regulated data.<\/p><\/article><article class=\"am-card\"><div class=\"am-icon\">RT<\/div><h3>Retain<\/h3><p>Set limits for run history, logs, attachments, and exports.<\/p><\/article><article class=\"am-card\"><div class=\"am-icon\">DL<\/div><h3>Delete<\/h3><p>Define deletion ownership, evidence, exceptions, and legal holds.<\/p><\/article><\/div><\/section>\n      <section id=\"am-incident\" class=\"am-section\"><h2>Respond to incidents and recover safely<\/h2><p>Use a controlled response sequence when a credential is compromised, a workflow creates harmful output, or a critical connection fails.<\/p><div class=\"am-steps\"><article class=\"am-step\"><small>Step 1<\/small><strong>Contain<\/strong><span>Pause the workflow or disable the affected connection.<\/span><\/article><article class=\"am-step\"><small>Step 2<\/small><strong>Preserve evidence<\/strong><span>Record run IDs, timestamps, actors, inputs, and outputs.<\/span><\/article><article class=\"am-step\"><small>Step 3<\/small><strong>Correct<\/strong><span>Rotate credentials, repair logic, or restore the approved version.<\/span><\/article><article class=\"am-step\"><small>Step 4<\/small><strong>Validate<\/strong><span>Test in sandbox before resuming production execution.<\/span><\/article><\/div><div class=\"am-callout am-danger\"><strong>Emergency stop<\/strong><p>Pause the workflow before editing live logic. Do not attempt to correct a harmful production run while new events continue entering the workflow.<\/p><\/div><\/section>\n      <section id=\"am-offboarding\" class=\"am-section\"><h2>Offboard users and transfer ownership<\/h2><p>When a user leaves or changes roles, remove access, transfer owned assets, rotate affected credentials, and verify that no critical workflow depends on a personal account.<\/p><div class=\"am-checks\"><div class=\"am-check\"><b>\u2713<\/b><span>Deactivate the user through SCIM or the admin console.<\/span><\/div><div class=\"am-check\"><b>\u2713<\/b><span>Transfer owned workflows and connections.<\/span><\/div><div class=\"am-check\"><b>\u2713<\/b><span>Revoke personal tokens and am-active sessions.<\/span><\/div><div class=\"am-check\"><b>\u2713<\/b><span>Rotate shared secrets the user could access.<\/span><\/div><div class=\"am-check\"><b>\u2713<\/b><span>Review recent privileged actions in the audit log.<\/span><\/div><div class=\"am-check\"><b>\u2713<\/b><span>Confirm a new operational owner is documented.<\/span><\/div><\/div><\/section>\n      <section id=\"am-review\" class=\"am-section\"><h2>Administrator review cadence<\/h2><div class=\"am-table\"><table><thead><tr><th>Cadence<\/th><th>Review<\/th><th>Owner<\/th><\/tr><\/thead><tbody><tr><td>Weekly<\/td><td>Failed runs, expiring credentials, unresolved incidents<\/td><td>Platform operations<\/td><\/tr><tr><td>Monthly<\/td><td>Unused connections, orphaned workflows, publish activity<\/td><td>Workspace admin<\/td><\/tr><tr><td>Quarterly<\/td><td>Privileged roles, access recertification, policy exceptions<\/td><td>Security and compliance<\/td><\/tr><tr><td>Annually<\/td><td>Retention, recovery procedures, workspace architecture<\/td><td>Platform owner<\/td><\/tr><\/tbody><\/table><\/div><div class=\"am-callout am-success\"><strong>Administration is continuous<\/strong><p>A secure workspace is maintained through recurring review, not a one-time configuration project.<\/p><\/div><div class=\"am-next\"><a href=\"#api-quickstart\"><small>Next section<\/small><strong>API Quickstart<\/strong><span>Create a NovaFlow API client and send the first authenticated request.<\/span><\/a><a href=\"#troubleshooting-guide\"><small>Related operations guide<\/small><strong>Troubleshooting<\/strong><span>Diagnose failed runs, expired credentials, and configuration issues.<\/span><\/a><\/div><\/section>\n    <\/main>\n    <aside class=\"am-toc\" aria-label=\"On this page\"><h3>On this page<\/h3><a href=\"#am-overview\">Overview<\/a><a href=\"#am-workspace\">Workspace settings<\/a><a href=\"#am-roles\">Roles and permissions<\/a><a href=\"#am-identity\">Identity and access<\/a><a href=\"#am-integrations\">Integration governance<\/a><a href=\"#am-governance\">Workflow governance<\/a><a href=\"#am-audit\">Audit logs<\/a><a href=\"#am-data\">Data management<\/a><a href=\"#am-incident\">Incident recovery<\/a><a href=\"#am-offboarding\">Offboarding<\/a><a href=\"#am-review\">Review cadence<\/a><\/aside>\n  <\/div>\n<\/div>\n<\/section>\n<\/body>\n<\/html>\n\n<style>\n\/* FINAL ISOLATION FIX: no shared generic classes remain *\/\n#administrator-manual.am-root > .am-wrap{\n  position:relative!important;\n  left:auto!important;\n  right:auto!important;\n  width:min(calc(100vw - 48px),1480px)!important;\n  max-width:1480px!important;\n  margin-left:auto!important;\n  margin-right:auto!important;\n  transform:none!important;\n}\n\nbody .elementor-widget-html:has(#administrator-manual.am-root),\nbody .elementor-widget-html:has(#administrator-manual.am-root) > .elementor-widget-container{\n  position:static!important;\n  left:auto!important;\n  right:auto!important;\n  width:100%!important;\n  max-width:none!important;\n  margin:0!important;\n  padding:0!important;\n  transform:none!important;\n  overflow:visible!important;\n}\n\n@media(max-width:860px){\n  #administrator-manual.am-root > .am-wrap{\n    width:calc(100vw - 32px)!important;\n  }\n}\n@media(max-width:620px){\n  #administrator-manual.am-root > .am-wrap{\n    width:calc(100vw - 28px)!important;\n  }\n}\n<\/style>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ccb7a41 e-flex e-con-boxed e-con e-parent\" data-id=\"ccb7a41\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a6ec8ad elementor-widget elementor-widget-html\" data-id=\"a6ec8ad\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"api-reference\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n<title>NovaFlow API Reference \u2014 ScriptWise Portfolio<\/title>\n<style>\n#api-reference.ar-root{--bg:#06080c;--panel:#0d121b;--line:rgba(255,255,255,.085);--text:#f5f7fb;--muted:#a7b1c0;--soft:#7b8695;--violet:#8c7cff;--cyan:#62d8e8;--green:#70e3b2;--amber:#f4cc78;--red:#ff91a1;--max:1580px}#api-reference.ar-root,#api-reference.ar-root *{box-sizing:border-box}#api-reference.ar-root{color:var(--text);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif}#api-reference.ar-root a{color:inherit;text-decoration:none}#api-reference.ar-root code,#api-reference.ar-root pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}#api-reference.ar-root{position:relative!important;left:50%!important;right:auto!important;width:100vw!important;max-width:100vw!important;margin-left:-50vw!important;margin-right:0!important;transform:none!important;overflow:hidden;background:radial-gradient(circle at 10% 0%,rgba(140,124,255,.17),transparent 28%),radial-gradient(circle at 92% 9%,rgba(98,216,232,.10),transparent 24%),linear-gradient(180deg,#070a10 0%,#090d14 48%,#070a10 100%);border-block:1px solid rgba(255,255,255,.05)}#api-reference:before{content:\"\";position:absolute;inset:0;pointer-events:none;opacity:.27;background:linear-gradient(rgba(255,255,255,.021) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.021) 1px,transparent 1px);background-size:56px 56px}.ar-wrap{position:relative;width:min(calc(100% - 48px),var(--max));margin:auto;padding:96px 0 116px}.ar-topbar{display:flex;justify-content:space-between;align-items:center;gap:20px;margin-bottom:40px}.ar-brand{display:flex;align-items:center;gap:12px}.ar-logo{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;font-weight:900;background:linear-gradient(135deg,var(--violet),var(--cyan));box-shadow:0 12px 28px rgba(116,104,255,.22)}.ar-brand strong{display:block;font-size:14px}.ar-brand span{display:block;margin-top:2px;color:var(--soft);font-size:11px}.ar-version{display:flex;gap:9px;align-items:center;padding:9px 13px;border:1px solid var(--line);border-radius:999px;background:rgba(255,255,255,.025);color:#aeb7c5;font-size:12px}.ar-version i{width:7px;height:7px;border-radius:50%;background:var(--green);box-shadow:0 0 12px rgba(112,227,178,.7)}.ar-hero{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(390px,.9fr);gap:58px;align-items:end;margin-bottom:38px}.ar-eyebrow{display:inline-flex;align-items:center;gap:8px;margin-bottom:18px;padding:8px 12px;border:1px solid rgba(140,124,255,.22);border-radius:999px;background:rgba(140,124,255,.07);color:#dfdaff;font-size:11px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.ar-hero h1{margin:0 0 22px;max-width:940px;font-size:clamp(58px,6.4vw,100px);line-height:.94;letter-spacing:-.06em;font-weight:820}.ar-hero h1 span{background:linear-gradient(100deg,#fff 7%,#ded8ff 52%,#8aebef);-webkit-background-clip:text;background-clip:text;color:transparent}.ar-hero p{margin:0;max-width:850px;color:var(--muted);font-size:clamp(18px,1.45vw,22px);line-height:1.64}.ar-hero-card{padding:24px;border:1px solid var(--line);border-radius:22px;background:linear-gradient(180deg,rgba(255,255,255,.035),rgba(255,255,255,.012));box-shadow:0 28px 72px rgba(0,0,0,.28)}.ar-hero-card small,.ar-card small,.ar-summary small,.ar-next small{display:block;margin-bottom:10px;color:var(--soft);font-size:10px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}.ar-hero-card h3{margin:0 0 8px;font-size:19px}.ar-hero-card p,.ar-card p,.ar-summary p{margin:0;color:#aab4c2;font-size:14px;line-height:1.58}.ar-meta-grid,.ar-summary-grid,.ar-two-col,.ar-checks,.ar-next{display:grid;gap:12px;margin-top:20px}.ar-meta-grid{grid-template-columns:repeat(3,1fr)}.ar-summary-grid{grid-template-columns:repeat(4,1fr)}.ar-two-col,.ar-checks,.ar-next{grid-template-columns:repeat(2,1fr)}.ar-meta,.ar-summary,.ar-card,.ar-check,.ar-next a{padding:18px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.021)}.ar-meta b{display:block;font-size:18px}.ar-meta span{color:#8792a1;font-size:11px}.ar-shell{display:grid;grid-template-columns:260px minmax(0,1fr) 240px;gap:22px;align-items:start}.ar-sidebar,.ar-toc{position:sticky;top:22px;padding:20px;border:1px solid var(--line);border-radius:19px;background:rgba(9,13,19,.87);backdrop-filter:blur(18px);box-shadow:0 24px 58px rgba(0,0,0,.22)}.ar-side-title{padding-bottom:16px;margin-bottom:16px;border-bottom:1px solid var(--line)}.ar-side-title strong{display:block;font-size:14px}.ar-side-title span{color:#7c8796;font-size:11px}.ar-navgroup+.ar-navgroup{margin-top:18px}.ar-navlabel{display:block;margin-bottom:7px;color:#65707f;font-size:10px;font-weight:800;letter-spacing:.11em;text-transform:uppercase}.ar-navitem{display:flex;align-items:center;gap:9px;padding:9px 10px;border-radius:9px;color:#a5afbd;font-size:13px}.ar-navitem:hover{color:#fff;background:rgba(255,255,255,.04)}.ar-navitem.active{color:#fff;border:1px solid rgba(140,124,255,.16);background:linear-gradient(90deg,rgba(140,124,255,.18),rgba(98,216,232,.045))}.ar-navdot{width:7px;height:7px;border-radius:50%;background:#657080}.ar-navitem.active .ar-navdot{background:var(--violet);box-shadow:0 0 10px rgba(140,124,255,.7)}.ar-doc{min-width:0;padding:36px;border:1px solid var(--line);border-radius:28px;background:linear-gradient(180deg,rgba(255,255,255,.019),rgba(255,255,255,.006)),rgba(10,14,21,.83);box-shadow:0 36px 90px rgba(0,0,0,.3)}.ar-section{scroll-margin-top:28px;padding-bottom:48px;margin-bottom:48px;border-bottom:1px solid var(--line)}.ar-section:last-child{border:0;margin:0;padding:0}.ar-kicker{display:inline-block;margin-bottom:13px;color:#a59dff;font-size:11px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.ar-doc h2{margin:0 0 14px;font-size:clamp(30px,3vw,46px);line-height:1.06;letter-spacing:-.044em}.ar-doc h3{margin:29px 0 12px;font-size:21px}.ar-doc h4{margin:0 0 8px;font-size:16px}.ar-doc p,.ar-doc li{color:#aab4c2;font-size:15px;line-height:1.72}.ar-doc p{margin:0 0 16px}.ar-endpoint{margin-top:22px;border:1px solid var(--line);border-radius:18px;overflow:hidden;background:rgba(255,255,255,.016)}.ar-endpoint-head{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:18px 20px;border-bottom:1px solid var(--line);background:rgba(255,255,255,.018)}.ar-method-path{display:flex;align-items:center;gap:12px;min-width:0}.ar-method{display:inline-flex;justify-content:center;min-width:58px;padding:7px 10px;border-radius:9px;font-size:11px;font-weight:900;letter-spacing:.05em}.ar-get{background:rgba(98,216,232,.11);color:#adf0f5}.ar-post{background:rgba(112,227,178,.11);color:#bdf2da}.ar-patch{background:rgba(244,204,120,.11);color:#ffe1a1}.ar-delete{background:rgba(255,145,161,.11);color:#ffc1cb}.ar-path{overflow:auto;color:#eef2f7;font:600 14px\/1.4 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;white-space:nowrap}.ar-scope{padding:7px 10px;border:1px solid var(--line);border-radius:999px;color:#8f9aa9;font-size:10px;white-space:nowrap}.ar-endpoint-body{padding:20px}.ar-codebox{margin-top:18px;overflow:auto;border:1px solid var(--line);border-radius:15px;background:#080c12}.ar-codehead{display:flex;justify-content:space-between;gap:18px;padding:11px 14px;border-bottom:1px solid var(--line);color:#7c8796;font-size:11px}.ar-codebox pre{margin:0;padding:18px;min-width:720px;color:#d7deea;font:13px\/1.66 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.ar-k{color:#c792ea}.ar-s{color:#c3e88d}.ar-v{color:#82aaff}.ar-n{color:#f78c6c}.ar-o{color:#89ddff}.ar-table{overflow:auto;margin-top:18px;border:1px solid var(--line);border-radius:15px;background:rgba(255,255,255,.016)}#api-reference.ar-root table{width:100%;min-width:800px;border-collapse:collapse}#api-reference.ar-root th,#api-reference.ar-root td{padding:14px 15px;text-align:left;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}#api-reference.ar-root th:last-child,#api-reference.ar-root td:last-child{border-right:0}#api-reference.ar-root tr:last-child td{border-bottom:0}#api-reference.ar-root th{color:#8e99a8;background:rgba(255,255,255,.022);font-size:10px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}#api-reference.ar-root td{color:#adb7c5;font-size:13px;line-height:1.5}#api-reference.ar-root td:first-child{color:#eef2f7;font-weight:700}.ar-req,.ar-opt,.ar-badge{display:inline-flex;padding:4px 7px;border-radius:999px;font-size:10px;font-weight:800}.ar-req{background:rgba(255,145,161,.1);color:#ffc2cc}.ar-opt{background:rgba(127,176,255,.1);color:#bfd5ff}.ar-badge.ok{background:rgba(112,227,178,.1);color:#bdf2da}.ar-badge.warn{background:rgba(244,204,120,.1);color:#ffe2a4}.ar-badge.err{background:rgba(255,145,161,.1);color:#ffc1cb}.ar-callout{margin:22px 0;padding:18px 20px;border:1px solid rgba(98,216,232,.17);border-radius:14px;background:rgba(98,216,232,.045)}.ar-callout strong{display:block;margin-bottom:5px;font-size:14px}.ar-callout p{margin:0;font-size:14px}.ar-callout.warning{border-color:rgba(244,204,120,.2);background:rgba(244,204,120,.045)}.ar-callout.danger{border-color:rgba(255,145,161,.18);background:rgba(255,145,161,.045)}.ar-check{display:flex;gap:11px;color:#aab4c1;font-size:14px;line-height:1.5}.ar-check b{color:var(--green)}.ar-toc h3{margin:0 0 15px;font-size:13px}.ar-toc a{display:block;padding:7px 0;color:#87919f;font-size:12px}.ar-toc a:hover{color:#fff}.ar-next a{min-height:128px;transition:.2s}.ar-next a:hover{transform:translateY(-3px);border-color:rgba(140,124,255,.28);background:rgba(140,124,255,.045)}.ar-next strong{display:block;margin-bottom:7px}.ar-next span{color:#96a1af;font-size:13px;line-height:1.5}@media(max-width:1220px){.ar-hero{grid-template-columns:1fr}.ar-shell{grid-template-columns:225px minmax(0,1fr)}.ar-toc{display:none}.ar-summary-grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:860px){.ar-wrap{width:min(calc(100% - 30px),var(--max));padding:76px 0 90px}.ar-shell{grid-template-columns:1fr}.ar-sidebar{position:relative;top:auto;overflow:auto}.ar-side-scroll{display:flex;gap:8px;min-width:max-content}.ar-navgroup,.ar-navgroup+.ar-navgroup{display:contents}.ar-navlabel{display:none}.ar-navitem{border:1px solid var(--line)}.ar-doc{padding:24px}}@media(max-width:680px){.ar-hero h1{font-size:clamp(48px,15vw,72px)}.ar-summary-grid,.ar-two-col,.ar-checks,.ar-next,.ar-meta-grid{grid-template-columns:1fr}.ar-endpoint-head{align-items:flex-start;flex-direction:column}}\n\n\/* HARD RESET \/ FULL-BLEED ELEMENTOR OVERRIDES *\/\nbody .elementor-widget-html:has(.ar-root),\nbody .elementor-widget-html:has(.ar-root) > .elementor-widget-container,\nbody .e-con:has(> .elementor-widget-html .ar-root),\nbody .e-con-inner:has(> .elementor-widget-html .ar-root){\n  width:100% !important;\n  max-width:none !important;\n  min-width:0 !important;\n  flex:0 0 100% !important;\n  align-self:stretch !important;\n  overflow:visible !important;\n  margin-left:0 !important;\n  margin-right:0 !important;\n  padding-left:0 !important;\n  padding-right:0 !important;\n  transform:none !important;\n}\n\nhtml,\nbody{\n  overflow-x:clip;\n}\n\n#api-reference.ar-root{\n  left:auto;\n  width:100vw;\n  max-width:100vw;\n  margin-left:calc(50% - 50vw);\n  margin-right:calc(50% - 50vw);\n  isolation:isolate;\n}\n\n#api-reference.ar-root .ar-wrap{\n  width:min(calc(100vw - 48px),var(--max));\n  max-width:var(--max);\n  min-width:0;\n}\n\n#api-reference.ar-root .ar-hero,\n#api-reference.ar-root .ar-shell,\n#api-reference.ar-root .ar-summary-grid,\n#api-reference.ar-root .ar-meta-grid,\n#api-reference.ar-root .ar-two-col{\n  min-width:0;\n}\n\n#api-reference.ar-root .ar-hero > *,\n#api-reference.ar-root .ar-shell > *,\n#api-reference.ar-root .ar-summary-grid > *,\n#api-reference.ar-root .ar-meta-grid > *,\n#api-reference.ar-root .ar-two-col > *{\n  min-width:0;\n}\n\n#api-reference.ar-root .ar-codebox,\n#api-reference.ar-root .ar-table,\n#api-reference.ar-root .ar-path{\n  -webkit-overflow-scrolling:touch;\n}\n\n@media(max-width:860px){\n  #api-reference.ar-root .ar-wrap{\n    width:min(calc(100vw - 30px),var(--max));\n  }\n}\n\n@media(max-width:680px){\n  #api-reference.ar-root .ar-wrap{\n    width:min(calc(100vw - 28px),var(--max));\n  }\n\n  #api-reference.ar-root .ar-doc{\n    padding:20px;\n  }\n}\n<\/style>\n<\/head>\n<body>\n<section id=\"api-reference\" class=\"ar-root\"><div class=\"ar-wrap\">\n<div class=\"ar-topbar\"><div class=\"ar-brand\"><div class=\"ar-logo\">N<\/div><div><strong>NovaFlow Developer Platform<\/strong><span>ScriptWise documentation portfolio<\/span><\/div><\/div><div class=\"ar-version\"><i><\/i> REST API v1 \u00b7 Stable<\/div><\/div>\n<div class=\"ar-hero\"><div><div class=\"ar-eyebrow\">API Reference \u00b7 Complete Technical Specification<\/div><h1>Every resource, field, and response \u2014 <span>precisely documented.<\/span><\/h1><p>Use this reference to build, validate, and operate NovaFlow integrations. Each ar-endpoint follows a consistent contract: required scope, parameters, request schema, response schema, examples, and predictable error behavior.<\/p><\/div><aside class=\"ar-hero-card\"><small>Reference model<\/small><h3>Designed for lookup, implementation, and maintenance<\/h3><p>Unlike the Quickstart, this page does not teach a single path. It provides a reusable technical specification for developers working across the full API surface.<\/p><div class=\"ar-meta-grid\"><div class=\"ar-meta\"><b>14<\/b><span>core endpoints<\/span><\/div><div class=\"ar-meta\"><b>4<\/b><span>resource groups<\/span><\/div><div class=\"ar-meta\"><b>JSON<\/b><span>request format<\/span><\/div><\/div><\/aside><\/div>\n<div class=\"ar-shell\">\n<aside class=\"ar-sidebar\"><div class=\"ar-side-title\"><strong>NovaFlow Docs<\/strong><span>Developer documentation<\/span><\/div><div class=\"ar-side-scroll\"><div class=\"ar-navgroup\"><span class=\"ar-navlabel\">Developers<\/span><a class=\"ar-navitem\" href=\"#api-quickstart\"><span class=\"ar-navdot\"><\/span>API Quickstart<\/a><a class=\"ar-navitem ar-active\" href=\"#api-reference\"><span class=\"ar-navdot\"><\/span>API Reference<\/a><a class=\"ar-navitem\" href=\"#integration-guide\"><span class=\"ar-navdot\"><\/span>Integration Guide<\/a><\/div><div class=\"ar-navgroup\"><span class=\"ar-navlabel\">Resources<\/span><a class=\"ar-navitem\" href=\"#ref-workflows\"><span class=\"ar-navdot\"><\/span>Workflows<\/a><a class=\"ar-navitem\" href=\"#ref-runs\"><span class=\"ar-navdot\"><\/span>Workflow runs<\/a><a class=\"ar-navitem\" href=\"#ref-webhooks\"><span class=\"ar-navdot\"><\/span>Webhooks<\/a><a class=\"ar-navitem\" href=\"#ref-errors\"><span class=\"ar-navdot\"><\/span>Errors & limits<\/a><\/div><\/div><\/aside>\n<main class=\"ar-doc\">\n<section id=\"ref-overview\" class=\"ar-section\"><span class=\"ar-kicker\">Reference overview<\/span><h2>API conventions<\/h2><p>NovaFlow exposes a versioned REST API over HTTPS. Requests and responses use JSON, resource identifiers are stable, timestamps use ISO 8601 in UTC, and all authenticated operations are scoped to a workspace.<\/p><div class=\"ar-summary-grid\"><article class=\"ar-summary\"><small>Base URL<\/small><strong>api.novaflow.dev<\/strong><p>All production requests use HTTPS.<\/p><\/article><article class=\"ar-summary\"><small>Version<\/small><strong>\/v1<\/strong><p>Major ar-version is encoded in the path.<\/p><\/article><article class=\"ar-summary\"><small>Media type<\/small><strong>application\/json<\/strong><p>JSON request and response bodies.<\/p><\/article><article class=\"ar-summary\"><small>Time format<\/small><strong>ISO 8601 UTC<\/strong><p>Example: 2026-07-23T09:42:18Z.<\/p><\/article><\/div><h3>Authentication headers<\/h3><div class=\"ar-codebox\"><div class=\"ar-codehead\"><span>Required headers<\/span><span>HTTP<\/span><\/div><pre><code>Authorization: Bearer nf_live_\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\nNovaFlow-Workspace: ws_01J9KX2A8Q\nContent-Type: application\/json<\/code><\/pre><\/div><div class=\"ar-callout ar-warning\"><strong>Workspace context is explicit<\/strong><p>Tokens can be authorized for multiple workspaces. The <code>NovaFlow-Workspace<\/code> header makes tenant selection deterministic and auditable.<\/p><\/div><\/section>\n<section id=\"ref-workflows\" class=\"ar-section\"><span class=\"ar-kicker\">Resource group \u00b7 Workflows<\/span><h2>Workflow endpoints<\/h2><p>Workflows define automation logic, triggers, and lifecycle state. Draft workflows can be edited; published workflows can be executed; archived workflows remain retrievable for audit purposes.<\/p>\n<div class=\"ar-endpoint\"><div class=\"ar-endpoint-head\"><div class=\"ar-method-path\"><span class=\"ar-method ar-post\">POST<\/span><span class=\"ar-path\">\/v1\/workflows<\/span><\/div><span class=\"ar-scope\">Scope: workflows:write<\/span><\/div><div class=\"ar-endpoint-body\"><h4>Create a workflow<\/h4><p>Creates a draft workflow in the selected workspace. Use an idempotency key when the client may retry the request.<\/p><div class=\"ar-table\"><table><thead><tr><th>Field<\/th><th>Type<\/th><th>Requirement<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td>name<\/td><td>string<\/td><td><span class=\"ar-req\">Required<\/span><\/td><td>Human-readable workflow name. Maximum 120 characters.<\/td><\/tr><tr><td>environment<\/td><td>enum<\/td><td><span class=\"ar-req\">Required<\/span><\/td><td><code>sandbox<\/code> or <code>production<\/code>.<\/td><\/tr><tr><td>trigger<\/td><td>object<\/td><td><span class=\"ar-req\">Required<\/span><\/td><td>Initial workflow trigger configuration.<\/td><\/tr><tr><td>description<\/td><td>string<\/td><td><span class=\"ar-opt\">Optional<\/span><\/td><td>Internal summary. Maximum 500 characters.<\/td><\/tr><tr><td>tags<\/td><td>array&lt;string&gt;<\/td><td><span class=\"ar-opt\">Optional<\/span><\/td><td>Up to 20 searchable labels.<\/td><\/tr><\/tbody><\/table><\/div><div class=\"ar-two-col\"><div class=\"ar-codebox\"><div class=\"ar-codehead\"><span>Request<\/span><span>cURL<\/span><\/div><pre><code>curl <span class=\"ar-o\">--request<\/span> POST \\\n  <span class=\"ar-s\">\"https:\/\/api.novaflow.dev\/v1\/workflows\"<\/span> \\\n  <span class=\"ar-o\">--header<\/span> <span class=\"ar-s\">\"Authorization: Bearer $NOVAFLOW_API_KEY\"<\/span> \\\n  <span class=\"ar-o\">--header<\/span> <span class=\"ar-s\">\"NovaFlow-Workspace: $WORKSPACE_ID\"<\/span> \\\n  <span class=\"ar-o\">--header<\/span> <span class=\"ar-s\">\"Idempotency-Key: wf-create-001\"<\/span> \\\n  <span class=\"ar-o\">--data<\/span> <span class=\"ar-s\">'{\"name\":\"Purchase approval\",\"environment\":\"sandbox\",\"trigger\":{\"type\":\"manual\"}}'<\/span><\/code><\/pre><\/div><div class=\"ar-codebox\"><div class=\"ar-codehead\"><span>201 Created<\/span><span>JSON<\/span><\/div><pre><code>{\n  <span class=\"ar-k\">\"id\"<\/span>: <span class=\"ar-s\">\"wf_01JA2Z8P4N\"<\/span>,\n  <span class=\"ar-k\">\"object\"<\/span>: <span class=\"ar-s\">\"workflow\"<\/span>,\n  <span class=\"ar-k\">\"name\"<\/span>: <span class=\"ar-s\">\"Purchase approval\"<\/span>,\n  <span class=\"ar-k\">\"status\"<\/span>: <span class=\"ar-s\">\"draft\"<\/span>,\n  <span class=\"ar-k\">\"environment\"<\/span>: <span class=\"ar-s\">\"sandbox\"<\/span>,\n  <span class=\"ar-k\">\"ar-version\"<\/span>: <span class=\"ar-n\">1<\/span>\n}<\/code><\/pre><\/div><\/div><\/div><\/div>\n<div class=\"ar-endpoint\"><div class=\"ar-endpoint-head\"><div class=\"ar-method-path\"><span class=\"ar-method ar-get\">GET<\/span><span class=\"ar-path\">\/v1\/workflows<\/span><\/div><span class=\"ar-scope\">Scope: workflows:read<\/span><\/div><div class=\"ar-endpoint-body\"><h4>List workflows<\/h4><p>Returns a cursor-paginated collection with filtering by status, environment, and sort order.<\/p><\/div><\/div>\n<div class=\"ar-endpoint\"><div class=\"ar-endpoint-head\"><div class=\"ar-method-path\"><span class=\"ar-method ar-get\">GET<\/span><span class=\"ar-path\">\/v1\/workflows\/{workflow_id}<\/span><\/div><span class=\"ar-scope\">Scope: workflows:read<\/span><\/div><div class=\"ar-endpoint-body\"><h4>Retrieve a workflow<\/h4><p>Returns the latest representation of a workflow, including lifecycle state and ar-active version.<\/p><\/div><\/div>\n<div class=\"ar-endpoint\"><div class=\"ar-endpoint-head\"><div class=\"ar-method-path\"><span class=\"ar-method ar-patch\">PATCH<\/span><span class=\"ar-path\">\/v1\/workflows\/{workflow_id}<\/span><\/div><span class=\"ar-scope\">Scope: workflows:write<\/span><\/div><div class=\"ar-endpoint-body\"><h4>Update a workflow<\/h4><p>Applies a partial update to a draft workflow. Published versions are immutable.<\/p><\/div><\/div>\n<div class=\"ar-endpoint\"><div class=\"ar-endpoint-head\"><div class=\"ar-method-path\"><span class=\"ar-method ar-post\">POST<\/span><span class=\"ar-path\">\/v1\/workflows\/{workflow_id}\/publish<\/span><\/div><span class=\"ar-scope\">Scope: workflows:publish<\/span><\/div><div class=\"ar-endpoint-body\"><h4>Publish a workflow<\/h4><p>Validates the draft and creates an immutable published version.<\/p><\/div><\/div>\n<div class=\"ar-endpoint\"><div class=\"ar-endpoint-head\"><div class=\"ar-method-path\"><span class=\"ar-method ar-delete\">DELETE<\/span><span class=\"ar-path\">\/v1\/workflows\/{workflow_id}<\/span><\/div><span class=\"ar-scope\">Scope: workflows:write<\/span><\/div><div class=\"ar-endpoint-body\"><h4>Archive a workflow<\/h4><p>Moves the workflow to an archived state while preserving audit visibility.<\/p><\/div><\/div><\/section>\n<section id=\"ref-runs\" class=\"ar-section\"><span class=\"ar-kicker\">Resource group \u00b7 Workflow runs<\/span><h2>Workflow run endpoints<\/h2><p>Runs represent individual workflow executions and expose execution state, timing, input, output, and failure metadata.<\/p><div class=\"ar-endpoint\"><div class=\"ar-endpoint-head\"><div class=\"ar-method-path\"><span class=\"ar-method ar-post\">POST<\/span><span class=\"ar-path\">\/v1\/workflows\/{workflow_id}\/runs<\/span><\/div><span class=\"ar-scope\">Scope: runs:write<\/span><\/div><div class=\"ar-endpoint-body\"><h4>Start a workflow run<\/h4><p>Starts an execution of a published workflow and returns a queued run resource.<\/p><\/div><\/div><div class=\"ar-endpoint\"><div class=\"ar-endpoint-head\"><div class=\"ar-method-path\"><span class=\"ar-method ar-get\">GET<\/span><span class=\"ar-path\">\/v1\/runs\/{run_id}<\/span><\/div><span class=\"ar-scope\">Scope: runs:read<\/span><\/div><div class=\"ar-endpoint-body\"><h4>Retrieve run status<\/h4><p>Returns <code>queued<\/code>, <code>running<\/code>, <code>succeeded<\/code>, <code>failed<\/code>, or <code>canceled<\/code>.<\/p><\/div><\/div><div class=\"ar-endpoint\"><div class=\"ar-endpoint-head\"><div class=\"ar-method-path\"><span class=\"ar-method ar-get\">GET<\/span><span class=\"ar-path\">\/v1\/runs<\/span><\/div><span class=\"ar-scope\">Scope: runs:read<\/span><\/div><div class=\"ar-endpoint-body\"><h4>List workflow runs<\/h4><p>Filters by workflow, status, environment, correlation ID, and time range.<\/p><\/div><\/div><div class=\"ar-endpoint\"><div class=\"ar-endpoint-head\"><div class=\"ar-method-path\"><span class=\"ar-method ar-post\">POST<\/span><span class=\"ar-path\">\/v1\/runs\/{run_id}\/cancel<\/span><\/div><span class=\"ar-scope\">Scope: runs:write<\/span><\/div><div class=\"ar-endpoint-body\"><h4>Cancel a workflow run<\/h4><p>Requests cancellation of a queued or running execution.<\/p><\/div><\/div><\/section>\n<section id=\"ref-webhooks\" class=\"ar-section\"><span class=\"ar-kicker\">Resource group \u00b7 Webhooks<\/span><h2>Webhook endpoints<\/h2><p>Webhooks deliver signed event notifications to external systems. Every delivery includes a stable event ID, timestamp, and HMAC SHA-256 signature.<\/p><div class=\"ar-endpoint\"><div class=\"ar-endpoint-head\"><div class=\"ar-method-path\"><span class=\"ar-method ar-post\">POST<\/span><span class=\"ar-path\">\/v1\/webhook-endpoints<\/span><\/div><span class=\"ar-scope\">Scope: webhooks:write<\/span><\/div><div class=\"ar-endpoint-body\"><h4>Create a webhook endpoint<\/h4><p>Registers an HTTPS ar-endpoint and one or more event subscriptions.<\/p><div class=\"ar-callout ar-danger\"><strong>The signing secret is shown once<\/strong><p>Store it immediately in a secrets manager. NovaFlow cannot reveal the original value after creation.<\/p><\/div><\/div><\/div><div class=\"ar-endpoint\"><div class=\"ar-endpoint-head\"><div class=\"ar-method-path\"><span class=\"ar-method ar-get\">GET<\/span><span class=\"ar-path\">\/v1\/webhook-endpoints<\/span><\/div><span class=\"ar-scope\">Scope: webhooks:read<\/span><\/div><div class=\"ar-endpoint-body\"><h4>List webhook endpoints<\/h4><p>Returns ar-endpoint status, subscriptions, and delivery metadata.<\/p><\/div><\/div><div class=\"ar-endpoint\"><div class=\"ar-endpoint-head\"><div class=\"ar-method-path\"><span class=\"ar-method ar-post\">POST<\/span><span class=\"ar-path\">\/v1\/webhook-endpoints\/{endpoint_id}\/rotate-secret<\/span><\/div><span class=\"ar-scope\">Scope: webhooks:write<\/span><\/div><div class=\"ar-endpoint-body\"><h4>Rotate a signing secret<\/h4><p>Generates a replacement secret with a short overlap window.<\/p><\/div><\/div><div class=\"ar-endpoint\"><div class=\"ar-endpoint-head\"><div class=\"ar-method-path\"><span class=\"ar-method ar-delete\">DELETE<\/span><span class=\"ar-path\">\/v1\/webhook-endpoints\/{endpoint_id}<\/span><\/div><span class=\"ar-scope\">Scope: webhooks:write<\/span><\/div><div class=\"ar-endpoint-body\"><h4>Delete a webhook endpoint<\/h4><p>Stops future deliveries and removes the configuration.<\/p><\/div><\/div><\/section>\n<section id=\"ref-errors\" class=\"ar-section\"><span class=\"ar-kicker\">Errors, pagination, and limits<\/span><h2>Shared API behavior<\/h2><p>All errors use one structured envelope. Clients should make retry decisions from the HTTP status and machine-readable code, not by parsing human-readable messages.<\/p><div class=\"ar-codebox\"><div class=\"ar-codehead\"><span>Example error<\/span><span>JSON<\/span><\/div><pre><code>{\n  <span class=\"ar-k\">\"error\"<\/span>: {\n    <span class=\"ar-k\">\"type\"<\/span>: <span class=\"ar-s\">\"validation_error\"<\/span>,\n    <span class=\"ar-k\">\"code\"<\/span>: <span class=\"ar-s\">\"invalid_trigger_configuration\"<\/span>,\n    <span class=\"ar-k\">\"message\"<\/span>: <span class=\"ar-s\">\"The trigger configuration is incomplete.\"<\/span>,\n    <span class=\"ar-k\">\"request_id\"<\/span>: <span class=\"ar-s\">\"req_01JA30K6FQ\"<\/span>,\n    <span class=\"ar-k\">\"documentation_url\"<\/span>: <span class=\"ar-s\">\"\/docs\/errors\/invalid-trigger-configuration\"<\/span>\n  }\n}<\/code><\/pre><\/div><div class=\"ar-table\"><table><thead><tr><th>Status<\/th><th>Category<\/th><th>Retry?<\/th><th>Client behavior<\/th><\/tr><\/thead><tbody><tr><td><span class=\"ar-badge ar-err\">400<\/span><\/td><td>Malformed request<\/td><td>No<\/td><td>Correct request syntax or payload.<\/td><\/tr><tr><td><span class=\"ar-badge ar-err\">401<\/span><\/td><td>Authentication<\/td><td>No<\/td><td>Replace or correct credentials.<\/td><\/tr><tr><td><span class=\"ar-badge ar-err\">403<\/span><\/td><td>Authorization<\/td><td>No<\/td><td>Review scopes or workspace access.<\/td><\/tr><tr><td><span class=\"ar-badge ar-warn\">409<\/span><\/td><td>Conflict<\/td><td>Conditional<\/td><td>Read current state before deciding.<\/td><\/tr><tr><td><span class=\"ar-badge ar-warn\">429<\/span><\/td><td>Rate limit<\/td><td>Yes<\/td><td>Honor Retry-After and back off.<\/td><\/tr><tr><td><span class=\"ar-badge ar-err\">5xx<\/span><\/td><td>Service failure<\/td><td>Yes<\/td><td>Retry with bounded exponential backoff and jitter.<\/td><\/tr><\/tbody><\/table><\/div><div class=\"ar-checks\"><div class=\"ar-check\"><b>\u2713<\/b><span>Default workspace limit: 1,200 requests per minute.<\/span><\/div><div class=\"ar-check\"><b>\u2713<\/b><span>Cursors are opaque and must not be parsed or modified.<\/span><\/div><div class=\"ar-check\"><b>\u2713<\/b><span>Use response headers to adapt before requests are rejected.<\/span><\/div><div class=\"ar-check\"><b>\u2713<\/b><span>Keep filters and sort order stable across paginated requests.<\/span><\/div><\/div><div class=\"ar-callout\"><strong>Reference design principle<\/strong><p>Every ar-endpoint follows the same order: purpose, authorization, inputs, schema, examples, success response, and error behavior.<\/p><\/div><\/section>\n<section id=\"ref-next\" class=\"ar-section\"><span class=\"ar-kicker\">Continue learning<\/span><h2>Move from reference to implementation<\/h2><p>Use the Integration Guide when you need to connect NovaFlow to a real external system, map data, test failure modes, and plan rollout ownership.<\/p><div class=\"ar-next\"><a href=\"#api-quickstart\"><small>Previous<\/small><strong>API Quickstart<\/strong><span>Return to the guided first-request experience.<\/span><\/a><a href=\"#integration-guide\"><small>Next<\/small><strong>Integration Guide<\/strong><span>Build an end-to-end implementation with architecture, mapping, testing, and rollout guidance.<\/span><\/a><\/div><\/section>\n<\/main>\n<aside class=\"ar-toc\"><h3>On this page<\/h3><a href=\"#ref-overview\">API conventions<\/a><a href=\"#ref-workflows\">Workflows<\/a><a href=\"#ref-runs\">Workflow runs<\/a><a href=\"#ref-webhooks\">Webhooks<\/a><a href=\"#ref-errors\">Errors & limits<\/a><a href=\"#ref-next\">Next steps<\/a><\/aside>\n<\/div><\/div><\/section>\n<\/body>\n<\/html>\n<style>\n\/* FINAL ISOLATION FIX \u2014 unique classes, centered full width *\/\n#api-reference.ar-root > .ar-wrap{\n  position:relative!important;\n  left:auto!important;\n  right:auto!important;\n  width:min(calc(100vw - 48px),1580px)!important;\n  max-width:1580px!important;\n  min-width:0!important;\n  margin-left:auto!important;\n  margin-right:auto!important;\n  transform:none!important;\n}\n\nbody .elementor-widget-html:has(#api-reference.ar-root),\nbody .elementor-widget-html:has(#api-reference.ar-root) > .elementor-widget-container,\nbody .e-con:has(> .elementor-widget-html #api-reference.ar-root),\nbody .e-con-inner:has(> .elementor-widget-html #api-reference.ar-root){\n  position:static!important;\n  left:auto!important;\n  right:auto!important;\n  width:100%!important;\n  max-width:none!important;\n  min-width:0!important;\n  flex:0 0 100%!important;\n  align-self:stretch!important;\n  margin:0!important;\n  padding:0!important;\n  transform:none!important;\n  overflow:visible!important;\n}\n\n#api-reference.ar-root .ar-hero,\n#api-reference.ar-root .ar-shell,\n#api-reference.ar-root .ar-summary-grid,\n#api-reference.ar-root .ar-meta-grid,\n#api-reference.ar-root .ar-two-col,\n#api-reference.ar-root .ar-checks,\n#api-reference.ar-root .ar-next{\n  min-width:0!important;\n}\n\n#api-reference.ar-root .ar-hero > *,\n#api-reference.ar-root .ar-shell > *,\n#api-reference.ar-root .ar-summary-grid > *,\n#api-reference.ar-root .ar-meta-grid > *,\n#api-reference.ar-root .ar-two-col > *,\n#api-reference.ar-root .ar-checks > *,\n#api-reference.ar-root .ar-next > *{\n  min-width:0!important;\n}\n\n@media(max-width:860px){\n  #api-reference.ar-root > .ar-wrap{\n    width:calc(100vw - 30px)!important;\n  }\n}\n\n@media(max-width:680px){\n  #api-reference.ar-root > .ar-wrap{\n    width:calc(100vw - 28px)!important;\n  }\n\n  #api-reference.ar-root .ar-doc{\n    padding:20px!important;\n  }\n}\n<\/style>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3f2cf72 e-flex e-con-boxed e-con e-parent\" data-id=\"3f2cf72\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-af75caf elementor-widget elementor-widget-html\" data-id=\"af75caf\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"integration-guide\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!doctype html><html lang=\"en\"><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"><title>NovaFlow Integration Guide \u2014 ScriptWise Portfolio<\/title><style>\n#integration-guide.ig-root{--bg:#06080c;--panel:#0d121b;--line:rgba(255,255,255,.085);--text:#f5f7fb;--muted:#a7b1c0;--soft:#7b8695;--violet:#8c7cff;--cyan:#62d8e8;--green:#70e3b2;--amber:#f4cc78;--red:#ff91a1;--max:1580px}#integration-guide.ig-root,#integration-guide.ig-root *{box-sizing:border-box}#integration-guide.ig-root{color:var(--text);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif}#integration-guide.ig-root a{color:inherit;text-decoration:none}#integration-guide.ig-root code,#integration-guide.ig-root pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}#integration-guide.ig-root{position:relative!important;left:50%!important;right:auto!important;width:100vw!important;max-width:100vw!important;margin-left:-50vw!important;margin-right:0!important;transform:none!important;overflow:hidden;background:radial-gradient(circle at 12% 0%,rgba(140,124,255,.17),transparent 28%),radial-gradient(circle at 90% 9%,rgba(98,216,232,.10),transparent 24%),linear-gradient(180deg,#070a10 0%,#090d14 48%,#070a10 100%);border-block:1px solid rgba(255,255,255,.05)}#integration-guide:before{content:\"\";position:absolute;inset:0;pointer-events:none;opacity:.27;background:linear-gradient(rgba(255,255,255,.021) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.021) 1px,transparent 1px);background-size:56px 56px}.ig-wrap{position:relative;width:min(calc(100% - 48px),var(--max));margin:auto;padding:96px 0 116px}.ig-topbar{display:flex;justify-content:space-between;align-items:center;gap:20px;margin-bottom:40px}.ig-brand{display:flex;align-items:center;gap:12px}.ig-logo{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;font-weight:900;background:linear-gradient(135deg,var(--violet),var(--cyan))}.ig-brand strong{display:block;font-size:14px}.ig-brand span{display:block;margin-top:2px;color:var(--soft);font-size:11px}.ig-version{display:flex;gap:9px;align-items:center;padding:9px 13px;border:1px solid var(--line);border-radius:999px;background:rgba(255,255,255,.025);color:#aeb7c5;font-size:12px}.ig-version i{width:7px;height:7px;border-radius:50%;background:var(--green)}.ig-hero{display:grid;grid-template-columns:minmax(0,1.08fr) minmax(390px,.92fr);gap:58px;align-items:end;margin-bottom:38px}.ig-eyebrow{display:inline-flex;align-items:center;gap:8px;margin-bottom:18px;padding:8px 12px;border:1px solid rgba(140,124,255,.22);border-radius:999px;background:rgba(140,124,255,.07);color:#dfdaff;font-size:11px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.ig-hero h1{margin:0 0 22px;max-width:980px;font-size:clamp(58px,6.4vw,100px);line-height:.94;letter-spacing:-.06em;font-weight:820}.ig-hero h1 span{background:linear-gradient(100deg,#fff 7%,#ded8ff 52%,#8aebef);-webkit-background-clip:text;background-clip:text;color:transparent}.ig-hero p{margin:0;max-width:860px;color:var(--muted);font-size:clamp(18px,1.45vw,22px);line-height:1.64}.ig-hero-card{padding:24px;border:1px solid var(--line);border-radius:22px;background:linear-gradient(180deg,rgba(255,255,255,.035),rgba(255,255,255,.012))}.ig-hero-card small{display:block;margin-bottom:12px;color:var(--soft);font-size:10px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.ig-hero-card h3{margin:0 0 8px;font-size:19px}.ig-hero-card p{font-size:14px;line-height:1.58}.ig-meta-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:18px}.ig-meta{padding:14px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.02)}.ig-meta b{display:block;font-size:18px}.ig-meta span{color:#8792a1;font-size:11px}.ig-shell{display:grid;grid-template-columns:260px minmax(0,1fr) 240px;gap:22px;align-items:start}.ig-sidebar,.ig-toc{position:sticky;top:22px;padding:20px;border:1px solid var(--line);border-radius:19px;background:rgba(9,13,19,.87);backdrop-filter:blur(18px)}.ig-side-title{padding-bottom:16px;margin-bottom:16px;border-bottom:1px solid var(--line)}.ig-side-title strong{display:block;font-size:14px}.ig-side-title span{color:#7c8796;font-size:11px}.ig-navgroup+.ig-navgroup{margin-top:18px}.ig-navlabel{display:block;margin-bottom:7px;color:#65707f;font-size:10px;font-weight:800;letter-spacing:.11em;text-transform:uppercase}.ig-navitem{display:flex;align-items:center;gap:9px;padding:9px 10px;border-radius:9px;color:#a5afbd;font-size:13px}.ig-navitem:hover{color:#fff;background:rgba(255,255,255,.04)}.ig-navitem.active{color:#fff;border:1px solid rgba(140,124,255,.16);background:linear-gradient(90deg,rgba(140,124,255,.18),rgba(98,216,232,.045))}.ig-navdot{width:7px;height:7px;border-radius:50%;background:#657080}.ig-navitem.active .ig-navdot{background:var(--violet)}.ig-doc{min-width:0;padding:36px;border:1px solid var(--line);border-radius:28px;background:linear-gradient(180deg,rgba(255,255,255,.019),rgba(255,255,255,.006)),rgba(10,14,21,.83)}.ig-section{scroll-margin-top:28px;padding-bottom:48px;margin-bottom:48px;border-bottom:1px solid var(--line)}.ig-section:last-child{border:0;margin:0;padding:0}.ig-kicker{display:inline-block;margin-bottom:13px;color:#a59dff;font-size:11px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.ig-doc h2{margin:0 0 14px;font-size:clamp(30px,3vw,46px);line-height:1.06;letter-spacing:-.044em}.ig-doc h3{margin:29px 0 12px;font-size:21px}.ig-doc h4{margin:0 0 8px;font-size:16px}.ig-doc p,.ig-doc li{color:#aab4c2;font-size:15px;line-height:1.72}.ig-doc p{margin:0 0 16px}.ig-cards,.ig-two-col,.ig-checks,.ig-next{display:grid;gap:12px;margin-top:20px;grid-template-columns:repeat(2,1fr)}.ig-card,.ig-check,.ig-next a,.ig-phase{padding:18px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.021)}.ig-card small,.ig-next small,.ig-phase small{display:block;margin-bottom:10px;color:#7b8695;font-size:10px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}.ig-card p,.ig-phase p{margin:0;font-size:13px;line-height:1.55}.ig-arch{display:grid;grid-template-columns:1fr 44px 1fr 44px 1fr;align-items:center;gap:10px;margin-top:22px}.ig-node{padding:18px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.02);text-align:center}.ig-node small{display:block;color:#788392;font-size:10px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}.ig-node strong{display:block;margin-top:7px}.ig-arrow{text-align:center;color:#77818f;font-size:22px}.ig-branches{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:12px}.ig-branch{padding:15px;border:1px solid var(--line);border-radius:13px;background:rgba(255,255,255,.018);text-align:center;font-size:13px;color:#b1bac7}.ig-flow{display:grid;grid-template-columns:repeat(6,1fr);gap:9px;margin-top:20px}.ig-flow .ig-node{padding:15px}.ig-flow .ig-node:not(:last-child){position:relative}.ig-flow .ig-node:not(:last-child):after{content:\"\u2192\";position:absolute;right:-12px;top:50%;transform:translateY(-50%);color:#737d8b}.ig-table{overflow:auto;margin-top:18px;border:1px solid var(--line);border-radius:15px;background:rgba(255,255,255,.016)}#integration-guide.ig-root table{width:100%;min-width:820px;border-collapse:collapse}#integration-guide.ig-root th,#integration-guide.ig-root td{padding:14px 15px;text-align:left;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}#integration-guide.ig-root th:last-child,#integration-guide.ig-root td:last-child{border-right:0}#integration-guide.ig-root tr:last-child td{border-bottom:0}#integration-guide.ig-root th{color:#8e99a8;background:rgba(255,255,255,.022);font-size:10px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}#integration-guide.ig-root td{color:#adb7c5;font-size:13px;line-height:1.5}#integration-guide.ig-root td:first-child{color:#eef2f7;font-weight:700}.ig-codebox{margin-top:18px;overflow:auto;border:1px solid var(--line);border-radius:15px;background:#080c12}.ig-codehead{display:flex;justify-content:space-between;gap:18px;padding:11px 14px;border-bottom:1px solid var(--line);color:#7c8796;font-size:11px}.ig-codebox pre{margin:0;padding:18px;min-width:720px;color:#d7deea;font:13px\/1.66 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.ig-k{color:#c792ea}.ig-s{color:#c3e88d}.ig-n{color:#f78c6c}.ig-o{color:#89ddff}.ig-callout{margin:22px 0;padding:18px 20px;border:1px solid rgba(98,216,232,.17);border-radius:14px;background:rgba(98,216,232,.045)}.ig-callout strong{display:block;margin-bottom:5px;font-size:14px}.ig-callout p{margin:0;font-size:14px}.ig-callout.warning{border-color:rgba(244,204,120,.2);background:rgba(244,204,120,.045)}.ig-callout.danger{border-color:rgba(255,145,161,.18);background:rgba(255,145,161,.045)}.ig-callout.success{border-color:rgba(112,227,178,.18);background:rgba(112,227,178,.045)}.ig-check{display:flex;gap:11px;color:#aab4c1;font-size:14px;line-height:1.5}.ig-check b{color:var(--green)}.ig-timeline{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:20px}.ig-phase{position:relative}.ig-phase b{display:block;margin-bottom:7px}.ig-phase:not(:last-child):after{content:\"\u2192\";position:absolute;right:-10px;top:50%;color:#747e8c}.ig-badge{display:inline-flex;padding:5px 8px;border-radius:999px;font-size:11px;font-weight:800}.ig-sync{background:rgba(127,176,255,.1);color:#c7d9ff}.ig-async{background:rgba(112,227,178,.1);color:#c1f3dc}.ig-event{background:rgba(244,204,120,.1);color:#ffe3a8}.ig-toc h3{margin:0 0 15px;font-size:13px}.ig-toc a{display:block;padding:7px 0;color:#87919f;font-size:12px}.ig-toc a:hover{color:#fff}.ig-next a{min-height:128px;transition:.2s}.ig-next a:hover{transform:translateY(-3px);border-color:rgba(140,124,255,.28);background:rgba(140,124,255,.045)}.ig-next strong{display:block;margin-bottom:7px}.ig-next span{color:#96a1af;font-size:13px;line-height:1.5}@media(max-width:1220px){.ig-hero{grid-template-columns:1fr}.ig-shell{grid-template-columns:225px minmax(0,1fr)}.ig-toc{display:none}.ig-flow{grid-template-columns:repeat(3,1fr)}}@media(max-width:860px){.ig-wrap{width:min(calc(100% - 30px),var(--max));padding:76px 0 90px}.ig-shell{grid-template-columns:1fr}.ig-sidebar{position:relative;top:auto;overflow:auto}.ig-side-scroll{display:flex;gap:8px;min-width:max-content}.ig-navgroup,.ig-navgroup+.ig-navgroup{display:contents}.ig-navlabel{display:none}.ig-navitem{border:1px solid var(--line)}.ig-doc{padding:24px}.ig-arch{grid-template-columns:1fr}.ig-arrow{transform:rotate(90deg)}.ig-branches{grid-template-columns:1fr 1fr}.ig-timeline{grid-template-columns:1fr 1fr}}@media(max-width:680px){.ig-hero h1{font-size:clamp(48px,15vw,72px)}.ig-cards,.ig-two-col,.ig-checks,.ig-next,.ig-meta-grid,.ig-branches,.ig-timeline,.ig-flow{grid-template-columns:1fr}.ig-flow .ig-node:not(:last-child):after,.ig-phase:not(:last-child):after{content:\"\u2193\";right:50%;top:auto;bottom:-15px}}\n\n\/* HARD RESET \/ FULL-BLEED ELEMENTOR OVERRIDES *\/\nbody .elementor-widget-html:has(.ig-root),\nbody .elementor-widget-html:has(.ig-root) > .elementor-widget-container,\nbody .e-con:has(> .elementor-widget-html .ig-root),\nbody .e-con-inner:has(> .elementor-widget-html .ig-root){\n  width:100% !important;\n  max-width:none !important;\n  min-width:0 !important;\n  flex:0 0 100% !important;\n  align-self:stretch !important;\n  overflow:visible !important;\n  margin-left:0 !important;\n  margin-right:0 !important;\n  padding-left:0 !important;\n  padding-right:0 !important;\n  transform:none !important;\n}\n\nhtml,\nbody{\n  overflow-x:clip;\n}\n\n#integration-guide.ig-root{\n  left:auto;\n  width:100vw;\n  max-width:100vw;\n  margin-left:calc(50% - 50vw);\n  margin-right:calc(50% - 50vw);\n  isolation:isolate;\n}\n\n#integration-guide.ig-root .ig-wrap{\n  width:min(calc(100vw - 48px),var(--max));\n  max-width:var(--max);\n  min-width:0;\n}\n\n#integration-guide.ig-root .ig-hero,\n#integration-guide.ig-root .ig-shell,\n#integration-guide.ig-root .ig-meta-grid,\n#integration-guide.ig-root .ig-cards,\n#integration-guide.ig-root .ig-two-col,\n#integration-guide.ig-root .ig-checks,\n#integration-guide.ig-root .ig-next,\n#integration-guide.ig-root .ig-arch,\n#integration-guide.ig-root .ig-branches,\n#integration-guide.ig-root .ig-flow,\n#integration-guide.ig-root .ig-timeline{\n  min-width:0;\n}\n\n#integration-guide.ig-root .ig-hero > *,\n#integration-guide.ig-root .ig-shell > *,\n#integration-guide.ig-root .ig-meta-grid > *,\n#integration-guide.ig-root .ig-cards > *,\n#integration-guide.ig-root .ig-two-col > *,\n#integration-guide.ig-root .ig-checks > *,\n#integration-guide.ig-root .ig-next > *,\n#integration-guide.ig-root .ig-arch > *,\n#integration-guide.ig-root .ig-branches > *,\n#integration-guide.ig-root .ig-flow > *,\n#integration-guide.ig-root .ig-timeline > *{\n  min-width:0;\n}\n\n#integration-guide.ig-root .ig-codebox,\n#integration-guide.ig-root .ig-table{\n  -webkit-overflow-scrolling:touch;\n}\n\n@media(max-width:860px){\n  #integration-guide.ig-root .ig-wrap{\n    width:min(calc(100vw - 30px),var(--max));\n  }\n}\n\n@media(max-width:680px){\n  #integration-guide.ig-root .ig-wrap{\n    width:min(calc(100vw - 28px),var(--max));\n  }\n\n  #integration-guide.ig-root .ig-doc{\n    padding:20px;\n  }\n}\n<\/style><\/head><body><section id=\"integration-guide\" class=\"ig-root\"><div class=\"ig-wrap\"><div class=\"ig-topbar\"><div class=\"ig-brand\"><div class=\"ig-logo\">N<\/div><div><strong>NovaFlow Developer Platform<\/strong><span>ScriptWise documentation portfolio<\/span><\/div><\/div><div class=\"ig-version\"><i><\/i> Integration pattern \u00b7 Enterprise<\/div><\/div><div class=\"ig-hero\"><div><div class=\"ig-eyebrow\">Integration Guide \u00b7 Enterprise Implementation<\/div><h1>Connect NovaFlow to your stack \u2014 <span>safely, predictably, and at scale.<\/span><\/h1><p>This guide documents the complete implementation path for connecting a CRM or ERP system to NovaFlow, transforming business data, triggering workflows, handling asynchronous events, and operating the integration in production.<\/p><\/div><aside class=\"ig-hero-card\"><small>Reference scenario<\/small><h3>CRM \u2192 NovaFlow \u2192 ERP, Slack, and Analytics<\/h3><p>The guide uses one realistic enterprise scenario to demonstrate architecture, data contracts, security, failure recovery, testing, rollout, and operational ownership.<\/p><div class=\"ig-meta-grid\"><div class=\"ig-meta\"><b>4<\/b><span>connected systems<\/span><\/div><div class=\"ig-meta\"><b>2<\/b><span>delivery modes<\/span><\/div><div class=\"ig-meta\"><b>5<\/b><span>rollout stages<\/span><\/div><\/div><\/aside><\/div><div class=\"ig-shell\"><aside class=\"ig-sidebar\"><div class=\"ig-side-title\"><strong>NovaFlow Docs<\/strong><span>Developer documentation<\/span><\/div><div class=\"ig-side-scroll\"><div class=\"ig-navgroup\"><span class=\"ig-navlabel\">Developers<\/span><a class=\"ig-navitem\" href=\"#api-quickstart\"><span class=\"ig-navdot\"><\/span>API Quickstart<\/a><a class=\"ig-navitem\" href=\"#api-reference\"><span class=\"ig-navdot\"><\/span>API Reference<\/a><a class=\"ig-navitem ig-active\" href=\"#integration-guide\"><span class=\"ig-navdot\"><\/span>Integration Guide<\/a><\/div><div class=\"ig-navgroup\"><span class=\"ig-navlabel\">Implementation<\/span><a class=\"ig-navitem\" href=\"#ig-architecture\"><span class=\"ig-navdot\"><\/span>Architecture<\/a><a class=\"ig-navitem\" href=\"#ig-mapping\"><span class=\"ig-navdot\"><\/span>Data mapping<\/a><a class=\"ig-navitem\" href=\"#ig-reliability\"><span class=\"ig-navdot\"><\/span>Reliability<\/a><a class=\"ig-navitem\" href=\"#ig-testing\"><span class=\"ig-navdot\"><\/span>Testing & rollout<\/a><\/div><\/div><\/aside><main class=\"ig-doc\"><section id=\"ig-overview\" class=\"ig-section\"><span class=\"ig-kicker\">Implementation overview<\/span><h2>Define the integration boundary before writing code<\/h2><p>The reference implementation receives purchase requests from a CRM, transforms them into NovaFlow workflow inputs, executes an approval workflow, sends approved records to an ERP, and publishes operational events to Slack and analytics.<\/p><div class=\"ig-cards\"><article class=\"ig-card\"><small>System of record<\/small><h4>CRM<\/h4><p>Owns the original customer and purchase-request data.<\/p><\/article><article class=\"ig-card\"><small>Orchestration<\/small><h4>NovaFlow<\/h4><p>Validates, routes, approves, and records each workflow execution.<\/p><\/article><article class=\"ig-card\"><small>Downstream system<\/small><h4>ERP<\/h4><p>Receives approved financial records and creates the purchase order.<\/p><\/article><article class=\"ig-card\"><small>Operational channels<\/small><h4>Slack + Analytics<\/h4><p>Receive notifications and execution telemetry without becoming systems of record.<\/p><\/article><\/div><div class=\"ig-callout\"><strong>Integration principle<\/strong><p>Assign one authoritative owner to every business field and lifecycle state. NovaFlow orchestrates the process; it does not silently replace the CRM or ERP as the system of record.<\/p><\/div><\/section><section id=\"ig-architecture\" class=\"ig-section\"><span class=\"ig-kicker\">Architecture<\/span><h2>Recommended enterprise topology<\/h2><p>Place an integration service between internal systems and NovaFlow. The service owns authentication, transformation, correlation IDs, retry policy, and deployment lifecycle.<\/p><div class=\"ig-arch\"><div class=\"ig-node\"><small>Source<\/small><strong>CRM \/ ERP<\/strong><\/div><div class=\"ig-arrow\">\u2192<\/div><div class=\"ig-node\"><small>Boundary<\/small><strong>Integration Service<\/strong><\/div><div class=\"ig-arrow\">\u2192<\/div><div class=\"ig-node\"><small>Orchestration<\/small><strong>NovaFlow API<\/strong><\/div><\/div><div class=\"ig-branches\"><div class=\"ig-branch\">ERP write-back<\/div><div class=\"ig-branch\">Slack notification<\/div><div class=\"ig-branch\">Analytics event<\/div><div class=\"ig-branch\">Audit archive<\/div><\/div><h3>Choose the interaction model<\/h3><div class=\"ig-table\"><table><thead><tr><th>Pattern<\/th><th>Use when<\/th><th>Trade-off<\/th><\/tr><\/thead><tbody><tr><td><span class=\"ig-badge ig-sync\">Synchronous API<\/span><\/td><td>The caller needs immediate validation or a resource ID.<\/td><td>Tightly coupled to request latency and availability.<\/td><\/tr><tr><td><span class=\"ig-badge ig-async\">Asynchronous run<\/span><\/td><td>The workflow may take seconds or minutes.<\/td><td>Requires status polling or ig-event handling.<\/td><\/tr><tr><td><span class=\"ig-badge ig-event\">Webhook<\/span><\/td><td>The client should react to state changes without polling.<\/td><td>Requires signature validation and delivery recovery.<\/td><\/tr><tr><td>Queue<\/td><td>Traffic spikes, ordering, or backpressure must be absorbed.<\/td><td>Adds operational complexity and eventual consistency.<\/td><\/tr><\/tbody><\/table><\/div><h3>Authentication and authorization flow<\/h3><div class=\"ig-flow\"><div class=\"ig-node\"><small>01<\/small><strong>Load secret<\/strong><\/div><div class=\"ig-node\"><small>02<\/small><strong>Authenticate<\/strong><\/div><div class=\"ig-node\"><small>03<\/small><strong>Select workspace<\/strong><\/div><div class=\"ig-node\"><small>04<\/small><strong>Check scope<\/strong><\/div><div class=\"ig-node\"><small>05<\/small><strong>Execute request<\/strong><\/div><div class=\"ig-node\"><small>06<\/small><strong>Record request ID<\/strong><\/div><\/div><\/section><section id=\"ig-mapping\" class=\"ig-section\"><span class=\"ig-kicker\">Data contract<\/span><h2>Map source fields explicitly<\/h2><p>Document every transformation before implementation. The mapping should identify the source owner, target path, type conversion, validation rule, and behavior when a value is missing.<\/p><div class=\"ig-table\"><table><thead><tr><th>CRM field<\/th><th>NovaFlow field<\/th><th>Transform<\/th><th>Validation<\/th><th>Owner<\/th><\/tr><\/thead><tbody><tr><td>purchaseRequestId<\/td><td>input.request_id<\/td><td>String, unchanged<\/td><td>Required; unique per CRM<\/td><td>CRM<\/td><\/tr><tr><td>customerId<\/td><td>input.customer.id<\/td><td>String, unchanged<\/td><td>Required<\/td><td>CRM<\/td><\/tr><tr><td>customerName<\/td><td>input.customer.name<\/td><td>Trim whitespace<\/td><td>1\u2013160 characters<\/td><td>CRM<\/td><\/tr><tr><td>amount<\/td><td>input.purchase.amount_minor<\/td><td>Decimal \u00d7 100<\/td><td>Positive integer<\/td><td>CRM<\/td><\/tr><tr><td>currency<\/td><td>input.purchase.currency<\/td><td>Uppercase ISO code<\/td><td>Three characters<\/td><td>CRM<\/td><\/tr><tr><td>createdAt<\/td><td>input.source.created_at<\/td><td>Convert to UTC<\/td><td>ISO 8601<\/td><td>CRM<\/td><\/tr><\/tbody><\/table><\/div><h3>Canonical payload<\/h3><div class=\"ig-codebox\"><div class=\"ig-codehead\"><span>workflow-input.json<\/span><span>JSON<\/span><\/div><pre><code>{\n  <span class=\"ig-k\">\"request_id\"<\/span>: <span class=\"ig-s\">\"PR-2026-1048\"<\/span>,\n  <span class=\"ig-k\">\"customer\"<\/span>: {<span class=\"ig-k\">\"id\"<\/span>: <span class=\"ig-s\">\"CUS-80341\"<\/span>, <span class=\"ig-k\">\"name\"<\/span>: <span class=\"ig-s\">\"Northstar Medical Group\"<\/span>},\n  <span class=\"ig-k\">\"purchase\"<\/span>: {<span class=\"ig-k\">\"amount_minor\"<\/span>: <span class=\"ig-n\">248500<\/span>, <span class=\"ig-k\">\"currency\"<\/span>: <span class=\"ig-s\">\"EUR\"<\/span>},\n  <span class=\"ig-k\">\"source\"<\/span>: {<span class=\"ig-k\">\"system\"<\/span>: <span class=\"ig-s\">\"crm\"<\/span>, <span class=\"ig-k\">\"created_at\"<\/span>: <span class=\"ig-s\">\"2026-07-23T08:55:00Z\"<\/span>}\n}<\/code><\/pre><\/div><div class=\"ig-callout ig-warning\"><strong>Reject ambiguous mappings<\/strong><p>Do not guess currency, timezone, ownership, or identifier semantics. Treat unresolved mappings as design issues, not implementation details.<\/p><\/div><\/section><section id=\"ig-lifecycle\" class=\"ig-section\"><span class=\"ig-kicker\">Request lifecycle<\/span><h2>Trace one transaction end to end<\/h2><div class=\"ig-flow\"><div class=\"ig-node\"><small>01<\/small><strong>Receive<\/strong><\/div><div class=\"ig-node\"><small>02<\/small><strong>Validate<\/strong><\/div><div class=\"ig-node\"><small>03<\/small><strong>Transform<\/strong><\/div><div class=\"ig-node\"><small>04<\/small><strong>Execute<\/strong><\/div><div class=\"ig-node\"><small>05<\/small><strong>Persist<\/strong><\/div><div class=\"ig-node\"><small>06<\/small><strong>Notify<\/strong><\/div><\/div><h3>Start the workflow run<\/h3><div class=\"ig-codebox\"><div class=\"ig-codehead\"><span>POST \/v1\/workflows\/{workflow_id}\/runs<\/span><span>cURL<\/span><\/div><pre><code>curl <span class=\"ig-o\">--request<\/span> POST   <span class=\"ig-s\">\"https:\/\/api.novaflow.dev\/v1\/workflows\/wf_purchase_approval\/runs\"<\/span>   <span class=\"ig-o\">--header<\/span> <span class=\"ig-s\">\"Authorization: Bearer $NOVAFLOW_API_KEY\"<\/span>   <span class=\"ig-o\">--header<\/span> <span class=\"ig-s\">\"NovaFlow-Workspace: $WORKSPACE_ID\"<\/span>   <span class=\"ig-o\">--header<\/span> <span class=\"ig-s\">\"Idempotency-Key: PR-2026-1048\"<\/span>   <span class=\"ig-o\">--data<\/span> <span class=\"ig-s\">'{\"correlation_id\":\"PR-2026-1048\",\"input\":{\"request_id\":\"PR-2026-1048\"}}'<\/span><\/code><\/pre><\/div><div class=\"ig-callout ig-success\"><strong>Correlation is mandatory<\/strong><p>Use the same business correlation ID across CRM logs, NovaFlow runs, ERP records, webhook events, and support tickets.<\/p><\/div><\/section><section id=\"ig-reliability\" class=\"ig-section\"><span class=\"ig-kicker\">Reliability engineering<\/span><h2>Design for partial failure<\/h2><p>Distributed integrations fail in fragments. The client may time out after NovaFlow accepted a request, a webhook may arrive twice, or the ERP may be unavailable after approval succeeds.<\/p><div class=\"ig-cards\"><article class=\"ig-card\"><small>Duplicate request<\/small><h4>Idempotency key<\/h4><p>Reuse the source business ID so retried create or execute operations return the original result.<\/p><\/article><article class=\"ig-card\"><small>Temporary failure<\/small><h4>Bounded retries<\/h4><p>Retry 429 and selected 5xx responses with exponential backoff and jitter.<\/p><\/article><article class=\"ig-card\"><small>Repeated event<\/small><h4>Event deduplication<\/h4><p>Persist the webhook ig-event ID before applying downstream side effects.<\/p><\/article><article class=\"ig-card\"><small>Persistent failure<\/small><h4>Dead-letter handling<\/h4><p>Move exhausted messages to a review queue with payload, attempts, and last error.<\/p><\/article><\/div><h3>Retry decision matrix<\/h3><div class=\"ig-table\"><table><thead><tr><th>Failure<\/th><th>Retry?<\/th><th>Action<\/th><\/tr><\/thead><tbody><tr><td>400 validation error<\/td><td>No<\/td><td>Correct the source data or mapping.<\/td><\/tr><tr><td>401 invalid credential<\/td><td>No<\/td><td>Rotate or replace the credential.<\/td><\/tr><tr><td>409 state conflict<\/td><td>Conditional<\/td><td>Read current state before deciding.<\/td><\/tr><tr><td>429 rate limit<\/td><td>Yes<\/td><td>Honor Retry-After and add jitter.<\/td><\/tr><tr><td>502 \/ 503 \/ 504<\/td><td>Yes<\/td><td>Retry a bounded number of times.<\/td><\/tr><tr><td>Webhook timeout<\/td><td>Handled by NovaFlow<\/td><td>Return 2xx only after durable acceptance.<\/td><\/tr><\/tbody><\/table><\/div><h3>Webhook signature verification<\/h3><div class=\"ig-codebox\"><div class=\"ig-codehead\"><span>verify-webhook.js<\/span><span>Node.js<\/span><\/div><pre><code><span class=\"ig-k\">const<\/span> signedPayload = `${timestamp}.${rawBody}`;\n<span class=\"ig-k\">const<\/span> expected = createHmac(<span class=\"ig-s\">\"sha256\"<\/span>, webhookSecret)\n  .update(signedPayload).digest(<span class=\"ig-s\">\"hex\"<\/span>);\n\n<span class=\"ig-k\">if<\/span> (!timingSafeEqual(Buffer.from(expected), Buffer.from(signature))) {\n  <span class=\"ig-k\">throw<\/span> <span class=\"ig-k\">new<\/span> Error(<span class=\"ig-s\">\"Invalid webhook signature\"<\/span>);\n}<\/code><\/pre><\/div><\/section><section id=\"ig-security\" class=\"ig-section\"><span class=\"ig-kicker\">Security controls<\/span><h2>Protect credentials, data, and administrative actions<\/h2><div class=\"ig-checks\"><div class=\"ig-check\"><b>\u2713<\/b><span>Store API keys and webhook secrets in a managed secrets service.<\/span><\/div><div class=\"ig-check\"><b>\u2713<\/b><span>Grant separate read, write, publish, and webhook scopes.<\/span><\/div><div class=\"ig-check\"><b>\u2713<\/b><span>Use different credentials for development, staging, and production.<\/span><\/div><div class=\"ig-check\"><b>\u2713<\/b><span>Redact credentials, personal data, and full payloads from logs.<\/span><\/div><div class=\"ig-check\"><b>\u2713<\/b><span>Rotate secrets through an overlap window to avoid downtime.<\/span><\/div><div class=\"ig-check\"><b>\u2713<\/b><span>Audit configuration changes and production access.<\/span><\/div><\/div><div class=\"ig-callout ig-danger\"><strong>Least privilege is an integration requirement<\/strong><p>Do not issue one all-powerful token for every environment and service. Scope credentials to one workload, one environment, and the minimum required operations.<\/p><\/div><\/section><section id=\"ig-testing\" class=\"ig-section\"><span class=\"ig-kicker\">Testing and rollout<\/span><h2>Prove the contract before production<\/h2><div class=\"ig-table\"><table><thead><tr><th>Test layer<\/th><th>Purpose<\/th><th>Example<\/th><\/tr><\/thead><tbody><tr><td>Schema validation<\/td><td>Catch malformed source data before API calls.<\/td><td>Reject missing currency or invalid timestamps.<\/td><\/tr><tr><td>Contract test<\/td><td>Verify request and response compatibility.<\/td><td>Assert required fields and stable error codes.<\/td><\/tr><tr><td>Sandbox integration<\/td><td>Validate real authentication and resource behavior.<\/td><td>Create and execute a non-production workflow.<\/td><\/tr><tr><td>Failure injection<\/td><td>Prove retry, deduplication, and recovery logic.<\/td><td>Simulate 429, timeout, duplicate webhook, ERP outage.<\/td><\/tr><tr><td>Load test<\/td><td>Measure throughput and backpressure behavior.<\/td><td>Replay peak-hour traffic with realistic payload sizes.<\/td><\/tr><\/tbody><\/table><\/div><h3>Deployment sequence<\/h3><div class=\"ig-timeline\"><article class=\"ig-phase\"><small>Stage 01<\/small><b>Development<\/b><p>Local mocks and schema validation.<\/p><\/article><article class=\"ig-phase\"><small>Stage 02<\/small><b>Sandbox<\/b><p>Real NovaFlow API and test credentials.<\/p><\/article><article class=\"ig-phase\"><small>Stage 03<\/small><b>Staging<\/b><p>Production-like data volume and dependencies.<\/p><\/article><article class=\"ig-phase\"><small>Stage 04<\/small><b>Canary<\/b><p>Limited production traffic with rollback controls.<\/p><\/article><\/div><h3>Release readiness checklist<\/h3><div class=\"ig-checks\"><div class=\"ig-check\"><b>\u2713<\/b><span>Data ownership and field mappings are approved.<\/span><\/div><div class=\"ig-check\"><b>\u2713<\/b><span>Credentials, scopes, and rotation owners are documented.<\/span><\/div><div class=\"ig-check\"><b>\u2713<\/b><span>Retry and dead-letter behavior is tested.<\/span><\/div><div class=\"ig-check\"><b>\u2713<\/b><span>Dashboards and alerts exist before go-live.<\/span><\/div><div class=\"ig-check\"><b>\u2713<\/b><span>Rollback and replay procedures are documented.<\/span><\/div><div class=\"ig-check\"><b>\u2713<\/b><span>Support teams know the correlation and request IDs to collect.<\/span><\/div><\/div><\/section><section id=\"ig-monitoring\" class=\"ig-section\"><span class=\"ig-kicker\">Operations<\/span><h2>Monitor the integration as a business process<\/h2><div class=\"ig-table\"><table><thead><tr><th>Signal<\/th><th>Why it matters<\/th><th>Suggested alert<\/th><\/tr><\/thead><tbody><tr><td>Request ig-success rate<\/td><td>Detects broad API or client failures.<\/td><td>Below 99.5% for 10 minutes.<\/td><\/tr><tr><td>End-to-end latency<\/td><td>Measures business completion, not only API response time.<\/td><td>P95 above agreed service objective.<\/td><\/tr><tr><td>Retry volume<\/td><td>Reveals degraded dependencies before hard failure.<\/td><td>Threefold increase over baseline.<\/td><\/tr><tr><td>Webhook delivery failures<\/td><td>Detects broken ig-event consumption.<\/td><td>Any sustained failure after automatic retries.<\/td><\/tr><tr><td>Dead-letter queue depth<\/td><td>Shows unresolved business transactions.<\/td><td>Above zero beyond the response window.<\/td><\/tr><tr><td>Mapping rejection rate<\/td><td>Identifies source-data quality regression.<\/td><td>Above 1% of incoming records.<\/td><\/tr><\/tbody><\/table><\/div><h3>Troubleshooting matrix<\/h3><div class=\"ig-table\"><table><thead><tr><th>Symptom<\/th><th>Likely cause<\/th><th>Diagnosis<\/th><th>Resolution<\/th><\/tr><\/thead><tbody><tr><td>401 responses<\/td><td>Expired or wrong-environment token<\/td><td>Check token prefix and audit logs.<\/td><td>Rotate the correct credential.<\/td><\/tr><tr><td>Duplicate ERP records<\/td><td>Missing idempotency or ig-event deduplication<\/td><td>Compare correlation and ig-event IDs.<\/td><td>Persist processed IDs and replay safely.<\/td><\/tr><tr><td>Runs remain queued<\/td><td>Capacity or workflow dependency issue<\/td><td>Inspect run status and platform notices.<\/td><td>Pause intake or apply backpressure.<\/td><\/tr><tr><td>Webhook signature fails<\/td><td>Raw body changed or secret mismatch<\/td><td>Compare timestamp, raw bytes, and ig-active secret.<\/td><td>Use the unmodified body and current secret.<\/td><\/tr><\/tbody><\/table><\/div><\/section><section id=\"ig-next\" class=\"ig-section\"><span class=\"ig-kicker\">Continue learning<\/span><h2>Move from implementation to operations<\/h2><p>Continue with Troubleshooting for symptom-based recovery procedures, or return to API Reference for exact endpoint contracts.<\/p><div class=\"ig-next\"><a href=\"#api-reference\"><small>Previous<\/small><strong>API Reference<\/strong><span>Review endpoint contracts, schemas, permissions, errors, and limits.<\/span><\/a><a href=\"#troubleshooting-guide\"><small>Next<\/small><strong>Troubleshooting Guide<\/strong><span>Diagnose failed requests, delayed runs, webhook delivery issues, and configuration errors.<\/span><\/a><\/div><\/section><\/main><aside class=\"ig-toc\"><h3>On this page<\/h3><a href=\"#ig-overview\">Implementation overview<\/a><a href=\"#ig-architecture\">Architecture<\/a><a href=\"#ig-mapping\">Data mapping<\/a><a href=\"#ig-lifecycle\">Request lifecycle<\/a><a href=\"#ig-reliability\">Reliability<\/a><a href=\"#ig-security\">Security<\/a><a href=\"#ig-testing\">Testing & rollout<\/a><a href=\"#ig-monitoring\">Monitoring<\/a><a href=\"#ig-next\">Next steps<\/a><\/aside><\/div><\/div><\/section><\/body><\/html>\n<style>\n\/* FINAL ISOLATION FIX \u2014 unique classes, centered full width *\/\n#integration-guide.ig-root > .ig-wrap{\n  position:relative!important;\n  left:auto!important;\n  right:auto!important;\n  width:min(calc(100vw - 48px),1580px)!important;\n  max-width:1580px!important;\n  min-width:0!important;\n  margin-left:auto!important;\n  margin-right:auto!important;\n  transform:none!important;\n}\n\nbody .elementor-widget-html:has(#integration-guide.ig-root),\nbody .elementor-widget-html:has(#integration-guide.ig-root) > .elementor-widget-container,\nbody .e-con:has(> .elementor-widget-html #integration-guide.ig-root),\nbody .e-con-inner:has(> .elementor-widget-html #integration-guide.ig-root){\n  position:static!important;\n  left:auto!important;\n  right:auto!important;\n  width:100%!important;\n  max-width:none!important;\n  min-width:0!important;\n  flex:0 0 100%!important;\n  align-self:stretch!important;\n  margin:0!important;\n  padding:0!important;\n  transform:none!important;\n  overflow:visible!important;\n}\n\n#integration-guide.ig-root .ig-hero,\n#integration-guide.ig-root .ig-shell,\n#integration-guide.ig-root .ig-meta-grid,\n#integration-guide.ig-root .ig-cards,\n#integration-guide.ig-root .ig-two-col,\n#integration-guide.ig-root .ig-checks,\n#integration-guide.ig-root .ig-next,\n#integration-guide.ig-root .ig-arch,\n#integration-guide.ig-root .ig-branches,\n#integration-guide.ig-root .ig-flow,\n#integration-guide.ig-root .ig-timeline{\n  min-width:0!important;\n}\n\n#integration-guide.ig-root .ig-hero > *,\n#integration-guide.ig-root .ig-shell > *,\n#integration-guide.ig-root .ig-meta-grid > *,\n#integration-guide.ig-root .ig-cards > *,\n#integration-guide.ig-root .ig-two-col > *,\n#integration-guide.ig-root .ig-checks > *,\n#integration-guide.ig-root .ig-next > *,\n#integration-guide.ig-root .ig-arch > *,\n#integration-guide.ig-root .ig-branches > *,\n#integration-guide.ig-root .ig-flow > *,\n#integration-guide.ig-root .ig-timeline > *{\n  min-width:0!important;\n}\n\n@media(max-width:860px){\n  #integration-guide.ig-root > .ig-wrap{\n    width:calc(100vw - 30px)!important;\n  }\n}\n\n@media(max-width:680px){\n  #integration-guide.ig-root > .ig-wrap{\n    width:calc(100vw - 28px)!important;\n  }\n\n  #integration-guide.ig-root .ig-doc{\n    padding:20px!important;\n  }\n}\n<\/style>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-45739de e-flex e-con-boxed e-con e-parent\" data-id=\"45739de\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-dff2784 elementor-widget elementor-widget-html\" data-id=\"dff2784\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"troubleshooting-guide\" data-widget_type=\"html.default\">\n\t\t\t\t\t\n<!DOCTYPE html>\n\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\"\/>\n<meta content=\"width=device-width,initial-scale=1\" name=\"viewport\"\/>\n<title>NovaFlow Troubleshooting Guide \u2014 ScriptWise Portfolio<\/title>\n<style>\n#troubleshooting-guide.ts-root{--bg:#06080c;--panel:#0d121b;--line:rgba(255,255,255,.085);--text:#f5f7fb;--muted:#a7b1c0;--soft:#7b8695;--violet:#8c7cff;--cyan:#62d8e8;--green:#70e3b2;--amber:#f4cc78;--red:#ff91a1;--max:1580px}\n#troubleshooting-guide.ts-root,#troubleshooting-guide.ts-root *{box-sizing:border-box}\n#troubleshooting-guide.ts-root{color:var(--text);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif}\n#troubleshooting-guide.ts-root a{color:inherit;text-decoration:none}\n#troubleshooting-guide.ts-root code,#troubleshooting-guide.ts-root pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}\n#troubleshooting-guide.ts-root{position:relative!important;left:50%!important;right:auto!important;width:100vw!important;max-width:100vw!important;margin-left:-50vw!important;margin-right:0!important;transform:none!important;overflow:hidden;background:radial-gradient(circle at 12% 0%,rgba(140,124,255,.17),transparent 28%),radial-gradient(circle at 90% 9%,rgba(98,216,232,.10),transparent 24%),linear-gradient(180deg,#070a10 0%,#090d14 48%,#070a10 100%);border-block:1px solid rgba(255,255,255,.05)}\n#troubleshooting-guide:before{content:\"\";position:absolute;inset:0;pointer-events:none;opacity:.27;background:linear-gradient(rgba(255,255,255,.021) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.021) 1px,transparent 1px);background-size:56px 56px}\n.ts-wrap{position:relative;width:min(calc(100% - 48px),var(--max));margin:auto;padding:96px 0 116px}\n.ts-topbar{display:flex;justify-content:space-between;align-items:center;gap:20px;margin-bottom:40px}\n.ts-brand{display:flex;align-items:center;gap:12px}\n.ts-logo{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;font-weight:900;background:linear-gradient(135deg,var(--violet),var(--cyan))}\n.ts-brand strong{display:block;font-size:14px}\n.ts-brand span{display:block;margin-top:2px;color:var(--soft);font-size:11px}\n.ts-version{display:flex;gap:9px;align-items:center;padding:9px 13px;border:1px solid var(--line);border-radius:999px;background:rgba(255,255,255,.025);color:#aeb7c5;font-size:12px}\n.ts-version i{width:7px;height:7px;border-radius:50%;background:var(--green)}\n.ts-hero{display:grid;grid-template-columns:minmax(0,1.08fr) minmax(390px,.92fr);gap:58px;align-items:end;margin-bottom:38px}\n.ts-eyebrow{display:inline-flex;align-items:center;gap:8px;margin-bottom:18px;padding:8px 12px;border:1px solid rgba(140,124,255,.22);border-radius:999px;background:rgba(140,124,255,.07);color:#dfdaff;font-size:11px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}\n.ts-hero h1{margin:0 0 22px;max-width:980px;font-size:clamp(58px,6.4vw,100px);line-height:.94;letter-spacing:-.06em;font-weight:820}\n.ts-hero h1 span{background:linear-gradient(100deg,#fff 7%,#ded8ff 52%,#8aebef);-webkit-background-clip:text;background-clip:text;color:transparent}\n.ts-hero p{margin:0;max-width:860px;color:var(--muted);font-size:clamp(18px,1.45vw,22px);line-height:1.64}\n.ts-hero-card{padding:24px;border:1px solid var(--line);border-radius:22px;background:linear-gradient(180deg,rgba(255,255,255,.035),rgba(255,255,255,.012))}\n.ts-hero-card small{display:block;margin-bottom:12px;color:var(--soft);font-size:10px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}\n.ts-hero-card h3{margin:0 0 8px;font-size:19px}\n.ts-hero-card p{font-size:14px;line-height:1.58}\n.ts-meta-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:18px}\n.ts-meta{padding:14px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.02)}\n.ts-meta b{display:block;font-size:18px}\n.ts-meta span{color:#8792a1;font-size:11px}\n.ts-shell{display:grid;grid-template-columns:260px minmax(0,1fr) 240px;gap:22px;align-items:start}\n.ts-sidebar,.ts-toc{position:sticky;top:22px;padding:20px;border:1px solid var(--line);border-radius:19px;background:rgba(9,13,19,.87);backdrop-filter:blur(18px)}\n.ts-side-title{padding-bottom:16px;margin-bottom:16px;border-bottom:1px solid var(--line)}\n.ts-side-title strong{display:block;font-size:14px}\n.ts-side-title span{color:#7c8796;font-size:11px}\n.ts-navgroup+.ts-navgroup{margin-top:18px}\n.ts-navlabel{display:block;margin-bottom:7px;color:#65707f;font-size:10px;font-weight:800;letter-spacing:.11em;text-transform:uppercase}\n.ts-navitem{display:flex;align-items:center;gap:9px;padding:9px 10px;border-radius:9px;color:#a5afbd;font-size:13px}\n.ts-navitem:hover{color:#fff;background:rgba(255,255,255,.04)}\n.ts-navitem.active{color:#fff;border:1px solid rgba(140,124,255,.16);background:linear-gradient(90deg,rgba(140,124,255,.18),rgba(98,216,232,.045))}\n.ts-navdot{width:7px;height:7px;border-radius:50%;background:#657080}\n.ts-navitem.active .ts-navdot{background:var(--violet)}\n.ts-doc{min-width:0;padding:36px;border:1px solid var(--line);border-radius:28px;background:linear-gradient(180deg,rgba(255,255,255,.019),rgba(255,255,255,.006)),rgba(10,14,21,.83)}\n.ts-section{scroll-margin-top:28px;padding-bottom:48px;margin-bottom:48px;border-bottom:1px solid var(--line)}\n.ts-section:last-child{border:0;margin:0;padding:0}\n.ts-kicker{display:inline-block;margin-bottom:13px;color:#a59dff;font-size:11px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}\n.ts-doc h2{margin:0 0 14px;font-size:clamp(30px,3vw,46px);line-height:1.06;letter-spacing:-.044em}\n.ts-doc h3{margin:29px 0 12px;font-size:21px}\n.ts-doc h4{margin:0 0 8px;font-size:16px}\n.ts-doc p,.ts-doc li{color:#aab4c2;font-size:15px;line-height:1.72}\n.ts-doc p{margin:0 0 16px}\n.ts-cards,.ts-two-col,.ts-checks,.ts-next{display:grid;gap:12px;margin-top:20px;grid-template-columns:repeat(2,1fr)}\n.ts-card,.ts-check,.ts-next a,.ts-phase,.ts-signal{padding:18px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.021)}\n.ts-card small,.ts-next small,.ts-phase small,.ts-signal small{display:block;margin-bottom:10px;color:#7b8695;font-size:10px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}\n.ts-card p,.ts-phase p,.ts-signal p{margin:0;font-size:13px;line-height:1.55}\n.ts-flow{display:grid;grid-template-columns:repeat(5,1fr);gap:9px;margin-top:20px}\n.ts-node{position:relative;padding:16px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.02);text-align:center}\n.ts-node small{display:block;color:#788392;font-size:10px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}\n.ts-node strong{display:block;margin-top:7px}\n.ts-flow .ts-node:not(:last-child):after{content:\"\u2192\";position:absolute;right:-12px;top:50%;transform:translateY(-50%);color:#737d8b}\n.ts-table{overflow:auto;margin-top:18px;border:1px solid var(--line);border-radius:15px;background:rgba(255,255,255,.016)}\n#troubleshooting-guide.ts-root table{width:100%;min-width:820px;border-collapse:collapse}\n#troubleshooting-guide.ts-root th,#troubleshooting-guide.ts-root td{padding:14px 15px;text-align:left;vertical-align:top;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}\n#troubleshooting-guide.ts-root th:last-child,#troubleshooting-guide.ts-root td:last-child{border-right:0}\n#troubleshooting-guide.ts-root tr:last-child td{border-bottom:0}\n#troubleshooting-guide.ts-root th{color:#8e99a8;background:rgba(255,255,255,.022);font-size:10px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}\n#troubleshooting-guide.ts-root td{color:#adb7c5;font-size:13px;line-height:1.5}\n#troubleshooting-guide.ts-root td:first-child{color:#eef2f7;font-weight:700}\n.ts-codebox{margin-top:18px;overflow:auto;border:1px solid var(--line);border-radius:15px;background:#080c12}\n.ts-codehead{display:flex;justify-content:space-between;gap:18px;padding:11px 14px;border-bottom:1px solid var(--line);color:#7c8796;font-size:11px}\n.ts-codebox pre{margin:0;padding:18px;min-width:720px;color:#d7deea;font:13px\/1.66 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}\n.ts-k{color:#c792ea}.ts-s{color:#c3e88d}.ts-n{color:#f78c6c}.ts-o{color:#89ddff}.ts-c{color:#718096}\n.ts-callout{margin:22px 0;padding:18px 20px;border:1px solid rgba(98,216,232,.17);border-radius:14px;background:rgba(98,216,232,.045)}\n.ts-callout strong{display:block;margin-bottom:5px;font-size:14px}\n.ts-callout p{margin:0;font-size:14px}\n.ts-callout.warning{border-color:rgba(244,204,120,.2);background:rgba(244,204,120,.045)}\n.ts-callout.danger{border-color:rgba(255,145,161,.18);background:rgba(255,145,161,.045)}\n.ts-callout.success{border-color:rgba(112,227,178,.18);background:rgba(112,227,178,.045)}\n.ts-check{display:flex;gap:11px;color:#aab4c1;font-size:14px;line-height:1.5}\n.ts-check b{color:var(--green)}\n.ts-status{display:inline-flex;align-items:center;gap:7px;padding:5px 9px;border-radius:999px;font-size:11px;font-weight:800}\n.ts-status:before{content:\"\";width:6px;height:6px;border-radius:50%}\n.ts-status.bad{background:rgba(255,145,161,.1);color:#ffc3cc}.ts-status.bad:before{background:var(--red)}\n.ts-status.warn{background:rgba(244,204,120,.1);color:#ffe3a8}.ts-status.warn:before{background:var(--amber)}\n.ts-status.good{background:rgba(112,227,178,.1);color:#c1f3dc}.ts-status.good:before{background:var(--green)}\n.ts-decision{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin-top:20px}\n.ts-signal strong{display:block;margin-bottom:7px}\n.ts-signal ul{margin:10px 0 0;padding-left:18px}\n.ts-signal li{font-size:13px;line-height:1.55}\n.ts-runbook{display:grid;gap:10px;margin-top:20px;counter-reset:steps}\n.ts-runstep{position:relative;padding:18px 18px 18px 62px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.019)}\n.ts-runstep:before{counter-increment:steps;content:counter(steps,decimal-leading-zero);position:absolute;left:18px;top:18px;display:grid;place-items:center;width:30px;height:30px;border-radius:9px;background:rgba(140,124,255,.12);color:#c9c2ff;font-size:11px;font-weight:900}\n.ts-runstep strong{display:block;margin-bottom:5px}\n.ts-runstep p{margin:0;font-size:13px}\n.ts-toc h3{margin:0 0 15px;font-size:13px}\n.ts-toc a{display:block;padding:7px 0;color:#87919f;font-size:12px}\n.ts-toc a:hover{color:#fff}\n.ts-next a{min-height:128px;transition:.2s}\n.ts-next a:hover{transform:translateY(-3px);border-color:rgba(140,124,255,.28);background:rgba(140,124,255,.045)}\n.ts-next strong{display:block;margin-bottom:7px}\n.ts-next span{color:#96a1af;font-size:13px;line-height:1.5}\n@media(max-width:1220px){.ts-hero{grid-template-columns:1fr}.ts-shell{grid-template-columns:225px minmax(0,1fr)}.ts-toc{display:none}.ts-flow{grid-template-columns:repeat(3,1fr)}}\n@media(max-width:860px){.ts-wrap{width:min(calc(100% - 30px),var(--max));padding:76px 0 90px}.ts-shell{grid-template-columns:1fr}.ts-sidebar{position:relative;top:auto;overflow:auto}.ts-side-scroll{display:flex;gap:8px;min-width:max-content}.ts-navgroup,.ts-navgroup+.ts-navgroup{display:contents}.ts-navlabel{display:none}.ts-navitem{border:1px solid var(--line)}.ts-doc{padding:24px}.ts-decision{grid-template-columns:1fr}}\n@media(max-width:680px){.ts-hero h1{font-size:clamp(48px,15vw,72px)}.ts-cards,.ts-two-col,.ts-checks,.ts-next,.ts-meta-grid,.ts-flow{grid-template-columns:1fr}.ts-flow .ts-node:not(:last-child):after{content:\"\u2193\";right:50%;top:auto;bottom:-15px}}\n\n\/* HARD RESET \/ FULL-BLEED ELEMENTOR OVERRIDES *\/\nbody .elementor-widget-html:has(.ts-root),\nbody .elementor-widget-html:has(.ts-root) > .elementor-widget-container,\nbody .e-con:has(> .elementor-widget-html .ts-root),\nbody .e-con-inner:has(> .elementor-widget-html .ts-root){\n  width:100% !important;\n  max-width:none !important;\n  min-width:0 !important;\n  flex:0 0 100% !important;\n  align-self:stretch !important;\n  overflow:visible !important;\n  margin-left:0 !important;\n  margin-right:0 !important;\n  padding-left:0 !important;\n  padding-right:0 !important;\n  transform:none !important;\n}\n\nhtml,\nbody{\n  overflow-x:clip;\n}\n\n#troubleshooting-guide.ts-root{\n  left:auto;\n  width:100vw;\n  max-width:100vw;\n  margin-left:calc(50% - 50vw);\n  margin-right:calc(50% - 50vw);\n  isolation:isolate;\n}\n\n#troubleshooting-guide.ts-root .ts-wrap{\n  width:min(calc(100vw - 48px),var(--max));\n  max-width:var(--max);\n  min-width:0;\n}\n\n#troubleshooting-guide.ts-root .ts-hero,\n#troubleshooting-guide.ts-root .ts-shell,\n#troubleshooting-guide.ts-root .ts-meta-grid,\n#troubleshooting-guide.ts-root .ts-cards,\n#troubleshooting-guide.ts-root .ts-two-col,\n#troubleshooting-guide.ts-root .ts-checks,\n#troubleshooting-guide.ts-root .ts-next,\n#troubleshooting-guide.ts-root .ts-flow,\n#troubleshooting-guide.ts-root .ts-decision{\n  min-width:0;\n}\n\n#troubleshooting-guide.ts-root .ts-hero > *,\n#troubleshooting-guide.ts-root .ts-shell > *,\n#troubleshooting-guide.ts-root .ts-meta-grid > *,\n#troubleshooting-guide.ts-root .ts-cards > *,\n#troubleshooting-guide.ts-root .ts-two-col > *,\n#troubleshooting-guide.ts-root .ts-checks > *,\n#troubleshooting-guide.ts-root .ts-next > *,\n#troubleshooting-guide.ts-root .ts-flow > *,\n#troubleshooting-guide.ts-root .ts-decision > *{\n  min-width:0;\n}\n\n#troubleshooting-guide.ts-root .ts-codebox,\n#troubleshooting-guide.ts-root .ts-table{\n  -webkit-overflow-scrolling:touch;\n}\n\n@media(max-width:860px){\n  #troubleshooting-guide.ts-root .ts-wrap{\n    width:min(calc(100vw - 30px),var(--max));\n  }\n}\n\n@media(max-width:680px){\n  #troubleshooting-guide.ts-root .ts-wrap{\n    width:min(calc(100vw - 28px),var(--max));\n  }\n\n  #troubleshooting-guide.ts-root .ts-doc{\n    padding:20px;\n  }\n}\n<\/style>\n<\/head>\n<body>\n<section id=\"troubleshooting-guide\" class=\"ts-root\">\n<div class=\"ts-wrap\">\n<div class=\"ts-topbar\">\n<a class=\"ts-brand\" href=\"#documentation-showcase\">\n<div class=\"ts-logo\">N<\/div>\n<div><strong>NovaFlow Developer Platform<\/strong><span>ScriptWise documentation portfolio<\/span><\/div>\n<\/a>\n<div class=\"ts-version\"><i><\/i> Operations guide \u00b7 Enterprise<\/div>\n<\/div>\n<div class=\"ts-hero\">\n<div>\n<div class=\"ts-eyebrow\">Troubleshooting \u00b7 Production Operations<\/div>\n<h1>Diagnose failures with <span>evidence, not guesswork.<\/span><\/h1>\n<p>Use this guide to isolate failed requests, delayed workflow runs, webhook delivery issues, integration errors, and configuration problems across the NovaFlow platform.<\/p>\n<\/div>\n<aside class=\"ts-hero-card\">\n<small>Before you escalate<\/small>\n<h3>Collect one complete diagnostic package<\/h3>\n<p>Capture the request ID, correlation ID, workspace, environment, timestamp, current status, error payload, and the last successful step.<\/p>\n<div class=\"ts-meta-grid\">\n<div class=\"ts-meta\"><b>6<\/b><span>failure domains<\/span><\/div>\n<div class=\"ts-meta\"><b>4<\/b><span>core identifiers<\/span><\/div>\n<div class=\"ts-meta\"><b>1<\/b><span>repeatable workflow<\/span><\/div>\n<\/div>\n<\/aside>\n<\/div>\n<div class=\"ts-shell\">\n<aside class=\"ts-sidebar\">\n<div class=\"ts-side-title\"><strong>NovaFlow Docs<\/strong><span>Documentation portal<\/span><\/div>\n<div class=\"ts-side-scroll\">\n<div class=\"ts-navgroup\">\n<span class=\"ts-navlabel\">Overview<\/span>\n<a class=\"ts-navitem\" href=\"#documentation-showcase\"><span class=\"ts-navdot\"><\/span>Documentation home<\/a>\n<\/div>\n<div class=\"ts-navgroup\">\n<span class=\"ts-navlabel\">Get started<\/span>\n<a class=\"ts-navitem\" href=\"#getting-started\"><span class=\"ts-navdot\"><\/span>Getting Started<\/a>\n<a class=\"ts-navitem\" href=\"#onboarding-documentation\"><span class=\"ts-navdot\"><\/span>Onboarding<\/a>\n<\/div>\n<div class=\"ts-navgroup\">\n<span class=\"ts-navlabel\">Product<\/span>\n<a class=\"ts-navitem\" href=\"#feature-documentation\"><span class=\"ts-navdot\"><\/span>Feature Documentation<\/a>\n<a class=\"ts-navitem\" href=\"#administrator-manual\"><span class=\"ts-navdot\"><\/span>Administrator Manual<\/a>\n<\/div>\n<div class=\"ts-navgroup\">\n<span class=\"ts-navlabel\">Developers<\/span>\n<a class=\"ts-navitem\" href=\"#api-quickstart\"><span class=\"ts-navdot\"><\/span>API Quickstart<\/a>\n<a class=\"ts-navitem\" href=\"#api-reference\"><span class=\"ts-navdot\"><\/span>API Reference<\/a>\n<a class=\"ts-navitem\" href=\"#integration-guide\"><span class=\"ts-navdot\"><\/span>Integration Guide<\/a>\n<\/div>\n<div class=\"ts-navgroup\">\n<span class=\"ts-navlabel\">Operations<\/span>\n<a aria-current=\"page\" class=\"ts-navitem ts-active\" href=\"#troubleshooting-guide\"><span class=\"ts-navdot\"><\/span>Troubleshooting<\/a>\n<a class=\"ts-navitem\" href=\"#release-notes\"><span class=\"ts-navdot\"><\/span>Release Notes<\/a>\n<a class=\"ts-navitem\" href=\"#migration-guide\"><span class=\"ts-navdot\"><\/span>Migration Guide<\/a>\n<\/div>\n<\/div>\n<\/aside>\n<main class=\"ts-doc\">\n<section class=\"ts-section\" id=\"ts-overview\">\n<span class=\"ts-kicker\">Diagnostic method<\/span>\n<h2>Start with the transaction, not the symptom<\/h2>\n<p>A visible symptom may appear far from the original failure. A missing Slack notification can begin with invalid CRM data. A timed-out API call can still create a successful workflow run. A duplicated ERP record can result from retrying without an idempotency key.<\/p>\n<p>Troubleshoot one business transaction end to end. Identify where the transaction entered NovaFlow, how it was validated, which workflow state it reached, and whether downstream side effects completed.<\/p>\n<div class=\"ts-flow\">\n<div class=\"ts-node\"><small>01<\/small><strong>Identify<\/strong><\/div>\n<div class=\"ts-node\"><small>02<\/small><strong>Locate<\/strong><\/div>\n<div class=\"ts-node\"><small>03<\/small><strong>Classify<\/strong><\/div>\n<div class=\"ts-node\"><small>04<\/small><strong>Recover<\/strong><\/div>\n<div class=\"ts-node\"><small>05<\/small><strong>Verify<\/strong><\/div>\n<\/div>\n<div class=\"ts-callout\">\n<strong>Use the same correlation ID everywhere<\/strong>\n<p>The business correlation ID should connect source-system logs, the NovaFlow run, webhook events, downstream records, monitoring traces, and the support case.<\/p>\n<\/div>\n<\/section>\n<section class=\"ts-section\" id=\"ts-evidence\">\n<span class=\"ts-kicker\">Evidence collection<\/span>\n<h2>Build the diagnostic package first<\/h2>\n<p>Collect the following information before retrying, editing configuration, or escalating. This preserves the original evidence and reduces repeated questions between engineering, operations, and support.<\/p>\n<div class=\"ts-checks\">\n<div class=\"ts-check\"><b>\u2713<\/b><span><strong>Request ID<\/strong> from the NovaFlow response headers or error payload.<\/span><\/div>\n<div class=\"ts-check\"><b>\u2713<\/b><span><strong>Correlation ID<\/strong> from the source business transaction.<\/span><\/div>\n<div class=\"ts-check\"><b>\u2713<\/b><span><strong>Workspace and environment<\/strong>, including region when applicable.<\/span><\/div>\n<div class=\"ts-check\"><b>\u2713<\/b><span><strong>UTC timestamp<\/strong> and the approximate duration of the issue.<\/span><\/div>\n<div class=\"ts-check\"><b>\u2713<\/b><span><strong>Endpoint, workflow, or connector<\/strong> involved in the transaction.<\/span><\/div>\n<div class=\"ts-check\"><b>\u2713<\/b><span><strong>HTTP ts-status and error code<\/strong>, with secrets and personal data removed.<\/span><\/div>\n<div class=\"ts-check\"><b>\u2713<\/b><span><strong>Expected result<\/strong> and the actual observed result.<\/span><\/div>\n<div class=\"ts-check\"><b>\u2713<\/b><span><strong>Last known successful step<\/strong> in the transaction lifecycle.<\/span><\/div>\n<\/div>\n<div class=\"ts-codebox\">\n<div class=\"ts-codehead\"><span>diagnostic-package.json<\/span><span>JSON<\/span><\/div>\n<pre><code>{\n  <span class=\"ts-k\">\"workspace_id\"<\/span>: <span class=\"ts-s\">\"ws_prod_eu_01\"<\/span>,\n  <span class=\"ts-k\">\"environment\"<\/span>: <span class=\"ts-s\">\"production\"<\/span>,\n  <span class=\"ts-k\">\"request_id\"<\/span>: <span class=\"ts-s\">\"req_01JZ91D8R7X4\"<\/span>,\n  <span class=\"ts-k\">\"correlation_id\"<\/span>: <span class=\"ts-s\">\"PR-2026-1048\"<\/span>,\n  <span class=\"ts-k\">\"workflow_id\"<\/span>: <span class=\"ts-s\">\"wf_purchase_approval\"<\/span>,\n  <span class=\"ts-k\">\"run_id\"<\/span>: <span class=\"ts-s\">\"run_01JZ91F2H6M3\"<\/span>,\n  <span class=\"ts-k\">\"observed_at\"<\/span>: <span class=\"ts-s\">\"2026-07-23T11:42:18Z\"<\/span>,\n  <span class=\"ts-k\">\"ts-status\"<\/span>: <span class=\"ts-s\">\"waiting_for_connector\"<\/span>,\n  <span class=\"ts-k\">\"last_successful_step\"<\/span>: <span class=\"ts-s\">\"manager_approval\"<\/span>\n}<\/code><\/pre>\n<\/div>\n<\/section>\n<section class=\"ts-section\" id=\"ts-triage\">\n<span class=\"ts-kicker\">Triage<\/span>\n<h2>Classify the failure before choosing an action<\/h2>\n<div class=\"ts-decision\">\n<article class=\"ts-signal\">\n<small>Domain 01<\/small>\n<strong>Request and authentication<\/strong>\n<p>The API rejects the request before a workflow run starts.<\/p>\n<ul><li>401 or 403 response<\/li><li>Invalid token or missing scope<\/li><li>Wrong workspace or environment<\/li><\/ul>\n<\/article>\n<article class=\"ts-signal\">\n<small>Domain 02<\/small>\n<strong>Validation and mapping<\/strong>\n<p>The request reaches NovaFlow but violates the data contract.<\/p>\n<ul><li>400 or 422 response<\/li><li>Missing required field<\/li><li>Type, timezone, or currency mismatch<\/li><\/ul>\n<\/article>\n<article class=\"ts-signal\">\n<small>Domain 03<\/small>\n<strong>Workflow execution<\/strong>\n<p>The run starts but remains blocked, delayed, or failed.<\/p>\n<ul><li>Long-running step<\/li><li>Missing approval<\/li><li>Expression or configuration error<\/li><\/ul>\n<\/article>\n<article class=\"ts-signal\">\n<small>Domain 04<\/small>\n<strong>Connector and downstream system<\/strong>\n<p>NovaFlow completes an internal step but cannot deliver the side effect.<\/p>\n<ul><li>ERP or CRM unavailable<\/li><li>Expired connector credential<\/li><li>Rate limit or schema drift<\/li><\/ul>\n<\/article>\n<article class=\"ts-signal\">\n<small>Domain 05<\/small>\n<strong>Webhook delivery<\/strong>\n<p>The event exists, but the consumer does not accept or process it.<\/p>\n<ul><li>Non-2xx endpoint response<\/li><li>Signature mismatch<\/li><li>Duplicate or delayed event<\/li><\/ul>\n<\/article>\n<article class=\"ts-signal\">\n<small>Domain 06<\/small>\n<strong>Platform or regional service<\/strong>\n<p>Multiple unrelated transactions fail in the same period.<\/p>\n<ul><li>Broad increase in 5xx errors<\/li><li>Cross-workflow latency spike<\/li><li>Regional ts-status degradation<\/li><\/ul>\n<\/article>\n<\/div>\n<\/section>\n<section class=\"ts-section\" id=\"ts-http\">\n<span class=\"ts-kicker\">API failures<\/span>\n<h2>Interpret the response before retrying<\/h2>\n<div class=\"ts-table\">\n<table>\n<thead><tr><th>Response<\/th><th>Meaning<\/th><th>Check<\/th><th>Recommended action<\/th><\/tr><\/thead>\n<tbody>\n<tr><td><span class=\"ts-status ts-warn\">400 Bad Request<\/span><\/td><td>The payload or request syntax is invalid.<\/td><td>JSON structure, headers, field names, encoding.<\/td><td>Correct the request. Do not retry unchanged.<\/td><\/tr>\n<tr><td><span class=\"ts-status ts-warn\">401 Unauthorized<\/span><\/td><td>The credential is missing, invalid, or expired.<\/td><td>Bearer token, environment, secret rotation.<\/td><td>Replace the credential, then send a new request.<\/td><\/tr>\n<tr><td><span class=\"ts-status ts-warn\">403 Forbidden<\/span><\/td><td>The credential is valid but lacks required access.<\/td><td>Workspace, role, API scope, resource ownership.<\/td><td>Grant the minimum required scope.<\/td><\/tr>\n<tr><td><span class=\"ts-status ts-warn\">409 Conflict<\/span><\/td><td>The requested change conflicts with current state.<\/td><td>Resource version, run status, duplicate operation.<\/td><td>Read the current state before deciding whether to retry.<\/td><\/tr>\n<tr><td><span class=\"ts-status ts-warn\">422 Validation Error<\/span><\/td><td>The payload is syntactically valid but violates the contract.<\/td><td>Required fields, enums, formats, business rules.<\/td><td>Correct the source data or mapping.<\/td><\/tr>\n<tr><td><span class=\"ts-status ts-bad\">429 Rate Limited<\/span><\/td><td>The client exceeded an allowed request rate.<\/td><td><code>Retry-After<\/code>, concurrency, burst volume.<\/td><td>Back off with jitter and reduce concurrency.<\/td><\/tr>\n<tr><td><span class=\"ts-status ts-bad\">502 \/ 503 \/ 504<\/span><\/td><td>A service or dependency is temporarily unavailable.<\/td><td>Request ID, ts-status page, retry history.<\/td><td>Retry a bounded number of times using the same idempotency key.<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3>Inspect the error object<\/h3>\n<div class=\"ts-codebox\">\n<div class=\"ts-codehead\"><span>validation-error.json<\/span><span>HTTP 422<\/span><\/div>\n<pre><code>{\n  <span class=\"ts-k\">\"error\"<\/span>: {\n    <span class=\"ts-k\">\"code\"<\/span>: <span class=\"ts-s\">\"invalid_field_value\"<\/span>,\n    <span class=\"ts-k\">\"message\"<\/span>: <span class=\"ts-s\">\"purchase.currency must be a supported ISO 4217 code\"<\/span>,\n    <span class=\"ts-k\">\"field\"<\/span>: <span class=\"ts-s\">\"input.purchase.currency\"<\/span>,\n    <span class=\"ts-k\">\"request_id\"<\/span>: <span class=\"ts-s\">\"req_01JZ91D8R7X4\"<\/span>,\n    <span class=\"ts-k\">\"documentation_url\"<\/span>: <span class=\"ts-s\">\"\/api-reference\/errors#invalid-field-value\"<\/span>\n  }\n}<\/code><\/pre>\n<\/div>\n<div class=\"ts-callout ts-warning\">\n<strong>Do not turn a permanent error into a retry storm<\/strong>\n<p>Authentication, authorization, validation, and mapping failures require correction. Automated retries are appropriate only for explicitly transient conditions.<\/p>\n<\/div>\n<\/section>\n<section class=\"ts-section\" id=\"ts-runs\">\n<span class=\"ts-kicker\">Workflow execution<\/span>\n<h2>Diagnose a delayed or failed run<\/h2>\n<p>A workflow can remain ts-active while waiting for a human decision, scheduled time, connector response, queue capacity, or retry window. Confirm the current state before treating a long-running execution as a failure.<\/p>\n<div class=\"ts-table\">\n<table>\n<thead><tr><th>Run status<\/th><th>Interpretation<\/th><th>First check<\/th><th>Recovery path<\/th><\/tr><\/thead>\n<tbody>\n<tr><td>queued<\/td><td>The run is accepted but has not started.<\/td><td>Queue age and workspace concurrency.<\/td><td>Wait within the expected window; investigate sustained backlog.<\/td><\/tr>\n<tr><td>running<\/td><td>At least one step is actively executing.<\/td><td>Current step and elapsed time.<\/td><td>Compare with the step timeout and dependency latency.<\/td><\/tr>\n<tr><td>waiting_for_approval<\/td><td>The run requires a human decision.<\/td><td>Assigned approver and due date.<\/td><td>Reassign or remind according to policy.<\/td><\/tr>\n<tr><td>waiting_for_connector<\/td><td>A downstream dependency has not completed.<\/td><td>Connector health, credential, and retry count.<\/td><td>Restore the dependency, then retry or replay safely.<\/td><\/tr>\n<tr><td>failed<\/td><td>A terminal error stopped execution.<\/td><td>Failed step, error code, preserved outputs.<\/td><td>Correct the cause and resume or create a controlled replay.<\/td><\/tr>\n<tr><td>completed_with_warnings<\/td><td>The main outcome completed but a noncritical action failed.<\/td><td>Warning list and downstream side effect.<\/td><td>Recover the failed side effect without rerunning completed work.<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3>Retrieve the current run state<\/h3>\n<div class=\"ts-codebox\">\n<div class=\"ts-codehead\"><span>GET \/v1\/runs\/{run_id}<\/span><span>cURL<\/span><\/div>\n<pre><code>curl <span class=\"ts-o\">--request<\/span> GET \\\n  <span class=\"ts-s\">\"https:\/\/api.novaflow.dev\/v1\/runs\/run_01JZ91F2H6M3\"<\/span> \\\n  <span class=\"ts-o\">--header<\/span> <span class=\"ts-s\">\"Authorization: Bearer $NOVAFLOW_API_KEY\"<\/span> \\\n  <span class=\"ts-o\">--header<\/span> <span class=\"ts-s\">\"NovaFlow-Workspace: $WORKSPACE_ID\"<\/span><\/code><\/pre>\n<\/div>\n<div class=\"ts-callout ts-success\">\n<strong>Recover the smallest failed unit<\/strong>\n<p>If the approval and ERP write already succeeded, retrying the entire workflow may create duplicates. Prefer step-level recovery, event replay, or a compensating action when supported.<\/p>\n<\/div>\n<\/section>\n<section class=\"ts-section\" id=\"ts-webhooks\">\n<span class=\"ts-kicker\">Webhook delivery<\/span>\n<h2>Separate delivery failure from processing failure<\/h2>\n<p>NovaFlow considers a webhook delivered when the endpoint returns a successful response within the configured timeout. Your endpoint should durably accept the event before starting slow business processing.<\/p>\n<div class=\"ts-cards\">\n<article class=\"ts-card\"><small>Symptom<\/small><h4>No event received<\/h4><p>Confirm the endpoint URL, subscribed event type, environment, and delivery log.<\/p><\/article>\n<article class=\"ts-card\"><small>Symptom<\/small><h4>Repeated deliveries<\/h4><p>Persist the event ID and make downstream side effects idempotent.<\/p><\/article>\n<article class=\"ts-card\"><small>Symptom<\/small><h4>Signature mismatch<\/h4><p>Verify against the unmodified raw body, correct timestamp, and ts-active secret.<\/p><\/article>\n<article class=\"ts-card\"><small>Symptom<\/small><h4>Delivery succeeds, action missing<\/h4><p>Trace the event through the consumer queue and downstream transaction logs.<\/p><\/article>\n<\/div>\n<div class=\"ts-runbook\">\n<div class=\"ts-runstep\"><strong>Locate the event<\/strong><p>Search by event ID, run ID, or correlation ID in the NovaFlow delivery history.<\/p><\/div>\n<div class=\"ts-runstep\"><strong>Inspect the attempt<\/strong><p>Review response code, duration, destination, retry count, and the final delivery state.<\/p><\/div>\n<div class=\"ts-runstep\"><strong>Validate the signature path<\/strong><p>Use the raw request body and compare the configured secret with the endpoint environment.<\/p><\/div>\n<div class=\"ts-runstep\"><strong>Confirm durable acceptance<\/strong><p>Return 2xx only after the event has been stored or placed on a durable internal queue.<\/p><\/div>\n<div class=\"ts-runstep\"><strong>Replay once<\/strong><p>After correction, replay the event and verify that deduplication prevents duplicate effects.<\/p><\/div>\n<\/div>\n<\/section>\n<section class=\"ts-section\" id=\"ts-connectors\">\n<span class=\"ts-kicker\">Connectors and downstream systems<\/span>\n<h2>Check ownership at the integration boundary<\/h2>\n<p>A connector error does not always originate in NovaFlow. Determine whether the failure belongs to credentials, connectivity, destination availability, destination permissions, rate limits, or a changed external schema.<\/p>\n<div class=\"ts-table\">\n<table>\n<thead><tr><th>Signal<\/th><th>Likely cause<\/th><th>Evidence<\/th><th>Owner<\/th><\/tr><\/thead>\n<tbody>\n<tr><td>Credential rejected<\/td><td>Expired secret, revoked token, wrong tenant.<\/td><td>Connector authentication log and rotation history.<\/td><td>Integration owner<\/td><\/tr>\n<tr><td>Connection timeout<\/td><td>Network path or downstream outage.<\/td><td>Destination health, DNS, firewall, regional telemetry.<\/td><td>Platform \/ network<\/td><\/tr>\n<tr><td>Permission denied<\/td><td>Destination role no longer allows the operation.<\/td><td>Destination audit log and assigned role.<\/td><td>Destination administrator<\/td><\/tr>\n<tr><td>Payload rejected<\/td><td>Schema drift or unsupported field value.<\/td><td>Destination error payload and contract version.<\/td><td>Application owner<\/td><\/tr>\n<tr><td>Rate limited<\/td><td>Concurrency or request burst exceeds destination limit.<\/td><td>429 response, quota dashboard, retry pattern.<\/td><td>Integration owner<\/td><\/tr>\n<tr><td>Partial write<\/td><td>Destination accepted some operations before failure.<\/td><td>Destination transaction and object IDs.<\/td><td>Joint investigation<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"ts-callout ts-danger\">\n<strong>Never rotate or replace a production credential without an owner<\/strong>\n<p>Credential changes can restore one workflow while breaking another. Confirm scope, environment, overlap window, dependent services, and rollback before rotation.<\/p>\n<\/div>\n<\/section>\n<section class=\"ts-section\" id=\"ts-recovery\">\n<span class=\"ts-kicker\">Recovery<\/span>\n<h2>Choose retry, replay, resume, or compensation<\/h2>\n<div class=\"ts-table\">\n<table>\n<thead><tr><th>Recovery action<\/th><th>Use when<\/th><th>Primary risk<\/th><th>Required control<\/th><\/tr><\/thead>\n<tbody>\n<tr><td>Retry request<\/td><td>The original request failed before any durable result.<\/td><td>Duplicate creation after a client timeout.<\/td><td>Reuse the original idempotency key.<\/td><\/tr>\n<tr><td>Resume run<\/td><td>The run preserved completed steps and supports continuation.<\/td><td>Resuming from an invalid state.<\/td><td>Confirm the corrected dependency and current run state.<\/td><\/tr>\n<tr><td>Replay event<\/td><td>The event exists but downstream delivery or processing failed.<\/td><td>Duplicate side effects.<\/td><td>Deduplicate by event ID and business key.<\/td><\/tr>\n<tr><td>Reprocess dead letter<\/td><td>A queued transaction exhausted automatic attempts.<\/td><td>Reintroducing unresolved ts-bad data.<\/td><td>Approve the cause correction before reprocessing.<\/td><\/tr>\n<tr><td>Compensating action<\/td><td>A completed side effect must be logically reversed.<\/td><td>Incomplete business rollback.<\/td><td>Use an auditable domain-specific compensation procedure.<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"ts-callout\">\n<strong>Verification completes the recovery<\/strong>\n<p>A successful API response is not enough. Verify the expected business state in NovaFlow and every authoritative downstream system.<\/p>\n<\/div>\n<\/section>\n<section class=\"ts-section\" id=\"ts-escalation\">\n<span class=\"ts-kicker\">Escalation<\/span>\n<h2>Escalate with a reproducible case<\/h2>\n<p>Escalate when the issue affects multiple transactions, persists after a documented correction, indicates data loss or unauthorized access, or cannot be explained by the published contract and current system status.<\/p>\n<div class=\"ts-cards\">\n<article class=\"ts-card\"><small>Priority P1<\/small><h4>Critical production impact<\/h4><p>Security exposure, confirmed data loss, or a broad outage blocking a critical business process.<\/p><\/article>\n<article class=\"ts-card\"><small>Priority P2<\/small><h4>Major degraded operation<\/h4><p>Repeated failures affecting multiple users or workflows with no practical workaround.<\/p><\/article>\n<article class=\"ts-card\"><small>Priority P3<\/small><h4>Limited functional issue<\/h4><p>A contained failure with an available workaround and no integrity risk.<\/p><\/article>\n<article class=\"ts-card\"><small>Priority P4<\/small><h4>Question or documentation gap<\/h4><p>Clarification, expected-behavior question, or improvement request without current service impact.<\/p><\/article>\n<\/div>\n<h3>Include these fields in the support case<\/h3>\n<div class=\"ts-checks\">\n<div class=\"ts-check\"><b>\u2713<\/b><span>Business impact, number of affected transactions, and start time.<\/span><\/div>\n<div class=\"ts-check\"><b>\u2713<\/b><span>Workspace, environment, region, workflow ID, and connector name.<\/span><\/div>\n<div class=\"ts-check\"><b>\u2713<\/b><span>Request ID, run ID, event ID, and business correlation ID.<\/span><\/div>\n<div class=\"ts-check\"><b>\u2713<\/b><span>Sanitized request, response, error object, and relevant log extract.<\/span><\/div>\n<div class=\"ts-check\"><b>\u2713<\/b><span>Steps already attempted and the result of each action.<\/span><\/div>\n<div class=\"ts-check\"><b>\u2713<\/b><span>Whether the issue is reproducible in sandbox or staging.<\/span><\/div>\n<\/div>\n<\/section>\n<section class=\"ts-section\" id=\"ts-quick-reference\">\n<span class=\"ts-kicker\">Quick reference<\/span>\n<h2>Operational ts-decision checklist<\/h2>\n<div class=\"ts-runbook\">\n<div class=\"ts-runstep\"><strong>Preserve evidence<\/strong><p>Record identifiers and error data before changing configuration or replaying work.<\/p><\/div>\n<div class=\"ts-runstep\"><strong>Confirm scope<\/strong><p>Determine whether one transaction, one workflow, one workspace, or the wider platform is affected.<\/p><\/div>\n<div class=\"ts-runstep\"><strong>Find the last successful boundary<\/strong><p>Locate the exact point where expected state and observed state diverge.<\/p><\/div>\n<div class=\"ts-runstep\"><strong>Classify permanent versus transient<\/strong><p>Correct permanent contract errors; apply bounded retries only to transient failures.<\/p><\/div>\n<div class=\"ts-runstep\"><strong>Recover safely<\/strong><p>Use idempotency, deduplication, step-level recovery, or compensation as appropriate.<\/p><\/div>\n<div class=\"ts-runstep\"><strong>Verify the business result<\/strong><p>Confirm final state across NovaFlow and every system of record.<\/p><\/div>\n<\/div>\n<\/section>\n<section class=\"ts-section\" id=\"ts-next\">\n<span class=\"ts-kicker\">Continue<\/span>\n<h2>Related NovaFlow documentation<\/h2>\n<div class=\"ts-next\">\n<a href=\"#integration-guide\">\n<small>Previous<\/small>\n<strong>Integration Guide<\/strong>\n<span>Review architecture, data contracts, reliability controls, and production rollout.<\/span>\n<\/a>\n<a href=\"#release-notes\">\n<small>Next<\/small>\n<strong>Release Notes<\/strong>\n<span>Understand product changes, user impact, required action, and compatibility details.<\/span>\n<\/a>\n<\/div>\n<\/section>\n<\/main>\n<aside class=\"ts-toc\">\n<h3>On this page<\/h3>\n<a href=\"#ts-overview\">Diagnostic method<\/a>\n<a href=\"#ts-evidence\">Evidence collection<\/a>\n<a href=\"#ts-triage\">Triage<\/a>\n<a href=\"#ts-http\">API failures<\/a>\n<a href=\"#ts-runs\">Workflow runs<\/a>\n<a href=\"#ts-webhooks\">Webhooks<\/a>\n<a href=\"#ts-connectors\">Connectors<\/a>\n<a href=\"#ts-recovery\">Recovery<\/a>\n<a href=\"#ts-escalation\">Escalation<\/a>\n<a href=\"#ts-quick-reference\">Quick reference<\/a>\n<\/aside>\n<\/div>\n<\/div>\n<\/section>\n<\/body>\n<\/html>\n\n<style>\n\/* FINAL ISOLATION FIX \u2014 unique classes, centered full width *\/\n#troubleshooting-guide.ts-root > .ts-wrap{\n  position:relative!important;\n  left:auto!important;\n  right:auto!important;\n  width:min(calc(100vw - 48px),1580px)!important;\n  max-width:1580px!important;\n  min-width:0!important;\n  margin-left:auto!important;\n  margin-right:auto!important;\n  transform:none!important;\n}\n\nbody .elementor-widget-html:has(#troubleshooting-guide.ts-root),\nbody .elementor-widget-html:has(#troubleshooting-guide.ts-root) > .elementor-widget-container,\nbody .e-con:has(> .elementor-widget-html #troubleshooting-guide.ts-root),\nbody .e-con-inner:has(> .elementor-widget-html #troubleshooting-guide.ts-root){\n  position:static!important;\n  left:auto!important;\n  right:auto!important;\n  width:100%!important;\n  max-width:none!important;\n  min-width:0!important;\n  flex:0 0 100%!important;\n  align-self:stretch!important;\n  margin:0!important;\n  padding:0!important;\n  transform:none!important;\n  overflow:visible!important;\n}\n\n#troubleshooting-guide.ts-root .ts-hero,\n#troubleshooting-guide.ts-root .ts-shell,\n#troubleshooting-guide.ts-root .ts-meta-grid,\n#troubleshooting-guide.ts-root .ts-cards,\n#troubleshooting-guide.ts-root .ts-two-col,\n#troubleshooting-guide.ts-root .ts-checks,\n#troubleshooting-guide.ts-root .ts-next,\n#troubleshooting-guide.ts-root .ts-flow,\n#troubleshooting-guide.ts-root .ts-decision{\n  min-width:0!important;\n}\n\n#troubleshooting-guide.ts-root .ts-hero > *,\n#troubleshooting-guide.ts-root .ts-shell > *,\n#troubleshooting-guide.ts-root .ts-meta-grid > *,\n#troubleshooting-guide.ts-root .ts-cards > *,\n#troubleshooting-guide.ts-root .ts-two-col > *,\n#troubleshooting-guide.ts-root .ts-checks > *,\n#troubleshooting-guide.ts-root .ts-next > *,\n#troubleshooting-guide.ts-root .ts-flow > *,\n#troubleshooting-guide.ts-root .ts-decision > *{\n  min-width:0!important;\n}\n\n@media(max-width:860px){\n  #troubleshooting-guide.ts-root > .ts-wrap{\n    width:calc(100vw - 30px)!important;\n  }\n}\n\n@media(max-width:680px){\n  #troubleshooting-guide.ts-root > .ts-wrap{\n    width:calc(100vw - 28px)!important;\n  }\n\n  #troubleshooting-guide.ts-root .ts-doc{\n    padding:20px!important;\n  }\n}\n<\/style>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7cf9758 e-flex e-con-boxed e-con e-parent\" data-id=\"7cf9758\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-31a970f elementor-widget elementor-widget-html\" data-id=\"31a970f\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"release-notes\" data-widget_type=\"html.default\">\n\t\t\t\t\t\n\n<!DOCTYPE html>\n\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\"\/>\n<meta content=\"width=device-width,initial-scale=1\" name=\"viewport\"\/>\n<title>NovaFlow Release Notes \u2014 ScriptWise Portfolio<\/title>\n<style>\n#release-notes.rn-root{--bg:#06080c;--panel:#0d121b;--line:rgba(255,255,255,.085);--text:#f5f7fb;--muted:#a7b1c0;--soft:#7b8695;--violet:#8c7cff;--cyan:#62d8e8;--green:#70e3b2;--amber:#f4cc78;--red:#ff91a1;--max:1580px}\n#release-notes.rn-root,#release-notes.rn-root *{box-sizing:border-box}\n#release-notes.rn-root{color:var(--text);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif}\n#release-notes.rn-root a{color:inherit;text-decoration:none}\n#release-notes.rn-root code,#release-notes.rn-root pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}\n#release-notes.rn-root{position:relative!important;left:50%!important;right:auto!important;width:100vw!important;max-width:100vw!important;margin-left:-50vw!important;margin-right:0!important;transform:none!important;overflow:hidden;background:radial-gradient(circle at 12% 0%,rgba(140,124,255,.17),transparent 28%),radial-gradient(circle at 90% 9%,rgba(98,216,232,.10),transparent 24%),linear-gradient(180deg,#070a10 0%,#090d14 48%,#070a10 100%);border-block:1px solid rgba(255,255,255,.05)}\n#release-notes:before{content:\"\";position:absolute;inset:0;pointer-events:none;opacity:.27;background:linear-gradient(rgba(255,255,255,.021) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.021) 1px,transparent 1px);background-size:56px 56px}\n.rn-wrap{position:relative;width:min(calc(100% - 48px),var(--max));margin:auto;padding:96px 0 116px}\n.rn-topbar{display:flex;justify-content:space-between;align-items:center;gap:20px;margin-bottom:40px}\n.rn-brand{display:flex;align-items:center;gap:12px}\n.rn-logo{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;font-weight:900;background:linear-gradient(135deg,var(--violet),var(--cyan))}\n.rn-brand strong{display:block;font-size:14px}\n.rn-brand span{display:block;margin-top:2px;color:var(--soft);font-size:11px}\n.rn-version{display:flex;gap:9px;align-items:center;padding:9px 13px;border:1px solid var(--line);border-radius:999px;background:rgba(255,255,255,.025);color:#aeb7c5;font-size:12px}\n.rn-version i{width:7px;height:7px;border-radius:50%;background:var(--green)}\n.rn-hero{display:grid;grid-template-columns:minmax(0,1.08fr) minmax(390px,.92fr);gap:58px;align-items:end;margin-bottom:38px}\n.rn-eyebrow{display:inline-flex;align-items:center;gap:8px;margin-bottom:18px;padding:8px 12px;border:1px solid rgba(140,124,255,.22);border-radius:999px;background:rgba(140,124,255,.07);color:#dfdaff;font-size:11px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}\n.rn-hero h1{margin:0 0 22px;max-width:980px;font-size:clamp(58px,6.4vw,100px);line-height:.94;letter-spacing:-.06em;font-weight:820}\n.rn-hero h1 span{background:linear-gradient(100deg,#fff 7%,#ded8ff 52%,#8aebef);-webkit-background-clip:text;background-clip:text;color:transparent}\n.rn-hero p{margin:0;max-width:860px;color:var(--muted);font-size:clamp(18px,1.45vw,22px);line-height:1.64}\n.rn-hero-card{padding:24px;border:1px solid var(--line);border-radius:22px;background:linear-gradient(180deg,rgba(255,255,255,.035),rgba(255,255,255,.012))}\n.rn-hero-card small{display:block;margin-bottom:12px;color:var(--soft);font-size:10px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}\n.rn-hero-card h3{margin:0 0 8px;font-size:19px}\n.rn-hero-card p{font-size:14px;line-height:1.58}\n.rn-meta-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:18px}\n.rn-meta{padding:14px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.02)}\n.rn-meta b{display:block;font-size:18px}\n.rn-meta span{color:#8792a1;font-size:11px}\n.rn-shell{display:grid;grid-template-columns:260px minmax(0,1fr) 240px;gap:22px;align-items:start}\n.rn-sidebar,.rn-toc{position:sticky;top:22px;padding:20px;border:1px solid var(--line);border-radius:19px;background:rgba(9,13,19,.87);backdrop-filter:blur(18px)}\n.rn-side-title{padding-bottom:16px;margin-bottom:16px;border-bottom:1px solid var(--line)}\n.rn-side-title strong{display:block;font-size:14px}\n.rn-side-title span{color:#7c8796;font-size:11px}\n.rn-navgroup+.rn-navgroup{margin-top:18px}\n.rn-navlabel{display:block;margin-bottom:7px;color:#65707f;font-size:10px;font-weight:800;letter-spacing:.11em;text-transform:uppercase}\n.rn-navitem{display:flex;align-items:center;gap:9px;padding:9px 10px;border-radius:9px;color:#a5afbd;font-size:13px}\n.rn-navitem:hover{color:#fff;background:rgba(255,255,255,.04)}\n.rn-navitem.active{color:#fff;border:1px solid rgba(140,124,255,.16);background:linear-gradient(90deg,rgba(140,124,255,.18),rgba(98,216,232,.045))}\n.rn-navdot{width:7px;height:7px;border-radius:50%;background:#657080}\n.rn-navitem.active .rn-navdot{background:var(--violet)}\n.rn-doc{min-width:0;padding:36px;border:1px solid var(--line);border-radius:28px;background:linear-gradient(180deg,rgba(255,255,255,.019),rgba(255,255,255,.006)),rgba(10,14,21,.83)}\n.rn-section{scroll-margin-top:28px;padding-bottom:48px;margin-bottom:48px;border-bottom:1px solid var(--line)}\n.rn-section:last-child{border:0;margin:0;padding:0}\n.rn-kicker{display:inline-block;margin-bottom:13px;color:#a59dff;font-size:11px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}\n.rn-doc h2{margin:0 0 14px;font-size:clamp(30px,3vw,46px);line-height:1.06;letter-spacing:-.044em}\n.rn-doc h3{margin:29px 0 12px;font-size:21px}\n.rn-doc h4{margin:0 0 8px;font-size:16px}\n.rn-doc p,.rn-doc li{color:#aab4c2;font-size:15px;line-height:1.72}\n.rn-doc p{margin:0 0 16px}\n.rn-cards,.rn-two-col,.rn-checks,.rn-next{display:grid;gap:12px;margin-top:20px;grid-template-columns:repeat(2,1fr)}\n.rn-card,.rn-check,.rn-next a,.rn-phase,.rn-signal{padding:18px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.021)}\n.rn-card small,.rn-next small,.rn-phase small,.rn-signal small{display:block;margin-bottom:10px;color:#7b8695;font-size:10px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}\n.rn-card p,.rn-phase p,.rn-signal p{margin:0;font-size:13px;line-height:1.55}\n.rn-flow{display:grid;grid-template-columns:repeat(5,1fr);gap:9px;margin-top:20px}\n.rn-node{position:relative;padding:16px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.02);text-align:center}\n.rn-node small{display:block;color:#788392;font-size:10px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}\n.rn-node strong{display:block;margin-top:7px}\n.rn-flow .rn-node:not(:last-child):after{content:\"\u2192\";position:absolute;right:-12px;top:50%;transform:translateY(-50%);color:#737d8b}\n.rn-table{overflow:auto;margin-top:18px;border:1px solid var(--line);border-radius:15px;background:rgba(255,255,255,.016)}\n#release-notes.rn-root table{width:100%;min-width:820px;border-collapse:collapse}\n#release-notes.rn-root th,#release-notes.rn-root td{padding:14px 15px;text-align:left;vertical-align:top;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}\n#release-notes.rn-root th:last-child,#release-notes.rn-root td:last-child{border-right:0}\n#release-notes.rn-root tr:last-child td{border-bottom:0}\n#release-notes.rn-root th{color:#8e99a8;background:rgba(255,255,255,.022);font-size:10px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}\n#release-notes.rn-root td{color:#adb7c5;font-size:13px;line-height:1.5}\n#release-notes.rn-root td:first-child{color:#eef2f7;font-weight:700}\n.rn-codebox{margin-top:18px;overflow:auto;border:1px solid var(--line);border-radius:15px;background:#080c12}\n.rn-codehead{display:flex;justify-content:space-between;gap:18px;padding:11px 14px;border-bottom:1px solid var(--line);color:#7c8796;font-size:11px}\n.rn-codebox pre{margin:0;padding:18px;min-width:720px;color:#d7deea;font:13px\/1.66 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}\n.rn-k{color:#c792ea}.rn-s{color:#c3e88d}.rn-n{color:#f78c6c}.rn-o{color:#89ddff}.rn-c{color:#718096}\n.rn-callout{margin:22px 0;padding:18px 20px;border:1px solid rgba(98,216,232,.17);border-radius:14px;background:rgba(98,216,232,.045)}\n.rn-callout strong{display:block;margin-bottom:5px;font-size:14px}\n.rn-callout p{margin:0;font-size:14px}\n.rn-callout.warning{border-color:rgba(244,204,120,.2);background:rgba(244,204,120,.045)}\n.rn-callout.danger{border-color:rgba(255,145,161,.18);background:rgba(255,145,161,.045)}\n.rn-callout.success{border-color:rgba(112,227,178,.18);background:rgba(112,227,178,.045)}\n.rn-check{display:flex;gap:11px;color:#aab4c1;font-size:14px;line-height:1.5}\n.rn-check b{color:var(--green)}\n.rn-status{display:inline-flex;align-items:center;gap:7px;padding:5px 9px;border-radius:999px;font-size:11px;font-weight:800}\n.rn-status:before{content:\"\";width:6px;height:6px;border-radius:50%}\n.rn-status.bad{background:rgba(255,145,161,.1);color:#ffc3cc}.rn-status.bad:before{background:var(--red)}\n.rn-status.warn{background:rgba(244,204,120,.1);color:#ffe3a8}.rn-status.warn:before{background:var(--amber)}\n.rn-status.good{background:rgba(112,227,178,.1);color:#c1f3dc}.rn-status.good:before{background:var(--green)}\n.rn-decision{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin-top:20px}\n.rn-signal strong{display:block;margin-bottom:7px}\n.rn-signal ul{margin:10px 0 0;padding-left:18px}\n.rn-signal li{font-size:13px;line-height:1.55}\n.rn-runbook{display:grid;gap:10px;margin-top:20px;counter-reset:steps}\n.rn-runstep{position:relative;padding:18px 18px 18px 62px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.019)}\n.rn-runstep:before{counter-increment:steps;content:counter(steps,decimal-leading-zero);position:absolute;left:18px;top:18px;display:grid;place-items:center;width:30px;height:30px;border-radius:9px;background:rgba(140,124,255,.12);color:#c9c2ff;font-size:11px;font-weight:900}\n.rn-runstep strong{display:block;margin-bottom:5px}\n.rn-runstep p{margin:0;font-size:13px}\n.rn-toc h3{margin:0 0 15px;font-size:13px}\n.rn-toc a{display:block;padding:7px 0;color:#87919f;font-size:12px}\n.rn-toc a:hover{color:#fff}\n.rn-next a{min-height:128px;transition:.2s}\n.rn-next a:hover{transform:translateY(-3px);border-color:rgba(140,124,255,.28);background:rgba(140,124,255,.045)}\n.rn-next strong{display:block;margin-bottom:7px}\n.rn-next span{color:#96a1af;font-size:13px;line-height:1.5}\n@media(max-width:1220px){.rn-hero{grid-template-columns:1fr}.rn-shell{grid-template-columns:225px minmax(0,1fr)}.rn-toc{display:none}.rn-flow{grid-template-columns:repeat(3,1fr)}}\n@media(max-width:860px){.rn-wrap{width:min(calc(100% - 30px),var(--max));padding:76px 0 90px}.rn-shell{grid-template-columns:1fr}.rn-sidebar{position:relative;top:auto;overflow:auto}.rn-side-scroll{display:flex;gap:8px;min-width:max-content}.rn-navgroup,.rn-navgroup+.rn-navgroup{display:contents}.rn-navlabel{display:none}.rn-navitem{border:1px solid var(--line)}.rn-doc{padding:24px}.rn-decision{grid-template-columns:1fr}}\n@media(max-width:680px){.rn-hero h1{font-size:clamp(48px,15vw,72px)}.rn-cards,.rn-two-col,.rn-checks,.rn-next,.rn-meta-grid,.rn-flow{grid-template-columns:1fr}.rn-flow .rn-node:not(:last-child):after{content:\"\u2193\";right:50%;top:auto;bottom:-15px}}\n\n\/* HARD RESET \/ FULL-BLEED ELEMENTOR OVERRIDES *\/\nbody .elementor-widget-html:has(.rn-root),\nbody .elementor-widget-html:has(.rn-root) > .elementor-widget-container,\nbody .e-con:has(> .elementor-widget-html .rn-root),\nbody .e-con-inner:has(> .elementor-widget-html .rn-root){\n  width:100% !important;\n  max-width:none !important;\n  min-width:0 !important;\n  flex:0 0 100% !important;\n  align-self:stretch !important;\n  overflow:visible !important;\n  margin-left:0 !important;\n  margin-right:0 !important;\n  padding-left:0 !important;\n  padding-right:0 !important;\n  transform:none !important;\n}\n\nhtml,\nbody{\n  overflow-x:clip;\n}\n\n#release-notes.rn-root{\n  left:auto;\n  width:100vw;\n  max-width:100vw;\n  margin-left:calc(50% - 50vw);\n  margin-right:calc(50% - 50vw);\n  isolation:isolate;\n}\n\n#release-notes.rn-root .rn-wrap{\n  width:min(calc(100vw - 48px),var(--max));\n  max-width:var(--max);\n  min-width:0;\n}\n\n#release-notes.rn-root .rn-hero,\n#release-notes.rn-root .rn-shell,\n#release-notes.rn-root .rn-meta-grid,\n#release-notes.rn-root .rn-cards,\n#release-notes.rn-root .rn-two-col,\n#release-notes.rn-root .rn-checks,\n#release-notes.rn-root .rn-next,\n#release-notes.rn-root .rn-flow,\n#release-notes.rn-root .rn-timeline{\n  min-width:0;\n}\n\n#release-notes.rn-root .rn-hero > *,\n#release-notes.rn-root .rn-shell > *,\n#release-notes.rn-root .rn-meta-grid > *,\n#release-notes.rn-root .rn-cards > *,\n#release-notes.rn-root .rn-two-col > *,\n#release-notes.rn-root .rn-checks > *,\n#release-notes.rn-root .rn-next > *,\n#release-notes.rn-root .rn-flow > *,\n#release-notes.rn-root .rn-timeline > *{\n  min-width:0;\n}\n\n#release-notes.rn-root .rn-codebox,\n#release-notes.rn-root .rn-table{\n  -webkit-overflow-scrolling:touch;\n}\n\n@media(max-width:860px){\n  #release-notes.rn-root .rn-wrap{\n    width:min(calc(100vw - 30px),var(--max));\n  }\n}\n\n@media(max-width:680px){\n  #release-notes.rn-root .rn-wrap{\n    width:min(calc(100vw - 28px),var(--max));\n  }\n\n  #release-notes.rn-root .rn-doc{\n    padding:20px;\n  }\n}\n<\/style>\n<\/head>\n<body>\n<section id=\"release-notes\" class=\"rn-root\">\n<div class=\"rn-wrap\">\n<div class=\"rn-topbar\">\n<a class=\"rn-brand\" href=\"#documentation-showcase\">\n<div class=\"rn-logo\">N<\/div>\n<div><strong>NovaFlow Developer Platform<\/strong><span>ScriptWise documentation portfolio<\/span><\/div>\n<\/a>\n<div class=\"rn-version\"><i><\/i> Release intelligence \u00b7 Enterprise<\/div>\n<\/div>\n<div class=\"rn-hero\">\n<div>\n<div class=\"rn-eyebrow\">Release Notes \u00b7 Product Change Communication<\/div>\n<h1>Understand every change, <span>before it reaches production.<\/span><\/h1>\n<p>These release notes explain what changed across the NovaFlow platform, who is affected, whether action is required, and how each update changes product behavior, API compatibility, and operational risk.<\/p>\n<\/div>\n<aside class=\"rn-hero-card\"><small>Current release<\/small><h3>NovaFlow 4.8 \u00b7 July 2026<\/h3><p>A production-focused release introducing replay controls, schema validation improvements, connector observability, and a staged deprecation path for legacy run events.<\/p><div class=\"rn-meta-grid\"><div class=\"rn-meta\"><b>7<\/b><span>product changes<\/span><\/div><div class=\"rn-meta\"><b>2<\/b><span>required actions<\/span><\/div><div class=\"rn-meta\"><b>0<\/b><span>breaking changes<\/span><\/div><\/div><\/aside>\n<\/div>\n<div class=\"rn-shell\">\n<aside class=\"rn-sidebar\">\n<div class=\"rn-side-title\"><strong>NovaFlow Docs<\/strong><span>Documentation portal<\/span><\/div>\n<div class=\"rn-side-scroll\">\n<div class=\"rn-navgroup\">\n<span class=\"rn-navlabel\">Overview<\/span>\n<a class=\"rn-navitem\" href=\"#documentation-showcase\"><span class=\"rn-navdot\"><\/span>Documentation home<\/a>\n<\/div>\n<div class=\"rn-navgroup\">\n<span class=\"rn-navlabel\">Get started<\/span>\n<a class=\"rn-navitem\" href=\"#getting-started\"><span class=\"rn-navdot\"><\/span>Getting Started<\/a>\n<a class=\"rn-navitem\" href=\"#onboarding-documentation\"><span class=\"rn-navdot\"><\/span>Onboarding<\/a>\n<\/div>\n<div class=\"rn-navgroup\">\n<span class=\"rn-navlabel\">Product<\/span>\n<a class=\"rn-navitem\" href=\"#feature-documentation\"><span class=\"rn-navdot\"><\/span>Feature Documentation<\/a>\n<a class=\"rn-navitem\" href=\"#administrator-manual\"><span class=\"rn-navdot\"><\/span>Administrator Manual<\/a>\n<\/div>\n<div class=\"rn-navgroup\">\n<span class=\"rn-navlabel\">Developers<\/span>\n<a class=\"rn-navitem\" href=\"#api-quickstart\"><span class=\"rn-navdot\"><\/span>API Quickstart<\/a>\n<a class=\"rn-navitem\" href=\"#api-reference\"><span class=\"rn-navdot\"><\/span>API Reference<\/a>\n<a class=\"rn-navitem\" href=\"#integration-guide\"><span class=\"rn-navdot\"><\/span>Integration Guide<\/a>\n<\/div>\n<div class=\"rn-navgroup\">\n<span class=\"rn-navlabel\">Operations<\/span>\n<a class=\"rn-navitem\" href=\"#troubleshooting-guide\"><span class=\"rn-navdot\"><\/span>Troubleshooting<\/a>\n<a aria-current=\"page\" class=\"rn-navitem rn-active\" href=\"#release-notes\"><span class=\"rn-navdot\"><\/span>Release Notes<\/a>\n<a class=\"rn-navitem\" href=\"#migration-guide\"><span class=\"rn-navdot\"><\/span>Migration Guide<\/a>\n<\/div>\n<\/div>\n<\/aside>\n<main class=\"rn-doc\"><section class=\"rn-section\" id=\"rn-overview\"><span class=\"rn-kicker\">Release strategy<\/span><h2>Release notes are part of the product contract<\/h2>\n<p>Release notes should help a customer decide what to do next. They are not a changelog dump and not a marketing recap. Each entry should identify the affected audience, explain the behavioral change, state compatibility impact, and make required action explicit.<\/p>\n<p>NovaFlow publishes releases through a structured model that separates product capability, API behavior, operational impact, migration risk, and deprecation timing.<\/p>\n<div class=\"rn-flow\">\n<div class=\"rn-node\"><small>01<\/small><strong>Change<\/strong><\/div>\n<div class=\"rn-node\"><small>02<\/small><strong>Impact<\/strong><\/div>\n<div class=\"rn-node\"><small>03<\/small><strong>Action<\/strong><\/div>\n<div class=\"rn-node\"><small>04<\/small><strong>Validate<\/strong><\/div>\n<div class=\"rn-node\"><small>05<\/small><strong>Adopt<\/strong><\/div>\n<\/div>\n<div class=\"rn-callout\">\n<strong>Release communication principle<\/strong>\n<p>If a customer cannot tell whether a change affects them, the release note is incomplete.<\/p>\n<\/div>\n<\/section><section class=\"rn-section\" id=\"rn-summary\"><span class=\"rn-kicker\">Release summary<\/span><h2>NovaFlow 4.8 \u00b7 July 2026<\/h2>\n<div class=\"rn-cards\">\n<article class=\"rn-card\"><small>Availability<\/small><h4>Production rollout complete<\/h4><p>Released to all production workspaces between July 21 and July 23, 2026.<\/p><\/article>\n<article class=\"rn-card\"><small>Compatibility<\/small><h4>No breaking API changes<\/h4><p>Existing v1 integrations continue to operate without request or response changes.<\/p><\/article>\n<article class=\"rn-card\"><small>Required action<\/small><h4>Review webhook consumers<\/h4><p>Consumers using legacy <code>run.finished<\/code> events should begin migration planning.<\/p><\/article>\n<article class=\"rn-card\"><small>Operational benefit<\/small><h4>Safer recovery controls<\/h4><p>Administrators can replay failed events from the delivery history with full audit traceability.<\/p><\/article>\n<\/div>\n<div class=\"rn-callout rn-success\">\n<strong>Recommended reading order<\/strong>\n<p>Review required actions first, then scan API, workflow, connector, and administrator changes relevant to your environment.<\/p>\n<\/div>\n<\/section><section class=\"rn-section\" id=\"rn-required-actions\"><span class=\"rn-kicker\">Required action<\/span><h2>Complete these rn-checks before the rn-next release window<\/h2>\n<div class=\"rn-checks\">\n<div class=\"rn-check\"><b>\u2713<\/b><span>Inventory webhook consumers using the legacy <code>run.finished<\/code> event.<\/span><\/div>\n<div class=\"rn-check\"><b>\u2713<\/b><span>Confirm consumers can process the replacement <code>run.completed<\/code> and <code>run.failed<\/code> events.<\/span><\/div>\n<div class=\"rn-check\"><b>\u2713<\/b><span>Update operational runbooks to include manual event replay and replay audit history.<\/span><\/div>\n<div class=\"rn-check\"><b>\u2713<\/b><span>Verify monitoring rules distinguish delivery failure from downstream processing failure.<\/span><\/div>\n<\/div>\n<div class=\"rn-table\">\n<table>\n<thead><tr><th>Action<\/th><th>Owner<\/th><th>Deadline<\/th><th>Risk if skipped<\/th><\/tr><\/thead>\n<tbody>\n<tr><td>Assess legacy webhook usage<\/td><td>Integration owner<\/td><td>Before September 15, 2026<\/td><td>Missed events after deprecation removal.<\/td><\/tr>\n<tr><td>Update internal runbook<\/td><td>Operations lead<\/td><td>Before rn-next incident review<\/td><td>Slower and less controlled recovery.<\/td><\/tr>\n<tr><td>Validate replay deduplication<\/td><td>Application owner<\/td><td>Before enabling manual replay in production<\/td><td>Duplicate downstream side effects.<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/section><section class=\"rn-section\" id=\"rn-product\"><span class=\"rn-kicker\">Product changes<\/span><h2>New workflow and administrator capabilities<\/h2>\n<div class=\"rn-cards\">\n<article class=\"rn-card\"><small>New<\/small><h4>Manual event replay<\/h4><p>Administrators can replay failed webhook deliveries directly from delivery history after correcting the destination issue.<\/p><\/article>\n<article class=\"rn-card\"><small>Improved<\/small><h4>Run detail timeline<\/h4><p>The run page now separates workflow execution, connector delivery, retry attempts, and final recovery action.<\/p><\/article>\n<article class=\"rn-card\"><small>Improved<\/small><h4>Schema validation feedback<\/h4><p>Validation errors now include the exact field path, rejected value type, and expected contract rule.<\/p><\/article>\n<article class=\"rn-card\"><small>New<\/small><h4>Connector health state<\/h4><p>Connector rn-cards display current authentication state, last successful call, and recent error rate.<\/p><\/article>\n<\/div>\n<h3>Manual event replay safeguards<\/h3>\n<div class=\"rn-checks\">\n<div class=\"rn-check\"><b>\u2713<\/b><span>Replay is permission-controlled and disabled for read-only roles.<\/span><\/div>\n<div class=\"rn-check\"><b>\u2713<\/b><span>The original event ID remains unchanged for deduplication.<\/span><\/div>\n<div class=\"rn-check\"><b>\u2713<\/b><span>Every replay records actor, timestamp, reason, and resulting delivery state.<\/span><\/div>\n<div class=\"rn-check\"><b>\u2713<\/b><span>Replay is unavailable while an automatic attempt is still active.<\/span><\/div>\n<\/div>\n<\/section><section class=\"rn-section\" id=\"rn-api\"><span class=\"rn-kicker\">API and events<\/span><h2>Compatibility-preserving API improvements<\/h2>\n<div class=\"rn-table\">\n<table>\n<thead><tr><th>Area<\/th><th>Change<\/th><th>Compatibility<\/th><th>Action<\/th><\/tr><\/thead>\n<tbody>\n<tr><td>Run retrieval<\/td><td><code>GET \/v1\/runs\/{run_id}<\/code> now returns <code>recovery_state<\/code>.<\/td><td>Additive<\/td><td>No action unless strict response validation is enabled.<\/td><\/tr>\n<tr><td>Validation errors<\/td><td>Error objects now include <code>field<\/code> and <code>expected<\/code>.<\/td><td>Additive<\/td><td>Update error rendering when useful.<\/td><\/tr>\n<tr><td>Webhook delivery<\/td><td>Delivery attempts include <code>replay_origin<\/code>.<\/td><td>Additive<\/td><td>Use for audit and support context.<\/td><\/tr>\n<tr><td>Event model<\/td><td><code>run.finished<\/code> is deprecated in favor of terminal-state events.<\/td><td>Deprecation<\/td><td>Plan migration before removal.<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3>Updated run response<\/h3>\n<div class=\"rn-codebox\">\n<div class=\"rn-codehead\"><span>GET \/v1\/runs\/run_01JZ91F2H6M3<\/span><span>JSON<\/span><\/div>\n<pre><code>{\n  <span class=\"rn-k\">\"id\"<\/span>: <span class=\"rn-s\">\"run_01JZ91F2H6M3\"<\/span>,\n  <span class=\"rn-k\">\"rn-status\"<\/span>: <span class=\"rn-s\">\"completed_with_warnings\"<\/span>,\n  <span class=\"rn-k\">\"recovery_state\"<\/span>: {\n    <span class=\"rn-k\">\"replay_available\"<\/span>: <span class=\"rn-k\">true<\/span>,\n    <span class=\"rn-k\">\"failed_event_count\"<\/span>: <span class=\"rn-n\">1<\/span>,\n    <span class=\"rn-k\">\"last_recovery_action\"<\/span>: <span class=\"rn-k\">null<\/span>\n  }\n}<\/code><\/pre>\n<\/div>\n<div class=\"rn-callout rn-warning\">\n<strong>Strict schema consumers<\/strong>\n<p>Clients that reject unknown response properties should update their parsers before adopting this release.<\/p>\n<\/div>\n<\/section><section class=\"rn-section\" id=\"rn-deprecations\"><span class=\"rn-kicker\">Deprecations<\/span><h2>Legacy run events enter a staged retirement period<\/h2>\n<p>The generic <code>run.finished<\/code> event remains available in this release but will be removed after the migration window. Use explicit terminal-state events to distinguish successful, failed, and warning-complete outcomes.<\/p>\n<div class=\"rn-table\">\n<table>\n<thead><tr><th>Deprecated item<\/th><th>Replacement<\/th><th>Deprecated<\/th><th>Removal target<\/th><\/tr><\/thead>\n<tbody>\n<tr><td><code>run.finished<\/code><\/td><td><code>run.completed<\/code>, <code>run.failed<\/code>, <code>run.completed_with_warnings<\/code><\/td><td>July 23, 2026<\/td><td>January 31, 2027<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"rn-callout rn-danger\">\n<strong>Do not wait until removal<\/strong>\n<p>Run both old and new event subscriptions in parallel, compare outcomes, and switch production consumers only after successful validation.<\/p>\n<\/div>\n<\/section><section class=\"rn-section\" id=\"rn-fixed\"><span class=\"rn-kicker\">Resolved issues<\/span><h2>Fixes included in NovaFlow 4.8<\/h2>\n<div class=\"rn-table\">\n<table>\n<thead><tr><th>Reference<\/th><th>Issue<\/th><th>Resolution<\/th><th>Affected area<\/th><\/tr><\/thead>\n<tbody>\n<tr><td>NF-4821<\/td><td>Webhook retry history could display attempts out of sequence after manual refresh.<\/td><td>Attempts are now ordered by durable creation timestamp.<\/td><td>Operations UI<\/td><\/tr>\n<tr><td>NF-4873<\/td><td>Connector health could remain degraded after successful credential rotation.<\/td><td>Health state now recalculates after the first successful authenticated request.<\/td><td>Connectors<\/td><\/tr>\n<tr><td>NF-4902<\/td><td>Validation errors for nested arrays omitted the array index.<\/td><td>Field paths now include full indexed notation.<\/td><td>API validation<\/td><\/tr>\n<tr><td>NF-4938<\/td><td>Run rn-timeline timestamps could appear in local browser time without a visible timezone label.<\/td><td>All operational timestamps are now labeled and default to UTC.<\/td><td>Run details<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/section><section class=\"rn-section\" id=\"rn-known-issues\"><span class=\"rn-kicker\">Known limitations<\/span><h2>Known issues and current workarounds<\/h2>\n<div class=\"rn-cards\">\n<article class=\"rn-card\"><small>Known issue<\/small><h4>Large replay payload preview<\/h4><p>Payloads above 500 KB may take several seconds to render in the browser. Download the sanitized payload instead.<\/p><\/article>\n<article class=\"rn-card\"><small>Known issue<\/small><h4>Connector health delay<\/h4><p>Health rn-status may take up to two minutes to reflect a newly restored downstream dependency.<\/p><\/article>\n<\/div>\n<div class=\"rn-callout\">\n<strong>Workarounds are temporary documentation<\/strong>\n<p>Each workaround remains linked to a tracked engineering issue and should be removed when the product behavior is corrected.<\/p>\n<\/div>\n<\/section><section class=\"rn-section\" id=\"rn-rollout\"><span class=\"rn-kicker\">Rollout and validation<\/span><h2>How the release was deployed<\/h2>\n<div class=\"rn-timeline\">\n<article class=\"rn-phase\"><small>Stage 01<\/small><b>Internal<\/b><p>Production-like validation with NovaFlow operational teams.<\/p><\/article>\n<article class=\"rn-phase\"><small>Stage 02<\/small><b>Early access<\/b><p>Selected workspaces validated replay and connector telemetry.<\/p><\/article>\n<article class=\"rn-phase\"><small>Stage 03<\/small><b>Canary<\/b><p>Five percent of production workspaces received the release.<\/p><\/article>\n<article class=\"rn-phase\"><small>Stage 04<\/small><b>General availability<\/b><p>Rollout completed after error and latency rn-checks remained within target.<\/p><\/article>\n<\/div>\n<h3>Post-release validation<\/h3>\n<div class=\"rn-checks\">\n<div class=\"rn-check\"><b>\u2713<\/b><span>API rn-success rate remained above the release SLO.<\/span><\/div>\n<div class=\"rn-check\"><b>\u2713<\/b><span>Webhook retry volume remained within baseline variance.<\/span><\/div>\n<div class=\"rn-check\"><b>\u2713<\/b><span>No increase in duplicate downstream side effects was detected.<\/span><\/div>\n<div class=\"rn-check\"><b>\u2713<\/b><span>Connector authentication failures decreased after health-state improvements.<\/span><\/div>\n<\/div>\n<\/section><section class=\"rn-section\" id=\"rn-communication\"><span class=\"rn-kicker\">Audience guidance<\/span><h2>What each audience should review<\/h2>\n<div class=\"rn-table\">\n<table>\n<thead><tr><th>Audience<\/th><th>Review first<\/th><th>Primary question<\/th><\/tr><\/thead>\n<tbody>\n<tr><td>Administrators<\/td><td>Manual replay, roles, audit history<\/td><td>Who can initiate recovery and how is it governed?<\/td><\/tr>\n<tr><td>Developers<\/td><td>API additions and event deprecation<\/td><td>Will strict clients or webhook consumers require changes?<\/td><\/tr>\n<tr><td>Operations<\/td><td>Connector health and replay runbooks<\/td><td>How does the release change diagnosis and recovery?<\/td><\/tr>\n<tr><td>Product owners<\/td><td>User-visible behavior and migration timeline<\/td><td>What should be communicated to internal users?<\/td><\/tr>\n<tr><td>Support<\/td><td>New identifiers and known limitations<\/td><td>What evidence should be collected during escalation?<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/section><section class=\"rn-section\" id=\"rn-next\"><span class=\"rn-kicker\">Continue<\/span><h2>Related NovaFlow documentation<\/h2>\n<div class=\"rn-next\">\n<a href=\"#troubleshooting-guide\">\n<small>Previous<\/small>\n<strong>Troubleshooting<\/strong>\n<span>Diagnose API, workflow, webhook, connector, and recovery failures.<\/span>\n<\/a>\n<a href=\"#migration-guide\">\n<small>Next<\/small>\n<strong>Migration Guide<\/strong>\n<span>Plan compatibility changes, parallel validation, cutover, and rollback.<\/span>\n<\/a>\n<\/div>\n<\/section><\/main>\n<aside class=\"rn-toc\"><h3>On this page<\/h3><a href=\"#rn-overview\">Release strategy<\/a><a href=\"#rn-summary\">Release summary<\/a><a href=\"#rn-required-actions\">Required actions<\/a><a href=\"#rn-product\">Product changes<\/a><a href=\"#rn-api\">API and events<\/a><a href=\"#rn-deprecations\">Deprecations<\/a><a href=\"#rn-fixed\">Resolved issues<\/a><a href=\"#rn-known-issues\">Known limitations<\/a><a href=\"#rn-rollout\">Rollout<\/a><a href=\"#rn-communication\">Audience guidance<\/a><\/aside>\n<\/div>\n<\/div>\n<\/section>\n<\/body>\n<\/html>\n\n\n<style>\n\/* FINAL ISOLATION FIX \u2014 unique classes, centered full width *\/\n#release-notes.rn-root > .rn-wrap{\n  position:relative!important;\n  left:auto!important;\n  right:auto!important;\n  width:min(calc(100vw - 48px),1580px)!important;\n  max-width:1580px!important;\n  min-width:0!important;\n  margin-left:auto!important;\n  margin-right:auto!important;\n  transform:none!important;\n}\n\nbody .elementor-widget-html:has(#release-notes.rn-root),\nbody .elementor-widget-html:has(#release-notes.rn-root) > .elementor-widget-container,\nbody .e-con:has(> .elementor-widget-html #release-notes.rn-root),\nbody .e-con-inner:has(> .elementor-widget-html #release-notes.rn-root){\n  position:static!important;\n  left:auto!important;\n  right:auto!important;\n  width:100%!important;\n  max-width:none!important;\n  min-width:0!important;\n  flex:0 0 100%!important;\n  align-self:stretch!important;\n  margin:0!important;\n  padding:0!important;\n  transform:none!important;\n  overflow:visible!important;\n}\n\n#release-notes.rn-root .rn-hero,\n#release-notes.rn-root .rn-shell,\n#release-notes.rn-root .rn-meta-grid,\n#release-notes.rn-root .rn-cards,\n#release-notes.rn-root .rn-two-col,\n#release-notes.rn-root .rn-checks,\n#release-notes.rn-root .rn-next,\n#release-notes.rn-root .rn-flow,\n#release-notes.rn-root .rn-timeline{\n  min-width:0!important;\n}\n\n#release-notes.rn-root .rn-hero > *,\n#release-notes.rn-root .rn-shell > *,\n#release-notes.rn-root .rn-meta-grid > *,\n#release-notes.rn-root .rn-cards > *,\n#release-notes.rn-root .rn-two-col > *,\n#release-notes.rn-root .rn-checks > *,\n#release-notes.rn-root .rn-next > *,\n#release-notes.rn-root .rn-flow > *,\n#release-notes.rn-root .rn-timeline > *{\n  min-width:0!important;\n}\n\n@media(max-width:860px){\n  #release-notes.rn-root > .rn-wrap{\n    width:calc(100vw - 30px)!important;\n  }\n}\n\n@media(max-width:680px){\n  #release-notes.rn-root > .rn-wrap{\n    width:calc(100vw - 28px)!important;\n  }\n\n  #release-notes.rn-root .rn-doc{\n    padding:20px!important;\n  }\n}\n<\/style>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-cf26134 e-flex e-con-boxed e-con e-parent\" data-id=\"cf26134\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-01df7a7 elementor-widget elementor-widget-html\" data-id=\"01df7a7\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"migration-guide\" data-widget_type=\"html.default\">\n\t\t\t\t\t\n\n\n<!DOCTYPE html>\n\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\"\/>\n<meta content=\"width=device-width,initial-scale=1\" name=\"viewport\"\/>\n<title>NovaFlow Migration Guide \u2014 ScriptWise Portfolio<\/title>\n<style>\n#migration-guide.mg-root{--bg:#06080c;--panel:#0d121b;--line:rgba(255,255,255,.085);--text:#f5f7fb;--muted:#a7b1c0;--soft:#7b8695;--violet:#8c7cff;--cyan:#62d8e8;--green:#70e3b2;--amber:#f4cc78;--red:#ff91a1;--max:1580px}\n#migration-guide.mg-root,#migration-guide.mg-root *{box-sizing:border-box}\n#migration-guide.mg-root{color:var(--text);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif}\n#migration-guide.mg-root a{color:inherit;text-decoration:none}\n#migration-guide.mg-root code,#migration-guide.mg-root pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}\n#migration-guide.mg-root{position:relative!important;left:50%!important;right:auto!important;width:100vw!important;max-width:100vw!important;margin-left:-50vw!important;margin-right:0!important;transform:none!important;overflow:hidden;background:radial-gradient(circle at 12% 0%,rgba(140,124,255,.17),transparent 28%),radial-gradient(circle at 90% 9%,rgba(98,216,232,.10),transparent 24%),linear-gradient(180deg,#070a10 0%,#090d14 48%,#070a10 100%);border-block:1px solid rgba(255,255,255,.05)}\n#migration-guide:before{content:\"\";position:absolute;inset:0;pointer-events:none;opacity:.27;background:linear-gradient(rgba(255,255,255,.021) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.021) 1px,transparent 1px);background-size:56px 56px}\n.mg-wrap{position:relative;width:min(calc(100% - 48px),var(--max));margin:auto;padding:96px 0 116px}\n.mg-topbar{display:flex;justify-content:space-between;align-items:center;gap:20px;margin-bottom:40px}\n.mg-brand{display:flex;align-items:center;gap:12px}\n.mg-logo{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;font-weight:900;background:linear-gradient(135deg,var(--violet),var(--cyan))}\n.mg-brand strong{display:block;font-size:14px}\n.mg-brand span{display:block;margin-top:2px;color:var(--soft);font-size:11px}\n.mg-version{display:flex;gap:9px;align-items:center;padding:9px 13px;border:1px solid var(--line);border-radius:999px;background:rgba(255,255,255,.025);color:#aeb7c5;font-size:12px}\n.mg-version i{width:7px;height:7px;border-radius:50%;background:var(--green)}\n.mg-hero{display:grid;grid-template-columns:minmax(0,1.08fr) minmax(390px,.92fr);gap:58px;align-items:end;margin-bottom:38px}\n.mg-eyebrow{display:inline-flex;align-items:center;gap:8px;margin-bottom:18px;padding:8px 12px;border:1px solid rgba(140,124,255,.22);border-radius:999px;background:rgba(140,124,255,.07);color:#dfdaff;font-size:11px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}\n.mg-hero h1{margin:0 0 22px;max-width:980px;font-size:clamp(58px,6.4vw,100px);line-height:.94;letter-spacing:-.06em;font-weight:820}\n.mg-hero h1 span{background:linear-gradient(100deg,#fff 7%,#ded8ff 52%,#8aebef);-webkit-background-clip:text;background-clip:text;color:transparent}\n.mg-hero p{margin:0;max-width:860px;color:var(--muted);font-size:clamp(18px,1.45vw,22px);line-height:1.64}\n.mg-hero-card{padding:24px;border:1px solid var(--line);border-radius:22px;background:linear-gradient(180deg,rgba(255,255,255,.035),rgba(255,255,255,.012))}\n.mg-hero-card small{display:block;margin-bottom:12px;color:var(--soft);font-size:10px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}\n.mg-hero-card h3{margin:0 0 8px;font-size:19px}\n.mg-hero-card p{font-size:14px;line-height:1.58}\n.mg-meta-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:18px}\n.mg-meta{padding:14px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.02)}\n.mg-meta b{display:block;font-size:18px}\n.mg-meta span{color:#8792a1;font-size:11px}\n.mg-shell{display:grid;grid-template-columns:260px minmax(0,1fr) 240px;gap:22px;align-items:start}\n.mg-sidebar,.mg-toc{position:sticky;top:22px;padding:20px;border:1px solid var(--line);border-radius:19px;background:rgba(9,13,19,.87);backdrop-filter:blur(18px)}\n.mg-side-title{padding-bottom:16px;margin-bottom:16px;border-bottom:1px solid var(--line)}\n.mg-side-title strong{display:block;font-size:14px}\n.mg-side-title span{color:#7c8796;font-size:11px}\n.mg-navgroup+.mg-navgroup{margin-top:18px}\n.mg-navlabel{display:block;margin-bottom:7px;color:#65707f;font-size:10px;font-weight:800;letter-spacing:.11em;text-transform:uppercase}\n.mg-navitem{display:flex;align-items:center;gap:9px;padding:9px 10px;border-radius:9px;color:#a5afbd;font-size:13px}\n.mg-navitem:hover{color:#fff;background:rgba(255,255,255,.04)}\n.mg-navitem.active{color:#fff;border:1px solid rgba(140,124,255,.16);background:linear-gradient(90deg,rgba(140,124,255,.18),rgba(98,216,232,.045))}\n.mg-navdot{width:7px;height:7px;border-radius:50%;background:#657080}\n.mg-navitem.active .mg-navdot{background:var(--violet)}\n.mg-doc{min-width:0;padding:36px;border:1px solid var(--line);border-radius:28px;background:linear-gradient(180deg,rgba(255,255,255,.019),rgba(255,255,255,.006)),rgba(10,14,21,.83)}\n.mg-section{scroll-margin-top:28px;padding-bottom:48px;margin-bottom:48px;border-bottom:1px solid var(--line)}\n.mg-section:last-child{border:0;margin:0;padding:0}\n.mg-kicker{display:inline-block;margin-bottom:13px;color:#a59dff;font-size:11px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}\n.mg-doc h2{margin:0 0 14px;font-size:clamp(30px,3vw,46px);line-height:1.06;letter-spacing:-.044em}\n.mg-doc h3{margin:29px 0 12px;font-size:21px}\n.mg-doc h4{margin:0 0 8px;font-size:16px}\n.mg-doc p,.mg-doc li{color:#aab4c2;font-size:15px;line-height:1.72}\n.mg-doc p{margin:0 0 16px}\n.mg-cards,.mg-two-col,.mg-checks,.mg-next{display:grid;gap:12px;margin-top:20px;grid-template-columns:repeat(2,1fr)}\n.mg-card,.mg-check,.mg-next a,.mg-phase,.mg-signal{padding:18px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.021)}\n.mg-card small,.mg-next small,.mg-phase small,.mg-signal small{display:block;margin-bottom:10px;color:#7b8695;font-size:10px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}\n.mg-card p,.mg-phase p,.mg-signal p{margin:0;font-size:13px;line-height:1.55}\n.mg-flow{display:grid;grid-template-columns:repeat(5,1fr);gap:9px;margin-top:20px}\n.mg-node{position:relative;padding:16px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.02);text-align:center}\n.mg-node small{display:block;color:#788392;font-size:10px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}\n.mg-node strong{display:block;margin-top:7px}\n.mg-flow .mg-node:not(:last-child):after{content:\"\u2192\";position:absolute;right:-12px;top:50%;transform:translateY(-50%);color:#737d8b}\n.mg-table{overflow:auto;margin-top:18px;border:1px solid var(--line);border-radius:15px;background:rgba(255,255,255,.016)}\n#migration-guide.mg-root table{width:100%;min-width:820px;border-collapse:collapse}\n#migration-guide.mg-root th,#migration-guide.mg-root td{padding:14px 15px;text-align:left;vertical-align:top;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}\n#migration-guide.mg-root th:last-child,#migration-guide.mg-root td:last-child{border-right:0}\n#migration-guide.mg-root tr:last-child td{border-bottom:0}\n#migration-guide.mg-root th{color:#8e99a8;background:rgba(255,255,255,.022);font-size:10px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}\n#migration-guide.mg-root td{color:#adb7c5;font-size:13px;line-height:1.5}\n#migration-guide.mg-root td:first-child{color:#eef2f7;font-weight:700}\n.mg-codebox{margin-top:18px;overflow:auto;border:1px solid var(--line);border-radius:15px;background:#080c12}\n.mg-codehead{display:flex;justify-content:space-between;gap:18px;padding:11px 14px;border-bottom:1px solid var(--line);color:#7c8796;font-size:11px}\n.mg-codebox pre{margin:0;padding:18px;min-width:720px;color:#d7deea;font:13px\/1.66 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}\n.mg-k{color:#c792ea}.mg-s{color:#c3e88d}.mg-n{color:#f78c6c}.mg-o{color:#89ddff}.mg-c{color:#718096}\n.mg-callout{margin:22px 0;padding:18px 20px;border:1px solid rgba(98,216,232,.17);border-radius:14px;background:rgba(98,216,232,.045)}\n.mg-callout strong{display:block;margin-bottom:5px;font-size:14px}\n.mg-callout p{margin:0;font-size:14px}\n.mg-callout.warning{border-color:rgba(244,204,120,.2);background:rgba(244,204,120,.045)}\n.mg-callout.danger{border-color:rgba(255,145,161,.18);background:rgba(255,145,161,.045)}\n.mg-callout.success{border-color:rgba(112,227,178,.18);background:rgba(112,227,178,.045)}\n.mg-check{display:flex;gap:11px;color:#aab4c1;font-size:14px;line-height:1.5}\n.mg-check b{color:var(--green)}\n.mg-status{display:inline-flex;align-items:center;gap:7px;padding:5px 9px;border-radius:999px;font-size:11px;font-weight:800}\n.mg-status:before{content:\"\";width:6px;height:6px;border-radius:50%}\n.mg-status.bad{background:rgba(255,145,161,.1);color:#ffc3cc}.mg-status.bad:before{background:var(--red)}\n.mg-status.warn{background:rgba(244,204,120,.1);color:#ffe3a8}.mg-status.warn:before{background:var(--amber)}\n.mg-status.good{background:rgba(112,227,178,.1);color:#c1f3dc}.mg-status.good:before{background:var(--green)}\n.mg-decision{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin-top:20px}\n.mg-signal strong{display:block;margin-bottom:7px}\n.mg-signal ul{margin:10px 0 0;padding-left:18px}\n.mg-signal li{font-size:13px;line-height:1.55}\n.mg-runbook{display:grid;gap:10px;margin-top:20px;counter-reset:steps}\n.mg-runstep{position:relative;padding:18px 18px 18px 62px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.019)}\n.mg-runstep:before{counter-increment:steps;content:counter(steps,decimal-leading-zero);position:absolute;left:18px;top:18px;display:grid;place-items:center;width:30px;height:30px;border-radius:9px;background:rgba(140,124,255,.12);color:#c9c2ff;font-size:11px;font-weight:900}\n.mg-runstep strong{display:block;margin-bottom:5px}\n.mg-runstep p{margin:0;font-size:13px}\n.mg-toc h3{margin:0 0 15px;font-size:13px}\n.mg-toc a{display:block;padding:7px 0;color:#87919f;font-size:12px}\n.mg-toc a:hover{color:#fff}\n.mg-next a{min-height:128px;transition:.2s}\n.mg-next a:hover{transform:translateY(-3px);border-color:rgba(140,124,255,.28);background:rgba(140,124,255,.045)}\n.mg-next strong{display:block;margin-bottom:7px}\n.mg-next span{color:#96a1af;font-size:13px;line-height:1.5}\n@media(max-width:1220px){.mg-hero{grid-template-columns:1fr}.mg-shell{grid-template-columns:225px minmax(0,1fr)}.mg-toc{display:none}.mg-flow{grid-template-columns:repeat(3,1fr)}}\n@media(max-width:860px){.mg-wrap{width:min(calc(100% - 30px),var(--max));padding:76px 0 90px}.mg-shell{grid-template-columns:1fr}.mg-sidebar{position:relative;top:auto;overflow:auto}.mg-side-scroll{display:flex;gap:8px;min-width:max-content}.mg-navgroup,.mg-navgroup+.mg-navgroup{display:contents}.mg-navlabel{display:none}.mg-navitem{border:1px solid var(--line)}.mg-doc{padding:24px}.mg-decision{grid-template-columns:1fr}}\n@media(max-width:680px){.mg-hero h1{font-size:clamp(48px,15vw,72px)}.mg-cards,.mg-two-col,.mg-checks,.mg-next,.mg-meta-grid,.mg-flow{grid-template-columns:1fr}.mg-flow .mg-node:not(:last-child):after{content:\"\u2193\";right:50%;top:auto;bottom:-15px}}\n\n\/* HARD RESET \/ FULL-BLEED ELEMENTOR OVERRIDES *\/\nbody .elementor-widget-html:has(.mg-root),\nbody .elementor-widget-html:has(.mg-root) > .elementor-widget-container,\nbody .e-con:has(> .elementor-widget-html .mg-root),\nbody .e-con-inner:has(> .elementor-widget-html .mg-root){\n  width:100% !important;\n  max-width:none !important;\n  min-width:0 !important;\n  flex:0 0 100% !important;\n  align-self:stretch !important;\n  overflow:visible !important;\n  margin-left:0 !important;\n  margin-right:0 !important;\n  padding-left:0 !important;\n  padding-right:0 !important;\n  transform:none !important;\n}\n\nhtml,\nbody{\n  overflow-x:clip;\n}\n\n#migration-guide.mg-root{\n  left:auto;\n  width:100vw;\n  max-width:100vw;\n  margin-left:calc(50% - 50vw);\n  margin-right:calc(50% - 50vw);\n  isolation:isolate;\n}\n\n#migration-guide.mg-root .mg-wrap{\n  width:min(calc(100vw - 48px),var(--max));\n  max-width:var(--max);\n  min-width:0;\n}\n\n#migration-guide.mg-root .mg-hero,\n#migration-guide.mg-root .mg-shell,\n#migration-guide.mg-root .mg-meta-grid,\n#migration-guide.mg-root .mg-cards,\n#migration-guide.mg-root .mg-two-col,\n#migration-guide.mg-root .mg-checks,\n#migration-guide.mg-root .mg-next,\n#migration-guide.mg-root .mg-flow,\n#migration-guide.mg-root .mg-timeline,\n#migration-guide.mg-root .mg-decision{\n  min-width:0;\n}\n\n#migration-guide.mg-root .mg-hero > *,\n#migration-guide.mg-root .mg-shell > *,\n#migration-guide.mg-root .mg-meta-grid > *,\n#migration-guide.mg-root .mg-cards > *,\n#migration-guide.mg-root .mg-two-col > *,\n#migration-guide.mg-root .mg-checks > *,\n#migration-guide.mg-root .mg-next > *,\n#migration-guide.mg-root .mg-flow > *,\n#migration-guide.mg-root .mg-timeline > *,\n#migration-guide.mg-root .mg-decision > *{\n  min-width:0;\n}\n\n#migration-guide.mg-root .mg-codebox,\n#migration-guide.mg-root .mg-table{\n  -webkit-overflow-scrolling:touch;\n}\n\n@media(max-width:860px){\n  #migration-guide.mg-root .mg-wrap{\n    width:min(calc(100vw - 30px),var(--max));\n  }\n}\n\n@media(max-width:680px){\n  #migration-guide.mg-root .mg-wrap{\n    width:min(calc(100vw - 28px),var(--max));\n  }\n\n  #migration-guide.mg-root .mg-doc{\n    padding:20px;\n  }\n}\n<\/style>\n<\/head>\n<body>\n<section id=\"migration-guide\" class=\"mg-root\">\n<div class=\"mg-wrap\">\n<div class=\"mg-topbar\">\n<a class=\"mg-brand\" href=\"#documentation-showcase\">\n<div class=\"mg-logo\">N<\/div>\n<div><strong>NovaFlow Developer Platform<\/strong><span>ScriptWise documentation portfolio<\/span><\/div>\n<\/a>\n<div class=\"mg-version\"><i><\/i> Migration path \u00b7 Enterprise<\/div>\n<\/div>\n<div class=\"mg-hero\">\n<div>\n<div class=\"mg-eyebrow\">Migration Guide \u00b7 Controlled Platform Change<\/div>\n<h1>Move to the new model <span>without losing control.<\/span><\/h1>\n<p>This guide provides a staged migration path from legacy NovaFlow run events to explicit terminal-state events, including inventory, compatibility design, parallel validation, cutover, rollback, and post-migration verification.<\/p>\n<\/div>\n<aside class=\"mg-hero-card\"><small>Reference migration<\/small><h3>run.finished \u2192 terminal-state events<\/h3><p>The reference plan replaces one generic event with run.completed, run.failed, and run.completed_with_warnings while preserving business behavior and audit continuity.<\/p><div class=\"mg-meta-grid\"><div class=\"mg-meta\"><b>5<\/b><span>migration phases<\/span><\/div><div class=\"mg-meta\"><b>3<\/b><span>replacement events<\/span><\/div><div class=\"mg-meta\"><b>1<\/b><span>rollback path<\/span><\/div><\/div><\/aside>\n<\/div>\n<div class=\"mg-shell\">\n<aside class=\"mg-sidebar\">\n<div class=\"mg-side-title\"><strong>NovaFlow Docs<\/strong><span>Documentation portal<\/span><\/div>\n<div class=\"mg-side-scroll\">\n<div class=\"mg-navgroup\">\n<span class=\"mg-navlabel\">Overview<\/span>\n<a class=\"mg-navitem\" href=\"#documentation-showcase\"><span class=\"mg-navdot\"><\/span>Documentation home<\/a>\n<\/div>\n<div class=\"mg-navgroup\">\n<span class=\"mg-navlabel\">Get started<\/span>\n<a class=\"mg-navitem\" href=\"#getting-started\"><span class=\"mg-navdot\"><\/span>Getting Started<\/a>\n<a class=\"mg-navitem\" href=\"#onboarding-documentation\"><span class=\"mg-navdot\"><\/span>Onboarding<\/a>\n<\/div>\n<div class=\"mg-navgroup\">\n<span class=\"mg-navlabel\">Product<\/span>\n<a class=\"mg-navitem\" href=\"#feature-documentation\"><span class=\"mg-navdot\"><\/span>Feature Documentation<\/a>\n<a class=\"mg-navitem\" href=\"#administrator-manual\"><span class=\"mg-navdot\"><\/span>Administrator Manual<\/a>\n<\/div>\n<div class=\"mg-navgroup\">\n<span class=\"mg-navlabel\">Developers<\/span>\n<a class=\"mg-navitem\" href=\"#api-quickstart\"><span class=\"mg-navdot\"><\/span>API Quickstart<\/a>\n<a class=\"mg-navitem\" href=\"#api-reference\"><span class=\"mg-navdot\"><\/span>API Reference<\/a>\n<a class=\"mg-navitem\" href=\"#integration-guide\"><span class=\"mg-navdot\"><\/span>Integration Guide<\/a>\n<\/div>\n<div class=\"mg-navgroup\">\n<span class=\"mg-navlabel\">Operations<\/span>\n<a class=\"mg-navitem\" href=\"#troubleshooting-guide\"><span class=\"mg-navdot\"><\/span>Troubleshooting<\/a>\n<a class=\"mg-navitem\" href=\"#release-notes\"><span class=\"mg-navdot\"><\/span>Release Notes<\/a>\n<a aria-current=\"page\" class=\"mg-navitem mg-active\" href=\"#migration-guide\"><span class=\"mg-navdot\"><\/span>Migration Guide<\/a>\n<\/div>\n<\/div>\n<\/aside>\n<main class=\"mg-doc\"><section class=\"mg-section\" id=\"mg-overview\"><span class=\"mg-kicker\">Migration strategy<\/span><h2>Treat migration as a controlled product change<\/h2>\n<p>A successful migration preserves business outcomes while changing the technical contract underneath them. The work is not complete when new code deploys. It is complete when every affected consumer produces the expected result, observability remains intact, and the legacy path can be retired safely.<\/p>\n<p>The NovaFlow migration model separates discovery, design, validation, cutover, and retirement so that compatibility decisions remain visible and reversible.<\/p>\n<div class=\"mg-flow\">\n<div class=\"mg-node\"><small>01<\/small><strong>Inventory<\/strong><\/div>\n<div class=\"mg-node\"><small>02<\/small><strong>Design<\/strong><\/div>\n<div class=\"mg-node\"><small>03<\/small><strong>Validate<\/strong><\/div>\n<div class=\"mg-node\"><small>04<\/small><strong>Cut over<\/strong><\/div>\n<div class=\"mg-node\"><small>05<\/small><strong>Retire<\/strong><\/div>\n<\/div>\n<div class=\"mg-callout\">\n<strong>Migration principle<\/strong>\n<p>Change one contract boundary at a time, preserve evidence at every stage, and define rollback before production traffic moves.<\/p>\n<\/div>\n<\/section><section class=\"mg-section\" id=\"mg-scope\"><span class=\"mg-kicker\">Scope and impact<\/span><h2>Define what changes and what must remain stable<\/h2>\n<div class=\"mg-cards\">\n<article class=\"mg-card\"><small>Legacy contract<\/small><h4>run.finished<\/h4><p>A generic terminal event that requires consumers to inspect the payload to determine the final outcome.<\/p><\/article>\n<article class=\"mg-card\"><small>Target contract<\/small><h4>Explicit terminal events<\/h4><p>Separate events identify completed, failed, and warning-complete outcomes directly.<\/p><\/article>\n<article class=\"mg-card\"><small>Must remain stable<\/small><h4>Business correlation<\/h4><p>Run ID, workflow ID, workspace, correlation ID, and source business key remain available.<\/p><\/article>\n<article class=\"mg-card\"><small>Primary risk<\/small><h4>Silent event loss<\/h4><p>A consumer may unsubscribe from the legacy event before the replacement path is proven.<\/p><\/article>\n<\/div>\n<h3>Affected components<\/h3>\n<div class=\"mg-table\">\n<table>\n<thead><tr><th>Component<\/th><th>Current behavior<\/th><th>Target behavior<\/th><th>Owner<\/th><\/tr><\/thead>\n<tbody>\n<tr><td>Webhook subscription<\/td><td>Subscribes to <code>run.finished<\/code>.<\/td><td>Subscribes to three terminal-state events.<\/td><td>Integration owner<\/td><\/tr>\n<tr><td>Event router<\/td><td>Branches on <code>payload.status<\/code>.<\/td><td>Routes by event type, then validates status.<\/td><td>Application team<\/td><\/tr>\n<tr><td>Monitoring<\/td><td>Counts one generic terminal event.<\/td><td>Tracks success, failure, and mg-warning outcomes separately.<\/td><td>Operations<\/td><\/tr>\n<tr><td>Runbook<\/td><td>Uses legacy event examples.<\/td><td>Uses explicit event and replay procedures.<\/td><td>Support \/ operations<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/section><section class=\"mg-section\" id=\"mg-prerequisites\"><span class=\"mg-kicker\">Readiness<\/span><h2>Complete the prerequisites before implementation<\/h2>\n<div class=\"mg-checks\">\n<div class=\"mg-check\"><b>\u2713<\/b><span>Identify every production, staging, and sandbox consumer of <code>run.finished<\/code>.<\/span><\/div>\n<div class=\"mg-check\"><b>\u2713<\/b><span>Document current routing logic, side effects, retry behavior, and deduplication keys.<\/span><\/div>\n<div class=\"mg-check\"><b>\u2713<\/b><span>Confirm the consumer can process multiple event types without shared mutable state.<\/span><\/div>\n<div class=\"mg-check\"><b>\u2713<\/b><span>Verify event IDs are stored before downstream side effects begin.<\/span><\/div>\n<div class=\"mg-check\"><b>\u2713<\/b><span>Create dashboards that compare legacy and replacement event outcomes.<\/span><\/div>\n<div class=\"mg-check\"><b>\u2713<\/b><span>Assign migration owner, production approver, support contact, and rollback authority.<\/span><\/div>\n<\/div>\n<div class=\"mg-callout mg-warning\">\n<strong>Do not migrate an unknown consumer<\/strong>\n<p>If ownership, event volume, side effects, or failure recovery cannot be explained, complete discovery before changing subscriptions.<\/p>\n<\/div>\n<\/section><section class=\"mg-section\" id=\"mg-contract\"><span class=\"mg-kicker\">Target contract<\/span><h2>Map the legacy event to explicit outcomes<\/h2>\n<div class=\"mg-table\">\n<table>\n<thead><tr><th>Legacy condition<\/th><th>Replacement event<\/th><th>Consumer action<\/th><th>Compatibility note<\/th><\/tr><\/thead>\n<tbody>\n<tr><td><code>status = completed<\/code><\/td><td><code>run.completed<\/code><\/td><td>Continue mg-success processing.<\/td><td>Business behavior should remain unchanged.<\/td><\/tr>\n<tr><td><code>status = failed<\/code><\/td><td><code>run.failed<\/code><\/td><td>Trigger failure handling and escalation.<\/td><td>Failure details are available directly.<\/td><\/tr>\n<tr><td><code>status = completed_with_warnings<\/code><\/td><td><code>run.completed_with_warnings<\/code><\/td><td>Complete the primary outcome and recover warning-level side effects.<\/td><td>Do not treat warnings as full failure.<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3>Legacy event<\/h3>\n<div class=\"mg-codebox\">\n<div class=\"mg-codehead\"><span>run.finished<\/span><span>JSON<\/span><\/div>\n<pre><code>{\n  <span class=\"mg-k\">\"type\"<\/span>: <span class=\"mg-s\">\"run.finished\"<\/span>,\n  <span class=\"mg-k\">\"data\"<\/span>: {\n    <span class=\"mg-k\">\"run_id\"<\/span>: <span class=\"mg-s\">\"run_01JZ91F2H6M3\"<\/span>,\n    <span class=\"mg-k\">\"mg-status\"<\/span>: <span class=\"mg-s\">\"completed_with_warnings\"<\/span>,\n    <span class=\"mg-k\">\"correlation_id\"<\/span>: <span class=\"mg-s\">\"PR-2026-1048\"<\/span>\n  }\n}<\/code><\/pre>\n<\/div>\n<h3>Replacement event<\/h3>\n<div class=\"mg-codebox\">\n<div class=\"mg-codehead\"><span>run.completed_with_warnings<\/span><span>JSON<\/span><\/div>\n<pre><code>{\n  <span class=\"mg-k\">\"type\"<\/span>: <span class=\"mg-s\">\"run.completed_with_warnings\"<\/span>,\n  <span class=\"mg-k\">\"data\"<\/span>: {\n    <span class=\"mg-k\">\"run_id\"<\/span>: <span class=\"mg-s\">\"run_01JZ91F2H6M3\"<\/span>,\n    <span class=\"mg-k\">\"correlation_id\"<\/span>: <span class=\"mg-s\">\"PR-2026-1048\"<\/span>,\n    <span class=\"mg-k\">\"warning_count\"<\/span>: <span class=\"mg-n\">1<\/span>,\n    <span class=\"mg-k\">\"recovery_available\"<\/span>: <span class=\"mg-k\">true<\/span>\n  }\n}<\/code><\/pre>\n<\/div>\n<\/section><section class=\"mg-section\" id=\"mg-implementation\"><span class=\"mg-kicker\">Implementation<\/span><h2>Build a compatibility layer before changing production traffic<\/h2>\n<p>Introduce one internal handler that normalizes both legacy and replacement events into the same application-level outcome. This prevents downstream business logic from being rewritten during the first migration step.<\/p>\n<div class=\"mg-codebox\">\n<div class=\"mg-codehead\"><span>normalize-run-event.js<\/span><span>Node.js<\/span><\/div>\n<pre><code><span class=\"mg-k\">function<\/span> normalizeRunEvent(event) {\n  <span class=\"mg-k\">if<\/span> (event.type === <span class=\"mg-s\">\"run.finished\"<\/span>) {\n    <span class=\"mg-k\">return<\/span> {\n      outcome: event.data.status,\n      runId: event.data.run_id,\n      correlationId: event.data.correlation_id\n    };\n  }\n\n  <span class=\"mg-k\">const<\/span> outcomeByType = {\n    <span class=\"mg-s\">\"run.completed\"<\/span>: <span class=\"mg-s\">\"completed\"<\/span>,\n    <span class=\"mg-s\">\"run.failed\"<\/span>: <span class=\"mg-s\">\"failed\"<\/span>,\n    <span class=\"mg-s\">\"run.completed_with_warnings\"<\/span>: <span class=\"mg-s\">\"completed_with_warnings\"<\/span>\n  };\n\n  <span class=\"mg-k\">return<\/span> {\n    outcome: outcomeByType[event.type],\n    runId: event.data.run_id,\n    correlationId: event.data.correlation_id\n  };\n}<\/code><\/pre>\n<\/div>\n<div class=\"mg-cards\">\n<article class=\"mg-card\"><small>Compatibility control<\/small><h4>One normalized model<\/h4><p>Legacy and replacement events feed the same internal business handler.<\/p><\/article>\n<article class=\"mg-card\"><small>Safety control<\/small><h4>Shared deduplication<\/h4><p>Store event ID and business key before applying side effects.<\/p><\/article>\n<article class=\"mg-card\"><small>Observability control<\/small><h4>Record source contract<\/h4><p>Tag each processed event as legacy or replacement during validation.<\/p><\/article>\n<article class=\"mg-card\"><small>Rollback control<\/small><h4>Feature flag<\/h4><p>Keep replacement-event processing independently switchable until cutover is accepted.<\/p><\/article>\n<\/div>\n<\/section><section class=\"mg-section\" id=\"mg-validation\"><span class=\"mg-kicker\">Parallel validation<\/span><h2>Run both paths and compare outcomes<\/h2>\n<p>Subscribe the staging consumer to both legacy and replacement events. Process replacement events through the compatibility layer, but suppress duplicate business side effects while comparing normalized outcomes.<\/p>\n<div class=\"mg-timeline\">\n<article class=\"mg-phase\"><small>Stage 01<\/small><b>Sandbox<\/b><p>Validate schemas, signatures, routing, and deduplication.<\/p><\/article>\n<article class=\"mg-phase\"><small>Stage 02<\/small><b>Staging shadow<\/b><p>Receive both contracts and compare normalized outcomes.<\/p><\/article>\n<article class=\"mg-phase\"><small>Stage 03<\/small><b>Production shadow<\/b><p>Observe replacement events without owning side effects.<\/p><\/article>\n<article class=\"mg-phase\"><small>Stage 04<\/small><b>Canary ownership<\/b><p>Move a limited transaction segment to the new path.<\/p><\/article>\n<\/div>\n<h3>Validation matrix<\/h3>\n<div class=\"mg-table\">\n<table>\n<thead><tr><th>Scenario<\/th><th>Legacy result<\/th><th>Replacement result<\/th><th>Acceptance rule<\/th><\/tr><\/thead>\n<tbody>\n<tr><td>Successful run<\/td><td>finished + completed status<\/td><td><code>run.completed<\/code><\/td><td>Same run, correlation, and downstream outcome.<\/td><\/tr>\n<tr><td>Terminal failure<\/td><td>finished + failed status<\/td><td><code>run.failed<\/code><\/td><td>Same failure classification and escalation path.<\/td><\/tr>\n<tr><td>Warning completion<\/td><td>finished + mg-warning status<\/td><td><code>run.completed_with_warnings<\/code><\/td><td>Primary mg-success preserved; mg-warning recovery triggered once.<\/td><\/tr>\n<tr><td>Duplicate delivery<\/td><td>Repeated generic event<\/td><td>Repeated explicit event<\/td><td>No duplicate business side effect.<\/td><\/tr>\n<tr><td>Out-of-order delivery<\/td><td>Legacy arrives after replacement<\/td><td>Replacement arrives first<\/td><td>Final business state remains correct.<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/section><section class=\"mg-section\" id=\"mg-cutover\"><span class=\"mg-kicker\">Production cutover<\/span><h2>Move ownership in small, observable steps<\/h2>\n<div class=\"mg-runbook\">\n<div class=\"mg-runstep\"><strong>Freeze unrelated consumer changes<\/strong><p>Avoid combining migration with business-rule or infrastructure changes.<\/p><\/div>\n<div class=\"mg-runstep\"><strong>Enable replacement subscriptions<\/strong><p>Confirm delivery, signature validation, and monitoring before side effects are enabled.<\/p><\/div>\n<div class=\"mg-runstep\"><strong>Move a controlled canary segment<\/strong><p>Route a limited workspace, workflow, or transaction cohort through the new path.<\/p><\/div>\n<div class=\"mg-runstep\"><strong>Compare business outcomes<\/strong><p>Validate counts, terminal states, downstream writes, latency, retries, and support signals.<\/p><\/div>\n<div class=\"mg-runstep\"><strong>Expand gradually<\/strong><p>Increase traffic only while acceptance thresholds remain within range.<\/p><\/div>\n<div class=\"mg-runstep\"><strong>Disable legacy ownership<\/strong><p>Keep legacy observation temporarily, but prevent duplicate side effects.<\/p><\/div>\n<\/div>\n<h3>Cutover gates<\/h3>\n<div class=\"mg-checks\">\n<div class=\"mg-check\"><b>\u2713<\/b><span>Replacement event delivery mg-success is at or above the agreed threshold.<\/span><\/div>\n<div class=\"mg-check\"><b>\u2713<\/b><span>No unexplained difference exists between legacy and normalized replacement outcomes.<\/span><\/div>\n<div class=\"mg-check\"><b>\u2713<\/b><span>Duplicate side effects remain at zero.<\/span><\/div>\n<div class=\"mg-check\"><b>\u2713<\/b><span>Support and operations can diagnose the new event path.<\/span><\/div>\n<div class=\"mg-check\"><b>\u2713<\/b><span>Rollback remains available and has a named approver.<\/span><\/div>\n<\/div>\n<\/section><section class=\"mg-section\" id=\"mg-rollback\"><span class=\"mg-kicker\">Rollback<\/span><h2>Define reversal before the migration begins<\/h2>\n<div class=\"mg-table\">\n<table>\n<thead><tr><th>Rollback trigger<\/th><th>Immediate action<\/th><th>Data check<\/th><th>Restart condition<\/th><\/tr><\/thead>\n<tbody>\n<tr><td>Replacement delivery failure above threshold<\/td><td>Disable replacement ownership and restore legacy processing.<\/td><td>Identify unprocessed event IDs.<\/td><td>Delivery cause corrected and replay validated.<\/td><\/tr>\n<tr><td>Duplicate business side effects<\/td><td>Stop both automated paths for the affected scope.<\/td><td>Compare event IDs and downstream object IDs.<\/td><td>Deduplication correction proven in staging.<\/td><\/tr>\n<tr><td>Outcome mismatch<\/td><td>Return ownership to the legacy handler.<\/td><td>Compare normalized payloads and routing decisions.<\/td><td>Compatibility mapping corrected.<\/td><\/tr>\n<tr><td>Monitoring blind spot<\/td><td>Pause expansion at the current canary level.<\/td><td>Confirm event, application, and business telemetry.<\/td><td>Required dashboards and alerts operational.<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"mg-callout mg-danger\">\n<strong>Rollback does not mean deleting evidence<\/strong>\n<p>Preserve replacement events, consumer logs, feature-flag history, affected transaction IDs, and every recovery action for investigation and replay.<\/p>\n<\/div>\n<\/section><section class=\"mg-section\" id=\"mg-verification\"><span class=\"mg-kicker\">Post-migration verification<\/span><h2>Prove the new path at business level<\/h2>\n<div class=\"mg-cards\">\n<article class=\"mg-card\"><small>Contract<\/small><h4>Event completeness<\/h4><p>Every terminal run produces the expected explicit event exactly as documented.<\/p><\/article>\n<article class=\"mg-card\"><small>Application<\/small><h4>Correct routing<\/h4><p>Each outcome reaches the correct success, failure, or mg-warning handler.<\/p><\/article>\n<article class=\"mg-card\"><small>Operations<\/small><h4>Diagnostic continuity<\/h4><p>Request, run, event, correlation, and downstream IDs remain traceable.<\/p><\/article>\n<article class=\"mg-card\"><small>Business<\/small><h4>Outcome parity<\/h4><p>Approvals, records, notifications, and recovery actions match the accepted legacy behavior.<\/p><\/article>\n<\/div>\n<h3>Observe after full cutover<\/h3>\n<div class=\"mg-table\">\n<table>\n<thead><tr><th>Signal<\/th><th>Expected state<\/th><th>Investigate when<\/th><\/tr><\/thead>\n<tbody>\n<tr><td>Terminal event count<\/td><td>Matches terminal run count within delivery timing tolerance.<\/td><td>Counts diverge beyond the expected window.<\/td><\/tr>\n<tr><td>Event processing success<\/td><td>At or above the pre-migration baseline.<\/td><td>Failure rate increases materially.<\/td><\/tr>\n<tr><td>Duplicate side effects<\/td><td>Zero.<\/td><td>Any duplicate business record or notification appears.<\/td><\/tr>\n<tr><td>End-to-end latency<\/td><td>Within the agreed service objective.<\/td><td>P95 remains above threshold.<\/td><\/tr>\n<tr><td>Support volume<\/td><td>No migration-related increase.<\/td><td>Users report missing or inconsistent outcomes.<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/section><section class=\"mg-section\" id=\"mg-retirement\"><span class=\"mg-kicker\">Legacy retirement<\/span><h2>Remove the old path only after evidence is complete<\/h2>\n<div class=\"mg-checks\">\n<div class=\"mg-check\"><b>\u2713<\/b><span>The replacement path has completed the agreed observation period.<\/span><\/div>\n<div class=\"mg-check\"><b>\u2713<\/b><span>All known consumers have migrated or have an approved exception.<\/span><\/div>\n<div class=\"mg-check\"><b>\u2713<\/b><span>Legacy subscriptions no longer own business side effects.<\/span><\/div>\n<div class=\"mg-check\"><b>\u2713<\/b><span>Documentation, examples, runbooks, tests, and dashboards reference the new contract.<\/span><\/div>\n<div class=\"mg-check\"><b>\u2713<\/b><span>Rollback evidence and migration decisions are archived.<\/span><\/div>\n<div class=\"mg-check\"><b>\u2713<\/b><span>The legacy handler, feature flag, and compatibility code have named removal dates.<\/span><\/div>\n<\/div>\n<div class=\"mg-callout mg-success\">\n<strong>Retirement is a separate change<\/strong>\n<p>Remove legacy code after migration stability is proven, not during the production cutover itself.<\/p>\n<\/div>\n<\/section><section class=\"mg-section\" id=\"mg-next\"><span class=\"mg-kicker\">Complete the operations set<\/span><h2>Related NovaFlow documentation<\/h2>\n<div class=\"mg-next\">\n<a href=\"#release-notes\">\n<small>Previous<\/small>\n<strong>Release Notes<\/strong>\n<span>Review the product change, compatibility status, required action, and deprecation timeline.<\/span>\n<\/a>\n<a href=\"#documentation-showcase\">\n<small>Return<\/small>\n<strong>Documentation Home<\/strong>\n<span>Return to the full NovaFlow documentation portfolio and explore every documentation type.<\/span>\n<\/a>\n<\/div>\n<\/section><\/main>\n<aside class=\"mg-toc\"><h3>On this page<\/h3><a href=\"#mg-overview\">Migration strategy<\/a><a href=\"#mg-scope\">Scope and impact<\/a><a href=\"#mg-prerequisites\">Readiness<\/a><a href=\"#mg-contract\">Target contract<\/a><a href=\"#mg-implementation\">Implementation<\/a><a href=\"#mg-validation\">Parallel validation<\/a><a href=\"#mg-cutover\">Production cutover<\/a><a href=\"#mg-rollback\">Rollback<\/a><a href=\"#mg-verification\">Verification<\/a><a href=\"#mg-retirement\">Legacy retirement<\/a><\/aside>\n<\/div>\n<\/div>\n<\/section>\n<\/body>\n<\/html>\n\n\n\n\n<style>\n\/* FINAL ISOLATION FIX \u2014 unique classes, centered full width *\/\n#migration-guide.mg-root > .mg-wrap{\n  position:relative!important;\n  left:auto!important;\n  right:auto!important;\n  width:min(calc(100vw - 48px),1580px)!important;\n  max-width:1580px!important;\n  min-width:0!important;\n  margin-left:auto!important;\n  margin-right:auto!important;\n  transform:none!important;\n}\n\nbody .elementor-widget-html:has(#migration-guide.mg-root),\nbody .elementor-widget-html:has(#migration-guide.mg-root) > .elementor-widget-container,\nbody .e-con:has(> .elementor-widget-html #migration-guide.mg-root),\nbody .e-con-inner:has(> .elementor-widget-html #migration-guide.mg-root){\n  position:static!important;\n  left:auto!important;\n  right:auto!important;\n  width:100%!important;\n  max-width:none!important;\n  min-width:0!important;\n  flex:0 0 100%!important;\n  align-self:stretch!important;\n  margin:0!important;\n  padding:0!important;\n  transform:none!important;\n  overflow:visible!important;\n}\n\n#migration-guide.mg-root .mg-hero,\n#migration-guide.mg-root .mg-shell,\n#migration-guide.mg-root .mg-meta-grid,\n#migration-guide.mg-root .mg-cards,\n#migration-guide.mg-root .mg-two-col,\n#migration-guide.mg-root .mg-checks,\n#migration-guide.mg-root .mg-next,\n#migration-guide.mg-root .mg-flow,\n#migration-guide.mg-root .mg-timeline,\n#migration-guide.mg-root .mg-decision{\n  min-width:0!important;\n}\n\n#migration-guide.mg-root .mg-hero > *,\n#migration-guide.mg-root .mg-shell > *,\n#migration-guide.mg-root .mg-meta-grid > *,\n#migration-guide.mg-root .mg-cards > *,\n#migration-guide.mg-root .mg-two-col > *,\n#migration-guide.mg-root .mg-checks > *,\n#migration-guide.mg-root .mg-next > *,\n#migration-guide.mg-root .mg-flow > *,\n#migration-guide.mg-root .mg-timeline > *,\n#migration-guide.mg-root .mg-decision > *{\n  min-width:0!important;\n}\n\n@media(max-width:860px){\n  #migration-guide.mg-root > .mg-wrap{\n    width:calc(100vw - 30px)!important;\n  }\n}\n\n@media(max-width:680px){\n  #migration-guide.mg-root > .mg-wrap{\n    width:calc(100vw - 28px)!important;\n  }\n\n  #migration-guide.mg-root .mg-doc{\n    padding:20px!important;\n  }\n}\n<\/style>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5e84f22 e-flex e-con-boxed e-con e-parent\" data-id=\"5e84f22\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-dc9e8ad elementor-widget elementor-widget-html\" data-id=\"dc9e8ad\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n:root{\n    --sw-bg:#0f1624;\n    --sw-card:rgba(15,22,36,.94);\n    --sw-border:rgba(83,184,255,.22);\n    --sw-accent:#44d7ff;\n    --sw-accent-2:#68f0dd;\n    --sw-text:#f5f7fb;\n    --sw-muted:#aab8cb;\n}\n\n\/* ==========================================================\n   SCRIPTWISE PREMIUM FLOATING DOCUMENTATION CTA\n   ========================================================== *\/\n\n#sw-doc-return,\n#sw-doc-return *{\n    box-sizing:border-box;\n}\n\n#sw-doc-return{\n    position:fixed;\n    right:28px;\n    bottom:28px;\n    width:360px;\n    max-width:calc(100vw - 32px);\n\n    background:\n        linear-gradient(\n            145deg,\n            rgba(18,28,46,.96) 0%,\n            rgba(10,18,32,.96) 100%\n        );\n\n    backdrop-filter:blur(20px);\n    -webkit-backdrop-filter:blur(20px);\n\n    border:1px solid var(--sw-border);\n    border-radius:22px;\n    padding:24px;\n\n    box-shadow:\n        0 24px 70px rgba(0,0,0,.52),\n        0 0 0 1px rgba(255,255,255,.025) inset,\n        0 0 32px rgba(68,215,255,.08);\n\n    z-index:999999;\n\n    opacity:0;\n    visibility:hidden;\n    pointer-events:none;\n    transform:translateY(32px) scale(.98);\n\n    transition:\n        opacity .36s ease,\n        transform .36s ease,\n        visibility .36s ease;\n\n    font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif;\n}\n\n#sw-doc-return.show{\n    opacity:1;\n    visibility:visible;\n    pointer-events:auto;\n    transform:translateY(0) scale(1);\n}\n\n#sw-doc-return::before{\n    content:\"\";\n    position:absolute;\n    inset:0;\n    border-radius:22px;\n    pointer-events:none;\n\n    background:\n        radial-gradient(\n            circle at 15% 0%,\n            rgba(68,215,255,.10),\n            transparent 34%\n        );\n}\n\n#sw-doc-return .sw-doc-content{\n    position:relative;\n    z-index:1;\n}\n\n#sw-doc-return .badge{\n    display:inline-flex;\n    align-items:center;\n    gap:8px;\n\n    padding:7px 12px;\n    margin-bottom:18px;\n\n    border-radius:999px;\n\n    background:rgba(68,215,255,.09);\n    border:1px solid rgba(68,215,255,.12);\n\n    color:var(--sw-accent);\n\n    font-size:11px;\n    line-height:1;\n    letter-spacing:.13em;\n    font-weight:800;\n    text-transform:uppercase;\n}\n\n#sw-doc-return .badge::before{\n    content:\"\";\n    width:7px;\n    height:7px;\n    border-radius:50%;\n\n    background:var(--sw-accent);\n    box-shadow:0 0 14px rgba(68,215,255,.8);\n}\n\n#sw-doc-return h3{\n    margin:0 42px 10px 0;\n\n    color:var(--sw-text);\n\n    font-size:24px;\n    line-height:1.18;\n    letter-spacing:-.025em;\n    font-weight:650;\n}\n\n#sw-doc-return p{\n    margin:0 0 20px;\n\n    color:var(--sw-muted);\n\n    font-size:15px;\n    line-height:1.58;\n    font-weight:400;\n}\n\n\/* ==========================================================\n   PREMIUM CTA BUTTON\n   ========================================================== *\/\n\n#sw-doc-return a{\n    position:relative;\n\n    display:flex;\n    align-items:center;\n    justify-content:center;\n    gap:11px;\n\n    width:100%;\n    min-height:58px;\n    padding:13px 22px;\n\n    overflow:hidden;\n\n    border:1px solid rgba(255,255,255,.25);\n    border-radius:16px;\n\n    background:\n        linear-gradient(\n            135deg,\n            #36d3ff 0%,\n            #55e2f5 46%,\n            #71f0d7 100%\n        );\n\n    color:#061522 !important;\n\n    font-size:17px;\n    line-height:1.25;\n    font-weight:850;\n    letter-spacing:-.015em;\n    text-align:center;\n    text-decoration:none !important;\n\n    box-shadow:\n        0 12px 30px rgba(68,215,255,.34),\n        0 0 26px rgba(68,215,255,.18),\n        inset 0 1px 0 rgba(255,255,255,.38);\n\n    transform:translateY(0);\n\n    transition:\n        transform .25s ease,\n        box-shadow .25s ease,\n        filter .25s ease;\n}\n\n#sw-doc-return a::before{\n    content:\"\";\n    position:absolute;\n    top:-120%;\n    left:-35%;\n\n    width:42%;\n    height:340%;\n\n    background:linear-gradient(\n        90deg,\n        transparent,\n        rgba(255,255,255,.34),\n        transparent\n    );\n\n    transform:rotate(22deg);\n    transition:left .65s ease;\n}\n\n#sw-doc-return a:hover{\n    transform:translateY(-3px);\n\n    filter:brightness(1.055);\n\n    box-shadow:\n        0 18px 42px rgba(68,215,255,.46),\n        0 0 34px rgba(68,215,255,.28),\n        inset 0 1px 0 rgba(255,255,255,.42);\n}\n\n#sw-doc-return a:hover::before{\n    left:115%;\n}\n\n#sw-doc-return a:focus-visible{\n    outline:3px solid rgba(255,255,255,.92);\n    outline-offset:4px;\n}\n\n#sw-doc-return .sw-doc-arrow{\n    display:inline-flex;\n    align-items:center;\n    justify-content:center;\n\n    width:28px;\n    height:28px;\n\n    flex:0 0 28px;\n\n    border-radius:50%;\n\n    background:rgba(6,21,34,.13);\n\n    font-size:17px;\n    line-height:1;\n    font-weight:900;\n\n    transition:transform .25s ease;\n}\n\n#sw-doc-return a:hover .sw-doc-arrow{\n    transform:translateY(-2px);\n}\n\n\/* One-time pulse after appearance *\/\n\n#sw-doc-return.show .sw-doc-button{\n    animation:sw-doc-pulse 1.2s ease 1.45s 1;\n}\n\n@keyframes sw-doc-pulse{\n    0%{\n        transform:translateY(0) scale(1);\n    }\n    45%{\n        transform:translateY(-2px) scale(1.025);\n        box-shadow:\n            0 20px 48px rgba(68,215,255,.55),\n            0 0 42px rgba(68,215,255,.30),\n            inset 0 1px 0 rgba(255,255,255,.42);\n    }\n    100%{\n        transform:translateY(0) scale(1);\n    }\n}\n\n\/* ==========================================================\n   CLOSE BUTTON\n   ========================================================== *\/\n\n#sw-doc-close{\n    position:absolute;\n    right:14px;\n    top:14px;\n    z-index:2;\n\n    display:flex;\n    align-items:center;\n    justify-content:center;\n\n    width:36px;\n    height:36px;\n\n    padding:0;\n\n    border:1px solid rgba(255,255,255,.07);\n    border-radius:50%;\n\n    cursor:pointer;\n\n    background:rgba(255,255,255,.055);\n    color:#f5f7fb;\n\n    font-family:Arial,sans-serif;\n    font-size:22px;\n    line-height:1;\n    font-weight:400;\n\n    transition:\n        background .2s ease,\n        transform .2s ease,\n        border-color .2s ease;\n}\n\n#sw-doc-close:hover{\n    background:rgba(68,215,255,.13);\n    border-color:rgba(68,215,255,.20);\n    transform:rotate(4deg) scale(1.06);\n}\n\n#sw-doc-close:focus-visible{\n    outline:2px solid var(--sw-accent);\n    outline-offset:3px;\n}\n\n\/* ==========================================================\n   MOBILE\n   ========================================================== *\/\n\n@media(max-width:768px){\n\n    #sw-doc-return{\n        left:14px;\n        right:14px;\n        bottom:14px;\n\n        width:auto;\n        max-width:none;\n\n        padding:18px;\n        border-radius:18px;\n    }\n\n    #sw-doc-return::before{\n        border-radius:18px;\n    }\n\n    #sw-doc-return .badge{\n        margin-bottom:14px;\n        padding:6px 10px;\n        font-size:10px;\n    }\n\n    #sw-doc-return h3{\n        margin-right:40px;\n        font-size:20px;\n    }\n\n    #sw-doc-return p{\n        margin-bottom:16px;\n        font-size:14px;\n        line-height:1.5;\n    }\n\n    #sw-doc-return a{\n        min-height:54px;\n        padding:12px 16px;\n        border-radius:14px;\n        font-size:15px;\n    }\n\n    #sw-doc-close{\n        top:12px;\n        right:12px;\n        width:34px;\n        height:34px;\n    }\n}\n\n@media(max-width:430px){\n\n    #sw-doc-return{\n        left:10px;\n        right:10px;\n        bottom:10px;\n    }\n\n    #sw-doc-return h3{\n        font-size:19px;\n    }\n\n    #sw-doc-return p{\n        font-size:13.5px;\n    }\n}\n\n\/* Respect reduced-motion preferences *\/\n\n@media(prefers-reduced-motion:reduce){\n\n    #sw-doc-return,\n    #sw-doc-return *,\n    #sw-doc-return *::before,\n    #sw-doc-return *::after{\n        animation:none !important;\n        transition:none !important;\n        scroll-behavior:auto !important;\n    }\n}\n<\/style>\n\n<div id=\"sw-doc-return\" aria-hidden=\"true\">\n\n    <button\n        id=\"sw-doc-close\"\n        type=\"button\"\n        aria-label=\"Close documentation navigation\"\n    >\n        \u00d7\n    <\/button>\n\n    <div class=\"sw-doc-content\">\n\n        <div class=\"badge\">\n            Documentation Hub\n        <\/div>\n\n        <h3>\n            Lost in the documentation?\n        <\/h3>\n\n        <p>\n            Return to the NovaFlow Documentation Hub and continue exploring the complete documentation ecosystem.\n        <\/p>\n\n        <a\n            href=\"#top\"\n            id=\"sw-doc-button\"\n            class=\"sw-doc-button\"\n        >\n            <span class=\"sw-doc-arrow\" aria-hidden=\"true\">\u2191<\/span>\n            <span>Back to Documentation Hub<\/span>\n        <\/a>\n\n    <\/div>\n\n<\/div>\n\n<script>\n(function(){\n\n    const popup = document.getElementById(\"sw-doc-return\");\n    const closeButton = document.getElementById(\"sw-doc-close\");\n    const returnButton = document.getElementById(\"sw-doc-button\");\n\n    if(!popup || !closeButton || !returnButton){\n        return;\n    }\n\n    let closed = false;\n    let visible = false;\n\n    function showPopup(){\n\n        if(closed || visible){\n            return;\n        }\n\n        popup.classList.add(\"show\");\n        popup.setAttribute(\"aria-hidden\",\"false\");\n        visible = true;\n    }\n\n    function hidePopup(){\n\n        if(!visible){\n            return;\n        }\n\n        popup.classList.remove(\"show\");\n        popup.setAttribute(\"aria-hidden\",\"true\");\n        visible = false;\n    }\n\n    function handleScroll(){\n\n        if(closed){\n            return;\n        }\n\n        if(window.scrollY > 900){\n            showPopup();\n        }else{\n            hidePopup();\n        }\n    }\n\n    window.addEventListener(\n        \"scroll\",\n        handleScroll,\n        { passive:true }\n    );\n\n    closeButton.addEventListener(\"click\",function(){\n\n        closed = true;\n        hidePopup();\n\n        setTimeout(function(){\n            popup.remove();\n        },400);\n    });\n\n    returnButton.addEventListener(\"click\",function(event){\n\n        event.preventDefault();\n\n        window.scrollTo({\n            top:0,\n            behavior:\"smooth\"\n        });\n    });\n\n    handleScroll();\n\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Documentation Strategy \u00b7 Product Communication Complex products. Clear systems. I design documentation ecosystems that help people understand, adopt, trust, and use digital products. Senior technical writing, documentation strategy, developer documentation, information architecture, UX writing, and AI-ready knowledge systems for SaaS, AI, FinTech, eCommerce, healthcare, and enterprise products. Explore documentation system Start with Getting Started View [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-600","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Selected Work - Script Wise<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/scriptwise.pro\/?page_id=600\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Selected Work - Script Wise\" \/>\n<meta property=\"og:description\" content=\"Documentation Strategy \u00b7 Product Communication Complex products. Clear systems. I design documentation ecosystems that help people understand, adopt, trust, and use digital products. Senior technical writing, documentation strategy, developer documentation, information architecture, UX writing, and AI-ready knowledge systems for SaaS, AI, FinTech, eCommerce, healthcare, and enterprise products. Explore documentation system Start with Getting Started View [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/scriptwise.pro\/?page_id=600\" \/>\n<meta property=\"og:site_name\" content=\"Script Wise\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-27T12:38:59+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"74 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/scriptwise.pro\\\/?page_id=600\",\"url\":\"https:\\\/\\\/scriptwise.pro\\\/?page_id=600\",\"name\":\"Selected Work - Script Wise\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/scriptwise.pro\\\/#website\"},\"datePublished\":\"2026-07-22T20:38:23+00:00\",\"dateModified\":\"2026-07-27T12:38:59+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/scriptwise.pro\\\/?page_id=600#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/scriptwise.pro\\\/?page_id=600\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/scriptwise.pro\\\/?page_id=600#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/scriptwise.pro\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Selected Work\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/scriptwise.pro\\\/#website\",\"url\":\"https:\\\/\\\/scriptwise.pro\\\/\",\"name\":\"Write Wise\",\"description\":\"Human-written. Technically sound. SEO-optimized for AI and Google alike\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/scriptwise.pro\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Selected Work - Script Wise","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/scriptwise.pro\/?page_id=600","og_locale":"en_US","og_type":"article","og_title":"Selected Work - Script Wise","og_description":"Documentation Strategy \u00b7 Product Communication Complex products. Clear systems. I design documentation ecosystems that help people understand, adopt, trust, and use digital products. Senior technical writing, documentation strategy, developer documentation, information architecture, UX writing, and AI-ready knowledge systems for SaaS, AI, FinTech, eCommerce, healthcare, and enterprise products. Explore documentation system Start with Getting Started View [&hellip;]","og_url":"https:\/\/scriptwise.pro\/?page_id=600","og_site_name":"Script Wise","article_modified_time":"2026-07-27T12:38:59+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"74 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/scriptwise.pro\/?page_id=600","url":"https:\/\/scriptwise.pro\/?page_id=600","name":"Selected Work - Script Wise","isPartOf":{"@id":"https:\/\/scriptwise.pro\/#website"},"datePublished":"2026-07-22T20:38:23+00:00","dateModified":"2026-07-27T12:38:59+00:00","breadcrumb":{"@id":"https:\/\/scriptwise.pro\/?page_id=600#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/scriptwise.pro\/?page_id=600"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/scriptwise.pro\/?page_id=600#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/scriptwise.pro\/"},{"@type":"ListItem","position":2,"name":"Selected Work"}]},{"@type":"WebSite","@id":"https:\/\/scriptwise.pro\/#website","url":"https:\/\/scriptwise.pro\/","name":"Write Wise","description":"Human-written. Technically sound. SEO-optimized for AI and Google alike","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/scriptwise.pro\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/scriptwise.pro\/index.php?rest_route=\/wp\/v2\/pages\/600","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/scriptwise.pro\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/scriptwise.pro\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/scriptwise.pro\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/scriptwise.pro\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=600"}],"version-history":[{"count":5,"href":"https:\/\/scriptwise.pro\/index.php?rest_route=\/wp\/v2\/pages\/600\/revisions"}],"predecessor-version":[{"id":786,"href":"https:\/\/scriptwise.pro\/index.php?rest_route=\/wp\/v2\/pages\/600\/revisions\/786"}],"wp:attachment":[{"href":"https:\/\/scriptwise.pro\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=600"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}