@salesforce/afv-skills 1.41.0 → 1.43.0

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 (288) hide show
  1. package/package.json +2 -6
  2. package/skills/automation-sandbox-post-copy-config-generate/SKILL.md +3 -0
  3. package/skills/automation-sandbox-post-copy-configure/SKILL.md +4 -0
  4. package/skills/design-systems-slds-validate/SKILL.md +2 -2
  5. package/skills/dx-app-analytics-query/SKILL.md +1 -3
  6. package/skills/dx-devops-conflict-resolve/SKILL.md +205 -0
  7. package/skills/dx-devops-conflict-resolve/examples/conflict-workflows.md +165 -0
  8. package/skills/dx-devops-conflict-resolve/references/deploy-failure-resolution.md +75 -0
  9. package/skills/dx-devops-conflict-resolve/references/git-conflict-resolution.md +124 -0
  10. package/skills/dx-devops-conflict-resolve/scripts/detect-conflicts.sh +91 -0
  11. package/skills/dx-devops-conflict-resolve/scripts/diagnose-deploy-failure.sh +156 -0
  12. package/skills/dx-devops-request-status/SKILL.md +160 -0
  13. package/skills/dx-devops-request-status/examples/polling-workflows.md +101 -0
  14. package/skills/dx-devops-request-status/references/cli-commands.md +176 -0
  15. package/skills/dx-devops-request-status/scripts/poll-status.sh +134 -0
  16. package/skills/dx-devops-test-failures-analyze/SKILL.md +6 -6
  17. package/skills/dx-devops-test-pipeline-configure/SKILL.md +7 -7
  18. package/skills/dx-devops-test-suite-assignments-configure/SKILL.md +6 -6
  19. package/skills/dx-devops-test-suite-run/SKILL.md +6 -6
  20. package/skills/dx-devops-work-item-manage/SKILL.md +2 -0
  21. package/skills/dx-org-manage/references/creating-scratch-org.md +5 -2
  22. package/skills/dx-org-manage/references/creating-snapshot.md +1 -0
  23. package/skills/dx-org-shape-manage/SKILL.md +152 -0
  24. package/skills/dx-org-shape-manage/examples/create_error_output.json +9 -0
  25. package/skills/dx-org-shape-manage/examples/create_success_output.json +9 -0
  26. package/skills/dx-org-shape-manage/examples/delete_output.json +11 -0
  27. package/skills/dx-org-shape-manage/examples/list_inactive_output.json +32 -0
  28. package/skills/dx-org-shape-manage/examples/list_output.json +24 -0
  29. package/skills/dx-org-shape-manage/references/cli_flags.md +135 -0
  30. package/skills/dx-org-switch/SKILL.md +2 -2
  31. package/skills/dx-org-trial-expiration-check/SKILL.md +2 -0
  32. package/skills/dx-pkg-post-install-configure/SKILL.md +3 -0
  33. package/skills/education-cloud-multi-campus-configure/SKILL.md +211 -0
  34. package/skills/education-cloud-multi-campus-configure/examples/hierarchy_visualization.md +174 -0
  35. package/skills/education-cloud-multi-campus-configure/examples/output_examples.md +54 -0
  36. package/skills/education-cloud-multi-campus-configure/examples/sample_hierarchy_input.csv +29 -0
  37. package/skills/education-cloud-multi-campus-configure/examples/sample_hierarchy_input_edgecases.csv +16 -0
  38. package/skills/education-cloud-multi-campus-configure/references/account_recordtype_prerequisite.md +44 -0
  39. package/skills/education-cloud-multi-campus-configure/references/delta_computation.md +33 -0
  40. package/skills/education-cloud-multi-campus-configure/references/error_handling.md +198 -0
  41. package/skills/education-cloud-multi-campus-configure/references/foundation_prerequisites.md +54 -0
  42. package/skills/education-cloud-multi-campus-configure/references/gotchas.md +16 -0
  43. package/skills/education-cloud-multi-campus-configure/references/hierarchy_parsing_rules.md +133 -0
  44. package/skills/education-cloud-multi-campus-configure/references/mcp-invocation.md +75 -0
  45. package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/SKILL.md +1 -1
  46. package/skills/experience-cms-brand-apply/SKILL.md +4 -1
  47. package/skills/experience-cms-brand-create/SKILL.md +197 -0
  48. package/skills/experience-cms-brand-create/assets/brand-template.json +329 -0
  49. package/skills/experience-cms-brand-create/references/brand-anatomy.md +120 -0
  50. package/skills/experience-cms-brand-create/references/disk-contract.md +84 -0
  51. package/skills/experience-cms-content-generate/SKILL.md +190 -0
  52. package/skills/experience-cms-content-generate/assets/display-formats.md +84 -0
  53. package/skills/experience-cms-content-generate/assets/payloads/create-content-bulk.json +11 -0
  54. package/skills/experience-cms-content-generate/assets/payloads/create-content-single.json +11 -0
  55. package/skills/experience-cms-content-generate/assets/payloads/publish-content.json +4 -0
  56. package/skills/experience-cms-content-generate/assets/payloads/update-content.json +9 -0
  57. package/skills/experience-cms-content-generate/assets/questions.md +241 -0
  58. package/skills/experience-cms-content-generate/examples/create-content-call.md +81 -0
  59. package/skills/experience-cms-content-generate/references/bulk-batching.md +56 -0
  60. package/skills/experience-cms-content-generate/references/content-type-classification.md +88 -0
  61. package/skills/experience-cms-content-generate/references/content-write-tool.md +95 -0
  62. package/skills/experience-cms-content-generate/references/delegation-protocol.md +37 -0
  63. package/skills/experience-cms-content-generate/references/edit-publish-workflow.md +63 -0
  64. package/skills/experience-cms-content-generate/references/error-recovery.md +72 -0
  65. package/skills/experience-cms-content-generate/references/identifier-resolution.md +26 -0
  66. package/skills/experience-cms-content-generate/references/intent-routing.md +45 -0
  67. package/skills/experience-cms-content-generate/references/principles.md +19 -0
  68. package/skills/experience-cms-content-generate/references/ux-rules.md +68 -0
  69. package/skills/experience-cms-content-generate/references/workspace-resolution.md +33 -0
  70. package/skills/experience-cms-content-type-generate/SKILL.md +449 -0
  71. package/skills/experience-cms-content-type-generate/assets/discovery-prompts.md +79 -0
  72. package/skills/experience-cms-content-type-generate/assets/schema-example.json +70 -0
  73. package/skills/experience-cms-content-type-generate/references/agent-checklist.md +50 -0
  74. package/skills/experience-cms-content-type-generate/references/anti-patterns.md +39 -0
  75. package/skills/experience-cms-content-type-generate/references/deployment-errors.md +27 -0
  76. package/skills/experience-cms-content-type-generate/references/discovery-details.md +106 -0
  77. package/skills/experience-cms-content-type-generate/references/discovery-query-rules.md +85 -0
  78. package/skills/experience-cms-content-type-generate/references/edit-fields-loop.md +48 -0
  79. package/skills/experience-cms-content-type-generate/references/pre-deploy-checklist.md +21 -0
  80. package/skills/experience-cms-content-type-generate/references/retrieve-and-reconcile.md +105 -0
  81. package/skills/experience-cms-content-type-generate/references/schema-rules.md +51 -0
  82. package/skills/experience-cms-content-type-generate/references/schema-summary-format.md +60 -0
  83. package/skills/experience-lds-graphql-generate/SKILL.md +4 -0
  84. package/skills/experience-lwc-accessibility-jest-run/SKILL.md +79 -0
  85. package/skills/experience-lwc-accessibility-jest-run/references/running-sa11y-jest-tests.md +205 -0
  86. package/skills/experience-lwc-design-generate/SKILL.md +5 -4
  87. package/skills/experience-lwc-generate/SKILL.md +10 -9
  88. package/skills/experience-ui-bundle-deploy/references/dev-preview.md +21 -0
  89. package/skills/experience-ui-bundle-deploy/references/social-login.md +1 -0
  90. package/skills/experience-ui-bundle-file-upload-generate/SKILL.md +6 -6
  91. package/skills/experience-ui-bundle-localize/SKILL.md +30 -37
  92. package/skills/experience-ui-bundle-localize/references/gotchas.md +23 -7
  93. package/skills/experience-ui-bundle-localize/references/i18n-setup.md +48 -4
  94. package/skills/experience-ui-bundle-localize/references/label-xml.md +22 -8
  95. package/skills/experience-ui-bundle-localize/references/verifying.md +39 -11
  96. package/skills/experience-ui-bundle-localize/scripts/detect-bundle-type.sh +118 -15
  97. package/skills/experience-ui-bundle-localize/scripts/tests/test-detect-bundle-type.sh +187 -0
  98. package/skills/experience-ui-bundle-mfa-configure/SKILL.md +13 -2
  99. package/skills/experience-ui-bundle-mfa-configure/references/social-login.md +1 -0
  100. package/skills/experience-ui-bundle-project-generate/SKILL.md +2 -2
  101. package/skills/integration-connectivity-generate/SKILL.md +11 -10
  102. package/skills/integration-eventing-cdc-configure/SKILL.md +6 -6
  103. package/skills/integration-eventing-subscription-configure/SKILL.md +6 -5
  104. package/skills/mobile-platform-native-capabilities-integrate/SKILL.md +2 -2
  105. package/skills/mobile-platform-offline-validate/scripts/package.json +1 -1
  106. package/skills/platform-agentexchange-partner-offers-configure/SKILL.md +8 -8
  107. package/skills/platform-custom-application-generate/SKILL.md +2 -0
  108. package/skills/platform-custom-field-generate/SKILL.md +8 -6
  109. package/skills/platform-custom-metadata-type-generate/SKILL.md +460 -0
  110. package/skills/platform-custom-metadata-type-generate/references/cmdt-records.md +251 -0
  111. package/skills/platform-custom-metadata-type-generate/scripts/sanitize-developer-name.sh +46 -0
  112. package/skills/platform-custom-setting-generate/SKILL.md +419 -0
  113. package/skills/platform-dataspace-access-configure/SKILL.md +3 -3
  114. package/skills/platform-sharing-owd-configure/SKILL.md +3 -0
  115. package/skills/platform-value-set-generate/SKILL.md +2 -0
  116. package/skills/service-agentforce-channel-configure/SKILL.md +29 -20
  117. package/skills/service-agentforce-channel-configure/assets/BotEmailDefinition.botEmailDefinition-meta.xml +36 -0
  118. package/skills/service-agentforce-channel-configure/assets/email/unfiled$public/AgentforceForServiceEmailTemplate.email +17 -0
  119. package/skills/service-agentforce-channel-configure/assets/email/unfiled$public/AgentforceForServiceEmailTemplate.email-meta.xml +29 -0
  120. package/skills/service-agentforce-channel-configure/assets/mdapi-package.xml +25 -0
  121. package/skills/service-agentforce-channel-configure/assets/settings-mdapi-package.xml +30 -0
  122. package/skills/service-agentforce-channel-configure/references/agent-wiring.md +20 -0
  123. package/skills/service-agentforce-channel-configure/references/botemaildefinition.md +107 -0
  124. package/skills/service-agentforce-channel-configure/references/channel-branch-email.md +203 -50
  125. package/skills/service-agentforce-channel-configure/references/channel-types.md +30 -3
  126. package/skills/service-agentforce-channel-configure/references/queue-resolution.md +17 -8
  127. package/skills/service-agentforce-channel-configure/references/routing-flow.md +14 -3
  128. package/skills/service-agentforce-channel-configure/scripts/validate-botemaildefinition.py +126 -0
  129. package/skills/service-agentforce-channel-configure/scripts/validate-emailtemplate.py +133 -0
  130. package/skills/service-de-channel-activate/SKILL.md +271 -0
  131. package/skills/service-de-channel-activate/references/gotchas.md +31 -0
  132. package/skills/service-de-channel-activate/references/phone-verification.md +96 -0
  133. package/skills/service-de-channel-activate/references/worked-examples.md +14 -0
  134. package/skills/service-de-channel-consent-configure/SKILL.md +230 -0
  135. package/skills/service-de-channel-consent-configure/references/gotchas.md +41 -0
  136. package/skills/service-de-channel-consent-configure/references/language-keywords.md +84 -0
  137. package/skills/service-de-channel-consent-configure/references/worked-examples.md +134 -0
  138. package/skills/service-de-channel-create/SKILL.md +369 -0
  139. package/skills/service-de-channel-create/references/apple.md +59 -0
  140. package/skills/service-de-channel-create/references/connect-insert.md +84 -0
  141. package/skills/service-de-channel-create/references/facebook.md +154 -0
  142. package/skills/service-de-channel-create/references/line.md +66 -0
  143. package/skills/service-de-channel-create/references/sms.md +98 -0
  144. package/skills/service-de-channel-create/references/whatsapp.md +98 -0
  145. package/skills/service-de-channel-create/references/worked-examples.md +70 -0
  146. package/skills/service-de-channel-routing-configure/SKILL.md +345 -0
  147. package/skills/service-de-channel-routing-configure/references/asa-routing.md +90 -0
  148. package/skills/service-de-channel-routing-configure/references/gotchas.md +27 -0
  149. package/skills/service-de-channel-routing-configure/references/queue-creation.md +123 -0
  150. package/skills/service-de-channel-routing-configure/references/target-locate.md +98 -0
  151. package/skills/service-de-channel-routing-configure/references/worked-examples.md +174 -0
  152. package/skills/service-de-headless-channel-configure/SKILL.md +305 -0
  153. package/skills/service-de-headless-channel-configure/references/gotchas.md +27 -0
  154. package/skills/service-de-headless-channel-configure/references/inputs.md +49 -0
  155. package/skills/service-de-headless-channel-configure/references/output-envelopes.md +53 -0
  156. package/skills/service-de-headless-channel-configure/references/partial-success.md +24 -0
  157. package/skills/service-de-headless-channel-configure/references/terms-and-conditions.md +54 -0
  158. package/skills/service-de-headless-channel-configure/references/worked-examples.md +108 -0
  159. package/skills/service-de-waba-integrate/SKILL.md +227 -0
  160. package/skills/service-digital-engagement-channel-configure/scripts/check-api-version.sh +29 -0
  161. package/skills/service-digital-engagement-messaging-site-integrate/SKILL.md +10 -9
  162. package/skills/service-digital-engagement-messaging-site-integrate/references/lwr_patch.md +39 -21
  163. package/skills/service-digital-engagement-messaging-site-integrate/scripts/patch_lwr_bundle.sh +157 -96
  164. package/skills/service-email-to-case-configure/SKILL.md +190 -0
  165. package/skills/service-email-to-case-configure/assets/CaseSettings.settings-meta.xml +45 -0
  166. package/skills/service-email-to-case-configure/examples/CaseSettings-two-addresses.settings-meta.xml +36 -0
  167. package/skills/service-email-to-case-configure/references/apply-mechanics.md +73 -0
  168. package/skills/service-email-to-case-configure/references/routing_address_reference.md +73 -0
  169. package/skills/service-email-to-case-configure/references/troubleshooting.md +25 -0
  170. package/skills/service-email-to-case-configure/scripts/apply-casesettings.py +1315 -0
  171. package/skills/service-email-to-case-configure/scripts/check-agent-email-capability.sh +26 -0
  172. package/skills/service-email-to-case-configure/scripts/tests/__init__.py +0 -0
  173. package/skills/service-email-to-case-configure/scripts/tests/_bootstrap.py +45 -0
  174. package/skills/service-email-to-case-configure/scripts/tests/_fakeorg.py +366 -0
  175. package/skills/service-email-to-case-configure/scripts/tests/_run.py +84 -0
  176. package/skills/service-email-to-case-configure/scripts/tests/test_apply_org_scenarios.py +655 -0
  177. package/skills/service-email-to-case-configure/scripts/tests/test_get_session.py +134 -0
  178. package/skills/service-email-to-case-configure/scripts/tests/test_new_capabilities.py +193 -0
  179. package/skills/service-email-to-case-configure/scripts/tests/test_validate_casesettings.py +170 -0
  180. package/skills/service-email-to-case-configure/scripts/validate-casesettings.py +229 -0
  181. package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +33 -15
  182. package/skills/service-itsm-agentic-setup-agentforce-coordinate/examples/output-templates.md +63 -47
  183. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/SKILL.md +17 -12
  184. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/references/cli-invocation.md +5 -3
  185. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/scripts/classify-enable-plan.mjs +11 -3
  186. package/skills/service-itsm-agentic-setup-agentforce-studio-validate/SKILL.md +8 -6
  187. package/skills/service-itsm-agentic-setup-agentforce-studio-validate/references/cli-invocation.md +3 -3
  188. package/skills/service-itsm-agentic-setup-agentforce-studio-validate/scripts/classify-readiness.mjs +11 -3
  189. package/skills/service-itsm-agentic-setup-configure/SKILL.md +5 -5
  190. package/skills/service-itsm-agentic-setup-configure/examples/output-templates.md +5 -5
  191. package/skills/service-itsm-agentic-setup-employee-agent-configure/SKILL.md +2 -2
  192. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/report-format.md +11 -7
  193. package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/render-report.mjs +20 -7
  194. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/SKILL.md +10 -6
  195. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/action-availability.md +7 -7
  196. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/report-format.md +11 -7
  197. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/build-create-body.mjs +24 -17
  198. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-action-availability.mjs +98 -58
  199. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/render-report.mjs +20 -7
  200. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/strip-release-management.mjs +176 -0
  201. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/SKILL.md +19 -19
  202. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/cli-invocation.md +3 -4
  203. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/helper-contracts.md +6 -6
  204. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/permset-topology.md +3 -10
  205. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/classify-permset-availability.mjs +7 -9
  206. package/skills/service-itsm-incident-mgmt-configure/SKILL.md +2 -0
  207. package/skills/service-itsm-incident-priority-configure/SKILL.md +15 -12
  208. package/skills/service-itsm-incident-priority-configure/examples/matrix-operations.md +27 -1
  209. package/skills/service-itsm-incident-priority-configure/references/sf-cli-invocation.md +37 -6
  210. package/skills/service-native-voice-recording-transcription-configure/SKILL.md +146 -0
  211. package/skills/service-native-voice-recording-transcription-configure/assets/confirmation-output.json +16 -0
  212. package/skills/service-native-voice-recording-transcription-configure/assets/package.xml +22 -0
  213. package/skills/service-native-voice-recording-transcription-configure/references/thunderbird-voice-settings.md +101 -0
  214. package/skills/service-native-voice-recording-transcription-configure/scripts/enable-recording-transcription.sh +181 -0
  215. package/skills/data360-activate/README.md +0 -38
  216. package/skills/data360-activate/SKILL.md +0 -127
  217. package/skills/data360-connect/README.md +0 -57
  218. package/skills/data360-connect/SKILL.md +0 -163
  219. package/skills/data360-connect/examples/connections/heroku-postgres.json +0 -15
  220. package/skills/data360-connect/examples/connections/ingest-api-connection.json +0 -5
  221. package/skills/data360-connect/examples/connections/ingest-api-schema.json +0 -31
  222. package/skills/data360-connect/examples/connections/redshift.json +0 -16
  223. package/skills/data360-connect/examples/connections/sharepoint-unstructured.json +0 -20
  224. package/skills/data360-connect/examples/connections/snowflake-connection.json +0 -42
  225. package/skills/data360-harmonize/README.md +0 -31
  226. package/skills/data360-harmonize/SKILL.md +0 -126
  227. package/skills/data360-orchestrate/README.md +0 -120
  228. package/skills/data360-orchestrate/SKILL.md +0 -263
  229. package/skills/data360-orchestrate/assets/definitions/activation-target.template.json +0 -5
  230. package/skills/data360-orchestrate/assets/definitions/activation.template.json +0 -7
  231. package/skills/data360-orchestrate/assets/definitions/calculated-insight.template.json +0 -7
  232. package/skills/data360-orchestrate/assets/definitions/data-action-target.template.json +0 -5
  233. package/skills/data360-orchestrate/assets/definitions/data-action.template.json +0 -5
  234. package/skills/data360-orchestrate/assets/definitions/data-graph.template.json +0 -21
  235. package/skills/data360-orchestrate/assets/definitions/data-stream.template.json +0 -55
  236. package/skills/data360-orchestrate/assets/definitions/dmo.template.json +0 -17
  237. package/skills/data360-orchestrate/assets/definitions/identity-resolution.template.json +0 -30
  238. package/skills/data360-orchestrate/assets/definitions/mapping.template.json +0 -14
  239. package/skills/data360-orchestrate/assets/definitions/relationship.template.json +0 -12
  240. package/skills/data360-orchestrate/assets/definitions/search-index.template.json +0 -9
  241. package/skills/data360-orchestrate/assets/definitions/segment.template.json +0 -16
  242. package/skills/data360-orchestrate/references/feature-readiness.md +0 -157
  243. package/skills/data360-orchestrate/references/plugin-setup.md +0 -138
  244. package/skills/data360-orchestrate/scripts/bootstrap-plugin.sh +0 -53
  245. package/skills/data360-orchestrate/scripts/diagnose-org.mjs +0 -511
  246. package/skills/data360-orchestrate/scripts/generate-manifest.mjs +0 -68
  247. package/skills/data360-orchestrate/scripts/verify-plugin.sh +0 -58
  248. package/skills/data360-prepare/README.md +0 -50
  249. package/skills/data360-prepare/SKILL.md +0 -203
  250. package/skills/data360-prepare/examples/ingestion-api/.env.example +0 -8
  251. package/skills/data360-prepare/examples/ingestion-api/README.md +0 -48
  252. package/skills/data360-prepare/examples/ingestion-api/send-data.py +0 -144
  253. package/skills/data360-query/README.md +0 -43
  254. package/skills/data360-query/SKILL.md +0 -128
  255. package/skills/data360-query/examples/search-indexes/hybrid-structured.json +0 -44
  256. package/skills/data360-query/examples/search-indexes/vector-knowledge.json +0 -43
  257. package/skills/data360-segment/README.md +0 -35
  258. package/skills/data360-segment/SKILL.md +0 -123
  259. package/skills/service-helpagent-coordinate/references/channel-help-portal.md +0 -22
  260. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-1-1-non-text-content.md +0 -0
  261. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-i-lists.md +0 -0
  262. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-ii-tables.md +0 -0
  263. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-iii-form-labels.md +0 -0
  264. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-iv-regions.md +0 -0
  265. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-v-groups.md +0 -0
  266. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-5-identify-input.md +0 -0
  267. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-4-3-contrast.md +0 -0
  268. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-1-1-keyboard.md +0 -0
  269. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-4-4-link-purpose.md +0 -0
  270. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-4-6-headings-labels.md +0 -0
  271. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-1-pointer-gestures.md +0 -0
  272. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-2-pointer-cancellation.md +0 -0
  273. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-3-label-in-name.md +0 -0
  274. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-7-dragging-movement.md +0 -0
  275. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-2-1-on-focus.md +0 -0
  276. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-2-2-on-input.md +0 -0
  277. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-1-error-identification.md +0 -0
  278. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-2-labels-instructions.md +0 -0
  279. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-3-error-suggestion.md +0 -0
  280. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-i-name.md +0 -0
  281. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-ii-role.md +0 -0
  282. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-iii-value.md +0 -0
  283. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-1-1-non-text-content.md +0 -0
  284. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-1-use-of-color.md +0 -0
  285. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-10-resize-reflow.md +0 -0
  286. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-11-non-text-contrast.md +0 -0
  287. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-3-contrast.md +0 -0
  288. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/scripts/contrast-ratio.py +0 -0
