@salesforce/afv-skills 1.65.0 → 1.65.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (349) hide show
  1. package/package.json +1 -1
  2. package/skills/field-service-data-capture-form-deployer-configure/SKILL.md +2 -23
  3. package/skills/field-service-data-capture-form-designer-configure/SKILL.md +3 -13
  4. package/skills/field-service-mobile-branding-configure/SKILL.md +3 -17
  5. package/skills/field-service-objective-designer-configure/SKILL.md +379 -72
  6. package/skills/field-service-prework-brief-deployer-configure/SKILL.md +537 -10
  7. package/skills/field-service-scheduling-policy-designer-query/SKILL.md +1093 -65
  8. package/skills/field-service-sobject-create-configure/SKILL.md +213 -13
  9. package/skills/field-service-voice-to-form-configure/SKILL.md +11 -40
  10. package/skills/field-service-work-rule-designer-configure/SKILL.md +95 -121
  11. package/skills/agentforce-gpt-email-generation-configure/SKILL.md +0 -312
  12. package/skills/agentforce-wizard-ui-forecasting-analytics-components-configure/SKILL.md +0 -64
  13. package/skills/agentforce-wizard-ui-sales-einstein-components-configure/SKILL.md +0 -46
  14. package/skills/automation-company-profile-info-query/SKILL.md +0 -51
  15. package/skills/automation-digital-wallet-configure/SKILL.md +0 -689
  16. package/skills/automation-flow-coordinate/SKILL.md +0 -95
  17. package/skills/automation-flow-coordinate/references/elements/action-call/action-call.md +0 -1569
  18. package/skills/automation-flow-coordinate/references/elements/action-call/conversation-messaging.md +0 -96
  19. package/skills/automation-flow-coordinate/references/elements/action-call/examples/send-sms-message.json +0 -23
  20. package/skills/automation-flow-coordinate/references/elements/action-call/examples/send-to-journey-no-fields.json +0 -31
  21. package/skills/automation-flow-coordinate/references/elements/action-call/send-to-journey.md +0 -179
  22. package/skills/automation-flow-coordinate/references/elements/exit-rule/examples/event-email-link-click.json +0 -13
  23. package/skills/automation-flow-coordinate/references/elements/exit-rule/exit-rule.md +0 -83
  24. package/skills/automation-flow-coordinate/references/elements/forward-to-bot-or-agent/examples/forward-to-bot-or-agent.json +0 -69
  25. package/skills/automation-flow-coordinate/references/elements/forward-to-bot-or-agent/forward-to-bot-or-agent.md +0 -274
  26. package/skills/automation-flow-coordinate/references/elements/start/audience-common.md +0 -192
  27. package/skills/automation-flow-coordinate/references/elements/start/automation-event-triggered.md +0 -130
  28. package/skills/automation-flow-coordinate/references/elements/start/data-cloud-data-change-triggered.md +0 -92
  29. package/skills/automation-flow-coordinate/references/elements/start/form-submission-triggered.md +0 -88
  30. package/skills/automation-flow-coordinate/references/elements/start/segment-triggered.md +0 -152
  31. package/skills/automation-flow-coordinate/references/elements/start/start.md +0 -539
  32. package/skills/automation-flow-coordinate/references/elements/subflow/subflow.md +0 -152
  33. package/skills/automation-flow-coordinate/references/elements/wait/wait.md +0 -497
  34. package/skills/automation-flow-coordinate/references/recipes/author/author.md +0 -868
  35. package/skills/automation-flow-coordinate/references/recipes/summarize/element-generic.md +0 -300
  36. package/skills/automation-flow-coordinate/references/recipes/summarize/reference-resolution.md +0 -292
  37. package/skills/automation-flow-coordinate/references/recipes/summarize/summarize.md +0 -323
  38. package/skills/automation-flow-coordinate/references/recipes/testing/examples/debug-output-template.md +0 -109
  39. package/skills/automation-flow-coordinate/references/recipes/testing/shape.md +0 -219
  40. package/skills/automation-flow-coordinate/references/recipes/testing/shared-stages/intent-analyzer.md +0 -180
  41. package/skills/automation-flow-coordinate/references/recipes/testing/workflows/debug.md +0 -175
  42. package/skills/automation-flow-coordinate/references/recipes/testing/workflows/promote.md +0 -255
  43. package/skills/automation-flow-coordinate/references/recipes/testing/workflows/save-debug.md +0 -212
  44. package/skills/automation-flow-coordinate/references/resources/variable/variable.md +0 -171
  45. package/skills/automation-flow-coordinate/references/shared/anti-patterns.md +0 -786
  46. package/skills/automation-flow-coordinate/references/shared/end/end.md +0 -267
  47. package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/README.md +0 -69
  48. package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/predictions.jsonl +0 -80
  49. package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/prompts.jsonl +0 -116
  50. package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/flow-type-resolver.md +0 -321
  51. package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/taxonomy.json +0 -320
  52. package/skills/automation-flow-coordinate/references/shared/server-functions.md +0 -597
  53. package/skills/automotive-cloud-appraisal-management-settings-configure/SKILL.md +0 -69
  54. package/skills/automotive-cloud-dealer-essentials-configure/SKILL.md +0 -78
  55. package/skills/automotive-cloud-ground-agent-data-pipelines-configure/SKILL.md +0 -373
  56. package/skills/automotive-cloud-ground-mfg-agent-data-pipelines-configure/SKILL.md +0 -273
  57. package/skills/automotive-cloud-mfg-agent-data-pipelines-configure/SKILL.md +0 -259
  58. package/skills/automotive-cloud-mfg-sales-concierge-agent-create/SKILL.md +0 -369
  59. package/skills/automotive-cloud-mfg-sales-concierge-foundation-configure/SKILL.md +0 -542
  60. package/skills/automotive-cloud-mfg-sales-concierge-foundation-coordinate/SKILL.md +0 -159
  61. package/skills/automotive-cloud-mfg-sales-concierge-orchestrator-agent-create/SKILL.md +0 -349
  62. package/skills/automotive-cloud-mfg-sales-concierge-orchestrator-configure/SKILL.md +0 -505
  63. package/skills/automotive-cloud-sales-concierge-agent-create/SKILL.md +0 -380
  64. package/skills/automotive-cloud-sales-concierge-foundation-configure/SKILL.md +0 -567
  65. package/skills/automotive-cloud-sales-concierge-foundation-coordinate/SKILL.md +0 -159
  66. package/skills/automotive-cloud-sales-concierge-orchestrator-agent-create/SKILL.md +0 -360
  67. package/skills/automotive-cloud-sales-concierge-orchestrator-configure/SKILL.md +0 -539
  68. package/skills/automotive-cloud-sales-concierge-search-grounding-configure/SKILL.md +0 -358
  69. package/skills/commerce-b2b-merchant-quote-configure/SKILL.md +0 -602
  70. package/skills/commerce-b2b-store-configure/SKILL.md +0 -251
  71. package/skills/commerce-credit-memo-create/SKILL.md +0 -139
  72. package/skills/commerce-delivery-business-hours-configure/SKILL.md +0 -277
  73. package/skills/commerce-delivery-estimation-apply/SKILL.md +0 -155
  74. package/skills/commerce-delivery-estimation-configure/SKILL.md +0 -377
  75. package/skills/commerce-delivery-routing-specs-integrate/SKILL.md +0 -174
  76. package/skills/commerce-estimate-bopis-query/SKILL.md +0 -279
  77. package/skills/commerce-estimate-delivery-date-query/SKILL.md +0 -349
  78. package/skills/commerce-fees-apply/SKILL.md +0 -227
  79. package/skills/commerce-fulfillment-routing-analyze/SKILL.md +0 -200
  80. package/skills/commerce-guest-buyer-create/SKILL.md +0 -173
  81. package/skills/commerce-location-bopis-configure/SKILL.md +0 -378
  82. package/skills/commerce-location-business-hours-configure/SKILL.md +0 -235
  83. package/skills/commerce-location-delivery-processing-time-configure/SKILL.md +0 -309
  84. package/skills/commerce-location-graph-integrate/SKILL.md +0 -131
  85. package/skills/commerce-location-shipping-carrier-method-configure/SKILL.md +0 -755
  86. package/skills/commerce-location-temporary-operating-hours-configure/SKILL.md +0 -331
  87. package/skills/commerce-merchant-buyer-groups-configure/SKILL.md +0 -579
  88. package/skills/commerce-merchant-buyer-user-onboarding-create/SKILL.md +0 -626
  89. package/skills/commerce-merchant-catalog-configure/SKILL.md +0 -614
  90. package/skills/commerce-merchant-extension-provider-configure/SKILL.md +0 -368
  91. package/skills/commerce-merchant-insights-account-health-churn-analyze/SKILL.md +0 -118
  92. package/skills/commerce-merchant-insights-inventory-returns-analyze/SKILL.md +0 -65
  93. package/skills/commerce-merchant-insights-order-shopper-get/SKILL.md +0 -90
  94. package/skills/commerce-merchant-insights-product-performance-analyze/SKILL.md +0 -72
  95. package/skills/commerce-merchant-insights-query/SKILL.md +0 -279
  96. package/skills/commerce-merchant-storefront-guest-access-configure/SKILL.md +0 -656
  97. package/skills/commerce-order-summary-change-apply/SKILL.md +0 -375
  98. package/skills/commerce-product-details-get/SKILL.md +0 -363
  99. package/skills/commerce-product-search/SKILL.md +0 -563
  100. package/skills/commerce-react-storefront-create/SKILL.md +0 -350
  101. package/skills/commerce-return-order-summary-create/SKILL.md +0 -513
  102. package/skills/commerce-search-relevance-analyze/SKILL.md +0 -757
  103. package/skills/commerce-temporary-processing-time-override-create/SKILL.md +0 -274
  104. package/skills/communications-initial-setup-configure/SKILL.md +0 -630
  105. package/skills/communications-multisite-configure/SKILL.md +0 -571
  106. package/skills/communications-revenue-cloud-settings-configure/SKILL.md +0 -74
  107. package/skills/communications-smb-fiber-catalog-create/SKILL.md +0 -413
  108. package/skills/communications-tmf-integrate/SKILL.md +0 -1368
  109. package/skills/consumer-goods-visit-activity-act4-questions-assign/SKILL.md +0 -448
  110. package/skills/consumer-goods-visit-activity-act5-standard-create/SKILL.md +0 -269
  111. package/skills/consumer-goods-visit-activity-act6-assortment-configure/SKILL.md +0 -271
  112. package/skills/consumer-goods-visit-activity-act7-account-scoping-create/SKILL.md +0 -382
  113. package/skills/consumer-goods-visit-activity-act8-plan-attach-create/SKILL.md +0 -373
  114. package/skills/consumer-goods-visit-activity-act9-proof-validate/SKILL.md +0 -389
  115. package/skills/consumer-goods-visit-and-activity-act1-specification-create/SKILL.md +0 -338
  116. package/skills/consumer-goods-visit-and-activity-act2-template-create/SKILL.md +0 -547
  117. package/skills/consumer-goods-visit-and-activity-act3-definition-create/SKILL.md +0 -346
  118. package/skills/consumer-goods-visit-and-activity-configure/SKILL.md +0 -1110
  119. package/skills/crm-analytics-adoption-insights-configure/SKILL.md +0 -224
  120. package/skills/crm-analytics-custom-report-type-lightning-configure/SKILL.md +0 -418
  121. package/skills/crm-analytics-dashboards-configure/SKILL.md +0 -731
  122. package/skills/crm-analytics-operational-analytics-metadata-bridge-migrate/SKILL.md +0 -233
  123. package/skills/crm-analytics-report-notifications-ui-configure/SKILL.md +0 -184
  124. package/skills/crm-analytics-sharing-inheritance-coverage-analyze/SKILL.md +0 -167
  125. package/skills/crm-analytics-sonic-getting-started-configure/SKILL.md +0 -55
  126. package/skills/crm-analytics-tableau-next-app-deploy/SKILL.md +0 -1350
  127. package/skills/crm-analytics-tableau-next-c360-basemodel-validate/SKILL.md +0 -1862
  128. package/skills/crm-analytics-tableau-next-datacloud-validate/SKILL.md +0 -83
  129. package/skills/crm-analytics-tableau-next-provisioning-validate/SKILL.md +0 -81
  130. package/skills/data360-activation-create/SKILL.md +0 -104
  131. package/skills/data360-activation-external-platform-get/SKILL.md +0 -49
  132. package/skills/data360-activation-target-create/SKILL.md +0 -93
  133. package/skills/data360-activation-v2-create/SKILL.md +0 -456
  134. package/skills/data360-audience-dmo-get/SKILL.md +0 -38
  135. package/skills/data360-calculated-affinity-create/SKILL.md +0 -82
  136. package/skills/data360-calculated-insight-create/SKILL.md +0 -148
  137. package/skills/data360-catalog-metadata-create/SKILL.md +0 -183
  138. package/skills/data360-code-extension-create/SKILL.md +0 -115
  139. package/skills/data360-communication-capping-create/SKILL.md +0 -227
  140. package/skills/data360-connection-create/SKILL.md +0 -491
  141. package/skills/data360-content-lens-create/SKILL.md +0 -181
  142. package/skills/data360-data-action-create/SKILL.md +0 -126
  143. package/skills/data360-data-action-target-create/SKILL.md +0 -181
  144. package/skills/data360-data-clean-room-create/SKILL.md +0 -238
  145. package/skills/data360-data-governance-create/SKILL.md +0 -746
  146. package/skills/data360-data-graph-create/SKILL.md +0 -82
  147. package/skills/data360-data-harmonized-model-object-reference-create/SKILL.md +0 -38
  148. package/skills/data360-data-lake-object-create/SKILL.md +0 -207
  149. package/skills/data360-data-model-object-catalog-get/SKILL.md +0 -49
  150. package/skills/data360-data-model-object-create/SKILL.md +0 -128
  151. package/skills/data360-data-model-object-mapping-create/SKILL.md +0 -106
  152. package/skills/data360-data-space-create/SKILL.md +0 -161
  153. package/skills/data360-data-streams-create/SKILL.md +0 -324
  154. package/skills/data360-engagement-signal-get/SKILL.md +0 -38
  155. package/skills/data360-experiment-create/SKILL.md +0 -82
  156. package/skills/data360-goal-based-campaign-create/SKILL.md +0 -192
  157. package/skills/data360-harmonization-process-history-get/SKILL.md +0 -38
  158. package/skills/data360-harmonized-unstructured-dmo-create/SKILL.md +0 -84
  159. package/skills/data360-identity-resolution-create/SKILL.md +0 -115
  160. package/skills/data360-intelligent-document-processing-create/SKILL.md +0 -148
  161. package/skills/data360-knowledge-graph-construction-create/SKILL.md +0 -93
  162. package/skills/data360-knowledge-graph-create/SKILL.md +0 -216
  163. package/skills/data360-knowledge-space-mcp-configure/SKILL.md +0 -475
  164. package/skills/data360-machine-learning-mcp-configure/SKILL.md +0 -697
  165. package/skills/data360-multi-org-mcp-configure/SKILL.md +0 -117
  166. package/skills/data360-secondary-index-mcp-configure/SKILL.md +0 -126
  167. package/skills/data360-segment-mcp-configure/SKILL.md +0 -159
  168. package/skills/data360-semantic-calculated-dimension-mcp-configure/SKILL.md +0 -93
  169. package/skills/data360-semantic-calculated-measurement-mcp-configure/SKILL.md +0 -93
  170. package/skills/data360-semantic-data-object-mcp-configure/SKILL.md +0 -93
  171. package/skills/data360-semantic-dimension-mcp-configure/SKILL.md +0 -38
  172. package/skills/data360-semantic-engine-mcp-configure/SKILL.md +0 -62
  173. package/skills/data360-semantic-measurement-mcp-configure/SKILL.md +0 -38
  174. package/skills/data360-semantic-metric-mcp-configure/SKILL.md +0 -93
  175. package/skills/data360-semantic-model-mcp-configure/SKILL.md +0 -115
  176. package/skills/data360-standard-mapping-mcp-configure/SKILL.md +0 -38
  177. package/skills/data360-tenant-lifecycle-mcp-configure/SKILL.md +0 -73
  178. package/skills/experience-afv-query/SKILL.md +0 -234
  179. package/skills/experience-agentforce-vibes-in-react-configure/SKILL.md +0 -63
  180. package/skills/experience-apex-components-configure/SKILL.md +0 -69
  181. package/skills/experience-apex-pages-configure/SKILL.md +0 -107
  182. package/skills/experience-app-home-configure/SKILL.md +0 -76
  183. package/skills/experience-aura-lightning-out-access-configure/SKILL.md +0 -58
  184. package/skills/experience-briefcase-configure/SKILL.md +0 -287
  185. package/skills/experience-community-flexi-page-list-create/SKILL.md +0 -74
  186. package/skills/experience-community-template-definition-list-query/SKILL.md +0 -48
  187. package/skills/experience-community-theme-definition-list-query/SKILL.md +0 -38
  188. package/skills/experience-content-assets-configure/SKILL.md +0 -86
  189. package/skills/experience-custom-domain-create/SKILL.md +0 -727
  190. package/skills/experience-defer-rendering-workspace-page-setup-configure/SKILL.md +0 -41
  191. package/skills/experience-field-service-app-builder-configure/SKILL.md +0 -187
  192. package/skills/experience-flow-category-configure/SKILL.md +0 -117
  193. package/skills/experience-formula-configure/SKILL.md +0 -358
  194. package/skills/experience-global-actions-configure/SKILL.md +0 -69
  195. package/skills/experience-global-publisher-layouts-configure/SKILL.md +0 -79
  196. package/skills/experience-instrumentation-configure/SKILL.md +0 -64
  197. package/skills/experience-lex-engagement-configure/SKILL.md +0 -50
  198. package/skills/experience-lightning-bolt-open/SKILL.md +0 -12
  199. package/skills/experience-lightning-out-configure/SKILL.md +0 -129
  200. package/skills/experience-lightning-preview-configure/SKILL.md +0 -67
  201. package/skills/experience-lightning-types-query/SKILL.md +0 -98
  202. package/skills/experience-malware-scan-configure/SKILL.md +0 -71
  203. package/skills/experience-my-salesforce-configure/SKILL.md +0 -126
  204. package/skills/experience-navigation-menus-configure/SKILL.md +0 -235
  205. package/skills/experience-notification-types-configure/SKILL.md +0 -206
  206. package/skills/experience-notifications-configure/SKILL.md +0 -75
  207. package/skills/experience-record-discovery-query/SKILL.md +0 -227
  208. package/skills/experience-regenerate-previews-open/SKILL.md +0 -94
  209. package/skills/experience-sales-cloud-mab-configure/SKILL.md +0 -254
  210. package/skills/experience-schema-builder-open/SKILL.md +0 -38
  211. package/skills/experience-simple-record-home-configure/SKILL.md +0 -110
  212. package/skills/experience-static-resources-configure/SKILL.md +0 -74
  213. package/skills/field-service-setup-coordinate/SKILL.md +0 -62
  214. package/skills/field-service-work-plan-configure/SKILL.md +0 -253
  215. package/skills/fsc-actionable-segmentation-settings-configure/SKILL.md +0 -180
  216. package/skills/fsc-digital-origination-bre-decision-matrix-foundation-create/SKILL.md +0 -196
  217. package/skills/fsc-digital-origination-bre-disclosures-consent-configure/SKILL.md +0 -106
  218. package/skills/fsc-digital-origination-bre-document-upload-configure/SKILL.md +0 -96
  219. package/skills/fsc-digital-origination-bre-permissions-assign/SKILL.md +0 -111
  220. package/skills/fsc-digital-origination-bre-setup-coordinate/SKILL.md +0 -250
  221. package/skills/fsc-digital-origination-bre-stp-eligibility-configure/SKILL.md +0 -122
  222. package/skills/fsc-digital-origination-coordinate/SKILL.md +0 -653
  223. package/skills/fsc-digital-origination-demo-run/SKILL.md +0 -225
  224. package/skills/fsc-digital-origination-execution-guardrails-validate/SKILL.md +0 -112
  225. package/skills/fsc-digital-origination-initial-setup-configure/SKILL.md +0 -396
  226. package/skills/fsc-digital-origination-pricing-setup-coordinate/SKILL.md +0 -336
  227. package/skills/fsc-digital-origination-pricing-setup-data-foundation-create/SKILL.md +0 -208
  228. package/skills/fsc-digital-origination-pricing-setup-procedure-create/SKILL.md +0 -375
  229. package/skills/fsc-digital-origination-product-setup-act1-permissions-assign/SKILL.md +0 -83
  230. package/skills/fsc-digital-origination-product-setup-coordinate/SKILL.md +0 -248
  231. package/skills/fsc-digital-origination-sample-data-create/SKILL.md +0 -206
  232. package/skills/fsc-document-checklist-settings-configure/SKILL.md +0 -57
  233. package/skills/fsc-flexible-hierarchy-configure/SKILL.md +0 -148
  234. package/skills/fsc-flexible-hierarchy-foundation-configure/SKILL.md +0 -1430
  235. package/skills/fsc-flexible-hierarchy-graph-config-create/SKILL.md +0 -471
  236. package/skills/fsc-flexible-hierarchy-rule-based-graph-deploy/SKILL.md +0 -429
  237. package/skills/fsc-pricing-product-configurator-configure/SKILL.md +0 -150
  238. package/skills/fsc-pricing-salesforce-omnistudio-switch/SKILL.md +0 -123
  239. package/skills/fsc-product-act2-catalog-categories-create/SKILL.md +0 -82
  240. package/skills/fsc-product-act3-attributes-create/SKILL.md +0 -249
  241. package/skills/fsc-product-act4-classification-assignment-create/SKILL.md +0 -196
  242. package/skills/fsc-product-act5-considerations-get/SKILL.md +0 -44
  243. package/skills/fsc-stage-management-apex-flow-deploy/SKILL.md +0 -384
  244. package/skills/fsc-stage-management-compliant-data-sharing-configure/SKILL.md +0 -144
  245. package/skills/fsc-stage-management-decision-matrices-create/SKILL.md +0 -107
  246. package/skills/fsc-stage-management-definition-assignments-create/SKILL.md +0 -189
  247. package/skills/fsc-stage-management-definition-create/SKILL.md +0 -108
  248. package/skills/fsc-stage-management-permissions-assign/SKILL.md +0 -143
  249. package/skills/fsc-stage-management-transitions-configure/SKILL.md +0 -139
  250. package/skills/health-cloud-appt-booking-config-configure/SKILL.md +0 -135
  251. package/skills/health-cloud-appt-booking-url-config-configure/SKILL.md +0 -134
  252. package/skills/health-cloud-care-provider-affl-role-config-configure/SKILL.md +0 -136
  253. package/skills/health-cloud-care-provider-search-config-configure/SKILL.md +0 -134
  254. package/skills/health-cloud-care-requests-create/SKILL.md +0 -178
  255. package/skills/health-cloud-initial-configure/SKILL.md +0 -511
  256. package/skills/health-cloud-patient-appointment-scheduling-configure/SKILL.md +0 -1374
  257. package/skills/health-cloud-provider-search-settings-configure/SKILL.md +0 -924
  258. package/skills/health-cloud-referral-management-coordinate/SKILL.md +0 -513
  259. package/skills/health-cloud-timeline-configure/SKILL.md +0 -622
  260. package/skills/health-cloud-virtual-visit-config-configure/SKILL.md +0 -135
  261. package/skills/industries-account-score-settings-query/SKILL.md +0 -78
  262. package/skills/industries-actionable-list-data-sources-dmo-configure/SKILL.md +0 -177
  263. package/skills/industries-ad-product-availability-search/SKILL.md +0 -399
  264. package/skills/industries-advanced-account-forecast-settings-configure/SKILL.md +0 -628
  265. package/skills/industries-advanced-therapy-management-settings-configure/SKILL.md +0 -73
  266. package/skills/industries-atm-settings-starter-configure/SKILL.md +0 -76
  267. package/skills/industries-batch-document-ai-configure/SKILL.md +0 -196
  268. package/skills/industries-behavioral-health-app-settings-configure/SKILL.md +0 -71
  269. package/skills/industries-branch-management-settings-configure/SKILL.md +0 -89
  270. package/skills/industries-bre-decision-table-access-configure/SKILL.md +0 -367
  271. package/skills/industries-brokerage-settings-configure/SKILL.md +0 -41
  272. package/skills/industries-calendar-sync-settings-configure/SKILL.md +0 -89
  273. package/skills/industries-care-request-settings-configure/SKILL.md +0 -218
  274. package/skills/industries-case-management-intelligence-settings-configure/SKILL.md +0 -54
  275. package/skills/industries-catalog-process-attributes-products-configure/SKILL.md +0 -380
  276. package/skills/industries-catalog-process-fulfillment-configure/SKILL.md +0 -216
  277. package/skills/industries-catalog-process-intake-configure/SKILL.md +0 -219
  278. package/skills/industries-catalog-process-knowledge-configure/SKILL.md +0 -153
  279. package/skills/industries-catalog-process-preprocessor-configure/SKILL.md +0 -168
  280. package/skills/industries-cds-general-settings-configure/SKILL.md +0 -69
  281. package/skills/industries-claim-financial-settings-configure/SKILL.md +0 -169
  282. package/skills/industries-clinical-data-model-settings-configure/SKILL.md +0 -136
  283. package/skills/industries-clinical-data-model-settings-starter-configure/SKILL.md +0 -105
  284. package/skills/industries-collection-plan-settings-configure/SKILL.md +0 -132
  285. package/skills/industries-comms-service-console-settings-configure/SKILL.md +0 -159
  286. package/skills/industries-compliance-configure/SKILL.md +0 -102
  287. package/skills/industries-compliance-document-extraction-setup-configure/SKILL.md +0 -76
  288. package/skills/industries-contact-center-app-layout-configure/SKILL.md +0 -88
  289. package/skills/industries-contact-center-components-configure/SKILL.md +0 -96
  290. package/skills/industries-contact-center-path-knowledge-configure/SKILL.md +0 -95
  291. package/skills/industries-contact-center-user-access-assign/SKILL.md +0 -96
  292. package/skills/industries-course-waitlist-config-configure/SKILL.md +0 -162
  293. package/skills/industries-crisis-center-settings-configure/SKILL.md +0 -84
  294. package/skills/industries-custom-object-settings-configure/SKILL.md +0 -94
  295. package/skills/industries-data-cloud-integration-configure/SKILL.md +0 -88
  296. package/skills/industries-data-space-feature-mappings-configure/SKILL.md +0 -245
  297. package/skills/industries-decision-matrix-builder-configure/SKILL.md +0 -78
  298. package/skills/industries-decision-table-hbase-configure/SKILL.md +0 -87
  299. package/skills/industries-decision-table-version-configure/SKILL.md +0 -74
  300. package/skills/industries-decision-tables-builder-configure/SKILL.md +0 -253
  301. package/skills/industries-decision-tables-configure/SKILL.md +0 -439
  302. package/skills/industries-energy-utilities-configure/SKILL.md +0 -251
  303. package/skills/industries-eu-cloud-multisite-configure/SKILL.md +0 -1008
  304. package/skills/industries-eu-new-connections-configure/SKILL.md +0 -30
  305. package/skills/industries-explainability-msg-template-configure/SKILL.md +0 -135
  306. package/skills/industries-expression-set-message-token-configure/SKILL.md +0 -135
  307. package/skills/industries-field-service-settings-configure/SKILL.md +0 -82
  308. package/skills/industries-form-framework-settings-configure/SKILL.md +0 -30
  309. package/skills/industries-fsc-ai-settings-configure/SKILL.md +0 -57
  310. package/skills/industries-fsc-association-engine-settings-configure/SKILL.md +0 -172
  311. package/skills/industries-fsc-b2b-settings-configure/SKILL.md +0 -61
  312. package/skills/industries-fsc-insurance-settings-configure/SKILL.md +0 -58
  313. package/skills/industries-fsc-visa-fulfillment-setup-configure/SKILL.md +0 -103
  314. package/skills/industries-fsc-wealth-agent-settings-configure/SKILL.md +0 -117
  315. package/skills/industries-fsc-wealth-settings-configure/SKILL.md +0 -99
  316. package/skills/industries-fundraising-gift-entry-settings-configure/SKILL.md +0 -120
  317. package/skills/industries-fundraising-rfm-configure/SKILL.md +0 -128
  318. package/skills/industries-fundraising-settings-configure/SKILL.md +0 -145
  319. package/skills/industries-fundraising-source-code-gen-configure/SKILL.md +0 -299
  320. package/skills/industries-google-maps-api-key-settings-configure/SKILL.md +0 -87
  321. package/skills/industries-grantmaking-intelligence-settings-open/SKILL.md +0 -58
  322. package/skills/industries-hc-score-category-settings-configure/SKILL.md +0 -167
  323. package/skills/industries-health-engagement-settings-configure/SKILL.md +0 -218
  324. package/skills/industries-home-health-agentforce-setup-configure/SKILL.md +0 -131
  325. package/skills/industries-home-health-bundling-policy-create/SKILL.md +0 -50
  326. package/skills/industries-home-health-entity-labels-configure/SKILL.md +0 -29
  327. package/skills/industries-home-health-fsl-package-deploy/SKILL.md +0 -71
  328. package/skills/industries-home-health-fsl-settings-validate/SKILL.md +0 -27
  329. package/skills/industries-home-health-guided-setup-care-and-skill-get/SKILL.md +0 -80
  330. package/skills/industries-home-health-guided-setup-configure/SKILL.md +0 -836
  331. package/skills/industries-home-health-guided-setup-enable-org-fsl-get/SKILL.md +0 -55
  332. package/skills/industries-home-health-guided-setup-get-org-ready-get/SKILL.md +0 -61
  333. package/skills/industries-home-health-licenses-assign/SKILL.md +0 -27
  334. package/skills/industries-home-health-operating-hours-create/SKILL.md +0 -40
  335. package/skills/industries-home-health-scheduling-policy-create/SKILL.md +0 -41
  336. package/skills/industries-home-health-service-objective-create/SKILL.md +0 -22
  337. package/skills/industries-home-health-skills-create/SKILL.md +0 -31
  338. package/skills/industries-home-health-users-create/SKILL.md +0 -29
  339. package/skills/industries-icm-act3-toggles-configure/SKILL.md +0 -198
  340. package/skills/industries-icm-act5-genai-suggested-assessments-configure/SKILL.md +0 -361
  341. package/skills/industries-icm-act6-mcg-integration-configure/SKILL.md +0 -550
  342. package/skills/industries-integrated-care-management-configure/SKILL.md +0 -168
  343. package/skills/industries-object-enablement-configure/SKILL.md +0 -86
  344. package/skills/industries-tpm-system-processing-service-configure/SKILL.md +0 -64
  345. package/skills/integration-apex-settings-configure/SKILL.md +0 -61
  346. package/skills/marketing-e360-email-archiving-configure/SKILL.md +0 -73
  347. package/skills/platform-custom-permissions-configure/SKILL.md +0 -687
  348. package/skills/platform-label-workbench-import-create/SKILL.md +0 -67
  349. package/skills/platform-privacy-agent-settings-configure/SKILL.md +0 -752
