@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
@@ -4,13 +4,13 @@ All four scripts are deterministic, side-effect-free JSON classifiers (A9). They
4
4
 
5
5
  ## `scripts/classify-permset-availability.mjs`
6
6
 
7
- Decides Branch A vs Branch B (assign vs hand-off) AND emits per-persona `needsPsl` flags. Fulfiller-only — the four persona names are hard-coded.
7
+ Decides Branch A vs Branch B (assign vs hand-off) AND emits per-persona `needsPsl` flags. Fulfiller-only — the three persona names are hard-coded.
8
8
 
9
9
  ### Input
10
10
 
11
11
  One file path (positional):
12
12
 
13
- 1. `permsets.json` — `sf data query --json` capture of `PermissionSet` filtered to the four Fulfiller persona `Name` values (see `permset-topology.md`). Unrelated rows are filtered out by the classifier.
13
+ 1. `permsets.json` — `sf data query --json` capture of `PermissionSet` filtered to the three Fulfiller persona `Name` values (see `permset-topology.md`). Unrelated rows are filtered out by the classifier.
14
14
 
15
15
  Must be the raw stdout capture (the `{status, result: {records: [...]}}` envelope). An unparseable / non-envelope body produces `verdict:"CANNOT-CONFIRM"` with the raw error in `reasons[]`.
16
16
 