@@ -0,0 +1,419 @@
1
+ ---
2
+ name: platform-custom-setting-generate
3
+ description: "Use this skill when users need to create, generate, or validate Salesforce Custom Setting metadata. Trigger when users mention custom settings (hierarchy or list), customSettingsType, SetupOwnerId, per-profile/per-user config overrides, feature flags, feature toggles, kill switches, or on/off switches admins flip to enable/disable behavior, e.g. bypass triggers/automation during a data load. Also use for \"create a custom setting\" or errors like \"Cannot specify: pluralLabel for CustomSettings\" or a setting that silently deployed as a regular custom object. A trigger bypass or kill switch is just a checkbox on a hierarchy custom setting — generate ONLY the setting, never an Apex trigger/handler. DO NOT TRIGGER for Custom Metadata Types or __mdt objects — route to platform-custom-metadata-type-generate; for business-record objects — use platform-custom-object-generate; for secrets, API keys, passwords, or tokens — recommend a Named Credential, never generated here."
4
+ metadata:
5
+ version: "1.0"
6
+ minApiVersion: "60.0"
7
+ domains: ["Platform"]
8
+ relatedSkills:
9
+ - "platform-custom-field-generate"
10
+ - "platform-custom-metadata-type-generate"
11
+ - "platform-custom-object-generate"
12
+ cliTools:
13
+ - tool: ["sf"]
14
+ semver: ">=2.136.8"
15
+ ---
16
+
17
+ # Salesforce Custom Setting Generator and Validator
18
+
19
+ ## When to Use This Skill
20
+
21
+ Use this skill when you need to:
22
+
23
+ - Create a Hierarchy or List custom setting
24
+ - Generate custom setting metadata XML
25
+ - Add or validate fields on an existing custom setting
26
+ - Populate custom setting **values** (these are data, not metadata — see Section 6)
27
+ - Troubleshoot custom setting deployment errors
28
+
29
+ > **A trigger bypass / kill switch is a Custom Setting — not Apex and not a `__mdt`.** When the user wants a
30
+ > switch admins can flip to turn behavior on or off — "disable my Account triggers during a data load", a
31
+ > feature toggle, a maintenance-mode flag — generate **only** a hierarchy custom setting with a `Checkbox`
32
+ > field (e.g. `Disable_Triggers__c` / `Bypass__c`). Do **not** author the Apex trigger, handler, or test
33
+ > that reads it, and do **not** model it as a Custom Metadata Type: the per-profile/per-user override a
34
+ > bypass flag needs is exactly what a hierarchy custom setting gives you and a `__mdt` does not. The Apex
35
+ > that checks the flag is the developer's to write — this skill generates the setting only.
36
+
37
+ ---
38
+
39
+ ## 1. Overview and Purpose
40
+
41
+ This document defines the mandatory constraints for generating Custom Setting metadata. A custom setting is
42
+ a `CustomObject` with `<customSettingsType>` set — it is **not** a distinct metadata type.
43
+
44
+ **File extension:** `.object-meta.xml`
45
+ **File path:** `force-app/main/default/objects/<Name>__c/<Name>__c.object-meta.xml`
46
+ **API name suffix:** `__c` (identical to a regular custom object — the suffix does **not** distinguish them)
47
+
48
+ > **Values are data, not metadata.** You can generate the setting's *definition* as XML, but you cannot
49
+ > deploy its *values* that way. There is no source-format equivalent of `customMetadata/` for custom
50
+ > settings. Never generate a file that claims to carry setting values — see **Section 6** for what to do
51
+ > instead.
52
+
53
+ ---
54
+
55
+ ## 2. Syntactic Essentials (Tier 1)
56
+
57
+ ### `<customSettingsType>` is mandatory — CRITICAL
58
+
59
+ **This is the single highest-severity rule in this skill.** Omitting `<customSettingsType>` does not
60
+ produce a "you forgot customSettingsType" error. The component silently stops being a custom setting and
61
+ is validated as a plain custom object.
62
+
63
+ The failure is dangerous because it is *recoverable in the wrong direction*: an agent that omits the
64
+ element, then obediently fixes each error the platform reports, ends up with a **green deploy and
65
+ completely the wrong kind of component**.
66
+
67
+ | What you see | What it means |
68
+ |---|---|
69
+ | `Must specify a non-empty plural label for the CustomObject` | You are **NOT** building a custom setting. `customSettingsType` is missing. Add it — do **not** add `pluralLabel`. |
70
+ | `Cannot specify: nameField for CustomSettings` | You **ARE** building a custom setting. Remove the named element. |
71
+
72
+ These two strings are mutually exclusive tells. The giveaway in the first is the phrase
73
+ **`for the CustomObject`** and the absence of any mention of custom settings.
74
+
75
+ **If a deploy reports `Must specify a non-empty plural label for the CustomObject` on something the user
76
+ asked to be a custom setting, never satisfy that error by adding `<pluralLabel>`.** Adding it (plus
77
+ `nameField`, `deploymentStatus`, and `sharingModel`) makes the deploy succeed and creates a regular custom
78
+ object that the user did not ask for.
79
+
80
+ ### Required and Allowed Elements
81
+
82
+ | Element | Requirement | Notes |
83
+ |---------|-------------|-------|
84
+ | `<customSettingsType>` | **Required** | `Hierarchy` or `List` — see Section 3 |
85
+ | `<label>` | **Required** | Singular UI name |
86
+ | `<visibility>` | Always include | `Public`, or `Protected` only in a dev/sandbox/scratch org (Section 5) |
87
+ | `<description>` | Always include | Explain what the setting controls and who edits it |
88
+ | `<enableFeeds>` | Optional | Accepted |
89
+ | `<listViews>` | Optional | Accepted — permitted despite `recordTypes` and `compactLayouts` being forbidden |
90
+
91
+ ### Forbidden Elements
92
+
93
+ Every element below produces `Cannot specify: <element> for CustomSettings`:
94
+
95
+ | Forbidden element | Note |
96
+ |---|---|
97
+ | `<pluralLabel>` | **Required on a regular custom object, forbidden here.** Exactly inverted. |
98
+ | `<nameField>` | The `Name` field exists implicitly on List settings |
99
+ | `<deploymentStatus>` | |
100
+ | `<sharingModel>` | Custom settings are not shared records |
101
+ | `<enableActivities>` `<enableReports>` `<enableHistory>` `<enableSearch>` | |
102
+ | `<validationRules>` | Enforce these in Apex instead |
103
+ | `<recordTypes>` | |
104
+ | `<compactLayouts>` | |
105
+
106
+ **INCORRECT** — carries a regular custom object's required elements:
107
+
108
+ ```xml
109
+ <CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
110
+ <customSettingsType>Hierarchy</customSettingsType>
111
+ <label>Feature Flags</label>
112
+ <pluralLabel>Feature Flags</pluralLabel> <!-- WRONG: forbidden on custom settings -->
113
+ <sharingModel>ReadWrite</sharingModel> <!-- WRONG: forbidden -->
114
+ <deploymentStatus>Deployed</deploymentStatus> <!-- WRONG: forbidden -->
115
+ <nameField> <!-- WRONG: forbidden -->
116
+ <label>Name</label>
117
+ <type>Text</type>
118
+ </nameField>
119
+ <visibility>Public</visibility>
120
+ </CustomObject>
121
+ ```
122
+
123
+ **Errors:** `Cannot specify: pluralLabel for CustomSettings` · `Cannot specify: sharingModel for CustomSettings` · `Cannot specify: deploymentStatus for CustomSettings` · `Cannot specify: nameField for CustomSettings`
124
+
125
+ **CORRECT** — minimum valid custom setting:
126
+
127
+ ```xml
128
+ <?xml version="1.0" encoding="UTF-8"?>
129
+ <CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
130
+ <customSettingsType>Hierarchy</customSettingsType>
131
+ <label>Feature Flags</label>
132
+ <description>Per-profile and per-user toggles for beta features in the ordering app. Edited by admins in Setup.</description>
133
+ <visibility>Public</visibility>
134
+ </CustomObject>
135
+ ```
136
+
137
+ Note there is no `<fullName>`. A root-level one is tolerated and ignored, but omit it — the API name comes
138
+ from the directory and filename.
139
+
140
+ `<customSettingsType>List</customSettingsType>` deployed without needing the "Manage List Custom Settings
141
+ Type" toggle in Setup. That toggle exists in some orgs, so if a List setting is rejected on a
142
+ `customSettingsType` grounds in a different org, check Schema Settings before assuming the XML is wrong.
143
+
144
+ ---
145
+
146
+ ## 3. List vs Hierarchy Decision (Tier 2)
147
+
148
+ `<customSettingsType>` has exactly two values, and the choice changes how rows are addressed.
149
+
150
+ | | `Hierarchy` | `List` |
151
+ |---|---|---|
152
+ | **Use when** | The value can vary per profile or per user, with an org-wide fallback | The setting is a small keyed reference table, the same for everyone |
153
+ | **Row key** | `SetupOwnerId` (Organization, Profile, or User) | `Name` |
154
+ | **Resolution** | User value → Profile value → org default | Look up by `Name` |
155
+ | **Apex read** | `MySetting__c.getInstance()` / `getOrgDefaults()` | `MySetting__c.getValues('Key')` / `getAll()` |
156
+ | **Typical case** | Feature flags, per-profile limits, debug toggles | Country codes, tax rates by region, integration endpoints by key |
157
+
158
+ **Default to `Hierarchy`** when the user describes toggles, limits, or anything that "can be overridden."
159
+ Choose `List` when they describe a lookup table with named rows.
160
+
161
+ If the user asks for a keyed reference table that should be **deployable between orgs**, a List custom
162
+ setting is usually the wrong answer — its rows are data and will not travel with the deploy. Route to
163
+ `platform-custom-metadata-type-generate` instead (Section 7).
164
+
165
+ ---
166
+
167
+ ## 4. Field Rules
168
+
169
+ Fields on a custom setting are ordinary `CustomField` components at
170
+ `objects/<Name>__c/fields/<Field>__c.field-meta.xml`.
171
+
172
+ **This skill owns the custom-setting-specific deltas only** — the supported-type allowlist and the
173
+ `fieldManageability` prohibition below. For everything generic (`<fullName>` derivation, `<label>`,
174
+ `<description>`, `<inlineHelpText>`, precision/scale, `<length>`, `externalId`), follow
175
+ `platform-custom-field-generate`.
176
+
177
+ ### Supported Field Types
178
+
179
+ `Checkbox`, `Currency`, `Date`, `DateTime`, `Email`, `Number`, `Percent`, `Phone`, `Text`, `TextArea`, `Url`
180
+
181
+ `required`, `unique`, `externalId`, and `defaultValue` are accepted on custom setting fields. Whether a
182
+ given one applies to a given type is a generic field rule — defer to `platform-custom-field-generate`.
183
+
184
+ ### Unsupported Field Types
185
+
186
+ `Picklist`, `MultiselectPicklist`, `LongTextArea`, `Html`, `Lookup`, `MasterDetail`, `AutoNumber`,
187
+ `Location`, `Time`, `EncryptedText`, and **Formula** (a `<formula>` element on any type).
188
+
189
+ Every one of these fails with the same bare, uninformative string:
190
+
191
+ ```text
192
+ Invalid data type.
193
+ ```
194
+
195
+ **This error names neither field nor type.** On a multi-field deploy, read `componentFailures[].fullName`
196
+ from the `--json` output to find the culprit — do not guess.
197
+
198
+ **Roll-up summary fields are structurally impossible here** — a `Summary` needs a master-detail child, and
199
+ `MasterDetail` is itself rejected on a custom setting. Don't generate one; the error text varies, so don't
200
+ match on a specific string.
201
+
202
+ **Picklist is the common trap.** Users frequently ask for a picklist on a custom setting. It is not
203
+ supported. Use `Text` and enforce the allowed values in Apex, or route the request to
204
+ `platform-custom-metadata-type-generate` — CMDT *does* support Picklist.
205
+
206
+ Near-inversion vs CMDT: `Currency` works here but not on CMDT; `Picklist`/`LongTextArea` work on CMDT but
207
+ not here. Never carry field-type assumptions across the two families.
208
+
209
+ ### `<fieldManageability>` is forbidden
210
+
211
+ That element belongs to CMDT fields only. On a custom setting field it fails with:
212
+
213
+ ```text
214
+ Field manageability cannot be set on this entity.
215
+ ```
216
+
217
+ ---
218
+
219
+ ## 5. Visibility, Secrets, and the No-Silent-Downgrade Rule
220
+
221
+ ### `Protected` is org-type dependent
222
+
223
+ `<visibility>Protected</visibility>` deploys only in a developer, sandbox, or scratch org. Anywhere else:
224
+
225
+ ```text
226
+ You can't set the visibility for a Custom Setting to Protected unless you are in a developer, sandbox, or scratch org.
227
+ ```
228
+
229
+ ### The no-silent-downgrade rule — CRITICAL
230
+
231
+ **If `Protected` fails because of the org type, never "fix" it by switching to `Public`.** A silent
232
+ downgrade turns a deliberate confidentiality choice into a world-readable component with no signal. Report
233
+ it plainly: the org does not permit `Protected`, so the options are a dev/sandbox/scratch org or accepting
234
+ `Public` — let the user decide. This applies to any visibility narrowing, not just this error.
235
+
236
+ ### Secrets do not belong in a custom setting
237
+
238
+ Custom settings are **not** a secret store. Values are readable by anyone who can query the object, and
239
+ `Protected` does not change that for code in the same namespace.
240
+
241
+ When a user asks to store an API key, password, token, client secret, or certificate in a custom setting:
242
+
243
+ 1. **Warn prominently and first** — before generating anything — that a custom setting is the wrong place
244
+ for a credential and the value will be readable.
245
+ 2. **Recommend the right component** — a **Named Credential** with an **External Credential** for callout
246
+ auth. Say plainly that this skill does not generate those.
247
+ 3. **If the user still insists, comply** — generate the setting but keep the warning in the response. Do not
248
+ silently refuse, and do not silently obey.
249
+
250
+ Never route a secret to `Protected` visibility as a compromise: if `Protected` is unavailable (above),
251
+ the no-silent-downgrade rule applies with full force, because the downgrade would publish the secret.
252
+
253
+ ---
254
+
255
+ ## 6. Setting Values Are Data, Not Metadata
256
+
257
+ **A custom setting's rows cannot be deployed as XML.** There is no `customMetadata/`-style folder for them.
258
+ Only the object definition and its fields are metadata.
259
+
260
+ When a user asks to create a setting *with values* — "add a feature flag setting with Beta enabled for
261
+ admins" — do all of the following:
262
+
263
+ 1. Generate the object and field XML as normal.
264
+ 2. **State the limitation in one line:** setting values are data, not metadata, so they are not deployed.
265
+ 3. **Give ready-to-run commands inline in the chat response**, fully substituted with the real object and
266
+ field API names and the actual values — not a placeholder template, and not written to a file.
267
+
268
+ All three shapes below are verified working.
269
+
270
+ ### Hierarchy — org-wide default row
271
+
272
+ **Omit `SetupOwnerId`.** It defaults to the Organization Id, which is exactly the org-default row. No Id
273
+ lookup is needed.
274
+
275
+ ```bash
276
+ sf data create record --sobject Feature_Flags__c \
277
+ --values "Enable_Beta__c=true Max_Retries__c=3" \
278
+ --target-org <alias>
279
+ ```
280
+
281
+ ### Hierarchy — profile or user override
282
+
283
+ This one **does** need an Id, so it is two steps. A user-level override uses the same shape with a `User` Id
284
+ in place of the Profile Id (extrapolated from the profile case, not separately verified).
285
+
286
+ ```bash
287
+ sf data query --query "SELECT Id FROM Profile WHERE Name='System Administrator'" --target-org <alias>
288
+
289
+ sf data create record --sobject Feature_Flags__c \
290
+ --values "SetupOwnerId=00eXXXXXXXXXXXXXXX Enable_Beta__c=false" \
291
+ --target-org <alias>
292
+ ```
293
+
294
+ An override row coexists with the org-default row; it does not replace it.
295
+
296
+ ### List — one row per key
297
+
298
+ `Name` is the row key and is required.
299
+
300
+ ```bash
301
+ sf data create record --sobject Country_Codes__c \
302
+ --values "Name='US' Iso_Code__c='USA' Dial_Prefix__c='+1'" \
303
+ --target-org <alias>
304
+ ```
305
+
306
+ ### Quoting
307
+
308
+ Wrap the whole `--values` argument in double quotes; single-quote any value with a space or shell-special
309
+ character (`Environment_Label__c='org default'`). Plain numbers, booleans, and Ids need no inner quotes.
310
+
311
+ ### Consuming a setting in Apex
312
+
313
+ Values are read through the generated typed class — cached, so reads cost **no SOQL** and are safe inside
314
+ loops and triggers. For a **Hierarchy** setting:
315
+
316
+ ```apex
317
+ Feature_Flags__c cfg = Feature_Flags__c.getInstance(); // running user: user → profile → org default
318
+ Feature_Flags__c org = Feature_Flags__c.getOrgDefaults(); // org-default row only, no hierarchy
319
+ Feature_Flags__c forProfile = Feature_Flags__c.getInstance(profileId); // a User Id works too
320
+ Boolean beta = cfg.Enable_Beta__c;
321
+ ```
322
+
323
+ `getInstance()` and `getOrgDefaults()` **never return null** (API ≥ 22) — a missing record comes back as an
324
+ empty row, so test `org.Id != null` when you need to know whether a real record actually exists. For a
325
+ **List** setting, use `getValues('Key')` for one row or `getAll()` for the `Map<String, Feature_Flags__c>`
326
+ of every row.
327
+
328
+ ### The in-transaction DML rule
329
+
330
+ Populating or changing values is **runtime DML** (Apex `insert`/`update`/`upsert`, or the `sf` commands
331
+ above) — there is no metadata path. That is the operational face of "values are data," and it has two
332
+ consequences worth stating to the user:
333
+
334
+ - **Writes count against DML governor limits; reads do not.** In a trigger over 200 records, never `upsert`
335
+ the setting once per record — hoist the write out of the loop and do it once.
336
+ - **Cross-transaction propagation lags.** After a write, other transactions may briefly read the previous
337
+ value while the org cache propagates; within the same transaction the new value is visible immediately.
338
+
339
+ ---
340
+
341
+ ## 7. Choosing the Right Component
342
+
343
+ Before generating, confirm a custom setting is actually what the user needs. If it is not, say so and name
344
+ the right skill rather than building the wrong thing.
345
+
346
+ | If the config is… | Use | Why |
347
+ |---|---|---|
348
+ | Admin-editable per profile/user, or a small keyed table that stays in one org | **Custom Setting** (this skill) | Values are data; they do not travel with a deploy |
349
+ | Reference data that must **deploy between orgs** with its records | `platform-custom-metadata-type-generate` | CMDT records are metadata and are deployable |
350
+ | Business records users create and edit at runtime | `platform-custom-object-generate` | Custom settings are configuration, not transactional data |
351
+ | Translatable UI text | Custom Label — this skill does not generate it | Labels are the supported translation surface |
352
+ | Credentials, API keys, tokens, endpoints with auth | Named Credential / External Credential — this skill does not generate them | See Section 5 |
353
+ | A permission check in Apex or a flow | Custom Permission — this skill does not generate it | Boolean access checks belong in the permission model |
354
+
355
+ The distinction that matters most: **CMDT records deploy, custom setting values do not.** If the user says
356
+ "and it should ship with these values" or "the same in every org," that is a CMDT request.
357
+
358
+ ---
359
+
360
+ ## 8. Common Deployment Errors
361
+
362
+ | Error Message | Cause | Fix |
363
+ |---|---|---|
364
+ | `Must specify a non-empty plural label for the CustomObject` | `<customSettingsType>` is missing, so this is being validated as a regular custom object | Add `<customSettingsType>`. **Do NOT add `<pluralLabel>`** (Section 2) |
365
+ | `Cannot specify: pluralLabel for CustomSettings` | `<pluralLabel>` present | Remove it — required on custom objects, forbidden here |
366
+ | `Cannot specify: <element> for CustomSettings` (`<element>` = `nameField`, `sharingModel`, `deploymentStatus`, `validationRules`, `recordTypes`, or `compactLayouts`) | A custom-object-only element is present | Remove it (enforce validation logic in Apex instead) |
367
+ | `Invalid data type.` | Unsupported field type (Section 4) | Read `componentFailures[].fullName` to find the field; switch to a supported type |
368
+ | `Field manageability cannot be set on this entity.` | `<fieldManageability>` on a setting field | Remove it — CMDT only |
369
+ | `You can't set the visibility for a Custom Setting to Protected unless you are in a developer, sandbox, or scratch org.` | `Protected` in a production-like org | Report to the user; **never silently switch to `Public`** (Section 5) |
370
+
371
+ The `Cannot specify:` suffix is `for CustomSettings` (one word) versus CMDT's `for Custom Metadata Type`,
372
+ and the visibility error uses `for a Custom Setting` (spaced, singular). Do not assume a shared template
373
+ when matching these strings.
374
+
375
+ ---
376
+
377
+ ## 9. Verification Checklist
378
+
379
+ Before generating custom setting XML, verify:
380
+
381
+ ### Component Identity Checks CRITICAL
382
+ - [ ] Is `<customSettingsType>` present and set to `Hierarchy` or `List`?
383
+ - [ ] Is the choice between Hierarchy and List justified by the request (overridable vs keyed table)?
384
+ - [ ] If a deploy reported `Must specify a non-empty plural label for the CustomObject`, was it fixed by adding `<customSettingsType>` rather than by adding `<pluralLabel>`?
385
+ - [ ] **After a successful deploy of a new setting**, was it confirmed to actually *be* a custom setting? Inspecting the XML cannot catch this failure, because the wrong-component outcome deploys green. Run `sf sobject describe --sobject <Name>__c --target-org <alias>` and verify `customSetting` is `true`.
386
+
387
+ ### Syntactic Checks
388
+ - [ ] Are `<label>` and `<visibility>` present?
389
+ - [ ] Is `<description>` present and specific about what the setting controls?
390
+ - [ ] Is `<pluralLabel>` ABSENT?
391
+ - [ ] Are `<nameField>`, `<sharingModel>`, and `<deploymentStatus>` ABSENT?
392
+ - [ ] Are `<enableActivities>`, `<enableReports>`, `<enableHistory>`, and `<enableSearch>` ABSENT?
393
+ - [ ] Are `<validationRules>`, `<recordTypes>`, and `<compactLayouts>` ABSENT?
394
+ - [ ] Does the filename match the intended API name, ending in `__c`?
395
+
396
+ ### Field Checks
397
+ - [ ] Is every field type in the supported list (Section 4)?
398
+ - [ ] Is `Picklist` absent? (unsupported — use `Text`, or route to CMDT)
399
+ - [ ] Is every `<formula>` element absent? (formulas are unsupported)
400
+ - [ ] Is `<fieldManageability>` ABSENT on every field?
401
+ - [ ] Do generic field attributes follow `platform-custom-field-generate`?
402
+
403
+ ### Values Checks
404
+ - [ ] If the user asked for values, was the data-not-metadata limitation stated explicitly?
405
+ - [ ] Were `sf` commands given **inline in the response**, fully substituted with real API names and real values — not written to a file, not left as a template?
406
+ - [ ] For a Hierarchy org default, is `SetupOwnerId` omitted rather than guessed?
407
+ - [ ] For a List row, is `Name` supplied?
408
+
409
+ ### Consumption Checks
410
+ - [ ] If the user asked how to read the setting, was an Apex snippet given using the generated accessors (`getInstance` / `getOrgDefaults` for Hierarchy, `getValues` / `getAll` for List)?
411
+ - [ ] Was the in-transaction DML rule stated — writes are DML that count against limits (bulkify, hoist out of loops), reads are free, and cross-transaction cache propagation lags?
412
+
413
+ ### Security Checks CRITICAL
414
+ - [ ] If the request involves a secret, key, token, or password, was the warning given **before** generating, with a Named Credential recommended?
415
+ - [ ] Was `Protected` left intact rather than silently downgraded to `Public` on an org-type failure?
416
+
417
+ ### Component-Choice Checks
418
+ - [ ] If the values must deploy between orgs, was `platform-custom-metadata-type-generate` recommended instead?
419
+ - [ ] If the request is really business records, was `platform-custom-object-generate` recommended instead?
@@ -1,7 +1,9 @@
1
1
  ---