@@ -1,868 +0,0 @@
1
- ---
2
- name: flow-recipe-author
3
- license: LICENSE.txt has complete terms
4
- description: "Load when building a NEW Salesforce Flow from scratch OR editing/patching/extending/repairing an EXISTING one via the flow MCP. A Mode Detection gate (Phase 0) decides GENERATE vs EVOLVE from the user's intent and whether flow JSON was supplied by the client. Pipeline: Detect -> [Load, evolve only] -> Plan -> Save, with a hard approval gate before any save. TRIGGER when: user asks to create a flow, automate a process, build/generate flow metadata, OR update/add-to/change/extend/fix an existing flow, OR the client passed existing flow JSON for modification. DO NOT TRIGGER when running tests (use flow-recipe-testing), summarizing a flow (use flow-recipe-summarize), or building an Orchestrator / ApprovalWorkflow flow (Phase 2 hands those to flow-recipe-orchestrate)."
5
- metadata:
6
- version: "3.2"
7
- related-skills: flow-type-resolver, flow-anti-patterns, flow-element-start, flow-flow-properties, flow-metadata-schema, flow-value-rules, flow-formula-expression, flow-preview-renderer, flow-recipe-orchestrate
8
- ---
9
-
10
- # Flow Author — Create or Evolve
11
-
12
- Builds a complete, deployable Salesforce Flow, whether it is **net-new** or an
13
- **edit to an existing flow**. One pipeline, two modes, selected by a Mode
14
- Detection gate up front:
15
-
16
- - **GENERATE** — net-new build from the user's request. Skips the Load phase.
17
- - **EVOLVE** — edits an existing flow supplied as JSON by the client. Runs the
18
- Load phase first, edits **surgically**, and never skips the approval gate.
19
-
20
- Output format is **JSON** (Tooling API wire format) for
21
- `POST /services/data/vXX.0/flowbuilder/flow/actions/save`. Not XML. (If a client persists the flow by
22
- writing a `.flow-meta.xml` and deploying it as metadata instead of calling the
23
- save endpoint, the same topology rules still apply — a metadata deploy stores the
24
- flow verbatim, so every `AUTO_LAYOUT_CANVAS` v68 terminating branch must still
25
- carry an explicit `ends[]` End. See `../../shared/end/end.md`. In the XML, write
26
- each element and field under the name the JSON uses: one repeated element per
27
- array entry (`<ends>`, `<waitEvents>`, `<actionCalls>`), and nothing the JSON
28
- shape doesn't have on that element. An unknown or misplaced element fails the
29
- deploy with `Error parsing file: Element … invalid at this location`.)
30
-
31
- Phase 2 asks targeted clarifying questions inline when the request is
32
- materially ambiguous (see Plan step 1) before moving into design.
33
-
34
- ---
35
-
36
- ## Phase 0 — Mode Detection (read this first)
37
-
38
- Decide the mode before doing anything else. This is the intent guardrail that
39
- keeps a net-new build from mutating a live flow, and an edit from silently
40
- becoming a brand-new flow.
41
-
42
- ```text
43
- Mode = EVOLVE if ANY of:
44
- - the client supplied existing flow JSON (input payload, prior save response,
45
- a local file, or a Flow Builder source export), OR
46
- - the user named an existing flow to change ("update Lead_Routing",
47
- "add a step to my onboarding flow"), OR
48
- - the request references an existing element, version, or a save-time
49
- validation error to repair.
50
- Mode = GENERATE otherwise (the request describes a new flow and no existing
51
- flow is in play).
52
- ```
53
-
54
- **JSON availability is the deciding signal.** Non-empty flow JSON means an
55
- existing flow is in play → **EVOLVE**, even when the wording says
56
- "create"/"build"/"make" (a single request has no second flow to create). Intent
57
- only breaks the tie when **no** or **empty** JSON is supplied:
58
-
59
- | User intent | Flow JSON supplied? | Resolution |
60
- |---|---|---|
61
- | New flow | none | **GENERATE** |
62
- | New flow wording | present (non-empty) | **EVOLVE** — non-empty JSON is an existing flow in play; "create" wording does not spawn a second flow. |
63
- | Edit existing | present (non-empty) | **EVOLVE** |
64
- | Edit existing | **empty or missing** | **EVOLVE intent stands — do NOT downgrade to GENERATE.** The flow body is a required input the client must provide. Ask for the current flow JSON and stop; do not fabricate a net-new flow to "fill the gap". |
65
-
66
- **Re-detect every turn — a "yes" follow-up does not flip the mode.** Mode is decided on the flow JSON attached to the **current** request, on every turn. While the client keeps attaching a non-empty flow JSON, every turn stays **EVOLVE** — including an affirmative follow-up ("yes", "create it", "go ahead", "yes create a flow") that lands after you declined a process-type change. That reply is the same blocked request reworded, not a new GENERATE: the attached flow has not changed, so its `processType` still cannot change — decline again and stop. GENERATE begins **only** when the client stops attaching an existing flow (the user opens a new or blank flow, so no non-empty JSON arrives). You cannot spawn a net-new flow while one is attached, no matter how many "yes"es precede it.
67
-
68
- **One edit session = one flow. No "separate new flow" escape.** In EVOLVE the
69
- supplied JSON is the single flow this control point saves back to — there is no
70
- second slot. If the request describes something the loaded flow cannot become
71
- without a different `processType` than the loaded flow's — in either direction, for
72
- **any** flow type — that is a **process-type change → decline with a reason** per the
73
- change-type table in Phase 2. (Fixed-platform incompatibility only: the element or
74
- behavior cannot exist under the loaded flow's `processType`. Not the org-availability
75
- (`.elements`) or FLS gate, which keep their build-without / halt branch at Phase 2 §
76
- Probe schema.)
77
- Do **not** offer a new / separate flow, offer to design / build / "help with" one,
78
- ask whether to proceed ("would you like me to…?"), or propose any other workaround.
79
- Decline and **stop** — state once that they can make a new flow themselves, then end
80
- the turn. A net-new save on this control point overwrites the flow in context. "The
81
- loaded flow isn't what the user asked for" is **never** a license to switch to
82
- GENERATE or create a second flow — it is the decline trigger. Any affirmative
83
- follow-up ("yes", "create it", "go ahead", "yes create a flow") is that same blocked
84
- request reworded, not permission to build; while the flow JSON is still attached it
85
- stays EVOLVE and is declined again (see "Re-detect every turn" above).
86
-
87
- **Ambiguous intent?** Ask exactly one question and stop until answered:
88
-
89
- > "Are you starting a new flow, or editing one that already exists?"
90
-
91
- Hard rules that follow from the mode:
92
-
93
- - Enter **Phase 1 (Load) only in EVOLVE**. Never run it in GENERATE.
94
- - The override phrase (`"skip the"` / `"don't ask"`) may skip the Plan-phase
95
- intent capture **only in GENERATE**. In EVOLVE the gate is never skipped —
96
- every save touches a flow that may already be active or referenced by other
97
- automation.
98
-
99
- ### EVOLVE hard limitations (surface these before starting an edit)
100
-
101
- 1. **The editable flow body is a client-supplied input.**
102
- `GET /services/data/vXX.0/flowbuilder/flow/{id}` can return the raw graph for read-only
103
- summarization, and `GET /services/data/vXX.0/flowbuilder/flow/{id}/validation-results` can return the graph with
104
- validation results. EVOLVE still requires the exact client-supplied working
105
- body (from Flow Builder, Vibes, or an agentic orchestrator managing its own
106
- copy — Claude Code, Cursor, Copilot, etc.) rather than silently replacing it
107
- with an org read. If it is absent, request it; editing "by description
108
- alone" without the user's source is lossy — tell the user this upfront.
109
- 2. **No flow deletion.** Use Setup → Process Automation → Flows to delete.
110
- Throwaway flows should be suffixed `_TEMP_<YYYYMMDD>`.
111
-
112
- ### EVOLVE surgical / minimal-surface rule (applies to the whole EVOLVE path)
113
-
114
- **Touch only what the requested change requires.** The edit modifies the target
115
- element(s) and the connectors that must be rewired to keep the graph valid —
116
- and nothing else.
117
-
118
- - Everything else in the client-supplied JSON is preserved **byte-for-byte**:
119
- unrelated elements, element ordering, resources, `locationX`/`locationY`,
120
- existing `processMetadataValues`, labels, and descriptions.
121
- - No opportunistic "improvements", reformatting, renaming, or re-topology of
122
- untouched parts. If the user did not ask for it, do not change it.
123
- - Advisory Auditor/security findings on **untouched** elements are reported to
124
- the user, never auto-fixed inside an evolve. Surface, do not silently repair.
125
-
126
- **Bounded exception — server read-back forms that cannot be saved verbatim.**
127
- A retrieve hands back some fields in a *read-back* shape the server itself
128
- rejects on save — specifically, the times `schedule.startTime` /
129
- `schedule.endTime` / `resumeTime` as `{ "timeInMillis": N }` objects and the
130
- dates `schedule.startDate` / `schedule.endDate` / `resumeDate` as epoch-millis
131
- integers, instead of the wire-string form `POST /services/data/vXX.0/flowbuilder/flow/actions/save`
132
- requires. These
133
- fields are normalized to their wire-string form on **every** element that
134
- carries them, touched or not — this is a mechanical serialization fix, not a
135
- design change. It is exempt from byte-for-byte preservation and **overrides**
136
- the "report-don't-fix untouched elements" rule above for these fields
137
- specifically: the agent repairs them, it does not just report them. See
138
- `../../shared/anti-patterns.md` item 39 for the full field list and conversions.
139
-
140
- Rationale: unbounded edits compound flow complexity across sessions and are not
141
- deterministic across LLM runs. Surgical edits keep evolve reviewable and
142
- reproducible.
143
-
144
- ---
145
-
146
- ## Approval gate
147
-
148
- One hard gate separates Plan and Save:
149
-
150
- **End of Phase 2 (Plan):** the agent presents the plan summary and asks
151
- "Approve this plan?" The user MUST explicitly accept (e.g., "yes", "looks
152
- good", "approved", "ship it") before Phase 3 (Save) begins. Skipping the gate
153
- is a contract violation.
154
-
155
- **The plan gate is NEVER skipped.** Even on full autopilot, the user sees and
156
- approves the plan summary before any save call. In EVOLVE this is
157
- absolute — every save touches an existing flow that may be active or referenced
158
- by other automation.
159
-
160
- **Silence is NOT acceptance.** If the user replies with a refinement, a
161
- question, or anything that isn't an unambiguous accept, treat it as "still
162
- refining" and re-present the plan summary with the refinement applied.
163
-
164
- **Override phrases (GENERATE only).** If a GENERATE request begins with
165
- `"skip the"` or `"don't ask"` (e.g., "don't ask, just build it"), the agent
166
- infers the design silently and presents the plan with minimal back-and-forth —
167
- but the Phase 2 plan gate still stands. The user always approves the
168
- plan summary before any save. This override has no effect in EVOLVE.
169
-
170
- ---
171
-
172
- ## Phase 1 — Load (EVOLVE ONLY — skipped entirely in GENERATE)
173
-
174
- Establish the baseline before touching anything.
175
-
176
- 1. **Ingest the client-supplied flow JSON.** The current flow body is provided
177
- by the client as input (see EVOLVE hard limitation 1). If it has not been
178
- provided, ask for it and stop — do not reconstruct it from the org and do
179
- not fall back to a net-new build.
180
- 2. **Call `dispatch_readonly(method: "GET", url: "/services/data/vXX.0/flowbuilder/flow/<definition ID>/versions")`** to confirm the
181
- target version number and active/draft status. (Volatile — always re-fetch,
182
- never reuse from history.)
183
- 3. **Call `dispatch_readonly(method: "GET", url: "/services/data/vXX.0/flowbuilder/flow/<id>/validation-results")`** for the version-level
184
- metadata (label, processType, apiVersion, runInMode). Do not reuse a cached
185
- call — this is Tier 4.
186
- 4. Parse the supplied JSON and build an **internal element index**:
187
- name → type → connectors. This is the working graph for the session.
188
- 5. **Note pre-existing `processMetadataValues`** (especially `BuilderType` and
189
- `CanvasMode`). In EVOLVE these are preserved **verbatim** — never inject,
190
- overwrite, or flip a canvas mode the source didn't ask for (silently
191
- re-laying-out an existing flow can corrupt it). See `../../shared/anti-patterns.md`
192
- item 37.
193
-
194
- ---
195
-
196
- ## Phase 2 — Plan (shared by both modes)
197
-
198
- Translate the request into a concrete flow design (GENERATE) or apply the
199
- requested change to the working graph (EVOLVE), run audits, and present the
200
- plan summary for approval. This is internal work that produces **one
201
- user-visible artifact**: the plan summary.
202
-
203
- ### Plan steps (do all in order, no tool calls visible to the user except as needed for schema)
204
-
205
- 1. **Clarify underspecified business intent, if needed.** Check whether the
206
- request gives enough business detail to design confidently: the
207
- trigger/starting condition, the core action(s), any branching or decision
208
- logic, and the expected outcome. If a material gap exists (e.g., the
209
- request implies branching but names no conditions, the outcome is
210
- ambiguous, or a consequential edge case is unaddressed), ask the user 1-2
211
- targeted questions in plain business language before drafting. Do not ask
212
- about objects, fields, trigger types, or other implementation details —
213
- those are resolved by schema probing in step 4. Skip this step entirely if
214
- the request is already unambiguous; this is a gap check, not a mandatory
215
- Q&A round. *(Override phrase: if the request began with `"skip the"` /
216
- `"don't ask"`, infer reasonable defaults instead of asking — GENERATE only,
217
- per the Approval gate override.)*
218
- **One exception on trigger types:** if the flow-type resolver in step 2
219
- returns `mustAsk: true` (for example a "CRM Triggered Flow" request that
220
- does not say "marketing"), ask its `decidingClarification` in plain words
221
- before drafting, and build the type the user picks. Don't choose for them.
222
- With the override phrase, use the resolver's leaning `tuple` and say in one
223
- line which type you built.
224
- 2. **Pick `processType` and `triggerType`.** **Load and apply the flow-type-resolver
225
- reference (`../../shared/flow-type-resolver/flow-type-resolver.md`)** to map the
226
- request's characteristics and described trigger ("when an order is placed", "on a
227
- button click", etc.) to the correct tuple. It is the single source of flow-type
228
- classification — do **not** re-derive the tuple inline from this recipe or any other
229
- reference file.
230
- - **[Orchestration hand-off — run it the moment the resolver returns a tuple.]**
231
- If the resolved `processType` is `Orchestrator` or `ApprovalWorkflow`, stop
232
- this recipe and hand control, with the resolution, to
233
- `../orchestrate/orchestrate.md`. It owns the shape gate, the per-stage loop,
234
- and the per-stage saves. Do not plan stages here. Step flows and evaluation
235
- flows that the orchestration co-generates come back here as ordinary
236
- GENERATE requests. (EVOLVE of a loaded orchestration hands off the same
237
- way, after the processType lock below.)
238
- - **Build the Start for the resolved tuple (GENERATE).** For a new flow, write the resolved `triggerType`
239
- into `start.triggerType` (omit it for `None`), and read that trigger type's section of
240
- `../../elements/start/start.md` before writing the Start. A Start without the
241
- resolved `triggerType` makes a different flow type. For example, an
242
- `AutoLaunchedFlow` with no `start.triggerType` is a plain autolaunched flow, not
243
- an On-Demand Flow: for `OnDemandNoTrigger`, follow § On-Demand
244
- (`start.triggerType` `OnDemandNoTrigger` and a top-level `dataSpace`). In EVOLVE,
245
- keep the loaded `start.triggerType` unless the user asks to change the trigger.
246
-
247
- Call
248
- `dispatch_readonly(method: "GET", url: "/services/data/vXX.0/flowbuilder/schema/flow-capabilities", queryParams: { processType, triggerType })` **once** and read both
249
- `.elements` and `.flowFeatures` from that single cached result — confirm
250
- every element type the design will use is available in this org and any
251
- opt-in features are gated.
252
- - **[EVOLVE — processType lock; mechanical, run it the moment the resolver returns a tuple.]** The resolver is prompt-only and never saw the loaded flow, so this compare is **yours, not the resolver's**: take the resolver's resolved `processType` and compare it against the **loaded flow's `processType`** (the `metadata.processType` of the client-supplied JSON, captured in Phase 1). **If resolved `processType` ≠ loaded `processType` → STOP:** it is a process-type change. Decline per the change-type table below and do **not** emit the tuple, draft, save, or offer a new / separate flow — a later "yes, make it separate" is the same blocked request reworded (see Phase 0). This holds for **any** flow type, in either direction; a confident, high-confidence resolver result does not override it. A differing `triggerType` *within the same* `processType` is a legal edit — reuse the loaded `processType` and re-read flow-capabilities when the trigger changes or when adding net-new nodes. This lock is the `processType` compare only; the org-availability (`.elements`) and FLS gates keep their own build-without / halt branch at § Probe schema.
253
- - **"Supported in metadata" ≠ "authorable in the canvas."** Emit only
254
- palette-authorable entries (those carrying a `configComponent`); never emit
255
- a bare entry with `"isElementSubtype": false`, `"attributes": null`, and no
256
- `configComponent`. See `../../shared/anti-patterns.md` item 29 (the base `Wait`
257
- is the known trap — use a Wait subtype; `../../elements/wait/wait.md`).
258
- 3. **Pick API version.** Call `dispatch_readonly(method: "GET", url: "/services/data/vXX.0/flowbuilder/flow/version-info")` with optional
259
- `builderType` only; the tool does not accept `processType`. Select the entry
260
- in `processTypes[]` whose `processType` equals the chosen flow process type,
261
- and set `apiVersion = max(apiVersionsList)` (the latest supported version,
262
- currently 68) unless the user explicitly specified a different version. Do
263
- NOT use `defaultApiVersion` — that is the server's fallback for flows that
264
- omit `apiVersion` entirely; it resolves to an obsolete version (49) and
265
- disables recent features (Data Space v65+, scheduled-flow `maxBatchSize`
266
- v63+, and others). *(EVOLVE: preserve the existing flow's `apiVersion`
267
- unless the user asked to change it.)*
268
- **The resolved version is fixed by `GET /services/data/vXX.0/flowbuilder/flow/version-info` — never lower it, and
269
- never assert a version cap, to work around a save error.** A save failure such
270
- as `<EndName> not found` is a referential-integrity bug (a connector targets an
271
- End with no matching `ends[]` entry — see `../../shared/anti-patterns.md`
272
- item 14), **not** a signal that the org lacks v68 or that ends are unsupported.
273
- Diagnose the actual error and fix it (add the missing `ends[]` entry); do NOT
274
- downgrade `apiVersion`, drop `ends[]`, or claim the flow must open in Free-Form.
275
- Whether ends are storable is decided **only** by the verified
276
- `max(apiVersionsList)` above, never inferred from a save error.
277
- 4. **Probe schema.** For every object the design references, call
278
- `dispatch_readonly(method: "GET", url: "/services/data/vXX.0/flowbuilder/platform/entity/<Object>/fields")`. For every action call, call
279
- `dispatch_readonly(method: "GET", url: "/services/data/vXX.0/flowbuilder/action/invocable-action-details", queryParams: { actionType, actionName })`. For
280
- every Screen LWC, call `dispatch_readonly(method: "GET", url: "/services/data/vXX.0/flowbuilder/screen-component")` +
281
- `GET /services/data/vXX.0/flowbuilder/screen-component/{apiName}`. **Cache aggressively** — never
282
- re-call a tool with the same args if the result is already in conversation
283
- history (Tier 1-3).
284
-
285
- **`GET /services/data/vXX.0/flowbuilder/platform/entity/{apiName}/fields` is authoritative and FLS-filtered.** The response
286
- is the complete field inventory the skill may reference for that sObject —
287
- fields not in the response are inaccessible, and MUST NOT appear in any
288
- metadata the skill emits, even well-known standard fields (`DoNotCall`,
289
- `HasOptedOutOfFax`, `HasOptedOutOfEmail`, etc.). If the user's requested
290
- behavior names a field not in the response, or uses a business term
291
- (for example "engaged" or "high-value") that no returned field clearly
292
- matches, do NOT proceed to Phase 3.
293
- Instead, stop here and present the two branch options to the user:
294
-
295
- - *Build without the field* — describe what is (and isn't) possible with
296
- the accessible fields, and ask the user to confirm the reduced scope.
297
- List substitutes closest real data first. Check related objects, data
298
- graph DMOs, and records the flow already reads (for example a related
299
- Contact and its Account). Put any test-looking field last and label it,
300
- even when you only name it as an example.
301
- - *Halt* — instruct the user to have their Salesforce admin grant FLS on
302
- the field, or re-authenticate the MCP session as a user with access.
303
-
304
- Wait for the user's decision before moving on. See
305
- `../../shared/anti-patterns.md` item 40.
306
-
307
- **Send to Journey probe sequence.** When the design contains
308
- `sendToJourney`, load `../../elements/action-call/send-to-journey.md` and the
309
- Start guide its trigger table names (for a Segment flow,
310
- `../../elements/start/segment-triggered.md` plus its shared contract in
311
- `../../elements/start/audience-common.md`). Complete both before drafting
312
- the action. Stop for trigger variants outside the documented MVP without
313
- describing those variants as unsupported by the platform.
314
-
315
- **Marketing message probe sequence.** When the design sends a marketing
316
- email, SMS or RCS message (`sendEmailMessage`, `sendSmsMessage`,
317
- `sendRcsMessage`), read that action's section of
318
- `../../elements/action-call/action-call.md` (Send Email Message, Send SMS
319
- Message or Send RCS Message) and its § `contentId` Rule before drafting the
320
- action, not only the top of the file. They turn the content, sender and
321
- subscription the user names into the values the action binds: `contentId` is
322
- the `contentFqn` from `GET /services/data/vXX.0/flowbuilder/messaging/content-fqn`, never a
323
- `ManagedContent` or `EmailContent` Id, and a subscription's `id` and
324
- `channelTypeId` are bound together.
325
- 5. **Draft the element list, connector topology, and resource list.** Decompose
326
- the request into logical units of business work, then map each unit to one or
327
- more concrete FDL elements. Load per-element skills from the registry below
328
- as each element type is named. If any element or resource uses a **formula
329
- expression** (a Formula resource, or a condition/filter in Formula mode),
330
- read `../../shared/formula-expression.md` first — it carries the operator,
331
- function-availability, picklist (`ISPICKVAL`), and type-coercion rules that
332
- apply to every formula.
333
-
334
- **[EVOLVE addendum] Identify the change type and apply it surgically to the
335
- working graph.** Per the minimal-surface rule, touch only the affected nodes
336
- and connectors.
337
-
338
- | Change type | Description | Key risk |
339
- |---|---|---|
340
- | **Add element** | Insert a new node into the graph | Connector wiring — must update upstream element's `connector` to point to the new node, and new node's `connector` to point to the former target |
341
- | **Remove element** | Delete a node | Dangling connectors — upstream elements still reference the removed node |
342
- | **Modify element** | Change config on an existing node | Schema re-resolution — re-probe `dispatch_readonly(method: "GET", url: "/services/data/vXX.0/flowbuilder/platform/entity/{apiName}/fields")` or `dispatch_readonly(method: "GET", url: "/services/data/vXX.0/flowbuilder/action/invocable-action-details")` if the object/action changes |
343
- | **Add path** | New Decision outcome or scheduled path | `defaultConnector` must still exist; audit all outcomes |
344
- | **Fix validation error** | Repair a save-time rejection | Map error to anti-pattern, apply targeted fix, do not over-correct |
345
- | **Rename flow** | Change label or API name | `fullName` change requires `saveType: "saveAsNewDefinition"` — confirm with user |
346
- | **Change process type** | Switch `processType` on an existing flow (e.g. Screen Flow ↔ record/schedule/autolaunched) | **Not supported — decline with a reason.** Tell the user changing the process type of an existing flow isn't supported. Do **not** offer to create a new flow, or any other workaround — decline and stop; this is one edit session on one control point, so a net-new build would save over the flow in context. Do not name any skill, router, mode, or internal reason. |
347
- | **Change trigger type** | Switch `triggerType` within the same `processType` | **Load and apply the flow-type-resolver reference (`../../shared/flow-type-resolver/flow-type-resolver.md`)** to re-pick the tuple (do not classify inline); re-read flow-capabilities; many element types may become unsupported |
348
-
349
- **[EVOLVE] Graph mutation semantics:**
350
-
351
- Adding an element between two existing nodes:
352
- ```text
353
- Before: A --connector--> B
354
- After: A --connector--> NEW --connector--> B
355
- ```
356
- - Build the new element JSON using the appropriate element skill from the registry.
357
- - Set `NEW.connector.targetReference = B.name`.
358
- - Set `A.connector.targetReference = NEW.name`.
359
- - Add `NEW` to the appropriate element-type array.
360
-
361
- Removing an element:
362
- ```text
363
- Before: A --connector--> REMOVE --connector--> B
364
- After: A --connector--> B
365
- ```
366
- - Find every connector in the flow that references `REMOVE.name`
367
- (`connector`, `faultConnector`, `defaultConnector`, `nextValueConnector`,
368
- `noMoreValuesConnector`).
369
- - Re-point each to `REMOVE`'s outgoing connector target (`B.name`).
370
- - Remove `REMOVE` from its element-type array.
371
-
372
- Adding a terminating branch or fault path (auto-layout sources):
373
- - When the retrieved source has explicit End element(s) — Flow-Builder- and
374
- MES-generated flows do — preserve the source's `ends[]`. Give each NEW
375
- terminating branch an explicit End: either converge it on an existing End
376
- (a shared End is valid) or add its own dedicated End. Both are valid
377
- Flow-Builder-native auto-layout shapes.
378
- - Route new faults to a dedicated error handler (`Log_Error` or a
379
- persisted/notified Assignment handler; one shared handler across faults is
380
- fine — item 32) that reaches its own End — a fault pointed directly at an
381
- End (or left empty) is silently dropped on reload (the error path vanishes),
382
- so a handler keeps it. This is an observability preference, not a round-trip
383
- requirement.
384
- - In a marketing flow, add a fault path only when the user asks for error
385
- handling; see `../../shared/fault-paths/fault-paths.md` § Marketing Flows —
386
- Fault Paths Only When Asked.
387
- - See `../../shared/anti-patterns.md` item 38 and the `../../shared/connector/connector.md`
388
- § Terminal Elements EVOLVE worked example.
389
-
390
- Fixing a validation error:
391
- - Quote the verbatim `errors[]` or `warnings[]` entry.
392
- - Map to the matching anti-pattern in `../../shared/anti-patterns.md`.
393
- - Apply the targeted fix described there.
394
- - Do not change any other elements — surgical fixes only.
395
-
396
- **`targetReference` must always be a dev-name, never a GUID.** See
397
- `../../shared/anti-patterns.md` item 14.
398
-
399
- **[EVOLVE] Re-probe schema only when the change targets a NEW schema-bound
400
- resource:**
401
-
402
- | Change | Re-probe needed |
403
- |---|---|
404
- | Object field changed on a record element | `dispatch_readonly(method: "GET", url: "/services/data/vXX.0/flowbuilder/platform/entity/<NewObject>/fields")` |
405
- | Action changed on an action element | `dispatch_readonly(method: "GET", url: "/services/data/vXX.0/flowbuilder/action/invocable-action-details", queryParams: { actionType: <type>, actionName: <new name> })` |
406
- | Subflow target changed | `GET /services/data/vXX.0/flowbuilder/flow/subflows` |
407
- | Screen LWC component changed | `dispatch_readonly(method: "GET", url: "/services/data/vXX.0/flowbuilder/screen-component/<qualifiedApiName>", queryParams: { processType })` (qualified name, e.g. `flowruntime:datatable` — re-`GET /services/data/vXX.0/flowbuilder/screen-component` if only the informal name is known) |
408
- | Trigger type changed | `dispatch_readonly(method: "GET", url: "/services/data/vXX.0/flowbuilder/schema/flow-capabilities", queryParams: { processType, triggerType })` once (read both `.elements` and `.flowFeatures` from the one result) |
409
-
410
- Do NOT re-probe if only the value/assignment on an already-resolved field
411
- changes — the schema hasn't changed, so reuse from conversation history.
412
-
413
- 6. **Run Auditor checks** before presenting the plan summary:
414
- - CRUD inside a loop? See `../../shared/anti-patterns.md` item 1.
415
- - Missing `faultConnector` on fault-capable elements (`actionCalls`, `apexPluginCalls`, `recordLookups`, `recordCreates`, `recordUpdates`, `recordDeletes`, `waits`)? See `../../shared/anti-patterns.md` item 2. Apply each action-specific persisted shape before this generic check. **Skip this check in a marketing flow** (its `start.triggerType` is on the list in `../../shared/fault-paths/fault-paths.md` § Marketing Flows — Fault Paths Only When Asked) unless the user asked for error handling: there, no fault paths is the correct default, so do not flag, add, or recommend them.
416
- - Any non-empty `customErrors[]` (reached via `faultConnector`, a regular `connector`, or left unconnected) when `triggerType` is absent or not `RecordBeforeSave`/`RecordAfterSave`? Invalid — save fails with `TRIGGER_TYPE_ELEMENT_NOT_SUPPORTED` regardless of how the element is reached. Retarget fault paths to a `Log_Error` actionCall or a `$Flow.FaultMessage` Assignment. See `../../shared/anti-patterns.md` item 2. *(For observability, prefer a persisted/notified handler — see the advisory check below.)*
417
- - **[Observability — advisory; headless flows]** In a headless flow (any flow with no screen-rendering capability — Autolaunched, Scheduled, PlatformEvent, Segment, and other event-triggered types; screen-bearing types like Screen Flow, `UnifiedSchedulingFlow`, and `AgxScreenFlow` are **not** headless — route their faults to an error Screen instead), does any `faultConnector` terminate at an Assignment whose `assignmentItems` write `$Flow.FaultMessage` **only to a non-output flow variable** — not to an `isOutput` variable a caller consumes — with **no** downstream element that persists or notifies (a `recordCreate` to a log object, an admin email/notification, or a platform event)? If so, the error is captured in memory only and vanishes when the interview ends — flag it as a silent-failure risk in the plan summary and recommend adding a persistence/notification step (if the element is inside a Loop, accumulate and log once after the loop — item 1). Do **not** block the save (it is valid metadata), and on EVOLVE do not auto-fix untouched elements. Screen flows are exempt (the error Screen surfaces it), as is an Assignment to an `isOutput` variable a parent/Apex caller handles. See `../../shared/anti-patterns.md` item 2 (Observability note) and `../../shared/fault-paths/fault-paths.md` § Observable vs. In-Memory-Only Fault Handling.
418
- - Missing `defaultConnector` on any Decision? See `../../shared/anti-patterns.md` item 7.
419
- - Redundant Get Records + filter-based Update Records re-applying the same filter? See `../../shared/anti-patterns.md` item 30 — reuse the fetched collection (Mode 2 update) instead of re-filtering.
420
- - Any `screens[]` element with both `allowBack: false` and `allowFinish: false`? See `../../shared/anti-patterns.md` item 31.
421
- - Any non-fault connector targeting a terminal, error-message-only screen that's reached via a `faultConnector` (e.g. a success screen falling through into it)? See `../../shared/anti-patterns.md` item 36.
422
- - **[GENERATE; `AUTO_LAYOUT_CANVAS`; resolved `apiVersion` ≥ 68.0] Explicit ends stored:** every terminating branch reaches an explicit `ends[]` entry (`END_ELEMENT_n`) — its connector and the entry co-emitted — including the easy-to-miss loop `noMoreValues`/`nextValue` and decision `default`/outcome termini. Branches may each get their own End or converge on a shared End; both valid. v68.0 made End nodes storable metadata, so a net-new auto-layout flow stores them rather than relying on the implicit omit-the-connector form. Below 68.0, and on any Free-Form flow, emit **no** `ends[]` (omit the connector) — **never emit `ends[]` on a Free-Form flow**. See `../../shared/end/end.md`. *(EVOLVE: preserve the source's `ends[]`; add an explicit End for each NEW terminating branch on an auto-layout source — its own or a shared one.)*
423
- - **[`AUTO_LAYOUT_CANVAS`; applies to GENERATE and EVOLVE] Every terminating branch reaches an explicit End?** Confirm no v68 terminating branch (loop exit, loop body, decision default/outcome, plain element) is left without an `ends[]` target. A shared End (2+ non-fault connectors into one entry) is **valid** — do NOT flag or split it. A `faultConnector` pointed directly at an End is **not** a defect either — it is silently dropped on reload; only advise routing faults to a handler so the error path is not lost silently. See `../../shared/anti-patterns.md` item 38. *(Mid-graph convergence on a continuing element or a shared error screen is also fine; Free-Form sources are exempt.)*
424
- - **[GENERATE] Canvas mode:** a net-new flow must carry the `CanvasMode` PMV — absence is not neutral; the flow silently opens in Free-Form (non-canvas process types like `CustomerLifecycle` are excepted — they take no `CanvasMode`). See `../../shared/anti-patterns.md` item 37. *(EVOLVE: never inject or flip — preserve the source's `processMetadataValues` verbatim.)*
425
- - Every field name in `decisions[].rules[].conditions[].leftValueReference`, `recordLookups[].filters[].field`, `recordLookups[].queriedFields[]`, `recordCreates`/`recordUpdates`/`recordDeletes` filter/input fields, `assignments[].assignmentItems[].assignToReference`, and any `$Record.<Field>` or `<sObjectVar>.<Field>` in a `formulas[]` expression or `filterFormula` — is each one present in the most recent `GET /services/data/vXX.0/flowbuilder/platform/entity/{apiName}/fields` result for its sObject? If not, do NOT save; branch to *build without the field* or *halt and refer to the admin* per Phase 2 § Probe schema. See `../../shared/anti-patterns.md` item 40.
426
- - Hard-coded IDs? See `../../shared/anti-patterns.md` item 3.
427
- - Element names unique and ≤ 80 chars? See `../../shared/anti-patterns.md` items 16, 17.
428
- - Value field consistency: every value key paired with its `*DataType`, no two value keys, no GUIDs in `elementReference`. See `../../shared/value-rules.md`.
429
- - **Security posture** (advisory): run the checks in `../../shared/security/security.md`. See `../../shared/anti-patterns.md` item 28. *(EVOLVE: pay attention to changes that newly introduce a risk — switching to system mode, adding a whole-record write, adding a guest-facing screen input.)*
430
-
431
- Fix all failures **introduced by this build/change** before presenting the
432
- plan summary. Security and headless-flow observability findings are **advisory** — do not fix silently or block;
433
- carry them into the plan summary (Security note / a silent-failure-risk note). *(EVOLVE:
434
- findings on untouched elements are reported, never auto-fixed — see the
435
- surgical rule.)*
436
-
437
- ### Plan summary artifact
438
-
439
- The plan summary is the deliverable of the Plan phase: a concise
440
- **business-language description** of what the flow will do — a short
441
- ordered list of steps in plain English, no diagram. It is an approval aid, not a
442
- faithful reconstruction of the flow: the exact element graph lives in the FDL
443
- itself (and, after save, in the real flow via the "Open in Salesforce" link).
444
-
445
- Build the summary from these step types:
446
-
447
- | Step type | Description |
448
- |---|---|
449
- | Start condition | What triggers the flow |
450
- | Process | A unit of business work + its expected result |
451
- | Decision branch | A conditional fork based on business logic |
452
- | Loop | A repeating process over a set of items |
453
- | End state | Final outcome or termination point |
454
-
455
- Keep each step to one line of plain business meaning, and **describe branches and
456
- loops narratively** in that line rather than drawing them out as a nested tree or
457
- labeling every arm:
458
- - Decision: "routes high-value cases to a specialist, everything else to the standard queue."
459
- - Loop: "for each overdue invoice, sends a reminder."
460
-
461
- **Decisions only branch — they never retrieve.** If a decision needs
462
- information, there is a Process step before it ("find the account" → "if active,
463
- do X"). Decisions are not limited to yes/no — they can fan out to several labeled
464
- outcomes.
465
-
466
- **No redundant steps.** If one step logically implies another, collapse them.
467
- "Ask user for input" already means "capture input" — don't add a separate step.
468
- This applies below the step level too: a Process step that Get-Records-then-
469
- filters, followed by a Decision that only guards "did we find anything," followed
470
- by another Process step whose Update Records re-applies that same filter, is one
471
- unit of work, not three — the fetched collection already implies the update
472
- target. See `../../shared/anti-patterns.md` item 30.
473
-
474
- Each step maps to the concrete FDL elements that implement it.
475
-
476
- **Marketing flows: leave error handling out of the plan.** In a marketing flow
477
- (its `start.triggerType` is on the list in `../../shared/fault-paths/fault-paths.md`
478
- § Marketing Flows — Fault Paths Only When Asked) where the user didn't ask for
479
- error handling, the plan has no fault paths. Don't ask whether to add them, don't
480
- offer to add them, and don't list their absence as a note or a risk.
481
-
482
- **[EVOLVE] Highlight the change in the summary.** Mark affected steps with a
483
- text prefix:
484
- - Added steps: prefix with `+ ` (e.g., `+ Send Email`)
485
- - Modified steps: prefix with `~ `
486
- - Removed steps: omit (the summary is the post-change state)
487
-
488
- If the user supplied the current design in a readable form and the change is
489
- small, a short "before / after" step list is acceptable.
490
-
491
- ### Security note (present with the plan summary)
492
-
493
- Alongside the plan summary, present a short **Security** block so the user
494
- approves the security posture alongside the design — inline just below the plan
495
- summary unless the active surface specifies a different presentation channel.
496
- Include:
497
-
498
- - **Run mode** — user context (default) vs. system mode; if
499
- `SystemModeWithoutSharing`, state that sharing/CRUD/FLS are bypassed and why
500
- it's needed.
501
- - **Guest exposure** — whether the flow is reachable by Experience Cloud /
502
- guest users.
503
- - **Data scope** — any "store all fields" lookups or whole-record DML.
504
- - Any advisory warnings from the `../../shared/security/security.md` checks, each
505
- with the recommended safer default.
506
-
507
- *(EVOLVE: focus on what the edit changes — run mode, guest exposure, new "store
508
- all fields" lookups or whole-record DML, untrusted input. If the change
509
- introduces no new security concern, say so in one line.)*
510
-
511
- If none apply, render one line:
512
- `Security: user context, no guest exposure, fields scoped — no concerns.`
513
- These are advisory — never block the plan on them; the user decides whether to
514
- accept.
515
-
516
- ### Phase 2 closing
517
-
518
- Present the plan summary (business-language step list) followed by the Security
519
- note and ask for approval:
520
-
521
- > Approve this plan?
522
- >
523
- > Reply "approve" / "yes" to save, or describe what to change.
524
-
525
- Valid responses:
526
- - **Accept** → proceed to Phase 3 (Save).
527
- - **Refine** → adjust the design, re-present the plan summary, re-ask.
528
- - **Reject** (EVOLVE) → ask the user what to revisit; iterate until accept or abandon.
529
-
530
- Do not call `POST /services/data/vXX.0/flowbuilder/flow/actions/save` without an explicit accept of the
531
- plan summary.
532
-
533
- ---
534
-
535
- ## Phase 3 — Save
536
-
537
- **Save policy.** If the surface config declared save DISABLED, skip persistence: run
538
- the steps below through step 5's validate, then hand the final FDL to the client
539
- once. Never hand it off before validate. Otherwise proceed with the save steps below.
540
-
541
- ### Save steps
542
-
543
- 1. **Materialize the FDL.** Fill in element shapes from the per-element skills.
544
- Apply mutual-exclusivity and mode rules documented in each element's skill
545
- file. *(EVOLVE: emit the full working graph — the loaded flow plus the
546
- surgical change, with all untouched parts preserved verbatim — **except**
547
- the read-back-form normalization described in the surgical rule above,
548
- which applies even to untouched elements. See `../../shared/anti-patterns.md`
549
- item 38.)*
550
-
551
- 2. **Handle `processMetadataValues` — mode-branched:**
552
- - **GENERATE except `CustomerLifecycle`:** always emit in the top-level `metadata` object:
553
- ```json
554
- "processMetadataValues": [
555
- { "name": "BuilderType", "value": { "stringValue": "LightningFlowBuilder" } },
556
- { "name": "CanvasMode", "value": { "stringValue": "AUTO_LAYOUT_CANVAS" } }
557
- ]
558
- ```
559
- `AUTO_LAYOUT_CANVAS` is the required default for net-new flows, emitted
560
- **independently of** `BuilderType` — the two are separate PMVs; never gate
561
- emitting one on the presence of the other. Absence is not neutral: the
562
- builder opens a canvas-mode-less flow in **Free-Form**. Emitting the
563
- `CanvasMode` entry is a hard gate on a net-new save — do not rely on the
564
- server-side backfill, which covers only the persisted `POST /services/data/vXX.0/flowbuilder/flow/actions/save` net-new
565
- path, not the no-persist hand-off or other save types (see
566
- `../../shared/anti-patterns.md` item 37).
567
- - **GENERATE `CustomerLifecycle`:** omit `BuilderType`, `CanvasMode`, and
568
- `OriginBuilderType`. Emit only `{ "name": "ObjectType", "value": {
569
- "stringValue": "<metadata.start.object>" } }` — a `CanvasMode` PMV is rejected.
570
- - **EVOLVE:** preserve the source flow's `processMetadataValues` **verbatim**
571
- — never inject, overwrite, or flip `BuilderType`/`CanvasMode`/`OriginBuilderType`.
572
- If the source carries no `CanvasMode`, leave it absent: the flow is already
573
- Free-Form in the builder, and stamping `AUTO_LAYOUT_CANVAS` would silently
574
- re-layout (and can corrupt) an existing flow. Never synthesize
575
- `OriginBuilderType`. Canvas mode is the user's to change, never the agent's.
576
- For `CustomerLifecycle`, preserve or set only `ObjectType` to match
577
- `metadata.start.object`; do not inject canvas entries.
578
-
579
- 3. **Determine `saveType` — mode-branched:**
580
-
581
- - **GENERATE:** new definition (net-new save). Use `saveType: "createNewFlow"`.
582
- **Name-collision guard:** before saving, if the chosen flow label /
583
- `fullName` would collide with an existing flow definition in the org,
584
- surface it to the user and confirm before proceeding (rename, or
585
- intentionally version the existing one). Do not silently create a
586
- duplicate or clobber an existing definition.
587
- - **EVOLVE:**
588
-
589
- | Situation | saveType |
590
- |---|---|
591
- | Editing the current draft version in place | `saveDraft` with `currentFlowId` |
592
- | Saving as a new version (keep old active) | `saveAsNewVersion` |
593
- | Renaming / new API name | `saveAsNewDefinition` — confirm with user first |
594
-
595
- The standalone MCP `POST /services/data/vXX.0/flowbuilder/flow/actions/save` contract does not expose the legacy
596
- `updateFlow` value. Use `saveDraft` for in-place draft updates.
597
-
598
- 4. **Pre-save Auditor pass** — repeat the Phase 2 Auditor checks plus:
599
- - **Schema check:** the flow matches `../../shared/flow-metadata-schema.md`, and every element used matches its own reference: only documented keys, at the documented level, with values that element accepts.
600
- - `no_conditions` internal placeholder omitted (replaced by `[]` and absent logic field). See `../../shared/anti-patterns.md` item 12.
601
- - `sortOrder: "NotSorted"` omitted (both `sortOrder` and `sortField` absent). See `../../shared/anti-patterns.md` item 9.
602
- - `storeOutputAutomatically: true` paired with empty or absent output assignments. See `../../shared/anti-patterns.md` item 15.
603
- - **[GENERATE] Process metadata present:** `processMetadataValues` is **non-empty**; for every process type except `CustomerLifecycle`, require `CanvasMode: AUTO_LAYOUT_CANVAS` + `BuilderType: LightningFlowBuilder` (each emitted independently — a missing or empty `[]` array opens the flow in Free-Form). For `CustomerLifecycle`, require only `ObjectType` matching `metadata.start.object` and reject canvas entries. Do not synthesize `OriginBuilderType`; preserve it only when evolving a supported source that already has it. See `../../shared/flow-properties/flow-properties.md` § "Canvas Mode and `processMetadataValues`" and `../../shared/anti-patterns.md` item 37. *(EVOLVE: preserve the source's `processMetadataValues` verbatim — never inject or flip.)*
604
- - **[`AUTO_LAYOUT_CANVAS`] End/fault topology (re-verify):** at materialization/connector-wiring time, confirm every terminating branch reaches an explicit End. A shared End (2+ non-fault connectors into one entry) is valid — do not flag or split it. A `faultConnector` targeting an End is not a defect (it drops silently on reload); advise a handler only for observability. See `../../shared/anti-patterns.md` item 38.
605
- - **[GENERATE; `AUTO_LAYOUT_CANVAS`; `apiVersion` ≥ 68.0] Explicit ends present:** the materialized payload carries an `ends[]` array, and every terminating branch's connector targets an entry in it (`END_ELEMENT_n`) — dedicated or shared. Below 68.0 and on Free-Form, confirm `ends[]` is **absent** (branches omit their connector) — a Free-Form flow must never carry `ends[]`. See `../../shared/end/end.md`. *(EVOLVE: `ends[]` matches the source plus any Ends added for new auto-layout branches.)*
606
- - **[`AUTO_LAYOUT_CANVAS`] End referential integrity:** every connector whose `targetReference` is an End name has a matching `ends[]` entry with that exact `name`, and every `ends[]` entry is targeted by at least one connector. A connector to an undefined End fails the save with **"`<EndName>` not found"** — **fix by ADDING the `ends[]` entry, never by removing the connector** (removing it deletes the terminating branch). See `../../shared/anti-patterns.md` item 14 and `../../shared/end/end.md` § Referential integrity.
607
- - **Coordinate bounds:** require every `locationX` and `locationY` to be
608
- between `0` and `500000`, inclusive. Negative coordinates fail
609
- `POST /services/data/vXX.0/flowbuilder/flow/actions/save` with `ELEMENT_COORDINATES_INVALID` even under
610
- `AUTO_LAYOUT_CANVAS`. See `../../shared/node/node.md`.
611
- - **Coordinates present on every node:** the `start` element, every `ends[]`
612
- entry and every other canvas element carry `locationX` and `locationY`
613
- (`0` and `0` for `start` and the Ends; in Flow XML, `<locationX>` and
614
- `<locationY>` inside `<start>` and inside each `<ends>`), whatever the
615
- trigger. One missing pair and the org rejects the flow:
616
- `Required field is missing: locationX`.
617
- - **Security posture** (advisory): re-run the `../../shared/security/security.md` checks against the materialized FDL. Warn only; never block the save. See `../../shared/anti-patterns.md` item 28.
618
- - **Read-back-form scheduling fields.** Scan the materialized payload for `schedule.startTime`/`schedule.endTime`/`schedule.startDate`/`schedule.endDate` (Start element, Scheduled trigger) and `resumeTime`/`resumeDate` (Wait element) that are still in server read-back shape — a `{ "timeInMillis": N }` object for a time field, or an epoch-millis integer for a date field. Convert every one to its wire-string form (`"HH:mm:ss.SSS"` / `"YYYY-MM-DD"`) before calling `POST /services/data/vXX.0/flowbuilder/flow/actions/save`, on touched AND untouched elements alike. See `../../shared/anti-patterns.md` item 39.
619
- - Any non-empty `customErrors[]` when `triggerType` is absent or not `RecordBeforeSave`/`RecordAfterSave`? Invalid — save fails with `TRIGGER_TYPE_ELEMENT_NOT_SUPPORTED`. Retarget fault paths to a `Log_Error` actionCall or a `$Flow.FaultMessage` Assignment. See `../../shared/anti-patterns.md` item 2. *(Observability is advisory — prefer a persisted/notified handler; see `../../shared/fault-paths/fault-paths.md` § Observable vs. In-Memory-Only Fault Handling.)* *(Redundant with the Phase 2 check above — Phase 2 should have caught this, but it is re-verified here because materialization in Step 5 can introduce or reconnect a `customErrors` element after the Phase 2 pass.)*
620
- - **Transform depth and scoping rule**: for any `transforms[]` element, verify the depth difference between the deepest source `elementReference` (number of `[$EachItem]` iterators) and the output depth is ≤ 1. A depth-2 source cannot produce a depth-1 **primitive** output — that is an invalid use case for Map (use Loop + Assignment instead). For SObject/Apex output at depth-N, verify that the same `transformValueActions` array contains at least one scoping action at each intermediate depth level 1 through N-1 (an action whose `elementReference` has exactly that many `[$EachItem]` iterators). Same rule applies to Sum/Count on nested collections — scoping lines must establish the collection hierarchy. See `../../elements/transform/types/map.md` § Nested collection scoping line missing.
621
- - **Send to Journey live gate**: rerun the pre-save checklist in
622
- `../../elements/action-call/send-to-journey.md`. Stop when any live selector,
623
- Segment binding, schema URI, requiredness flag, or required mapping differs
624
- from the materialized FDL.
625
-
626
- 5. **Persist per the active surface config's save policy.** If the active surface config
627
- disables persistence, do not save. Instead call
628
- `dispatch(method: "POST", url: "/services/data/vXX.0/flowbuilder/flow/actions/validate", body: {"flow": {"fullName": "<flow API name>", "metadata": <materialized FDL>}})`.
629
- Fix its `errors[]` and `warnings[]` (even when `isSuccess: true`) on what
630
- this change touched — on EVOLVE, leave the rest unchanged (minimal-surface
631
- rule) and report it only where the surface's response policy permits — and,
632
- if anything changed, re-validate (**cap at 3 silent retries**). A 400 that
633
- rejects the flow definition (e.g. `ILLEGAL_QUERY_PARAMETER_VALUE`, "not a
634
- valid flow definition") may mean the step 4 schema check missed something.
635
- Redo it on what this change touched; if that finds a defect, fix it and
636
- re-validate under the same cap. Otherwise treat the call as having no
637
- result. Any other non-2xx, a 400 once the cap is reached, or a response
638
- without `isSuccess` is a call with no result. If the first validate has no
639
- result, return the FDL unchanged. If a re-validate has no result or adds an
640
- issue, return the FDL from before that round's fixes. Otherwise return the
641
- latest FDL.
642
- Report per the surface's response policy.
643
-
644
- If persistence is enabled, construct the complete save request before
645
- dispatching. The request root contains `flow` and `saveType`; `fullName` and
646
- `metadata` belong **inside** `flow`. For a new flow, use this envelope:
647
-
648
- ```json
649
- {
650
- "flow": {
651
- "fullName": "My_Flow",
652
- "metadata": {}
653
- },
654
- "saveType": "createNewFlow"
655
- }
656
- ```
657
-
658
- Replace the empty example `metadata` with the complete materialized FDL.
659
- For an existing flow, keep the same envelope and use the Step 3 `saveType`
660
- and any required `currentFlowId` at the request root. Before dispatch,
661
- verify that root `flow` is an object, root `saveType` is present, and root
662
- `fullName`, `metadata`, and `versionNumber` are absent. A bare tooling Flow
663
- body causes HTTP 400 `JSON_PARSER_ERROR` (`Unrecognized field "fullName"`).
664
- Call `dispatch(method: "POST", url: "/services/data/vXX.0/flowbuilder/flow/actions/save", body: <checked envelope>)`.
665
- On failure, parse
666
- `errors[]` and `warnings[]`, map each to an anti-pattern or shape rule, apply a
667
- targeted fix, and retry. **Cap at one silent retry.** If still failing after
668
- one retry, surface the verbatim `errors[]` and `warnings[]` to the user.
669
- *(Exception: a step flow that `../orchestrate/orchestrate.md` co-generates
670
- uses that recipe's step-flow save loop instead: up to 3 attempts, until the
671
- save's `status` is `Draft`.)*
672
-
673
- 6. **Return the deep link.** If the active surface config's save policy disables
674
- persistence, skip this step — no saved definition exists to link to, and you
675
- already returned the FDL to the client in step 5. Otherwise append the
676
- "Open in Salesforce" link per `../../shared/preview-renderer.md` § "Deep-link template".
677
- Stop after this hand-off. Do not call `POST /services/data/vXX.0/flowbuilder/flow/{flowId}/actions/activate` (activateFlow — DO NOT DISPATCH, quarantined), `POST /services/data/vXX.0/flowbuilder/flow/{flowId}/actions/deactivate`, or
678
- `POST /services/data/vXX.0/flowbuilder/flow/{flowId}/actions/submit-for-activation` after a successful save. Direct activation is
679
- disabled, deactivation is the inverse operation, and activation-approval
680
- submission is not a fallback activation route.
681
-
682
- *(EVOLVE: after a successful save, treat `GET /services/data/vXX.0/flowbuilder/flow/{flowDefinitionId}/versions` and
683
- `GET /services/data/vXX.0/flowbuilder/flow/{id}/validation-results` as stale — re-fetch on next use.)*
684
-
685
- ---
686
-
687
- ## Connector Wiring
688
-
689
- - Regular outgoing edge: `connector` field.
690
- - Default (no-match) branch on Decision: `defaultConnector`.
691
- - Loop per-iteration path: `nextValueConnector`. Loop exit: `noMoreValuesConnector`.
692
- - Fault path: `faultConnector`.
693
- - `targetReference` on every connector must be the dev-name of the target element, never a GUID.
694
- - Last element in a branch (flow end): on GENERATE with `AUTO_LAYOUT_CANVAS` at resolved `apiVersion` ≥ 68.0, point its `connector` at a dedicated `ends[]` entry (`END_ELEMENT_n`, one per branch — the v68+ default); below 68.0 and on any Free-Form flow, omit the `connector` field entirely and emit no `ends[]` (**never emit `ends[]` on Free-Form**). See `../../shared/end/end.md`.
695
- - A terminal error-only screen (reached via `faultConnector`) takes no non-fault inbound edge; keep the last success screen terminal instead of pointing it at the error screen. See `../../shared/anti-patterns.md` item 36.
696
-
697
- ---
698
-
699
- ## Element Skill Registry
700
-
701
- Load the relevant skill **before** generating any element. Do not preload all
702
- skills at session start — load lazily as the design (GENERATE) or the change
703
- (EVOLVE) names each type.
704
-
705
- ### Elements
706
-
707
- | Element | Skill Path | Load When |
708
- |---|---|---|
709
- | Assignment | `../../elements/assignment/assignment.md` | Set/change a variable value |
710
- | Decision | `../../elements/decision/decision.md` | Branching / conditional logic |
711
- | Experiment | `../../elements/experiment/experiment.md` | A/B test split in journey flows |
712
- | Loop | `../../elements/loop/loop.md` | Iterate over a list/collection |
713
- | Custom Error | `../../elements/custom-error/custom-error.md` | Throw a custom error message |
714
- | Screen | `../../elements/screen/screen.md` | User input or display |
715
- | Screen Fields | `../../elements/screen/SCREEN-FIELDS.md` | Configuring specific screen fields |
716
- | Get Records | `../../elements/record-lookup/record-lookup.md` | Query Salesforce records |
717
- | Create Records | `../../elements/record-create/record-create.md` | Insert new Salesforce records |
718
- | Update Records | `../../elements/record-update/record-update.md` | Modify existing Salesforce records |
719
- | Delete Records | `../../elements/record-delete/record-delete.md` | Remove Salesforce records |
720
- | Action / Apex | `../../elements/action-call/action-call.md` | Call Apex, external service, or invocable action; **show a toast / success / error / notification message, or navigate / open a page / URL** (LWC local actions) |
721
- | Exit from a Flow | `../../elements/action-call/action-call.md` | Remove an Individual from one named running marketing flow or all applicable running marketing flows; this is an invocable action, not a Subflow |
722
- | Send Email / SMS / RCS Message | `../../elements/action-call/action-call.md` | Send a marketing email, text or RCS message (`sendEmailMessage`, `sendSmsMessage`, `sendRcsMessage`); read the action's section (Phase 2 step 4, Marketing message probe sequence) |
723
- | Apex Plugin | `../../elements/action-call/action-call.md` | Legacy Apex Plugin element (section in action-call skill) |
724
- | AI Agent Response | `../../elements/action-call/action-call.md` | Generate AI agent response (section in action-call skill) |
725
- | Subflow | `../../elements/subflow/subflow.md` | Call another flow |
726
- | Wait / Pause | `../../elements/wait/wait.md` | Pause until a time, event, or condition |
727
- | Start Element | `../../elements/start/start.md` | Configure flow trigger and entry criteria |
728
- | Audience Flow — shared contract | `../../elements/start/audience-common.md` | Shared build contract for ALL audience triggers (Segment / List / CampaignMember / RecordQuery) — run schedule, top-level `timeZoneSidKey`, top-level `dataSpace`, optional `dataGraph`, re-entry, save-and-activate gates, builder round-trip defaults. **Load FIRST for any audience trigger**, then the matching per-trigger file below |
729
- | Segment-Triggered Flow | `../../elements/start/segment-triggered.md` | Segment (Audience) marketing flow build guide — REQUIRED (after `audience-common.md`) before configuring a Segment flow (segment binding chain, eligibility gate, `publishSegment`, outreach actions, `$Record` member context) |
730
- | List / CampaignMember Flow | `../../elements/start/list-campaignmember.md` | Actionable List (`triggerType: List`) + Campaign Member (`triggerType: CampaignMember`) build guide — REQUIRED (after `audience-common.md`) before configuring either (the `start.listAction` binding, audience-selection gate, `$Input` member handles, validate-vs-save gotcha, examples) |
731
- | Record Query Flow | `../../elements/start/recordquery.md` | Record Query (`triggerType: RecordQuery`, all records of one SObject matching a filter) build guide — REQUIRED (after `audience-common.md`) before configuring it (the `start.object` + optional `start.filters` binding, `CRM_OBJECT_SELECTION_REQUIRED` gate, direct `$Input.<field>` record context, example) |
732
- | Collection Processor | `../../elements/collection-processor/collection-processor.md` | Filter, sort, or map a collection into **another collection** (many → many). For narrowing a collection to a **single** record, use Collection Filter Criteria (Resources, below) instead. |
733
- | Transform | `../../elements/transform/transform.md` | Extract or map fields uniformly from a collection (prefer over Loop + Assignment when no per-item branching is needed); transform data between collections |
734
- | Rollback | `../../elements/rollback/rollback.md` | Rollback database changes in a transaction |
735
- | Exit Rule | `../../elements/exit-rule/exit-rule.md` | End a Segment/On-Demand/Journey/Digital Form flow interview early for an individual on a condition or an engagement event |
736
- | Group (canvas layout) | `../../shared/group/group.md` | Node grouping requested (`groups`/`nodeGroups`/FlowNodeGroup, "add elements to a group") — **NOT authorable from AI surfaces**; load to decline & redirect to Flow Builder |
737
-
738
- ### Resources
739
-
740
- | Resource | Skill Path | Load When |
741
- |---|---|---|
742
- | Variable | `../../resources/variable/variable.md` | Storing / passing data values |
743
- | Constant | `../../resources/constant/constant.md` | Fixed values used throughout the flow |
744
- | Formula | `../../resources/formula/formula.md` | Calculated expressions |
745
- | Text Template | `../../resources/text-template/text-template.md` | Dynamic text with merge fields |
746
- | Choice / Choice Sets | `../../resources/choice/choice.md` | Choices for screen picklists/radio buttons |
747
- | Collection Filter Criteria | `../../resources/collection-filter-criteria/collection-filter-criteria.md` | Filter + sort an existing collection down to a **single** record (top/first match, e.g. highest-value opp, most recent case); read-only. **Not** for producing a new collection — that's Collection Processor. |
748
-
749
- ### Shared Features
750
-
751
- | Feature | Skill Path | Load When |
752
- |---|---|---|
753
- | Conditions & Logic | `../../shared/conditions/conditions.md` | AND/OR/custom filter logic |
754
- | Record Filters | `../../shared/record-filter/record-filter.md` | Building `filters[]` on recordDeletes, recordUpdates, recordLookups, recordCreates (upsert), or start |
755
- | Output Assignments | `../../shared/output-assignments/output-assignments.md` | Mapping element outputs to variables |
756
- | Fault Paths | `../../shared/fault-paths/fault-paths.md` | Error handling for DML/Action elements |
757
- | Ends | `../../shared/end/end.md` | Terminating a branch — when to store an explicit `ends[]` End (GENERATE, `AUTO_LAYOUT_CANVAS`, `apiVersion` ≥ 68.0) vs. omit the connector; never on Free-Form |
758
- | Validation Rules | `../../shared/validation-rules/validation-rules.md` | Validating screen field input |
759
- | Flow Properties | `../../shared/flow-properties/flow-properties.md` | Flow label, API name, run mode, API version |
760
- | Security | `../../shared/security/security.md` | Auditing run mode, data scope, and untrusted input — advisory security checks run before every save |
761
-
762
- ### Reference Files (always available)
763
-
764
- | Topic | File | Load When |
765
- |---|---|---|
766
- | Anti-patterns | `../../shared/anti-patterns.md` | Before every save — mandatory Auditor pass |
767
- | Value field rules | `../../shared/value-rules.md` | Setting field values, conditions, assignments, action parameters |
768
- | Formula expression language | `../../shared/formula-expression.md` | Writing any formula expression — operators, functions, picklist/ISPICKVAL, limits, type coercion |
769
- | Flow JSON schema | `../../shared/flow-metadata-schema.md` | Building a complete flow payload or debugging a JSON shape error |
770
- | Process/trigger decision | `../../shared/flow-type-resolver/flow-type-resolver.md` | Picking processType + triggerType in Phase 2 |
771
- | Tool catalog / limits | `../../shared/server-functions.md` | Checking tool costs, governor limits, unregistered tool names |
772
- | Preview rendering | `../../shared/preview-renderer.md` | "Open in Salesforce" deep link appended after a successful save |
773
-
774
- ---
775
-
776
- ## Mandatory Probes by Element Type
777
-
778
- Run these in Phase 2 step 4 (Probe schema), once per unique argument set:
779
-
780
- | Element type | Tool to call |
781
- |---|---|
782
- | `actionCalls` | `dispatch_readonly(method: "GET", url: "/services/data/vXX.0/flowbuilder/action/invocable-action-details", queryParams: { actionType, actionName })` |
783
- | `recordCreates`, `recordUpdates`, `recordLookups`, `recordDeletes` | `dispatch_readonly(method: "GET", url: "/services/data/vXX.0/flowbuilder/platform/entity/{apiName}/fields")` |
784
- | `decisions`, `recordLookups` (filters) | `GET /services/data/vXX.0/flowbuilder/schema/flow-capabilities` (read `.operators`) |
785
- | `subflows` | `GET /services/data/vXX.0/flowbuilder/flow/subflows` |
786
- | Screen `ComponentInstance` fields | `GET /services/data/vXX.0/flowbuilder/screen-component` + `GET /services/data/vXX.0/flowbuilder/screen-component/{apiName}` |
787
-
788
- ---
789
-
790
- ## Build Order (Phase 3 metadata dependency order)
791
-
792
- ```text
793
- 1. Flow Properties (label, processType, apiVersion, runInMode, interviewLabel,
794
- processMetadataValues with BuilderType + CanvasMode; preserve source OriginBuilderType only)
795
- 2. Resources (variables, constants, formulas, text templates, choices)
796
- 3. Start element (trigger configuration)
797
- 4. Flow elements (in execution order)
798
- 5. Connectors (linking elements; on GENERATE + AUTO_LAYOUT_CANVAS + apiVersion >= 68.0,
799
- each terminating branch's connector targets a dedicated ends[] entry)
800
- 6. Ends (ends[] entries — GENERATE + AUTO_LAYOUT_CANVAS + apiVersion >= 68.0 only;
801
- none below 68.0 or on Free-Form. See shared/end/end.md)
802
- ```
803
-
804
- *(EVOLVE preserves the existing order and only inserts/removes/modifies the
805
- elements the change requires — see the surgical rule.)*
806
-
807
- ---
808
-
809
- ## Common Failures
810
-
811
- **Calling save_and_validate before the plan gate.** Hard contract violation.
812
- The user has not approved the plan summary yet; saving without their
813
- accept is a forbidden write. The plan gate is never skipped, even with an
814
- override phrase.
815
-
816
- **Downgrading an evolve to a net-new build because JSON was missing.** If the
817
- intent is to edit an existing flow, an empty/absent flow body is a STOP-and-ask
818
- condition, not a license to generate a fresh flow. See Phase 0.
819
-
820
- **Over-editing in EVOLVE.** Rewriting, reformatting, or "improving" elements the
821
- user did not ask about violates the surgical rule and makes the edit
822
- non-reviewable. Touch only what the change requires.
823
-
824
- **Re-calling probe tools across phases.** Each `GET /services/data/vXX.0/flowbuilder/platform/entity/{apiName}/fields`
825
- or `GET /services/data/vXX.0/flowbuilder/action/invocable-action-details` call counts against Salesforce API rate
826
- limits. If Phase 2 step 4 already called a tool with the same arguments,
827
- reuse the result throughout the rest of the phase. See `../../shared/anti-patterns.md` item 23.
828
-
829
- **Skipping the Auditor checks.** The platform validator returns one error at a
830
- time. Run Auditor checks locally before every save call.
831
-
832
- **Handing off activation without version identification.** Report the flow full
833
- name, version number, last-modified-by, last-modified-date, and target org before
834
- directing the user to activate in Flow Builder UI. Never call `POST /services/data/vXX.0/flowbuilder/flow/{flowId}/actions/activate` (activateFlow — DO NOT DISPATCH, quarantined).
835
- See `../../shared/anti-patterns.md` item 21.
836
-
837
- **Emitting XML.** The save-and-validate API accepts JSON only. Never emit XML
838
- angle brackets, namespace declarations, or CDATA sections. See
839
- `../../shared/flow-metadata-schema.md`.
840
-
841
- **Forgetting `processMetadataValues` (GENERATE).** An absent `CanvasMode` opens
842
- the flow in **Free-Form** in the builder. Always emit the
843
- `CanvasMode=AUTO_LAYOUT_CANVAS` entry (independently of `BuilderType`) for a
844
- net-new canvas-based flow — don't rely on the server backfill, which covers only
845
- the persisted `POST /services/data/vXX.0/flowbuilder/flow/actions/save` net-new path. For `CustomerLifecycle`, emit only
846
- `ObjectType` matching `metadata.start.object` (no canvas entries). In EVOLVE,
847
- preserve the source's values **verbatim** — never inject or flip. See
848
- `../../shared/anti-patterns.md` item 37.
849
-
850
- ---
851
-
852
- ## Stop Conditions
853
-
854
- Stop and ask the user when:
855
-
856
- - **[EVOLVE]** No source flow JSON is available and the user wants element-level edits.
857
- - Object or field names are not specified after Phase 2 schema probing reveals the ambiguity.
858
- - Conflicting trigger requirements emerge during Phase 2.
859
- - The intent is ambiguous between a new flow and an edit (ask the Phase 0 tie-breaker).
860
- - The plan summary is rejected twice without convergence.
861
- - One failed `POST /services/data/vXX.0/flowbuilder/flow/actions/save` retry in Phase 3.
862
- - Probe budget exceeded (> 10 probe calls for one Phase 2).
863
- - A Send to Journey business unit is missing, unmapped, or mapped to a Data Space other than `metadata.dataSpace`.
864
- - A Send to Journey lookup has no compatible Journey, or has multiple matches without a user selection.
865
- - The `sendToJourney` descriptor, Journey schema, or a required Journey-field mapping cannot be resolved.
866
- - **[EVOLVE]** The requested change conflicts with a platform constraint (e.g., adding a DML element inside a before-save flow).
867
- - **[EVOLVE]** The edit requires renaming the flow's API name (`saveAsNewDefinition`) — confirm before proceeding.
868
- - **[EVOLVE]** Architecture Pushback: the requested change introduces an anti-pattern (CRUD in loop, missing fault path outside a marketing flow, hard-coded ID) — surface it, do not silently fix.