@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,571 +0,0 @@
1
- ---
2
- name: communications-multisite-configure
3
- description: "\"Enable MultiSite\" / \"turn on Location Based Quoting and Ordering\" / \"enable MultiLocationFeatureOrgPref\" / \"set up multi-recipient / multi-site quoting\" / \"verify the CME multi-recipient org permission\" / \"edit the Quote and Order page display columns / Recipient Wrapper fields\" for Communications Cloud. The concrete enablement layer of the Comms Cloud MultiSite steel thread (workflow #2): flip the MultiLocationFeatureOrgPref org preference, verify the CMEMultiRecipient org permission (and, from the perms side, the derived CMESales user permission), then edit the Quote/Order page display columns. Runs after comms-cloud-initial-setup and is delegated to from comms-cloud-multisite-setup."
4
- metadata:
5
- version: "1.0"
6
- ---
7
-
8
- # Communications Cloud — MultiSite Enablement (org preference + permission + display columns)
9
-
10
- The **enablement layer** of the MultiSite steel thread (Comms Cloud workflow **#2**). Four concrete
11
- pieces:
12
-
13
- 1. **Enable the `MultiLocationFeatureOrgPref` org preference** — the "Location Based Quoting and
14
- Ordering" toggle on the *Revenue Cloud for Communications Settings* page. **Mechanism: Toggle
15
- (OrgPreference) via the approved SOR `RevenueCloudforCommunicationsSettings`, over its friendly
16
- `/headless/invoke/industries/industries-communications-sales/…` route — headless, no gap, proven
17
- end-to-end.**
18
- 2. **Verify the `CMEMultiRecipient` org permission** and, from the permissions side, the derived
19
- `CMESales` user permission. **Mechanism: read/verify (headless) + permission-set assignment
20
- (headless); provisioning the org permission itself is out-of-band (licensing).**
21
- 3. **Edit the Quote and Order page display columns** (Locations tab / Recipient Wrapper fields).
22
- **Mechanism: Manual-UI (Lightning App Builder + Flow Builder) — ⚠ GAP, no headless surface.**
23
- 4. **Stand up the Context Service extension that backs the multi-recipient attributes** — a custom
24
- context-definition extension (`baseReference` on the standard `ConsumerSalesContext__stdctx`) that
25
- adds the recipient / recipient-group attributes + mappings + hydration the Quote/Order pages surface
26
- in Step 3 (e.g. `RecipientCity__c → ServiceCity`, the RecipientGroup counts). **Mechanism: Context
27
- Connect API (native REST) via `dispatch` — headless, no gap, proven end-to-end.** *Sequencing: the
28
- context attributes must exist before Step 3 can surface them, so run Step 4 before Step 3's page
29
- edits.*
30
-
31
- > **STATUS.** Steps 1–2 (org preference + permission verification) and **Step 4 (Context Service
32
- > extension)** are grounded, headless, and **verified end-to-end on a dev org via `dispatch` (create +
33
- > activate + read-back / structural compare, no `sf` CLI)** — see the boxes in Steps 1 and 4. Step 3
34
- > (page display columns) is a **Manual-UI gap** — documented here so an admin can complete it, but there
35
- > is no headless/dispatch path for it today.
36
-
37
- ## Grounding (source of truth)
38
-
39
- All API names below come from the **`IndustriesCommunicationsSales` UDD setting group** (module
40
- `industries-communications-sales-udd`, owner *Comms Cloud Grand Canyon*) — the authoritative
41
- definition of these org permissions, user permissions, and org preferences. The org-preference
42
- read/write **mechanism** is the approved SOR **`RevenueCloudforCommunicationsSettings`**: read
43
- `get-comms-org-preferences`, write `set-multi-location-enabled` / `set-multi-subscriber-enabled`.
44
-
45
- | UDD element | API name | Kind | minApiVersion | Gate |
46
- |---|---|---|---|---|
47
- | Org preference | `MultiLocationFeatureOrgPref` | orgPreference (boolean) | 262 (API v67.0) | `orgAccess = OrgPermissions.MultiRecipient \|\| OrgPermissions.CMEMultiRecipient`; `editAccess = UserPermissions.CustomizeApplication`; `sysAdminEditable=true` |
48
- | Org permission | `CMEMultiRecipient` | orgPermission, `type="provisioned"` | 260 (API v66.0) | "Allows an org to use CME MultiSite/MultiRecipient features" |
49
- | Org permission | `MultiRecipient` | orgPermission, `type="provisioned"` | 254 | "features related to MultiRecipient" — the *base* alternative gate for the org pref |
50
- | User permission | `CMESales` | userPermission (`PermissionsCMESales`) | 260 | `orgAccess = OrgPermissions.CMEMultiRecipient` |
51
- | User permission | `UseCommsCloudSalesFeatures` | userPermission (`PermissionsUseCommsCloudSalesFeatures`) | 258 | `orgAccess = OrgPermissions.CommsSales` |
52
-
53
- Related org preferences unlocked by `CMEMultiRecipient` (out of scope here, listed for context):
54
- `MultiSubscriberFeatureOrgPref`, `CMELinearRelationshipRulePref`.
55
-
56
- ## Scope & definition of done
57
-
58
- **In scope:** enable `MultiLocationFeatureOrgPref`; verify `CMEMultiRecipient` and assign the derived
59
- `CMESales` user permission; document the Quote/Order page display-column edits.
60
-
61
- **Definition of done:** `get-comms-org-preferences` returns `multiLocationEnabled: true`; `CMESales`
62
- assigned to the intended profile/permission set (only if the org permission gate is satisfied); the
63
- Manual-UI page edits documented/handed to the admin.
64
-
65
- ## Preconditions
66
-
67
- - **Communications Cloud initial setup complete** — see `comms-cloud-initial-setup` (the three sales
68
- permission sets assigned; Revenue Cloud base + context service + pricing set up).
69
- - **Licenses required for MultiSite** (per Comms Cloud #2): `CommsCloudRLMAddOn`,
70
- `CSVImportLicenseAddOn`, `RevenueLifecycleManagementAddOn`, `CMERLMB2BAddon`. The CME add-on
71
- (`CMERLMB2BAddon`) is what provisions the `CMEMultiRecipient` org permission (Step 2); the
72
- MultiRecipient PermissionSetLicenses (`CMEMultiRecipientPsl`, `RevLifecycleMgmtMultiRecipientPsl`)
73
- back the org-permission gate.
74
- - **Running-user permissions** (per Comms Cloud #2): *View Setup and Configuration*; *Modify All Data*
75
- **or** *Customize Application* (the org pref's `editAccess`); *Assign Permission Sets*; *Manage
76
- Users*; *Manage Profiles and Permission Sets*; *Revenue Cloud for Communications Features*; *Manage
77
- Flow*.
78
-
79
- ---
80
-
81
- ## Step 1 — Enable `MultiLocationFeatureOrgPref` (Location Based Quoting and Ordering)
82
-
83
- **Mechanism: Toggle (OrgPreference) via the approved SOR `RevenueCloudforCommunicationsSettings`, over
84
- its friendly `/headless/invoke/industries/industries-communications-sales/…` route. Headless — no gap.
85
- All calls go through `dispatch`; the `sf` CLI is never used.**
86
-
87
- > **Surface correction (load-bearing).** This pref is **NOT** on the generic native-REST org-preference
88
- > registry: `GET`/`PATCH /services/data/v67.0/setup/org/preferences/MultiLocationFeatureOrgPref`
89
- > returns **`404 NOT_FOUND` for both verbs** (the unrelated `CorePricingPreference` 200s on that same
90
- > surface, so the surface works — this Industries pref simply isn't registered on it). **Do not use
91
- > `/setup/org/preferences/…` for this toggle.** The working surface is the approved SOR's own friendly
92
- > `/headless/invoke/industries/industries-communications-sales/…` route.
93
-
94
- **Call shape — friendly route via `dispatch`.** The approved SOR
95
- `RevenueCloudforCommunicationsSettings` publishes these operations into the dispatch route table, so a
96
- plain `dispatch` to the friendly path resolves the controller for you — no envelope, no internal class
97
- path. Scalar write args ride in the request `body`.
98
-
99
- - **Read** — `GET /headless/invoke/industries/industries-communications-sales/get-comms-org-preferences`
100
- → `{ multiLocationEnabled, multiSubscriberEnabled, productRelationshipRuleEnabled, qtyEditEnabled }`.
101
- - **Write** — `PATCH /headless/invoke/industries/industries-communications-sales/set-multi-location-enabled`
102
- with body `{ "value": true }` → returns `true` on success.
103
-
104
- **1a. Read first (`get-comms-org-preferences`) — this doubles as the org-permission gate probe.**
105
- - **`200` with a prefs map** → the `userCanUseMultiRecipientFeatureEnabled` gate passes (the org has
106
- `MultiRecipient || CMEMultiRecipient`). Inspect `multiLocationEnabled`:
107
- - `true` → already enabled; done.
108
- - `false` → proceed to the write (1b).
109
- - **`403` / access-guard error** → the org-permission gate is unmet (neither base `MultiRecipient` nor
110
- `CMEMultiRecipient` is provisioned — see Step 2). Surface it as a licensing/provisioning gap and stop.
111
-
112
- **1b. Write `set-multi-location-enabled` with `{value:true}`, then re-read `get-comms-org-preferences`**
113
- and confirm `multiLocationEnabled:true`. A `true` return on the write alone is not proof — always read
114
- back. Editing requires **Customize Application** (the pref's UDD `editAccess`).
115
-
116
- > **Verified on a dev org (via `dispatch`, no `sf` CLI).** `get-comms-org-preferences` → `200
117
- > {multiLocationEnabled:true, multiSubscriberEnabled:false, productRelationshipRuleEnabled:false,
118
- > qtyEditEnabled:false}` — **the pref is already enabled and the gate passes**;
119
- > `set-multi-location-enabled {value:true}` → `200 true`; read-back → `multiLocationEnabled:true`. The
120
- > dev org holds both `CMEMultiRecipientPsl` and `RevLifecycleMgmtMultiRecipientPsl` PermissionSetLicenses
121
- > (Active), so the base org-permission gate is satisfied there. **Correction:** an earlier claim that a
122
- > `404` on `/setup/org/preferences/…` meant a licensing gap was wrong — that `404` was a *wrong-surface*
123
- > artifact of the native-REST path, not a licensing gap. Dev/scratch success is still not proof of
124
- > prod-safety.
125
-
126
- **UI equivalent (for the admin):** Setup → *Revenue Cloud for Communications Settings* → turn on
127
- **Location Based Quoting and Ordering**.
128
-
129
- ---
130
-
131
- ## Step 2 — Verify the `CMEMultiRecipient` org permission (and the perms-side `CMESales` user perm)
132
-
133
- **Mechanism: read/verify (headless) + permission-set assignment (headless). Provisioning the org
134
- permission is out-of-band.**
135
-
136
- **Key fact — you cannot flip `CMEMultiRecipient` from the permissions UI.** It is an **org permission
137
- with `type="provisioned"`** — granted by *license/feature provisioning* (the `CMERLMB2BAddon` add-on),
138
- not by an admin toggle or a permission-set field. There is no headless "enable org permission" step
139
- because there is no such admin operation; the only way to obtain it is to provision the licence.
140
-
141
- **2a. Verify presence — the cheapest signal is the Step-1 read.** If `get-comms-org-preferences`
142
- (Step 1a) returned **`200` (not `403`)**, the `userCanUseMultiRecipientFeatureEnabled` gate —
143
- `OrgPermissions.MultiRecipient || OrgPermissions.CMEMultiRecipient` — is already satisfied, so the base
144
- org permission is present. To distinguish base-vs-CME and confirm the CME tier, corroborate via
145
- licenses and the derived user permission (a provisioned org permission has no direct admin read
146
- surface):
147
- - **License check** — `SELECT DeveloperName, MasterLabel, Status FROM PermissionSetLicense`; look for
148
- the MultiRecipient PSLs `CMEMultiRecipientPsl` (CME tier) and `RevLifecycleMgmtMultiRecipientPsl`
149
- (base) Active, plus the add-ons in Preconditions. Absent `CMEMultiRecipientPsl` ⇒ the CME tier isn't
150
- provisioned even if base `MultiRecipient` is.
151
- - **PSL-assignment check (the reliable CME-tier signal)** — `SELECT AssigneeId, Assignee.Name,
152
- PermissionSetLicense.DeveloperName FROM PermissionSetLicenseAssign WHERE
153
- PermissionSetLicense.DeveloperName IN ('CMEMultiRecipientPsl','RevLifecycleMgmtMultiRecipientPsl')`. A
154
- `CMEMultiRecipientPsl` row means the CME seat is assigned to a real user, so the CME tier is
155
- provisioned and `CMESales` is assignable.
156
- - **Named permission-set check** — query the CME set **specifically**: `SELECT Id, Name, Label FROM
157
- PermissionSet WHERE Name = 'CMESalesStandardPermissionSet' OR Label = 'CME Sales Features'`. A row here
158
- confirms the assignable CME Sales permission set exists; use its `Id` as the `PermissionSetId` in 2b.
159
- Do **not** substitute `CommsCloudSalesFeatures` (Label 'Revenue Cloud for Communications Features') — it
160
- is a **distinct base-tier** set carrying only `PermissionsUseCommsCloudSalesFeatures` (assigned during
161
- `comms-cloud-initial-setup`), **not** the CME/MultiSite grant. If a broad query surfaces both, pick the
162
- `CMESalesStandardPermissionSet` row; assigning the base set leaves the user without MultiSite.
163
-
164
- > ⚠ **Do NOT detect CME via the `PermissionsCMESales` boolean column.** The `Permissions*` columns on
165
- > `PermissionSet` (including `PermissionsCMESales` and the base `PermissionsUseCommsCloudSalesFeatures`)
166
- > are frequently **not SOQL-queryable** even when the feature is fully provisioned and the permission set
167
- > is assigned — `SELECT ... WHERE PermissionsCMESales = true` returns **0 rows** and a `FieldDefinition
168
- > LIKE 'PermissionsCME%'` probe returns nothing / `No such column`. **That is a query-surface limitation,
169
- > not evidence the tier is absent** (observed on a dev org that had `CMEMultiRecipientPsl` assigned and
170
- > `CMESalesStandardPermissionSet` present). Detect via the **PSL-assignment** + **named permission-set**
171
- > checks above instead.
172
-
173
- **2b. If the CME tier is provisioned (a `CMEMultiRecipientPsl` seat is assigned AND the CME Sales
174
- permission set exists) → enable from the perms side.** Assign the **`CMESalesStandardPermissionSet`**
175
- found in 2a to the intended user (headless, standard permission-set assignment — the same mechanism
176
- `comms-cloud-initial-setup` uses): `POST /sobjects/PermissionSetAssignment {AssigneeId, PermissionSetId}`,
177
- where `PermissionSetId` is the `CMESalesStandardPermissionSet` Id.
178
- The `CMESalesStandardPermissionSet` carries `PermissionsCMESales` (gated on `CMEMultiRecipient`) — this is
179
- the MultiSite grant; `CommsCloudSalesFeatures` carries the base `PermissionsUseCommsCloudSalesFeatures`
180
- (gated on `CommsSales`) and is **not** interchangeable — never assign it as the CME tier.
181
-
182
- **2c. Only if the CME tier is genuinely absent (NO `CMEMultiRecipientPsl` seat AND NO CME Sales
183
- permission set) → report a licensing gap, do not proceed to enable.** Note that
184
- `MultiLocationFeatureOrgPref` (Step 1) may still be enableable via the **base `MultiRecipient`** org
185
- permission (minApi 254) even without the CME add-on — but CME-specific MultiSite/MultiRecipient
186
- features (and `MultiSubscriberFeatureOrgPref`, `CMELinearRelationshipRulePref`) will not be available.
187
-
188
- > ⚠ **GAP — provisioned org permission.** `CMEMultiRecipient` cannot be enabled headlessly or from
189
- > Setup; it is licence-provisioned. This step *verifies and reports*; it does not (and cannot) grant it.
190
-
191
- ---
192
-
193
- ## Step 3 — Edit the Quote and Order page display columns ⚠ Manual-UI GAP
194
-
195
- **Mechanism: Manual-UI (Lightning App Builder + Flow Builder). No headless/dispatch surface today.**
196
- Enabling Step 1 adds the **Locations** capability; surfacing it on the pages is a manual App Builder
197
- edit. Document these for the admin (fields below are the SMB Fiber recipient attributes defined in
198
- **Comms Cloud #3 — SMB Fiber Products**).
199
-
200
- **3a. Add the Locations tab + Recipient Wrapper (Edit Quote and Order Page):**
201
- 1. Click the **Tab** component → **Add Tab** in the Tabs component properties.
202
- 2. Set the tab label to **Custom** and enter **Locations**.
203
- 3. Drag the **Recipient Wrapper** component into the Location section.
204
- 4. **Save** → **Activate** the page → **Assign as Org Default**.
205
-
206
- **3b. Quote Line Items section → Select from Display Columns** — move these from Available to Selected,
207
- then **OK → Save → Activate**:
208
- `Product` · `Quantity` · `Quote Recipient Group` · `Recipient Scaled Quantity` ·
209
- `Selling Model Type` · `Discount (Percentage)` · `List Price` · `Total Price` ·
210
- `Quote Line Item Recipient`.
211
-
212
- **3c. Recipient Wrapper → Display Fields (Locations tab)** — under *Display Fields → Select…*, move to
213
- Selected and arrange:
214
- `Service Street` · `Max Download Speed` · `Max Upload Speed` · `Service Postal Code` ·
215
- `Broadband Connection Type` · `Service City` · `Service Country` · `Service State` · `Name`.
216
-
217
- **3d. Recipient Wrapper → Organise Fields (View By Predefined Type)** — under *Organise Fields →
218
- Select…*, move to Selected:
219
- `Service Street` · `Max Download Speed` · `Max Upload Speed` · `Service Postal Code`.
220
-
221
- **3e. Onboarding Flow (optional, Manual-UI / Flow Builder).** In the *Customer Onboarding* flow, create
222
- a Text collection variable (Allow multiple values, Available for input), add an Assignment after the
223
- *Customer Quote Form* element that Adds `QuoteLineItemRecipient.<column_name>` entries, then on the
224
- *ValidateAddress* element's **Recipient Wrapper** component select that collection variable under
225
- **Display Fields** (and repeat with a second collection variable under **Organise Fields**). Save +
226
- activate the flow.
227
-
228
- > ⚠ **GAP — Manual-UI.** Steps 3a–3e have no headless surface. An agent cannot verify the page/flow
229
- > state via `dispatch`; verification is visual/manual.
230
-
231
- ---
232
-
233
- ## Step 4 — Stand up the Context Service extension for multi-recipient attributes (headless)
234
-
235
- **Mechanism: Context Connect API (native REST) via `dispatch` — headless, no gap.** All calls are plain
236
- authenticated `dispatch` to `/services/data/v67.0/connect/context-*` (native-REST pass-through, **not**
237
- the `/headless/invoke` envelope, **not** the `sf` CLI). Every op carries the org-access-check
238
- **`Context Definitions enabled`**. *Run this before Step 3 — the page can only surface attributes that
239
- already exist on the context definition.*
240
-
241
- **What this is.** The multi-recipient / MultiSite recipient fields the Quote/Order pages show (Step 3:
242
- `Service City`, the Recipient Group counts, …) are backed by a **Context Service context definition**.
243
- A fresh Comms Cloud org already ships the standard **`ConsumerSalesContext__stdctx`** definition. You do
244
- **not** rebuild it and you do **not** diff it against anything at run time — you create a thin **custom
245
- extension** of it (`definitionType: custom_nonexecutable`, `baseReference:
246
- ConsumerSalesContext__stdctx`) that inherits every base node/attribute untouched and layers on **only**
247
- the MultiSite deltas below. (The CME B2B reference definition `CME_264_B2B_Ctx` was used *once, offline*,
248
- to derive exactly which deltas are needed — the concrete list is now baked into the tables below, so no
249
- CMEB2B definition need exist in the target org.)
250
-
251
- The delta is small and fully specified: **5 new attribute definitions** across 2 inherited nodes, and
252
- **16 attribute-mappings** across all **4** entity groups (Cart / Quote / Order / **Asset**). Nothing is
253
- removed; no new node is created.
254
-
255
- **5a. Delta attribute definitions to add** (onto the two already-inherited nodes):
256
-
257
- | Inherited node | Attribute (`key`/`title`) | dataType |
258
- |---|---|---|
259
- | `SalesTransactionItem` | `RecipientCity__c` | string |
260
- | `SalesTransactionItem` | `RecipientGroupMemberCount__c` | number |
261
- | `SalesTransactionItem` | `RecipientGroupExpectedCount__c` | number |
262
- | `SalesTransactionItem` | `DerivedSellingModelType__c` | string |
263
- | `SalesTransactionItemDetail` | `SalesTransactionItemDetailGroup__c` | string |
264
-
265
- All five are `fieldType: inputoutput`. That's **5 attribute definitions** — but each maps into more than
266
- one entity, giving 16 mappings below.
267
-
268
- **5b. The 16 attribute-mappings — one row per (entity group → node → sObject → attribute).** `src` is the
269
- `contextInputAttributeName` (the field/relationship the mapping reads); `hydration` is spelled out for
270
- the 5 rows that need it, everything else is a plain direct field.
271
-
272
- **Cart group** (`CartEntitiesMapping`) — all 5 direct, no hydration:
273
-
274
- | Node | sObject | attribute | src | hydration |
275
- |---|---|---|---|---|
276
- | `SalesTransactionItem` | `CartItem` | `RecipientGroupMemberCount__c` | `RecipientGroupMemberCount__c` | — direct |
277
- | `SalesTransactionItem` | `CartItem` | `RecipientGroupExpectedCount__c` | `RecipientGroupExpectedCount__c` | — direct |
278
- | `SalesTransactionItem` | `CartItem` | `RecipientCity__c` | `RecipientCity__c` | — direct |
279
- | `SalesTransactionItem` | `CartItem` | `DerivedSellingModelType__c` | `DerivedSellingModelType__c` | — direct |
280
- | `SalesTransactionItemDetail` | `CartItemDetail` | `SalesTransactionItemDetailGroup__c` | `SalesTransactionItemDetailGroup__c` | — direct |
281
-
282
- **Quote group** (`QuoteEntitiesMapping`) — 4 hydrated + 1 direct:
283
-
284
- | Node | sObject | attribute | src | hydration |
285
- |---|---|---|---|---|
286
- | `SalesTransactionItem` | `QuoteLineItem` | `RecipientGroupMemberCount__c` | `RecipientGroupMemberCount__c` | 2-hop `QuoteLineItem → QuoteRecipientGroup` → leaf `ActualMemberCount` |
287
- | `SalesTransactionItem` | `QuoteLineItem` | `RecipientCity__c` | `RecipientCity__c` | 2-hop `QuoteLineItem → QuoteLineItemRecipient` → leaf `ServiceCity` |
288
- | `SalesTransactionItem` | `QuoteLineItem` | `RecipientGroupExpectedCount__c` | `RecipientGroupExpectedCount__c` | 2-hop `QuoteLineItem → QuoteRecipientGroup` → leaf `ExpectedMemberCount` |
289
- | `SalesTransactionItem` | `QuoteLineItem` | `DerivedSellingModelType__c` | `DerivedSellingModelType__c` | 1-hop `QuoteLineItem → Derived_Selling_Model_Type__c` |
290
- | `SalesTransactionItemDetail` | `QuoteLineDetail` | `SalesTransactionItemDetailGroup__c` | `SalesTransactionItemDetailGroup__c` | — direct |
291
-
292
- **Order group** (`OrderEntitiesMapping`) — 1 hydrated + 4 direct:
293
-
294
- | Node | sObject | attribute | src | hydration |
295
- |---|---|---|---|---|
296
- | `SalesTransactionItem` | `OrderItem` | `RecipientCity__c` | `RecipientCity__c` | 2-hop `OrderItem → OrderItemRecipient` → leaf `ServiceCity` |
297
- | `SalesTransactionItem` | `OrderItem` | `RecipientGroupExpectedCount__c` | `RecipientGroupExpectedCount__c` | — direct |
298
- | `SalesTransactionItem` | `OrderItem` | `RecipientGroupMemberCount__c` | `RecipientGroupMemberCount__c` | — direct |
299
- | `SalesTransactionItem` | `OrderItem` | `DerivedSellingModelType__c` | `DerivedSellingModelType__c` | — direct |
300
- | `SalesTransactionItemDetail` | `OrderItemDetail` | `SalesTransactionItemDetailGroup__c` | `SalesTransactionItemDetailGroup__c` | — direct |
301
-
302
- **Asset group** (`AssetEntitiesMapping`) — 1 mapping (do **not** skip this group):
303
-
304
- | Node | sObject | attribute | src | hydration |
305
- |---|---|---|---|---|
306
- | `SalesTransactionItemDetail` | `SalesTransactionItemDetail` | `SalesTransactionItemDetailGroup__c` | `SalesTransactionItemDetailGroup__c` | — direct |
307
-
308
- **Why hydration only in Quote/Order.** On `CartItem` and `OrderItem` the recipient/count/selling-model
309
- values live as direct columns, so the mapping reads them straight. On `QuoteLineItem` those same values
310
- live on related records (`QuoteRecipientGroup`, `QuoteLineItemRecipient`) — hence the 2-hop trees — and
311
- `Derived_Selling_Model_Type__c` is reached via a single hop. `RecipientCity__c` on `OrderItem` is the one
312
- Order-group value that also lives on a related record (`OrderItemRecipient`), so it too hydrates. **5
313
- mappings hydrate (4 two-hop + 1 one-hop); the other 11 are direct.**
314
-
315
- **Call sequence (all `dispatch`, base `/services/data/v67.0/connect/`):**
316
-
317
- 1. **Preflight the base, then create the extension.** First confirm the base definition exists —
318
- `GET /context-definitions/ConsumerSalesContext__stdctx` must return `200`. A fresh Comms Cloud org
319
- ships it; a `404` means Context Service / the standard Consumer Sales context isn't provisioned in this
320
- org — **stop and resolve that first**, since the whole extension `baseReference`s it and the create will
321
- otherwise fail. Then `POST /context-definitions` with body
322
- `{"developerName":"customcommsconsumersalescd","name":"customcommsconsumersalescd","baseReference":"ConsumerSalesContext__stdctx"}`
323
- (sensible default — rename freely, but mind two wire-proven limits: **`name` (the label) must be ≤30
324
- chars, alphanumeric only, NO spaces** — a spaced/long label is rejected `INVALID_INPUT`/`RECORD_CREATION_FAILED`;
325
- `developerName` allows underscores, starts with a letter, no trailing/double underscore). **The `POST` is
326
- asynchronous: a `500 INTERNAL_ERROR` (or timeout) is a spurious sync-timeout, NOT a failure — the record
327
- materializes a moment later. Do not branch on 200-vs-500; confirm by polling.** Poll
328
- `GET /context-definitions/{developerName}` up to ~6× with a short wait, and read the *shape*, not `isSuccess`:
329
- when `contextDefinitionId` is a real id (starts with `11O…`) and `contextDefinitionVersionList` is non-empty
330
- the create is done — capture that `11O…` id and stop. While it is still in-flight (or genuinely absent) the GET
331
- returns an identical empty shell (`isSuccess:false`, `contextDefinitionId` echoing the developerName, empty
332
- version list) — that shape is NOT proof of absence, so keep polling until the window elapses. Re-`POST` only if
333
- the whole window stays the echo-shell; and if a `POST` ever returns "already exists"/duplicate, that PROVES it
334
- was created — **never `DELETE` and recreate** (delete-then-recreate on a just-created record is the infinite
335
- loop). Returns the new `contextDefinitionId`. (Leave `isActive` off / false — activate last, step 7, after the context tags in step 6.) Then
336
- `GET /context-definitions/{id}` (or `getContextDefinitionWithDynamicAttributes`) to read back the
337
- inherited node/mapping ids — you need each node's `contextNodeId` (step 2) and each entity's
338
- `nodeMappingId` (step 3), and they're inherited from the base, not authored by you.
339
- 2. **Add the 5 delta attribute definitions** (table 5a) — `POST /context-nodes/{contextNodeId}/context-attributes`
340
- with `{"contextAttributes":[ {"name":"RecipientCity__c","dataType":"STRING","fieldType":"INPUTOUTPUT"}, … ]}`:
341
- the 4 recipient attributes onto the `SalesTransactionItem` node, `SalesTransactionItemDetailGroup__c`
342
- onto the `SalesTransactionItemDetail` node. **`dataType`/`fieldType` are UPPERCASE enums** (`STRING`,
343
- `NUMBER`, …, `INPUTOUTPUT`) — the values are stored and returned uppercase; map the 5a table's
344
- `string`/`number` to `STRING`/`NUMBER`. **Capture the returned `contextAttributeId` for each** — the
345
- response `attributes[]` (and a follow-up GET) carry it, and step 3 references the attribute **by that
346
- id**, not by name.
347
- 3. **Create the 16 attribute-mappings** (table 5b) — `POST /context-node-mappings/{nodeMappingId}/context-attribute-mappings`
348
- with `{"contextAttributeMappings":[ {…} ], "deleteExistingHydrationDetails": false}`, once per entity
349
- group's node-mapping — **all four: Cart, Quote, Order, and Asset.** Each mapping element is
350
- `{"contextAttributeId":"<id from step 2>","contextInputAttributeName":"<src>"}` — the mapping links to
351
- the attribute by its **`contextAttributeId`** (there is **no** `contextAttribute`/`contextAttributeName`
352
- input field; posting a name is silently ignored → the mapping binds to nothing). The 11 direct rows stop
353
- there; the 5 hydrated rows add a `hydrationDetails` block (step 4). The Asset group is a single mapping
354
- (`SalesTransactionItemDetailGroup__c` on `SalesTransactionItemDetail`) — easy to forget; do not skip it.
355
- 4. **Attach hydration on the same POST** (the hydrated rows) via a `hydrationDetails` block. The wrapper is
356
- **recursive at every level**: the top `hydrationDetails` value **and** each hop's `childDetails` value are
357
- the object `{"contextAttrHydrationDetails":[ <hop>, … ]}` — **never a bare array**. Each hop is
358
- `{"queryAttribute":"<rel-or-field>","sObjectDomain":"<parent sObject>","childDetails":{…}}`, and a **leaf
359
- hop OMITS `childDetails` entirely** (a bare-array `childDetails:[…]`, an empty `childDetails:[]`, or a
360
- `childDetails:{queryAttribute:…}` object without the `contextAttrHydrationDetails` wrapper are all
361
- rejected with `JSON_PARSER_ERROR`). **2-hop** (e.g. Quote `RecipientCity__c` — `childDetails` re-wraps):
362
- ```json
363
- {"hydrationDetails":{"contextAttrHydrationDetails":[
364
- {"queryAttribute":"QuoteLineItemRecipient","sObjectDomain":"QuoteLineItem",
365
- "childDetails":{"contextAttrHydrationDetails":[
366
- {"queryAttribute":"ServiceCity","sObjectDomain":"QuoteLineItemRecipient"}
367
- ]}}
368
- ]}}
369
- ```
370
- **1-hop** (Quote `DerivedSellingModelType__c` → a single leaf hop, `childDetails` omitted):
371
- ```json
372
- {"hydrationDetails":{"contextAttrHydrationDetails":[
373
- {"queryAttribute":"Derived_Selling_Model_Type__c","sObjectDomain":"QuoteLineItem"}
374
- ]}}
375
- ```
376
- Two attributes may share the first hop and differ only by the leaf `queryAttribute` (the two
377
- RecipientGroup counts both hop `QuoteLineItem → QuoteRecipientGroup`, differing only by leaf
378
- `ActualMemberCount` vs `ExpectedMemberCount`) — that is **not** a collision. On **read-back**, the same
379
- tree renders under `contextAttrHydrationDetailList` where `childDetails` IS a plain array — the array↔
380
- object-wrapper asymmetry between read and POST-input is the single biggest time-sink here.
381
- > ⚠ **The 1-hop leaf `QuoteLineItem.Derived_Selling_Model_Type__c` must exist on the target org.** This
382
- > mapping is a **CMEB2B delta** — it exists because the `CME_264_B2B_Ctx` reference definition maps it on
383
- > `QuoteLineItem` (Cart/Order carry the value as a direct column instead). If that custom field is **absent
384
- > on the target org's `QuoteLineItem`**, the hop can't resolve and this one tree silently no-ops → you get
385
- > **4/5** hydration trees, not 5. The field's provisioning source is org-dependent (present on one
386
- > verification org, absent on another) — **verify the field exists before expecting all 5**; do not assume
387
- > any particular steel thread creates it.
388
- 5. **Verify each write with a read-back** — `GET /context-node-mappings/{nodeMappingId}/context-attribute-mappings/{attrMappingId}`;
389
- the persisted hydration renders under `contextAttrHydrationDetailList` with the nested leaf under
390
- `childDetails`. Confirm all 16 mappings and all 5 hydration trees are present.
391
- 6. **Create a context tag for each delta attribute — COMPULSORY, do this BEFORE activation (step 7).** The 5 attribute
392
- definitions from step 2 are *not enough on their own*: a Pricing Procedure (ExpressionSet,
393
- `interfaceSourceType=PricingProcedure`) resolves an attribute's **data type by its context-tag
394
- name, not by the attribute name**. Every base attribute inherits a tag automatically, but the
395
- **skill-added deltas do not** — so without this step the extension is structurally complete yet a
396
- Pricing Procedure that references it fails to compile with
397
- **`Specify a valid data type for the formula-section-0-output variable`** (the tag lookup returns
398
- nothing → unresolvable data type). Create one tag per delta, **tag `name` == the attribute's API
399
- name** (this mirrors how `CME_264_B2B_Ctx` tags its custom `__c` deltas — the tag `<title>` equals
400
- the attribute API name):
401
-
402
- `POST /context-definitions/{contextDefinitionId}/context-tags` with
403
-
404
- ```json
405
- {"contextTags":[
406
- {"name":"RecipientCity__c", "contextAttributeId":"<RecipientCity__c id>"},
407
- {"name":"RecipientGroupMemberCount__c", "contextAttributeId":"<RecipientGroupMemberCount__c id>"},
408
- {"name":"RecipientGroupExpectedCount__c", "contextAttributeId":"<RecipientGroupExpectedCount__c id>"},
409
- {"name":"DerivedSellingModelType__c", "contextAttributeId":"<DerivedSellingModelType__c id>"},
410
- {"name":"SalesTransactionItemDetailGroup__c","contextAttributeId":"<SalesTransactionItemDetailGroup__c id>"}
411
- ]}
412
- ```
413
-
414
- | Tag `name` (== attribute API name) | Links to attribute on node |
415
- |---|---|
416
- | `RecipientCity__c` | `SalesTransactionItem` |
417
- | `RecipientGroupMemberCount__c` | `SalesTransactionItem` |
418
- | `RecipientGroupExpectedCount__c` | `SalesTransactionItem` |
419
- | `DerivedSellingModelType__c` | `SalesTransactionItem` |
420
- | `SalesTransactionItemDetailGroup__c` | `SalesTransactionItemDetail` |
421
-
422
- **Wire gotchas (both cost a round-trip if missed):**
423
- - The tag-input schema accepts **only `name` + `contextAttributeId`**. Posting `dynamic` (or any
424
- other field copied from the read-back shape) is rejected `400 JSON_PARSER_ERROR:
425
- "Unrecognized field 'dynamic'"`. `dynamic` defaults to `false` and comes back on the response —
426
- it is **output-only**, never input.
427
- - A tag binds to its attribute **by `contextAttributeId`** (the id captured in step 2), same as the
428
- mappings — there is no name-based binding.
429
-
430
- Returns a `contextTagId` per tag. Verify with `GET /context-definitions/{id}/context-tags` (or the
431
- `attributeTags[]` on a `getContextDefinitionWithDynamicAttributes` read-back) — the 5 deltas should
432
- now each carry a tag whose `name` equals the attribute API name.
433
- 7. **Set a default mapping FIRST, then activate (LAST step).** Activation refuses a definition that has no default
434
- entity-mapping (`400 DATA_MAPPING_NOT_FOUND: "Cannot activate a definition without default mapping"`) —
435
- and the inherited mappings come across with `isDefault:false`, so you **must** flip one on yourself. Mirror
436
- the **base** default: read `GET /context-definitions/ConsumerSalesContext__stdctx`, find the
437
- `contextMappings[]` entry with `isDefault:true` (it is **`CartEntitiesMapping`**), then
438
- `PATCH /context-definitions/{contextDefinitionId}/context-mappings` with
439
- `{"contextMappings":[{"contextMappingId":"<your Cart mapping id>","name":"CartEntitiesMapping","isDefault":true}]}`.
440
- Only then `PATCH /context-definitions/{contextDefinitionId}` with `{"isActive": true}` → returns
441
- `isActive:true` + an `activeVersionId`. Confirm both. The context tags (step 6) **must already exist
442
- before this activate** — activating first leaves the deltas untagged and a downstream Pricing
443
- Procedure won't compile.
444
-
445
- > **Load-bearing gotchas.**
446
- > - **A mapping references its attribute by `contextAttributeId`, not by name.** The mapping-input schema
447
- > (`ContextAttributeMappingsInputRepresentation`) has `contextAttributeId` + `contextInputAttributeName`
448
- > only — there is **no** `contextAttribute`/`contextAttributeName` input field. So you must create the
449
- > attribute first (step 2), keep its returned `contextAttributeId`, and feed that id into the mapping.
450
- > Posting an attribute *name* is accepted but binds the mapping to nothing.
451
- > - **`hydrationDetails` — object wrapper, not a bare array.** The OAS declares `hydrationDetails` as an
452
- > *array of hops* on the mapping input, but the runtime wants the **object-wrapper** form
453
- > `{"hydrationDetails":{"contextAttrHydrationDetails":[ <hop> ]}}` (schema
454
- > `ContextAttrHydrationDetailListInputRepresentation`). Posting the bare-array shape the OAS implies
455
- > fails — this, plus guessing the leaf shape, is what produced the two `INVALID_DEFINITION` errors when
456
- > this was first built.
457
- > - **Hydration persists only on the create-list `POST`.** `PATCH` on an attribute-mapping **silently
458
- > drops** hydration (returns success, hydration gone). To *replace* wrong hydration, re-POST with
459
- > **`deleteExistingHydrationDetails: true`** (or DELETE the mapping and re-POST) — never PATCH it.
460
- > - **`childDetails` on POST-input IS a `{contextAttrHydrationDetails:[…]}` wrapper (recursive), not a bare
461
- > array.** The wrapper repeats at every non-leaf level; leaf hops omit `childDetails`. (Read-back inverts
462
- > this: there `childDetails` is a plain array — do not copy the read shape into a POST.)
463
- > - **Activation needs a default mapping (step 7).** A brand-new extension inherits every mapping with
464
- > `isDefault:false`; `PATCH {isActive:true}` on it fails `DATA_MAPPING_NOT_FOUND` until you flip one
465
- > (`CartEntitiesMapping`, mirroring the base) to `isDefault:true`.
466
- > - **Delta attributes need context tags or pricing can't resolve them (step 6, before activation).** Creating the
467
- > attribute + mapping is not sufficient for a Pricing Procedure: the ExpressionSet resolves each
468
- > output variable's data type via the attribute's **context-tag name**. Base attributes inherit
469
- > their tags; the 5 skill-added deltas do **not** — you must POST a tag (`name` == attribute API
470
- > name) for each, or the PP compile fails `Specify a valid data type for the formula-section-0-output
471
- > variable`. This is invisible at the CD level (the definition activates fine) — it only surfaces
472
- > when a pricing procedure references the definition.
473
- > - A write returning `isSuccess:true` / `true` is a call-succeeded flag, **not** proof of persisted
474
- > state — always read back (same verify-before-substitute discipline as Step 1).
475
-
476
- > **Verified end-to-end on dev orgs (via `dispatch`, no `sf` CLI).** Built the extension as a
477
- > `custom_nonexecutable` with `baseReference: ConsumerSalesContext__stdctx`; added the 5 delta attribute
478
- > definitions; created all 16 mappings across Cart/Quote/Order/Asset; attached the hydration trees (two-hop
479
- > + one-hop, each hop a recursive `childDetails:{contextAttrHydrationDetails:[…]}` wrapper); activated with
480
- > `PATCH {isActive:true}`. Every mapped field, `sObjectDomain`, and hop tree matched the delta tables above.
481
- > Activation required the default-mapping precondition (Step 6) — the base default is `CartEntitiesMapping`;
482
- > without re-asserting `isDefault:true` on the Cart mapping the activate returns `DATA_MAPPING_NOT_FOUND`.
483
- >
484
- > **Hydration-tree count is org-dependent.** One verification org persisted **5/5** trees; another persisted
485
- > **4/5** — on the latter the Quote 1-hop leaf `QuoteLineItem.Derived_Selling_Model_Type__c` was absent, so
486
- > that single tree silently dropped (target-org field-presence, **not** a wire bug and **not** a steel-thread
487
- > sequencing dependency — see Step 4 item 4). The other 15 mappings and 4 hydration trees are unaffected.
488
- >
489
- > Fully headless — every call is authenticated Connect REST, so it runs the same from a hosted agent
490
- > (ChatGPT/Slackbot) as from Claude Code. Dev/scratch success is still not proof of prod-safety.
491
- >
492
- > **Tag step verified.** Created the 5 attribute-level context tags (`name` == attribute API name,
493
- > bound by `contextAttributeId`) on the extension **before activating**, then activated — all via
494
- > `dispatch`. Read-back (`GET /context-definitions/{id}/context-tags`) returns one tag per delta. The
495
- > tags are what let a downstream Pricing Procedure resolve each delta's data type by its tag name;
496
- > authoring/deploying that Pricing Procedure is the next steel thread's concern and is out of scope
497
- > here.
498
-
499
- ---
500
-
501
- ## Verification & handoff
502
-
503
- - **Headless-verifiable:** `get-comms-org-preferences` (Step 1) → `multiLocationEnabled:true`
504
- (Step 1b); `CMESales` present on the target profile/permission set (Step 2b, when applicable); the
505
- Context Service extension (Step 4) active with the 5 delta attribute definitions, all 16 mappings
506
- (Cart/Quote/Order/Asset), the 5 hydration trees (4 two-hop + 1 one-hop), and the 5 context tags
507
- (one per delta, `name` == attribute API name — Step 4 item 6, created before activation) present — `GET
508
- /context-definitions/{id}` → `isActive:true`, per-mapping read-backs match the delta tables in
509
- Step 4, and `GET /context-definitions/{id}/context-tags` returns a tag per delta.
510
- - **Manual-only (⚠ gap):** Quote/Order pages modified; onboarding flow configured — confirmed
511
- visually, not via `dispatch`. Per Comms Cloud #2 there is no headless way to render a Go-style
512
- "setup complete / what's next" view; assemble the summary from raw introspection.
513
- - **Handoff:** the MultiSite thread hands off to **Comms Cloud #3 — SMB Fiber Products** (catalog CSV
514
- import), which defines the products behind the display fields above.
515
-
516
- ## Notes
517
-
518
- - This is the enablement layer of the second of three Comms Cloud steel threads:
519
- **initial setup → multisite (enable → this) → SMB fiber product setup.**
520
- - **Use the approved SOR `RevenueCloudforCommunicationsSettings` friendly-route surface, NOT the
521
- native-REST `/setup/org/preferences/{name}` surface.** For this Industries Comms Sales pref the
522
- native-REST surface `404`s (both verbs) — it isn't on that registry — while `CorePricingPreference`
523
- 200s on the same surface. The friendly `/headless/invoke/industries/industries-communications-sales/…`
524
- route resolves through the approved SOR's published route entry and works regardless of the client's
525
- knowledge of the backing controller. Apply **verify-before-substitute**: `get-comms-org-preferences`
526
- read first (a `403` is a licensing/permission gap; a `200` map means the gate passes), then write,
527
- then read back.
528
- - **A `404` on `/setup/org/preferences/MultiLocationFeatureOrgPref` is NOT "disabled" and NOT a
529
- licensing gap** — it means the pref isn't on that generic REST surface. Diagnose enablement/gating
530
- via the SOR read (`403` = gate unmet) and the PermissionSetLicense query, never via that 404.
531
- - Provisioned org permissions (`CMEMultiRecipient`, `MultiRecipient`) are **not** admin-toggleable —
532
- never author a headless "enable" step for them; verify + report the licensing gap instead.
533
- - **Context Service extension (Step 4) is native Connect REST, not `/headless/invoke`.** Build the
534
- MultiSite recipient attributes as a `baseReference` extension of the org's standard
535
- `ConsumerSalesContext__stdctx` (add the 5 delta attributes + 16 mappings from the Step-4 tables — do
536
- not diff against a CMEB2B definition at run time; the deltas are already spelled out); activate via
537
- `PATCH /context-definitions/{id} {isActive:true}`. Two hard-won rules: hydration persists **only** on
538
- the create-list POST (`PATCH` silently drops it — use `deleteExistingHydrationDetails:true` to
539
- replace), and the nested hydration leaf key is `childDetails`. Attributes must exist here before Step 3
540
- can surface them on the page.
541
- - **All calls in Steps 1–2 go through `dispatch` (no `sf` CLI).** A hosted agent (ChatGPT, Slackbot)
542
- has no shell, so a CLI step would no-op there. Dev/scratch success is not proof of prod-safety.
543
-
544
- <!-- skill-validate: ignore-start -->
545
- <!-- codey:operations start -->
546
- ## Operations Reference
547
-
548
- Operations this skill uses — routing and dependency reference.
549
-
550
- | Operation | Purpose | Status | Call | Depends on |
551
- |-----------|---------|--------|------|------------|
552
- | `step1-get-comms-org-preferences` | read | — | `GET /headless/invoke/industries/industries-communications-sales/get-comms-org-preferences` | — |
553
- | `step1-set-multi-location-enabled` | write | — | `PATCH /headless/invoke/industries/industries-communications-sales/set-multi-location-enabled` | `step1-get-comms-org-preferences` |
554
- | `step1-verify-multi-location-enabled` | verify | — | `GET /headless/invoke/industries/industries-communications-sales/get-comms-org-preferences` | `step1-set-multi-location-enabled` |
555
- | `step2-query-multirecipient-psl-status` | verify | — | `GET /services/data/v67.0/query` | — |
556
- | `step2-query-cmemultirecipient-psl-assignment` | verify | — | `GET /services/data/v67.0/query` | — |
557
- | `step2-find-cme-sales-permset` | read | — | `GET /services/data/v67.0/query` | `step2-query-cmemultirecipient-psl-assignment` |
558
- | `step2-assign-cme-sales-permset` | write | — | `POST /services/data/v67.0/sobjects/PermissionSetAssignment` | `step2-find-cme-sales-permset` |
559
- | `gap-cmemultirecipient-provisioning` | verify | — | — | — |
560
- | `gap-quote-order-page-display-columns` | navigate | — | — | — |
561
- | `step4-preflight-base-context-def` | precondition | — | `GET /services/data/v67.0/connect/context-definitions/ConsumerSalesContext__stdctx` | — |
562
- | `step4-create-extension` | write | — | `POST /services/data/v67.0/connect/context-definitions` | `step4-preflight-base-context-def` |
563
- | `step4-get-extension-with-dynamic-attrs` | read | — | `GET /services/data/v67.0/connect/context-definitions/{contextDefinitionId}` | `step4-create-extension` |
564
- | `step4-add-delta-attributes` | write | — | `POST /services/data/v67.0/connect/context-nodes/{contextNodeId}/context-attributes` | `step4-get-extension-with-dynamic-attrs` |
565
- | `step4-create-attribute-mappings` | write | — | `POST /services/data/v67.0/connect/context-node-mappings/{nodeMappingId}/context-attribute-mappings` | `step4-add-delta-attributes` |
566
- | `step4-verify-attribute-mappings` | verify | — | `GET /services/data/v67.0/connect/context-node-mappings/{nodeMappingId}/context-attribute-mappings/{attrMappingId}` | `step4-create-attribute-mappings` |
567
- | `step4-create-context-tags` | write | — | `POST /services/data/v67.0/connect/context-definitions/{contextDefinitionId}/context-tags` | `step4-verify-attribute-mappings` |
568
- | `step4-set-default-cart-mapping` | write | — | `PATCH /services/data/v67.0/connect/context-definitions/{contextDefinitionId}/context-mappings` | `step4-create-context-tags` |
569
- | `step4-activate-extension` | write | — | `PATCH /services/data/v67.0/connect/context-definitions/{contextDefinitionId}` | `step4-set-default-cart-mapping` |
570
- <!-- codey:operations end -->
571
- <!-- skill-validate: ignore-end -->