2
2
  name: platform-dataspace-access-configure
3
- description: "Use this skill to configure or inspect Salesforce Data Cloud DataSpace access for permission sets. Grants dataspace-level access via MDAPI PermissionSet XML with dataspaceScopes elements, optionally grants object-level access to DMO, DLO, or CIO objects via the Object Access Grants Connect API, and inspects existing scopes via read-only PermissionSet metadata retrieval. TRIGGER when: user needs to create or update a permission set with DataSpace access, grant access to a specific dataspace, list permission sets with access to a DataSpace, configure dataAccessLevel/objectAccessLevel, add RBAC object access grants, or list/remove object access grants for a permission set + DataSpace pair. DO NOT TRIGGER when: the task is a generic permission set without dataspace access (use platform-permission-set-generate), the request is about data ingestion/streams (use data360-prepare), or the work involves creating dataspaces themselves rather than granting access to them."
3
+ description: "Use this skill to configure or inspect Salesforce Data Cloud DataSpace access for permission sets. Grants dataspace-level access via MDAPI PermissionSet XML with dataspaceScopes elements, optionally grants object-level access to DMO, DLO, or CIO objects via the Object Access Grants Connect API, and inspects existing scopes via read-only PermissionSet metadata retrieval. TRIGGER when: user needs to create or update a permission set with DataSpace access, grant access to a specific dataspace, list permission sets with access to a DataSpace, configure dataAccessLevel/objectAccessLevel, add RBAC object access grants, or list/remove object access grants for a permission set + DataSpace pair. DO NOT TRIGGER when: the task is a generic permission set without dataspace access (use platform-permission-set-generate), the request is about data ingestion/streams, or the work involves creating dataspaces themselves rather than granting access to them."
4
4
  metadata:
5
+ relatedSkills:
6
+ - "platform-permission-set-generate"
5
7
  version: "1.0"
6
8
  domains: ["Platform", "Data 360"]
7
9
  minApiVersion: "67.0"
@@ -65,8 +67,6 @@ Trigger this skill when the user wants to:
65
67
 
66
68
  Delegate elsewhere when:
67
69
  - The permission set has no DataSpace access at all → `platform-permission-set-generate`
68
- - The task is creating the DataSpace itself → `data360-orchestrate`
69
- - The task is ingesting data or configuring streams → `data360-prepare`
70
70
 
71
71
  ---
72
72
 
@@ -2,6 +2,9 @@
2
2
  name: platform-sharing-owd-configure
3
3
  description: "Use when the user wants to retrieve or update Organization-Wide Default (OWD) sharing settings for Salesforce objects. TRIGGER when: user asks to check current OWD settings, view sharing defaults, change default access levels (Private, Public Read Only, Public Read/Write, Controlled by Parent), configure internal or external access for standard or custom objects, mentions org-wide defaults, wants to make records private or restrict who can see records, wants to control default record visibility for an object, or references .settings-meta.xml sharing fields or sharingModel in .object-meta.xml files. DO NOT TRIGGER when: user asks about sharing rules, criteria-based sharing, role hierarchy, or manual sharing — delegate to platform-sharing-rules-generate."