@@ -19,7 +19,7 @@ Must be the raw stdout capture (the `{status, result: {records: [...]}}` envelop
19
19
  ```json
20
20
  {
21
21
  "personasFound": ["IncidentFulfiller"],
22
- "personasMissing": ["ProblemFulfillerPermSet","ChangeRequestFulfillerPermSet","ReleaseManagerPermSet"],
22
+ "personasMissing": ["ProblemFulfillerPermSet","ChangeRequestFulfillerPermSet"],
23
23
  "candidates": [
24
24
  { "Id": "0PS...", "Name": "IncidentFulfiller", "Label": "Incident Fulfiller", "LicenseId": "0PL...", "needsPsl": true }
25
25
  ],
@@ -28,16 +28,16 @@ Must be the raw stdout capture (the `{status, result: {records: [...]}}` envelop
28
28
  }
29
29
  ```
30
30
 
31
- - `candidates[]` lists ONLY rows whose `Name` matches one of the four known Fulfiller personas. Unrelated rows in the query result are dropped.
31
+ - `candidates[]` lists ONLY rows whose `Name` matches one of the three known Fulfiller personas. Unrelated rows in the query result are dropped.
32
32
  - `needsPsl` is derived per-row from `LicenseId !== null` — read it from the SELECTED persona in the workflow.
33
- - `personasFound` preserves the canonical order (Incident, Problem, Change, Release) so the AskUserQuestion menu is stable across runs.
33
+ - `personasFound` preserves the canonical order (Incident, Problem, Change) so the AskUserQuestion menu is stable across runs.
34
34
 
35
35
  Verdict values:
36
36
 
37
37
  | verdict | Meaning | Caller action |
38
38
  |---|---|---|
39
39
  | `ASSIGN` | ≥1 Fulfiller persona present on the org | Continue to Phase 2. AskUserQuestion which persona to assign; read `needsPsl` off that persona to gate PSL SOQL + POST |
40
- | `HAND-OFF` | None of the four personas present | Skip Phase 2 entirely; go to Phase 3 (delegate to `service-itsm-agentic-setup-agentforce-studio-validate`) |
40
+ | `HAND-OFF` | None of the three personas present | Skip Phase 2 entirely; go to Phase 3 (delegate to `service-itsm-agentic-setup-agentforce-studio-validate`) |
41
41
  | `CANNOT-CONFIRM` | The query envelope was unparseable | Surface `reasons[]` verbatim and stop |
42
42
 
43
43
  **Never auto-select** from `candidates[]` — a Fulfiller commonly needs only one persona (e.g. Incident) even when several are provisioned. Present the list and let the user pick.
@@ -9,7 +9,7 @@ Core (namespace `force`).
9
9
 
10
10
  **Employee agent is out of scope for this skill.** The Employee agent's access
11
11
  model is separate (org-preferences + a different persona layer) and does not
12
- map onto these four permsets.
12
+ map onto these three permsets.
13
13
 
14
14
  ## Fulfiller persona ↔ AddOn ↔ PSL ↔ PermSet
15
15
 
@@ -18,7 +18,6 @@ map onto these four permsets.
18
18
  | Incident Fulfiller | `IncidentManagementAddOn-1` | `IncidentFulfillerPsl-1` | **`IncidentFulfiller`** | `IncidentFulfillerUser` |
19
19
  | Problem Fulfiller | `ProblemManagementAddOn-1` | `ProblemFulfillerPsl-1` | **`ProblemFulfillerPermSet`** | `ProblemFulfillerUser` |
20
20
  | Change Fulfiller | `ChangeManagementAddOn-1` | `ChangeRequestFulfillerPsl-1` | **`ChangeRequestFulfillerPermSet`** | `ChangeFulfillerPerm` |
21
- | Release Manager | `ReleaseManagementAddOn-1` | `ReleaseManagerPsl-1` | **`ReleaseManagerPermSet`** | (org-perm-gated only) |
22
21
 
23
22
  ### Key facts
24
23
 
@@ -26,14 +25,9 @@ map onto these four permsets.
26
25
  in the previous version of this skill (`svc_itsm_intelligence`) never
27
26
  returns any of these rows.
28
27
  - **Naming inconsistency**: `IncidentFulfiller` has NO `PermSet` suffix; the
29
- other three DO. The classifier's fixed-name list reflects this exactly —
28
+ other two DO. The classifier's fixed-name list reflects this exactly —
30
29
  do not "normalize" the Incident name to `IncidentFulfillerPermSet`, it does
31
30
  not exist on the org.
32
- - **`ReleaseManagerPermSet`** ships as a permset but its Fulfiller user permission
33
- lives on the OrgPreference layer (org-perm-gated). Assigning the permset
34
- still works and is the correct write; the runtime effect activates once the
35
- org toggle is on. Downstream, `service-itsm-agentic-setup-agentforce-studio-validate`
36
- is the skill that toggles the org preference.
37
31
  - **CMDB access is a separate concern** — the CMDB read/write permsets are
38
32
  handled by `service-itsm-agentic-setup-cmdb-access-assign` and are not
39
33
  gated by any `svc_itsm_intelligence__*` prompt-template invocable, so they
@@ -47,8 +41,7 @@ FROM PermissionSet
47
41
  WHERE Name IN (
48
42
  'IncidentFulfiller',
49
43
  'ProblemFulfillerPermSet',
50
- 'ChangeRequestFulfillerPermSet',
51
- 'ReleaseManagerPermSet'
44
+ 'ChangeRequestFulfillerPermSet'
52
45
  )
53
46
  ```
54
47
 
@@ -2,19 +2,18 @@
2
2
  // Deterministic branch classifier for the Fulfiller persona permset-assign flow.
3
3
  //
4
4
  // Reads ONE input:
5
- // - PermissionSet query capture (from `sf data query --json`) for the four
5
+ // - PermissionSet query capture (from `sf data query --json`) for the three
6
6
  // Core-shipped Fulfiller persona permsets:
7
7
  // * IncidentFulfiller
8
8
  // * ProblemFulfillerPermSet
9
9
  // * ChangeRequestFulfillerPermSet
10
- // * ReleaseManagerPermSet
11
10
  // (namespace `force`, not a managed-package namespace)
12
11
  //
13
12
  // Rules (A9):
14
- // - `verdict:"ASSIGN"` — ≥1 of the four personas is present. Caller
13
+ // - `verdict:"ASSIGN"` — ≥1 of the three personas is present. Caller
15
14
  // asks the user which persona to assign; do NOT
16
15
  // auto-select.
17
- // - `verdict:"HAND-OFF"` — none of the four present. The ITSM AddOn(s)
16
+ // - `verdict:"HAND-OFF"` — none of the three present. The ITSM AddOn(s)
18
17
  // are not provisioned; permset-assign is a
19
18
  // no-op. Hand off to the studio validate skill
20
19
  // so the AddOn(s) can be enabled first.
@@ -29,7 +28,7 @@
29
28
  // candidates: [{ Id, Name, Label, LicenseId, needsPsl }, ...],
30
29
  // verdict: "ASSIGN" | "HAND-OFF" | "CANNOT-CONFIRM",
31
30
  // reasons: [...] }
32
- // `candidates` includes only rows for the four known persona Names; unrelated
31
+ // `candidates` includes only rows for the three known persona Names; unrelated
33
32
  // rows in the query result are filtered out. `needsPsl` is derived per-row
34
33
  // from `LicenseId !== null`. Exit is always 0 on parseable bodies; verdict
35
34
  // carries the branch decision. Exit 2 on missing argv.
@@ -40,7 +39,6 @@ const KNOWN_PERSONAS = [
40
39
  'IncidentFulfiller',
41
40
  'ProblemFulfillerPermSet',
42
41
  'ChangeRequestFulfillerPermSet',
43
- 'ReleaseManagerPermSet',
44
42
  ];
45
43
 
46
44
  function readEnvelope(path) {
@@ -78,7 +76,7 @@ if (!ps.ok) {
78
76
  process.exit(0);
79
77
  }
80
78
 
81
- // Filter to only the five known persona Names — drop any unrelated rows.
79
+ // Filter to only the three known persona Names — drop any unrelated rows.
82
80
  const knownRows = ps.records.filter((r) => KNOWN_PERSONAS.includes(r?.Name));
83
81
  const foundNames = knownRows.map((r) => r.Name);
84
82
  const personasFound = KNOWN_PERSONAS.filter((n) => foundNames.includes(n));
@@ -96,11 +94,11 @@ const reasons = [];
96
94
  let verdict;
97
95
  if (personasFound.length === 0) {
98
96
  verdict = 'HAND-OFF';
99
- reasons.push('None of the four Core-shipped Fulfiller persona permsets (IncidentFulfiller, ProblemFulfillerPermSet, ChangeRequestFulfillerPermSet, ReleaseManagerPermSet) is present on this org — the ITSM AddOn(s) are not provisioned.');
97
+ reasons.push('None of the three Core-shipped Fulfiller persona permsets (IncidentFulfiller, ProblemFulfillerPermSet, ChangeRequestFulfillerPermSet) is present on this org — the ITSM AddOn(s) are not provisioned.');
100
98
  reasons.push('Permset-assign cannot fix this; hand off to service-itsm-agentic-setup-agentforce-studio-validate.');
101
99
  } else {
102
100
  verdict = 'ASSIGN';
103
- reasons.push(`Found ${personasFound.length} of 4 Fulfiller persona permset(s) on this org: ${personasFound.join(', ')}.`);
101
+ reasons.push(`Found ${personasFound.length} of 3 Fulfiller persona permset(s) on this org: ${personasFound.join(', ')}.`);
104
102
  if (personasMissing.length > 0) {
105
103
  reasons.push(`Not provisioned (AddOn(s) missing for these personas): ${personasMissing.join(', ')}.`);
106
104
  }
@@ -2,6 +2,8 @@
2
2
  name: service-itsm-incident-mgmt-configure
3
3
  description: "Reads and toggles the master Incident Management setting on a Salesforce ITSM org — the org-level switch that turns Incident Management on or off. Reads current state before writing, is idempotent, and requires explicit user confirmation before any change. Use when the user wants to enable, disable, toggle, view, or turn on/off Incident Management (Service ITSM) at the org level. DO NOT TRIGGER for Default Field Validations for Incidents, Auto Closure of Child Incidents, Email-to-Incident sub-toggles, Problem Management, Change Management, Case Management, ITSM External Client App setup, or Incident Priority Matrix configuration (use the service-itsm-incident-priority-configure skill)."
4
4
  metadata:
5
+ relatedSkills:
6
+ - "service-itsm-incident-priority-configure"
5
7
  version: "1.1"
6
8
  domains: ["Service"]
7
9
  minApiVersion: "67.0"
@@ -2,7 +2,9 @@
2
2
  name: service-itsm-incident-priority-configure
3
3
  description: "Configures the Incident Priority Matrix for Salesforce ITSM through the sf CLI — enabling or disabling the matrix, shaping the Impact x Urgency grid that derives Priority on Incident records, toggling the manual-override preference, and reading or setting the default fallback priority. Reads every value before writing, is idempotent, and requires explicit user confirmation before any mutation. Use when the user wants to view, enable, disable, set up, seed, add to, change, or remove priority matrix configuration for Incident records, change the default incident priority, or asks about incident priority setup, impact/urgency mapping, override, or the ITSM incident priority matrix. DO NOT TRIGGER for Problem or ChangeRequest priority matrices, Case priority fields, standard Priority picklists outside ITSM, SLA or milestone configuration, or enabling Incident Management itself (use the service-itsm-incident-mgmt-configure skill)."
4
4
  metadata:
5
- version: "1.3"
5
+ version: "1.4"
6
+ relatedSkills:
7
+ - "service-itsm-incident-mgmt-configure"
6
8
  domains: ["Service"]
7
9
  minApiVersion: "67.0"
8
10
  cliTools:
@@ -19,7 +21,7 @@ allowed-tools: |
19
21
 
20
22
  Configures the **Incident Priority Matrix** for Salesforce ITSM — the grid that derives an Incident's **Priority** from its **Impact** and **Urgency**. Covers viewing the matrix, enabling / disabling it, adding / changing / removing / seeding cells, toggling the manual-override preference, and reading / setting the default (fallback) priority.
21
23
 
22
- Every read and write dispatches through the **`sf` CLI** — no MCP dispatcher, no `/headless/invoke/*` route, no Aura controller. This means the skill works on any org with the Incident Management license enabled, without the `api.agentic.access.enableHeadless360McpServer` gate.
24
+ Every read and write dispatches through the **`sf` CLI**, so this skill works on any org with the Incident Management license enabled.
23
25
 
24
26
  Writes are **idempotent** (skipped when the current state already matches the target), the skill always **reads before it writes**, and an explicit **confirm-to-write** checkpoint is required before any mutation.
25
27
 
@@ -54,7 +56,7 @@ surface the raw error and stop.**
54
56
 
55
57
  ## Routes at a glance
56
58
 
57
- Every route is called through `sf` — no `curl`, no MCP server. Full method / path / body / response
59
+ Every route is called through the `sf` CLI. Full method / path / body / response
58
60
  details, the picklist extraction recipe, and gotchas live in `references/sf-cli-invocation.md`.
59
61
 
60
62
  | Concern | Transport | HTTP status |
@@ -69,6 +71,7 @@ details, the picklist extraction recipe, and gotchas live in `references/sf-cli-
69
71
  | Default fallback priority (read) | `sf api request rest` GET on `/services/data/v67.0/tooling/query/?q=...StandardValueSet...` | 200 |
70
72
  | Default fallback priority (write) | `sf project retrieve start` + edit + `sf project deploy start` on `StandardValueSet:IncidentPriority` | deploy Succeeded |
71
73
  | Picklist values (Incident) | `sf api request rest` GET on `/services/data/v67.0/sobjects/Incident/describe` | 200 |
74
+ | Salesforce Go step "Done" (write, after a mutation) | `sf api request rest` PUT on `/services/data/v67.0/connect/setup/discovery/feature/service-cloud-itsm-incident/configuration/step/definePriorityMatrix/progress` | 200 |
72
75
 
73
76
  **Path prefixes are load-bearing — do NOT strip them.** Setup Connect API paths MUST start with
74
77
  `/services/data/v67.0/`. Tooling REST paths MUST start with `/services/data/v67.0/tooling/`.
@@ -116,13 +119,10 @@ a user statement (or you cannot identify a specific prior `sf` response), re-rea
116
119
  read this session AND no `StandardValueSet:IncidentPriority` deploy has run since,
117
120
  skip step 6.
118
121
 
119
- **When in doubt, re-check.** Skip only when the earlier fact is unambiguously in context
120
- AND the target-org alias has not changed AND no write elsewhere in the session could
121
- have invalidated it (Phase-4 writes in this skill are the primary invalidators — a
122
- PATCH on a pref, a POST/PATCH/delete on a `ServiceOpPriorityConfig` row, or a
123
- `StandardValueSet:IncidentPriority` deploy all bust the cache for the matching read).
124
- If the user hints at a different org (or a different alias), re-run the read. A wrong
125
- skip on a live org write is worse than a duplicated read.
122
+ **When in doubt, re-check.** Skip only when the fact is unambiguously in context, the
123
+ `--target-org` alias is unchanged, and no Phase-4 write since (a pref PATCH, a
124
+ `ServiceOpPriorityConfig` POST/PATCH/delete, or a `StandardValueSet:IncidentPriority`
125
+ deploy) could have invalidated it. A wrong skip on a live org is worse than a re-read.
126
126
 
127
127
  ### Phase 1 — Preflight
128
128
 
@@ -164,7 +164,8 @@ Read the current value of the same concern first (Phase 2 covers this), confirm
164
164
  ### Phase 5 — Verify and present
165
165
 
166
166
  7. Re-read the concern that was mutated (matrix rows via Tooling SOQL; default priority via `StandardValueSet` query; prefs are echoed on PATCH response). If the observed state does not match the requested state, treat it as a failed write and report the raw server response verbatim.
167
- 8. Present before/after (Impact × Urgency grid via `examples/render-matrix.md`) plus a one-line summary (e.g. `Incident matrix: High/High → Critical added`). Matrix changes affect only Incidents created **after** the write; disabling the matrix does not clear stored rows or the default priority.
167
+ 8. **Mark the Salesforce Go step Done — only if a Phase-4 functional write actually landed.** The "Define Priority Matrix" step is user-override: its checkmark is **not** derived from org state, so configuring the matrix alone never flips it — completion must be written. After step 7 verifies the write, PUT the completion once (`references/sf-cli-invocation.md` route 10; body `{"isComplete": true}`, flag REQUIRED). It rides on the Phase-3 confirmation — no separate `AskUserQuestion`. **Skip entirely on view-only reads and idempotent no-ops.**
168
+ 9. Present before/after (Impact × Urgency grid via `examples/render-matrix.md`) plus a one-line summary (e.g. `Incident matrix: High/High → Critical added`). Matrix changes affect only Incidents created **after** the write; disabling the matrix does not clear stored rows or the default priority.
168
169
 
169
170
  ---
170
171
 
@@ -172,7 +173,7 @@ Read the current value of the same concern first (Phase 2 covers this), confirm
172
173
 
173
174
  | Constraint | Rationale |
174
175
  |-----------|-----------|
175
- | All operations run through `sf` CLI | The user-selected transport for this skill; no MCP dispatcher; no `/headless/invoke/*` route |
176
+ | All operations run through `sf` CLI | Works on any org with Incident Management enabled; requires no additional setup |
176
177
  | Always API v67.0 minimum | The Setup Connect API pref routes require v67+ |
177
178
  | Read live state before writing | The Phase-2 snapshot is the source of truth for the confirmation prompt, the idempotency check, and the Phase-5 verify |
178
179
  | **REQUIRED confirm-to-write checkpoint** before any mutation | Toggling prefs or changing matrix rows mutates org state; user must approve the exact plan |
@@ -182,6 +183,7 @@ Read the current value of the same concern first (Phase 2 covers this), confirm
182
183
  | Refuse any `ReferenceObject` other than `Incident` (`Problem`, `ChangeRequest`, anything else) | `ServiceOpPriorityConfig` is shared with the Problem / ChangeRequest matrices at the wire level — the server accepts any `ReferenceObject` string. Scope to `Incident` is skill-enforced only. |
183
184
  | On Change / Remove, if the target coordinate resolves to more than one row, do NOT dispatch — require an explicit `Id` or a confirmed consolidation plan | The server allows duplicate `(ReferenceObject, Urgency, Impact)` rows. Picking "the row Id" arbitrarily would mutate one duplicate and leave the other in place, keeping the matrix non-deterministic. |
184
185
  | Report exact error text from the CLI response | The CLI surfaces the underlying error message verbatim |
186
+ | After a functional write, PUT the Salesforce Go step-progress completion (route 10); skip on view / no-op | The "Define Priority Matrix" step is user-override — its checkmark isn't derived from org state, so config writes alone leave the Go checklist stuck |
185
187
 
186
188
  ---
187
189
 
@@ -196,6 +198,7 @@ Before reporting completion of any mutation, confirm each of the following. If a
196
198
  - [ ] Every `Impact`, `Urgency`, `Priority` in any add / change payload was validated against the Phase-1 picklist values before dispatch. Duplicates on `(ReferenceObject, Urgency, Impact)` were caught client-side against the Phase-2 snapshot — the server does NOT reject duplicates. Every add payload had `ReferenceObject == "Incident"`.
197
199
  - [ ] Phase 4 writes used the exact CLI invocations from `references/sf-cli-invocation.md`; on any `4xx` / `5xx` (or non-`Succeeded` deploy), the raw response was surfaced and the run halted.
198
200
  - [ ] Phase 5 verify re-read the affected concerns; any diff was reported as `write FAILED — server state differs from request` with the raw response.
201
+ - [ ] If a Phase-4 functional write landed, the Go step-progress completion PUT (route 10) was sent after verify. On view-only reads and idempotent no-ops, no completion PUT was dispatched.
199
202
  - [ ] The final report gave a before/after with the Impact × Urgency grid and a one-line summary.
200
203
 
201
204
  ---
@@ -1,6 +1,6 @@
1
1
  # Matrix Operations — CLI Invocation Templates
2
2
 
3
- Every mutation is a single `sf` CLI command. Unlike the earlier Aura-dispatcher path (`save-details` replace-whole), the Tooling REST endpoints operate on **one row at a time** — the read-modify-write step is client-side only. Add, change, and remove are three distinct wire calls, not one replace.
3
+ Every mutation is a single `sf` CLI command. The Tooling REST endpoints operate on **one row at a time** — the read-modify-write step is client-side only. Add, change, and remove are three distinct wire calls, not one replace.
4
4
 
5
5
  Templates below start from this hypothetical current matrix (Tooling SOQL result):
6
6
 
@@ -198,3 +198,29 @@ The XML shape after editing (default `High`):
198
198
  ```
199
199
 
200
200
  Validate the target value against the Phase-1 active picklist first.
201
+
202
+ ---
203
+
204
+ ## Mark the Salesforce Go setup step complete (Phase 5, after a mutation)
205
+
206
+ Once a functional write above has been dispatched **and** the Phase-5 verify confirms it landed,
207
+ flip the "Define Priority Matrix" tile in the Salesforce Go setup checklist to Done. This step is a
208
+ user-override step: configuring the matrix functionally does **not** move its checkmark — the
209
+ completion has to be written explicitly (route 10 in `references/sf-cli-invocation.md`).
210
+
211
+ ```bash
212
+ sf api request rest \
213
+ "/services/data/v67.0/connect/setup/discovery/feature/service-cloud-itsm-incident/configuration/step/definePriorityMatrix/progress" \
214
+ --method PUT \
215
+ --header "Content-Type:application/json" \
216
+ --body '{"isComplete": true}' \
217
+ --target-org <alias>
218
+ ```
219
+
220
+ Response: `200` with the updated step progress. Notes:
221
+
222
+ - **`isComplete` is required** — omitting it returns HTTP 500, not 400.
223
+ - Send it **only when Phase 4 actually wrote something**. On a view-only read or an idempotent
224
+ no-op (e.g. disabling an already-disabled matrix), dispatch nothing — the PUT is itself a mutation.
225
+ - It rides on the confirmation the user already gave for the functional change; it is not a
226
+ separately-confirmed write.
@@ -6,7 +6,7 @@ This skill invokes every read and write through the **`sf` CLI**. Two transports
6
6
  - `sf data query --use-tooling-api` / `sf data delete record --use-tooling-api` — Tooling API convenience wrappers with better parsing than raw REST.
7
7
  - `sf project retrieve start` + `sf project deploy start` — for the `StandardValueSet` metadata that carries the default fallback priority.
8
8
 
9
- Every invocation below was verified 200 (or `Succeeded` for the metadata deploy) against `orgfarm-afdcaf38b6` on 2026-08-04. Path prefixes are load-bearing; do not strip `/services/data/v67.0/` or `/services/data/v67.0/tooling/`.
9
+ Every invocation below reflects the exact request and response shapes returned by the platform. Path prefixes are load-bearing; do not strip `/services/data/v67.0/` or `/services/data/v67.0/tooling/`.
10
10
 
11
11
  ## Authentication
12
12
 
@@ -88,7 +88,7 @@ sf data query \
88
88
  --query "SELECT Id, DeveloperName, ReferenceObject, Urgency, Impact, Priority FROM ServiceOpPriorityConfig WHERE ReferenceObject = 'Incident'"
89
89
  ```
90
90
 
91
- Zero to `|Impact| × |Urgency|` rows returned. Row keys are PascalCase (`Id`, `DeveloperName`, `ReferenceObject`, `Urgency`, `Impact`, `Priority`) — these are Tooling SObject field names, not the lowercase JSON keys the Aura controller used. `DeveloperName` is included so the add step can derive a fresh unique suffix from existing rows.
91
+ Zero to `|Impact| × |Urgency|` rows returned. Row keys are PascalCase (`Id`, `DeveloperName`, `ReferenceObject`, `Urgency`, `Impact`, `Priority`) — these are Tooling SObject field names. `DeveloperName` is included so the add step can derive a fresh unique suffix from existing rows.
92
92
 
93
93
  For programmatic scripts, add `--json` and parse `result.records[]`.
94
94
 
@@ -111,9 +111,9 @@ Suffix pattern: pattern-match the existing rows' `DeveloperName` values from the
111
111
 
112
112
  **Important:** The Tooling REST endpoint does NOT enforce picklist validation on `Urgency`, `Impact`, `Priority`. Garbage values are accepted at the wire level but the runtime matrix evaluator refuses to use them. Validate every value against the Phase-1 picklist values before dispatch.
113
113
 
114
- **Duplicates:** the server does NOT enforce `(ReferenceObject, Urgency, Impact)` uniqueness — a second POST on the same coordinate is accepted as a separate row (verified 2026-08-04 on `itsm-eval-org`: two rows with identical `(Incident, Medium, High)` both persisted with distinct `Id`s). Client-side dedup against the Phase-2 snapshot is the ONLY guard against duplicate matrix cells; if you skip it, the runtime picks one of the duplicates non-deterministically.
114
+ **Duplicates:** the server does NOT enforce `(ReferenceObject, Urgency, Impact)` uniqueness — a second POST on the same coordinate is accepted as a separate row (for example, two rows with identical `(Incident, Medium, High)` coordinates will both persist with distinct `Id`s). Client-side dedup against the Phase-2 snapshot is the ONLY guard against duplicate matrix cells; if you skip it, the runtime picks one of the duplicates non-deterministically.
115
115
 
116
- **ReferenceObject:** the server accepts any string for `ReferenceObject` (verified: a `Problem` row inserted successfully). `ServiceOpPriorityConfig` is the shared SObject for Incident / Problem / ChangeRequest matrices. Scope to `Incident` is skill-enforced only — refuse any other value client-side.
116
+ **ReferenceObject:** the server accepts any string for `ReferenceObject` (for example, a `Problem` row can be inserted successfully). `ServiceOpPriorityConfig` is the shared SObject for Incident / Problem / ChangeRequest matrices. Scope to `Incident` is skill-enforced only — refuse any other value client-side.
117
117
 
118
118
  ### 6. Matrix rows — change
119
119
 
@@ -218,6 +218,36 @@ The XML shape is:
218
218
 
219
219
  Exactly one `<default>true</default>` should be present at deploy time.
220
220
 
221
+ ### 10. Salesforce Go setup-step completion — write (after a mutation only)
222
+
223
+ The "Define Priority Matrix" tile in the Salesforce Go setup checklist (feature
224
+ `service-cloud-itsm-incident`, step `definePriorityMatrix`) is a **user-override** step: its
225
+ "Done" checkmark is a user-supplied `StepProgress` record, **not** derived from org state.
226
+ Writing the matrix config (prefs, rows, default) functionally is invisible to the checklist —
227
+ the completion must be written explicitly, exactly as the guided modal does on save.
228
+
229
+ ```bash
230
+ sf api request rest \
231
+ "/services/data/v67.0/connect/setup/discovery/feature/service-cloud-itsm-incident/configuration/step/definePriorityMatrix/progress" \
232
+ --method PUT \
233
+ --header "Content-Type:application/json" \
234
+ --body '{"isComplete": true}' \
235
+ --target-org <alias>
236
+ ```
237
+
238
+ **Expected:** HTTP 200 with the updated progress. The endpoint is idempotent — re-asserting
239
+ `isComplete: true` when already complete is a harmless 200, so no read-before-write is needed.
240
+
241
+ - **`isComplete` is REQUIRED.** Omitting it returns **HTTP 500** (server-side NPE), not a 400.
242
+ - **Fire only after a functional Phase-4 write has landed** (a pref PATCH, a row POST/PATCH/delete,
243
+ or a `StandardValueSet` deploy). On a view-only read or an idempotent no-op, dispatch **nothing** —
244
+ there is no configuration action to mark done, and the completion PUT is itself a mutation.
245
+ - This is the same feature the master-pref preflight reads via `/connect/setup/discovery/features`
246
+ (filter `apiName == "service-cloud-itsm-incident"`); here the singular `.../feature/service-cloud-itsm-incident/...`
247
+ subresource carries the per-step progress.
248
+ - Rely on the 200 success signal. Any non-200 surfaces verbatim through the skill's standard error
249
+ handling — the completion PUT is not special-cased.
250
+
221
251
  ---
222
252
 
223
253
  ## Idempotency contract
@@ -230,8 +260,9 @@ Exactly one `<default>true</default>` should be present at deploy time.
230
260
  | Change a cell | The Phase-2 row's `Priority` already equals the requested value |
231
261
  | Remove a cell | No Phase-2 row matches `(ReferenceObject, Urgency, Impact)` |
232
262
  | Default fallback priority | The Phase-2 `default: true` entry's `valueName` already equals the requested value |
263
+ | Salesforce Go step completion (route 10) | No functional Phase-4 write was dispatched this run — i.e. the request was view-only, or every targeted concern was itself an idempotent no-op. The PUT is also idempotent server-side, so re-asserting `isComplete: true` after a real write is harmless |
233
264
 
234
- When idempotent, report `ALREADY-<state>` and skip Phase 4 entirely.
265
+ When a functional concern (the first six rows) is idempotent, report `ALREADY-<state>` and skip Phase 4 entirely. Route 10 is a Phase-5 action, not a Phase-4 concern — it has no `ALREADY-<state>` report.
235
266
 
236
267
  ---
237
268
 
@@ -259,6 +290,6 @@ For an uncustomized org the defaults are `High/Medium/Low` on `Impact` and `Urge
259
290
  | Duplicate `(ReferenceObject, Urgency, Impact)` rows | Accepted silently at the wire level — the server does NOT enforce uniqueness. Both rows persist and the runtime picks one non-deterministically. Deduplicate against the Phase-2 snapshot before POST; this check is the only guard. |
260
291
  | `ReferenceObject` accepts any string | The `ServiceOpPriorityConfig` SObject is shared with `Problem` and `ChangeRequest` matrices; the server accepts any value in `ReferenceObject`. Scope to `Incident` is skill-enforced only — refuse other values client-side. |
261
292
  | `sf api request rest ... --method DELETE` on Tooling | Fails with `SfError: No 'mode' found in 'body' entry` (sf CLI 2.143). Use `sf data delete record --use-tooling-api` instead. |
262
- | `/headless/invoke/service/service-itsm/...` returns 404 through `sf api request rest` | Those routes are Aura-dispatcher only; not addressable via the REST API host. Use the Tooling SObject and Setup Connect API prefs instead — that's what this skill does. |
263
293
  | Direct PATCH on `StandardValueSet/<Id>` via Tooling REST | Returns `FIELD_INTEGRITY_EXCEPTION: Unable to load specified entity`. Metadata deploy is the canonical path for picklist defaults. |
264
294
  | Existing Incidents' Priority | Not re-derived on matrix change. New writes use the new matrix; the stamped Priority on existing Incident records stays put. |
295
+ | Salesforce Go "Define Priority Matrix" step stays "not done" after configuring the matrix | The step is user-override — its checkmark is a `StepProgress` record, not derived from org state, so functional writes alone never flip it. Send route 10's completion PUT after the write (see step 8 in the SKILL Workflow). Omitting `isComplete` in the body → HTTP 500, not 400. |
@@ -0,0 +1,146 @@
1
+ ---
2
+ name: service-native-voice-recording-transcription-configure
3
+ description: "Enable call recording and call transcription for Native Voice (Thunderbird Voice) programmatically via the Metadata API, for headless / API-driven support where no human uses the Service Console UI. Use this skill when a user asks to turn on, enable, or configure Native Voice recording and/or transcription for headless or automated voice calls. TRIGGER when: users mention Thunderbird Voice, Native Voice, ThunderbirdVoiceSettings, enableCallRecording, enableCallTranscription, 'enable recording and transcription', 'turn on call recording via API', headless voice recording, or configuring voice-call capture without clicking through Setup. DO NOT TRIGGER when: the user wants to redact or scrub PII from existing recordings, transcribe a supplied audio file, or author a Flow/Apex — those are out of scope for this skill."
4
+ metadata:
5
+ version: "1.1"
6
+ domains: ["Service"]
7
+ minApiVersion: "68.0"
8
+ cliTools:
9
+ - tool: ["jq"]
10
+ semver: ">=1.6"
11
+ - tool: ["sf"]
12
+ semver: ">=2.0.0"
13
+ ---
14
+
15
+ # Enable Native Voice Recording & Transcription (headless)
16
+
17
+ Turn on call **recording** and call **transcription** for Native Voice (Thunderbird
18
+ Voice) on an org, programmatically, so they take effect for headless / API-driven
19
+ support sessions that never touch the Service Console UI. Recording and transcription
20
+ are **two separate preferences** — this skill enables both and returns a structured
21
+ JSON confirmation.
22
+
23
+ ## Scope
24
+
25
+ - **In scope**: enabling `enableCallRecording` and `enableCallTranscription` on the
26
+ `ThunderbirdVoiceSettings` metadata via an sf CLI Metadata API deploy (the generic
27
+ `Settings` container, member `ThunderbirdVoice`); returning a JSON confirmation of
28
+ the resulting configuration.
29
+ - **Out of scope**: changing any other `ThunderbirdVoiceSettings` boolean (e.g.
30
+ call-recording redaction, SIP recording) — siblings are read only to be preserved,
31
+ never set or reported; redacting/scrubbing PII from existing recordings or
32
+ transcripts; transcribing a supplied audio file; provisioning the Native Voice /
33
+ Thunderbird channel itself; authoring Flow, Apex, or permission sets. These are
34
+ outside this skill's scope — handle them separately.
35
+
36
+ ---
37
+
38
+ ## Required Inputs
39
+
40
+ Gather or infer before proceeding:
41
+
42
+ - **Target org** — an org alias or username the sf CLI is authenticated to. The deploy
43
+ uses this existing `sf` login; no session id or access token is requested. Default:
44
+ the org's default target. Confirm connectivity with `sf org display -o <alias>`.
45
+ - **Which preferences** — recording, transcription, or both. Default: **both**, since
46
+ headless capture typically needs recording *and* transcription. Confirm only if the
47
+ user named just one.
48
+
49
+ ---
50
+
51
+ ## Workflow
52
+
53
+ All steps are sequential. Do not skip or reorder. If blocked, stop and ask for the
54
+ missing org context.
55
+
56
+ 1. **Confirm the two preferences are modeled separately.** Recording
57
+ (`enableCallRecording`) and transcription (`enableCallTranscription`) are distinct
58
+ booleans on the same metadata type — never collapse them into one combined flag.
59
+ The final confirmation must report each independently.
60
+
61
+ 2. **Run the enable script.** Run
62
+ `scripts/enable-recording-transcription.sh --target-org <alias>`. It retrieves
63
+ `ThunderbirdVoiceSettings` (via the `Settings` container), checks the org-perm gate,
64
+ flips the two target flags to `true` while preserving every sibling, validates with
65
+ a dry-run deploy, deploys, and verifies by round-trip. Use `--dry-run` to retrieve +
66
+ validate without persisting. Run
67
+ `scripts/enable-recording-transcription.sh --help` for all options.
68
+
69
+ 3. **For the Metadata API contract**, read `references/thunderbird-voice-settings.md` —
70
+ it documents the type, the two booleans, the `Settings`-container manifest, the
71
+ **v68.0+** version floor, and the retrieve-first gate check. The manifest template
72
+ the script generates is `assets/package.xml`.
73
+
74
+ > This uses the sf CLI Metadata API deploy, not a raw SOAP call. The member is the
75
+ > mdApiType **without** the `Settings` suffix (`ThunderbirdVoice`), and the manifest
76
+ > version MUST be **>= 68.0** — the fields are not exposed at any lower version.
77
+
78
+ 4. **Change only the two target fields.** The deployed settings file sets exactly
79
+ `enableCallRecording` and `enableCallTranscription` to `true`; every other
80
+ `ThunderbirdVoiceSettings` boolean keeps its retrieved value. Do not add or flip
81
+ other booleans — they are out of this skill's scope.
82
+
83
+ 5. **Return the confirmation JSON.** Emit a single JSON object matching
84
+ `assets/confirmation-output.json`: the metadata `type` and `fullName`, that it was
85
+ applied via a headless/API deploy, and — for **each** of the two preferences
86
+ separately — its field name and enabled state, plus an overall `status`. It also
87
+ includes a **`preserved`** array echoing every sibling boolean (e.g.
88
+ `enableCallRecRedaction`, `enableSipRecording`) with the value it was retrieved
89
+ with — this attests the siblings were carried through **unchanged**, which
90
+ compliance callers need as explicit "nothing else moved" assurance. Reporting a
91
+ sibling's value is NOT changing it. On a successful run the script prints this
92
+ object on stdout; surface it verbatim as the deliverable — do not strip the
93
+ `preserved` block.
94
+
95
+ ---
96
+
97
+ ## Rules / Constraints
98
+
99
+ | Constraint | Rationale |
100
+ |-----------|-----------|
101
+ | Model recording and transcription as two separate preferences | They are distinct booleans (`enableCallRecording`, `enableCallTranscription`); collapsing them loses the ability to enable one without the other and fails the output contract. |
102
+ | Deploy through the generic `Settings` container with member `ThunderbirdVoice` | `ThunderbirdVoiceSettings` is not a retrievable top-level type name; the `Settings` container (member = mdApiType minus the `Settings` suffix) is the sf CLI path and uses the org's `sf` login — no session id. |
103
+ | Manifest version must be >= 68.0 | `ThunderbirdVoiceSettings` fields are only exposed at API v68.0+; below that the retrieve returns the type empty/absent. |
104
+ | Retrieve before deploy; preserve all sibling fields | The deploy is a full-file replace — starting from the retrieved file keeps other prefs intact and lets the gate be checked. |
105
+ | Report the preserved siblings in a `preserved` block, but never change them | Compliance callers need explicit "nothing else moved" assurance; the confirmation echoes each sibling's retrieved value unchanged. Echoing a value is not setting it — the deployed file still flips only the two target fields. |
106
+ | Verify by round-trip before reporting `ENABLED` | A "Succeeded" deploy is not proof; only claim enabled after a re-retrieve returns both `true`. |
107
+ | Output must be a single valid JSON object | The confirmation is consumed programmatically by headless callers; prose-only answers are not usable. |
108
+ | Do not include a session id, access token, phone number, recording URL, or transcript content in the output | These are secrets / PII; the confirmation reports configuration state only. |
109
+
110
+ ---
111
+
112
+ ## Gotchas
113
+
114
+ | Issue | Resolution |
115
+ |-------|------------|
116
+ | `Property 'enableCallRecording' not valid in version <N>` / `Settings type 'ThunderbirdVoice' is unknown` | **API version too low.** The fields are only exposed at v68.0+. Raise `--api-version` to 68.0 or higher — this is NOT a feature gate. |
117
+ | Retrieve returns an empty `<ThunderbirdVoiceSettings/>` (no fields) | Org-perm gate `orgHasNativeVoiceAllowed` is off — Native Voice is not provisioned. Enable via provisioning/Blacktab; metadata cannot flip an unprovisioned feature. |
118
+ | Trying to retrieve `ThunderbirdVoiceSettings` as the type name | Use the `Settings` container with member `ThunderbirdVoice` (mdApiType minus the `Settings` suffix); the full type name is not a retrievable member. |
119
+ | Collapsing both prefs into one toggle (e.g. `recordingAndTranscription: true`) | Keep two distinct entries in both the deployed file and the confirmation JSON. |
120
+ | Deploying a partial settings file | Start from the retrieved file so sibling prefs keep their values; a partial file can reset them. |
121
+ | Missing `jq` / `sf` | The script depends on them; install or run in an environment that has them (declared in `metadata.cliTools`). |
122
+
123
+ ---
124
+
125
+ ## Output Expectations
126
+
127
+ Deliverables:
128
+ - A single JSON confirmation object on stdout, shaped per `assets/confirmation-output.json`
129
+ — the metadata target, the headless/API deploy path, each of the two preferences
130
+ reported separately with its enabled state, a `preserved` array echoing every
131
+ sibling boolean (unchanged) so callers can confirm nothing else moved, and an
132
+ overall `status`.
133
+
134
+ No files are written to the org's source tree — the script works in a temporary SFDX
135
+ project and reports the result.
136
+
137
+ ---
138
+
139
+ ## Reference File Index
140
+
141
+ | File | When to read |
142
+ |------|-------------|
143
+ | `scripts/enable-recording-transcription.sh` | Step 2 — run to retrieve → flip → validate → deploy → verify (supports `--dry-run`, `--api-version`, `--help`). |
144
+ | `references/thunderbird-voice-settings.md` | Step 3 — for the metadata type, the two booleans, the `Settings` manifest, the v68.0+ floor, and the gate check. |
145
+ | `assets/package.xml` | Step 3 — the Metadata API manifest template the script generates; read to understand or hand-build the retrieve/deploy. |
146
+ | `assets/confirmation-output.json` | Step 5 — the exact shape of the JSON confirmation to return. |
@@ -0,0 +1,16 @@
1
+ {
2
+ "type": "ThunderbirdVoiceSettings",
3
+ "fullName": "ThunderbirdVoice",
4
+ "apiVersion": "68.0",
5
+ "method": "sf project deploy (Settings/ThunderbirdVoice)",
6
+ "headless": true,
7
+ "preferences": [
8
+ { "name": "enableCallRecording", "enabled": true },
9
+ { "name": "enableCallTranscription", "enabled": true }
10
+ ],
11
+ "preserved": [
12
+ { "name": "enableCallRecRedaction", "enabled": true },
13
+ { "name": "enableSipRecording", "enabled": false }
14
+ ],
15
+ "status": "ENABLED"
16
+ }
@@ -0,0 +1,22 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Metadata API manifest for retrieving/deploying ThunderbirdVoiceSettings via the
4
+ sf CLI Settings container. scripts/enable-recording-transcription.sh generates
5
+ this manifest into a temporary SFDX project (substituting the API version).
6
+
7
+ Key points:
8
+ - The type is the generic `Settings` container (which IS in the sf CLI
9
+ metadata registry) — NOT `ThunderbirdVoiceSettings` (which is not a
10
+ retrievable top-level type name).
11
+ - The member is the mdApiType WITHOUT the trailing `Settings`, i.e.
12
+ `ThunderbirdVoice`.
13
+ - version MUST be >= 68.0. ThunderbirdVoiceSettings fields are not exposed at
14
+ any lower version, so a retrieve at v64-67 returns the type empty/absent.
15
+ -->
16
+ <Package xmlns="http://soap.sforce.com/2006/04/metadata">
17
+ <types>
18
+ <members>ThunderbirdVoice</members>
19
+ <name>Settings</name>
20
+ </types>
21
+ <version>68.0</version>
22
+ </Package>