4
4
  metadata:
5
+ relatedSkills:
6
+ - "platform-metadata-deploy"
7
+ - "platform-sharing-rules-generate"
5
8
  version: "1.2"
6
9
  domains: ["Platform"]
7
10
  cliTools:
@@ -2,6 +2,8 @@
2
2
  name: platform-value-set-generate
3
3
  description: "Use this skill when users need to create, generate, or validate a Salesforce global value set or customize a standard value set. Trigger when users mention a global value set, GlobalValueSet, standard value set, StandardValueSet, a reusable picklist, a picklist value set shared across fields, or customizing standard picklists like Industry, Lead Source, or Opportunity Stage. Also use when users hit deployment errors adding values to a standard picklist, referencing a value set from a custom field, or working with .globalValueSet-meta.xml or .standardValueSet-meta.xml files. DO NOT TRIGGER for an inline one-off picklist on a single field with no reuse, or for general custom field metadata work that does not involve a GlobalValueSet or StandardValueSet — use platform-custom-field-generate instead."
4
4
  metadata:
5
+ relatedSkills:
6
+ - "platform-custom-field-generate"
5
7
  version: "1.0"
6
8
  domains: ["Platform"]
7
9
  minApiVersion: "60.0"
@@ -1,15 +1,16 @@
1
1
  ---
2
2
  name: service-agentforce-channel-configure
3
- description: "Wires an existing, active Agentforce agent to a channel by resolving a fallback queue, setting up inbound routing (either PATCH SessionHandlerId on the MessagingChannel, or an inbound RoutingFlow for Voice/Email), and optionally configuring outbound escalation. Use when the user wants to add a channel to an existing agent, connect an agent to a messaging or voice channel, route Voice or Email-to-Case to an Agentforce agent, or set up a fallback queue for an agent channel. Applies to any already-created agent, including an existing Help Agent. The channel infrastructure (MessagingChannel, Voice config, email-to-case) must already exist — this skill only adds the routing. DO NOT TRIGGER when the agent does not yet exist or still needs Help Agent setup (use agentforce-generate or service-helpagent-coordinate), when creating the MessagingChannel itself (use service-digital-engagement-channel-configure), or when creating an Embedded Service Deployment (use service-digital-engagement-deployment-configure)."
3
+ description: "Wires an existing, active Agentforce agent to a channel by resolving a fallback queue, setting up inbound routing (either PATCH SessionHandlerId on the MessagingChannel, or an inbound RoutingFlow for Voice/Email), and optionally configuring outbound escalation. Use when the user wants to add a channel to an existing agent, connect an agent to a messaging or voice channel, route Voice or Email-to-Case to an Agentforce agent, or set up a fallback queue for an agent channel. Also applies to an existing Help Agent. The channel infrastructure must already exist — this skill adds routing. DO NOT TRIGGER when the agent does not yet exist or still needs Help Agent setup (use agentforce-generate or service-helpagent-coordinate), when setting up Email-to-Case with an agent end-to-end (use service-email-to-case-configure), when creating the MessagingChannel itself (use service-digital-engagement-channel-configure), or when creating an Embedded Service Deployment (use service-digital-engagement-deployment-configure)."
4
4
  allowed-tools: Bash Read Write Edit Glob Grep AskUserQuestion
5
5
  metadata:
6
- version: "1.0"
6
+ version: "1.1"
7
7
  domains: ["Service", "Agentforce"]
8
8
  minApiVersion: "67.0"
9
9
  relatedSkills:
10
10
  - "agentforce-generate"
11
11
  - "service-digital-engagement-channel-configure"
12
12
  - "service-digital-engagement-deployment-configure"
13
+ - "service-email-to-case-configure"
13
14
  - "service-helpagent-coordinate"
14
15
  cliTools:
15
16
  - tool: ["python3"]
@@ -30,7 +31,7 @@ This skill is generic — it works for any Agentforce agent, not just the Help A
30
31
  - Resolving or creating a fallback queue with the correct `QueueSobject` SobjectType
31
32
  - Branch A (Enhanced Chat / Enhanced Messaging): deploying `sessionHandlerType=AgentforceServiceAgent` + `sessionHandlerQueue` on an existing MessagingChannel, then binding `SessionHandlerId` via Data API PATCH
32
33
  - Branch B (Voice): assumes the phone number and `PstnVoice` MessagingChannel already exist (provisioned by the caller, e.g. `service-helpagent-coordinate`), then creating an inbound RoutingFlow (`routingType: Copilot`) that routes to the agent with the queue as fallback
33
- - Branch C (Email-to-Case): same inbound RoutingFlow, using the org-specific Case-based ServiceChannel
34
+ - Branch C (Email-to-Case): inbound routing via direct case-owner assignment or an Omni-Channel RoutingFlow, plus deploying a `BotEmailDefinition` (Email Configuration) that links the agent to Service Email and binding it to the routing address
34
35
  - Optional outbound escalation: adding the appropriate `connection {type}:` block to the agent and republishing
35
36
 
36
37
  **Out of scope:**
@@ -162,25 +163,22 @@ Proceed to Phase 3 (optional).
162
163
 
163
164
  #### Branch C — Email-to-Case
164
165
 
165
- Same inbound RoutingFlow shape as Branch B, but using the org-specific Case-based ServiceChannel. Additionally requires an outbound `connection service_email:` and a mandatory manual BotEmailDefinition step in Setup — these are not optional and cannot be deferred to Phase 3.
166
+ Inbound routing to the agent via direct case-owner assignment or an Omni-Channel `Copilot` RoutingFlow — user chooses in Step 2. Additionally requires the `connection service_email:` **surface** block and a mandatory BotEmailDefinition step (Email Configuration). It gates on API v68.0+ up front (see `references/channel-branch-email.md`).
166
167
 
167
- Follow `references/channel-branch-email.md` end to end. Highlights:
168
+ Follow `references/channel-branch-email.md` end to end. Load-bearing gotchas (full walkthrough in that file):
168
169
 
169
- - Step 0 — verify `emailToCase.enableEmailToCase` and `emailToCase.enableOnDemandEmailToCase` are `true` in CaseSettings via the Tooling API; if either is off, deploy a settings file that enables both (safe-fields-only pattern) before continuing.
170
- - Step 1 — reuse an existing `EmailRoutingAddress` or create one for the support email address, then patch `caseOrigin` / `saveEmailHeaders: true` / `addressType: EmailToCase` for that entry in `CaseSettings.Metadata.caseEmailRoutingAddresses` via Tooling-API PATCH (fallback: `sf project deploy start --metadata Settings:Case`). Inform the user about the verification email but do not block on it.
171
- - Step 2 — query the Case-based ServiceChannel (see `references/channel-types.md`), then write and deploy the inbound RoutingFlow using the template in `references/routing-flow.md`; verify `ActiveVersionId` is non-null.
172
- - Step 3 — mandatory outbound: reuse or create `{AgentDevName}_Outbound_Email_Flow` (QueueBased template in `references/routing-flow.md` Part 2), then add `connection service_email:` to the agent and republish per `references/agent-wiring.md`.
173
- - Step 4 — mandatory manual: prompt the user to create an **Email Configuration for Agentforce Service Agent** at `{ORG_INSTANCE_URL}/lightning/setup/AsaForEmail/home` and set the Agentforce Configuration field on the Email-to-Case routing address. Wait for user confirmation.
170
+ - Step 1 — bind routing-address fields via Tooling-API PATCH or a `--metadata-dir` `Settings:Case` deploy, **never** a source `--metadata Settings:Case` deploy (it reads `sourceApiVersion` and mutates the user's project).
171
+ - Step 2 — choose inbound routing (`AskUserQuestion`): **case-owner** (`caseOwner` = the agent's bot user) or **Omni-Channel flow** (`Copilot` RoutingFlow + `routingFlow`/`fallbackQueue`). Resolve the bot user either way; routing fields go in the Step 4d deploy.
172
+ - Step 3 — the agent is already active, so add the mandatory `connection service_email:` surface via **deactivate → publish → activate** (a plain publish fails with `couldn't find the default agent user`). Batch the outbound route here too if escalation is wanted.
173
+ - Step 4 — BotEmailDefinition: preflight the save-time gates, validate the reply template, deploy via `--metadata-dir`, then bind the routing address in one `Settings:Case` deploy (`botEmailDefinition` + Step 2 routing fields + the required `casePriority`). Stop on failure.
174
174
 
175
- Branch C is complete once the user confirms Step 4. Skip Phase 3 for Email-to-Case (outbound escalation is already handled inline).
175
+ Branch C is complete once the routing-address binding is verified. Proceed to Phase 3.
176
176
 
177
177
  ---
178
178
 
179
- ### Phase 3 — Outbound escalation (optional — Branches A/B only)
179
+ ### Phase 3 — Outbound escalation (optional)
180
180
 
181
- > **Branch C (Email-to-Case):** outbound escalation was handled inline in Branch C above. Do not run Phase 3 for Email-to-Case.
182
-
183
- After inbound routing is confirmed (Branches A or B), ask the user:
181
+ After inbound routing is confirmed, ask the user:
184
182
 
185
183
  > *"Inbound routing is now set up — the channel will route to [agent name]. Do you also want to configure outbound escalation so the agent can hand off to a human when requested?"*
186
184
 
@@ -219,7 +217,9 @@ If yes:
219
217
  | Branches B/C: use `routingType: Copilot` and `copilotLabel` — not `QueueBased` | `QueueBased` routes to the queue directly; `Copilot` routes to the agent first with the queue as fallback |
220
218
  | Queue `Id` must be queried and embedded in the RoutingFlow XML | The `queueId` parameter requires a hardcoded 18-char record Id — do not leave it empty |
221
219
  | Queue naming: `{ChannelTypeLabel} Queue` | Named after the channel type, not the agent |
222
- | Outbound escalation is optional for Branches A/B — mandatory for Branch C (Email-to-Case) | BotEmailDefinition (Email Configuration in Setup) requires `connection service_email:` to already be on the agent; it cannot be created before the connection block is deployed |
220
+ | Outbound escalation is optional — never block inbound routing completion on it | Inbound and outbound are independent; inbound wiring is complete without the outbound step |
221
+ | Branch C: deploy BotEmailDefinition via `--metadata-dir`, never `--metadata BotEmailDefinition:<name>` | Not in the CLI's SDR registry, so the named-type deploy fails; metadata-format works |
222
+ | Branch C: do not wire an agent carrying a `ServiceCustomerVerification` topic to email | Detect and stop — do not auto-remove (may be legitimate for a multi-surface agent). See `channel-branch-email.md` Step 4a |
223
223
 
224
224
  ---
225
225
 
@@ -248,8 +248,11 @@ If yes:
248
248
  - [ ] If new: user informed that a verification email was sent to the support address (non-blocking)
249
249
 
250
250
  ### Branch C — BotEmailDefinition
251
- - [ ] User has confirmed creation of Email Configuration for Agentforce Service Agent at `/lightning/setup/AsaForEmail/home`
252
- - [ ] Email-to-Case routing address has the Agentforce Configuration field set
251
+ - [ ] Preflight passed: agent is `EinsteinServiceAgent` with a bot user holding `agentforceServiceAgentUser`; active version carries the `ServiceEmail` surface; no `ServiceCustomerVerification` topic on the email agent
252
+ - [ ] Reply `EmailTemplate` is SFX, HTML, public, and contains `[[[GENERATED_CONTENT]]]` + `[[[LEGAL_DISCLOSURE]]]`
253
+ - [ ] Headless path (API ≥68): `BotEmailDefinition` deployed via `--metadata-dir` with `success: true`; `legalDisclaimer`/`signature` ≥10 chars
254
+ - [ ] Routing address's `botEmailDefinition` child set to the deployed component `fullName`
255
+ - [ ] Inbound routing set on the same routing address: `caseOwner`+`caseOwnerType` or `routingFlow`+`fallbackQueue`, with `casePriority` present
253
256
 
254
257
  ### Optional Phase 3 — Outbound escalation
255
258
  - [ ] Correct connection block used: `customer_web_client:` for EmbeddedMessaging, `messaging:` for 3rd-party, `telephony:` for Voice, `service_email:` for Email-to-Case
@@ -266,6 +269,12 @@ If yes:
266
269
  | `references/queue-resolution.md` | Phase 1 — queue lookup, creation, and Id capture |
267
270
  | `references/live-traffic-gate.md` | Phase 2 — detection queries, deferred-flow rules, and manual wiring copy for the live-traffic warning gate |
268
271
  | `references/channel-branch-voice.md` | Branch B — full Voice inbound wiring: PstnVoice channel selection, RoutingFlow, MessagingChannel assignment, `modality voice:` republish |
269
- | `references/channel-branch-email.md` | Branch C — full Email-to-Case wiring: CaseSettings flags, EmailRoutingAddress + read-modify-write patch, inbound RoutingFlow, mandatory outbound `connection service_email:`, BotEmailDefinition manual step |
272
+ | `references/channel-branch-email.md` | Branch C — full Email-to-Case wiring: API v68.0+ precondition gate, CaseSettings flags, EmailRoutingAddress + read-modify-write patch, inbound RoutingFlow, mandatory `connection service_email:` surface block, headless BotEmailDefinition deploy, routing-address binding |
273
+ | `references/botemaildefinition.md` | Branch C Step 4 — BotEmailDefinition fields, save-time validation order, ASA template rules, `--metadata-dir` deploy recipe, `ServiceEmail` surface prerequisite, composite org gate |
270
274
  | `references/routing-flow.md` | Branches B/C — inbound RoutingFlow XML template, deploy, verify |
271
- | `references/agent-wiring.md` | Phase 3 (optional) — outbound escalation `connection messaging:` block |
275
+ | `references/agent-wiring.md` | Phase 3 (optional) — outbound escalation `connection` block |
276
+ | `assets/BotEmailDefinition.botEmailDefinition-meta.xml` | Branch C Step 4c — starting template for the BotEmailDefinition source file |
277
+ | `assets/mdapi-package.xml` | Branch C Step 4c — metadata-format `package.xml` for the `--metadata-dir` deploy |
278
+ | `assets/email/unfiled$public/AgentforceForServiceEmailTemplate.email` + `.email-meta.xml` | Branch C Step 4b (fallback) — minimal ASA-compliant SFX reply template when the user has none |
279
+ | `scripts/validate-botemaildefinition.py` | Branch C Step 4c — validate the BotEmailDefinition file before deploy |
280
+ | `scripts/validate-emailtemplate.py` | Branch C Step 4b (fallback) — validate the SFX template before deploy |
@@ -0,0 +1,36 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ BotEmailDefinition source file — links an Agentforce Service Agent to Service
4
+ Email (API v68.0+) so the agent can reply to Email-to-Case messages. Deploy it
5
+ via metadata format (the deploy "metadata-dir" path), NOT source format:
6
+ BotEmailDefinition is absent from the CLI's source-deploy-retrieve registry
7
+ (see references/botemaildefinition.md). Then bind the Email-to-Case routing address
8
+ to it by setting the routing address's <botEmailDefinition> to this component's
9
+ fullName (the file name without the suffix).
10
+
11
+ fullName is the FILE NAME, not a child element. Name the file
12
+ <DeveloperName>.botEmailDefinition-meta.xml and do NOT add a <fullName> element.
13
+
14
+ All six fields below are REQUIRED (the WSDL marks none optional) and none are
15
+ platform-generated/read-only. legalDisclaimer and signature must each be at
16
+ least 10 characters (save-time MinLengthNotMet check).
17
+ -->
18
+ <BotEmailDefinition xmlns="http://soap.sforce.com/2006/04/metadata">
19
+ <!-- Developer/API name of the AgentforceServiceAgent (Bot) to link. Must
20
+ already exist, be published/active, be of type EinsteinServiceAgent, and
21
+ have a bot user holding the agentforceServiceAgentUser permission. -->
22
+ <botDefinition>{AGENT_DEVELOPER_NAME}</botDefinition>
23
+ <!-- FOLDER-QUALIFIED developer name of the reply email template (must exist,
24
+ uiType=SFX, HTML, public, and contain both ASA tokens). A bare name is
25
+ rejected ("no EmailTemplate named X found"); qualify it with the folder,
26
+ e.g. unfiled$public/AgentforceForServiceEmailTemplate. -->
27
+ <emailTemplate>{EMAIL_TEMPLATE_FOLDER}/{EMAIL_TEMPLATE_DEVELOPER_NAME}</emailTemplate>
28
+ <!-- Display label for this email definition. -->
29
+ <label>{LABEL}</label>
30
+ <!-- Legal disclosure / footer text appended to the agent's replies (>= 10 chars). -->
31
+ <legalDisclaimer>{LEGAL_DISCLAIMER_TEXT}</legalDisclaimer>
32
+ <!-- true = reply-all; false = reply to sender only. -->
33
+ <replyAll>false</replyAll>
34
+ <!-- Email signature block (>= 10 chars). -->
35
+ <signature>{SIGNATURE_TEXT}</signature>
36
+ </BotEmailDefinition>
@@ -0,0 +1,17 @@
1
+ <!--
2
+ HTML body for the Agentforce Service Agent email-reply template (uiType=SFX).
3
+ This body MUST contain the two literal ASA placeholder tokens below, exactly
4
+ as written (raw substring match) — BotEmailDefinition rejects the template
5
+ otherwise:
6
+ [[[GENERATED_CONTENT]]] — where the agent's generated reply is injected.
7
+ [[[LEGAL_DISCLOSURE]]] — where the BotEmailDefinition legalDisclaimer is injected.
8
+ These are literal triple-bracket tokens, NOT Salesforce merge fields; do not
9
+ convert them to merge-field syntax. (The SFX deploy validator scans the whole
10
+ body, including comments, and rejects any occurrence of merge-field syntax.)
11
+ -->
12
+ <html>
13
+ <body>
14
+ <div>[[[GENERATED_CONTENT]]]</div>
15
+ <div>[[[LEGAL_DISCLOSURE]]]</div>
16
+ </body>
17
+ </html>