@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,176 @@
1
+ # DevOps Center Request Status CLI Command Reference
2
+
3
+ Reference for `sf devops request status` with its JSON output schema and error handling. This is a **read-only** status check — it issues no mutations. The command is keyed on the **request token** returned by `dx-devops-promote` (the promote response).
4
+
5
+ ## Command Summary
6
+
7
+ | Command | Purpose | Required Flags | Mutates? |
8
+ |---------|---------|---------------|----------|
9
+ | `sf devops request status` | Get the current status of a request by its request token | `-i/--request-token`, `-o/--target-org` | No (read-only) |
10
+
11
+ **Org authentication** — verify before any command:
12
+ ```bash
13
+ sf org display --json
14
+ ```
15
+
16
+ ---
17
+
18
+ ## Request Status (Read-Only)
19
+
20
+ Returns the current status of a request identified by its request token. Safe to run repeatedly — it never changes pipeline state.
21
+
22
+ ```bash
23
+ sf devops request status \
24
+ --request-token a0B000000000001 \
25
+ --target-org my-devops-org \
26
+ --json
27
+ ```
28
+
29
+ ### Flags
30
+
31
+ | Flag | Description |
32
+ |------|-------------|
33
+ | `-i, --request-token` | (required) Request token from the promote response. **Field-name note:** the value comes from the promote response's async identifier — observed as `.result.requestId` on a `promote` response (e.g. `{"status":"PROMOTE_IN_PROGRESS","requestId":"0Xt...","promotedWorkitemIds":[...]}`), while `request status` echoes it back as `.result.requestToken`. Capture it robustly: `jq -r '.result.requestId // .result.requestToken // .result.promotionId // .result.asyncOperationId'` |
34
+ | `-o, --target-org` | (required) Username or alias of the target org. Not required if the `target-org` config variable is set |
35
+ | `--api-version` | Override the API version used for API requests made by this command |
36
+ | `--json` | Format output as JSON (always use for headless parsing) |
37
+ | `--flags-dir` | Import flag values from a directory (global flag) |
38
+
39
+ ### Result fields
40
+
41
+ | Field | Meaning |
42
+ |-------|---------|
43
+ | `.result.id` | Internal record ID of the async operation (e.g. `8MwWt00000DDuPtKAL`) |
44
+ | `.result.status` | **Request-processing** state, UPPERCASE and **operation-prefixed** (`PROMOTE_IN_PROGRESS`, `PROMOTE_SUCCESS`, `DEPLOY_FAILED`, ...). Reports whether the request finished — NOT whether the deploy succeeded. Match on the suffix (see Status Value Vocabulary) |
45
+ | `.result.message` | Human-readable summary (e.g. `"Deployment failed"`, `"Inspection completed successfully"`) |
46
+ | `.result.errorDetails` | **The outcome oracle.** `null` on success; on failure an escaped JSON *string* `{"errorType": "...", "errorMessage": "..."}` |
47
+ | `.result.requestToken` | Echo of the token you queried |
48
+ | `.result.requestCompletionDate` | Completion timestamp, or `null` while still processing / on failure |
49
+
50
+ > **CRITICAL — two-level semantics.** `.result.status` and the top-level `status` (CLI exit code) can BOTH be success while the underlying operation failed. The authoritative failure signal is a **non-null `.result.errorDetails`**. Always check `errorDetails`, not just `status`.
51
+
52
+ ### JSON Output Schema (in progress)
53
+
54
+ ```json
55
+ {
56
+ "status": 0,
57
+ "result": {
58
+ "id": "8MwWt00000DDuPtKAL",
59
+ "status": "IN_PROGRESS",
60
+ "message": null,
61
+ "errorDetails": null,
62
+ "requestToken": "1c07586d-88e1-432c-bcfd-89abc43db874",
63
+ "requestCompletionDate": null
64
+ },
65
+ "warnings": []
66
+ }
67
+ ```
68
+
69
+ ### JSON Output Schema (success)
70
+
71
+ Request finished AND `errorDetails` is `null`:
72
+
73
+ ```json
74
+ {
75
+ "status": 0,
76
+ "result": {
77
+ "id": "8MwWt00000DDu9lKAD",
78
+ "status": "SUCCESS",
79
+ "message": "Inspection completed successfully",
80
+ "errorDetails": null,
81
+ "requestToken": "1c07586d-88e1-432c-bcfd-89abc43db874",
82
+ "requestCompletionDate": "2026-08-17T12:47:18.000+0000"
83
+ },
84
+ "warnings": []
85
+ }
86
+ ```
87
+
88
+ ### JSON Output Schema (failure — note `status: "SUCCESS"`!)
89
+
90
+ The request finished (`status: "SUCCESS"`), but the deploy FAILED. `errorDetails` is populated and `message` says so. This is the trap — do not read `status` alone:
91
+
92
+ ```json
93
+ {
94
+ "status": 0,
95
+ "result": {
96
+ "id": "8MwWt00000DDuPtKAL",
97
+ "status": "SUCCESS",
98
+ "message": "Deployment failed",
99
+ "errorDetails": "{\"errorType\":\"DEPLOYMENT_FAILURE\",\"errorMessage\":\"classes/HelloMCP.cls-meta.xml: Invalid api version:0.0 (classes/HelloMCP.cls-meta.xml)\"}",
100
+ "requestToken": "708b2286-bbf3-4621-9531-6d94334ff763",
101
+ "requestCompletionDate": null
102
+ },
103
+ "warnings": []
104
+ }
105
+ ```
106
+
107
+ ---
108
+
109
+ ## Status Value Vocabulary
110
+
111
+ `.result.status` reports whether the **request** finished processing (UPPERCASE) and is **operation-PREFIXED** — the value carries the operation name plus a state suffix, e.g. `PROMOTE_IN_PROGRESS`, `PROMOTE_SUCCESS`, `DEPLOY_FAILED`. Match on the **suffix**, never on a bare exact token, so any prefix (`PROMOTE_`, `DEPLOY_`, `VALIDATE_`, ...) is handled:
112
+
113
+ | Suffix (glob) | Category | Action |
114
+ |--------|----------|--------|
115
+ | `*_NEW` / `*_QUEUED` / `*_PENDING` | Non-terminal | Keep polling |
116
+ | `*_IN_PROGRESS` / `*_STARTED` / `*_RUNNING` | Non-terminal | Keep polling |
117
+ | `*SUCCESS*` / `*SUCCEEDED*` / `*COMPLETED*` | Request finished | **Then check `errorDetails`** — null = operation succeeded; non-null = operation FAILED |
118
+ | `*FAILED*` / `*FAILURE*` / `*ERROR*` / `*CANCELED*` / `*ABORTED*` | Request finished (failure) | Operation failed — report `errorDetails` |
119
+
120
+ Reaching a terminal `.result.status` is necessary but NOT sufficient for success. The final gate is `.result.errorDetails == null`. Check failure suffixes BEFORE success so a `*_FAILED` never slips through.
121
+
122
+ Example real value from a `promote` response the token was minted by: `"status": "PROMOTE_IN_PROGRESS"` with `"message": "Promotion started successfully"`.
123
+
124
+ ### Deriving the true outcome deterministically
125
+
126
+ Do not hand-roll this classification — `scripts/poll-status.sh` owns it so the two-level rule stays consistent across the one-shot and polling paths. For a single check, invoke `--once` and branch on the exit code:
127
+
128
+ ```bash
129
+ scripts/poll-status.sh --once a0B000000000001 my-devops-org
130
+ # 0 = succeeded · 2 = operation failed (status suffix *FAILED*/*ERROR*/*CANCELED*,
131
+ # or a *SUCCESS* status with non-null errorDetails) · 4 = still processing · 1 = query error
132
+ ```
133
+
134
+ The script glob-matches the operation-prefixed `.result.status` suffix (checking failure suffixes before success so a `*_FAILED` never slips through), then applies the `.result.errorDetails` failure oracle before reporting success.
135
+
136
+ ---
137
+
138
+ ## Error Handling
139
+
140
+ Distinguish three cases:
141
+ 1. **Failed query** — CLI/auth/token problem; top-level `status != 0`. Fix the token or auth.
142
+ 2. **Failed operation** — valid query, request finished, but `.result.errorDetails` is non-null (even if `.result.status == "SUCCESS"`). Report the parsed `errorType`/`errorMessage`.
143
+ 3. **Still processing** — valid query, `.result.status` non-terminal. Keep polling.
144
+
145
+ **Request token not found (failed query):**
146
+ ```json
147
+ { "status": 1, "name": "NOT_FOUND", "message": "No request found for the provided token", "exitCode": 1 }
148
+ ```
149
+
150
+ **Missing request-token flag (failed query):**
151
+ ```json
152
+ { "status": 1, "name": "MissingRequiredFlag", "message": "Missing required flag --request-token", "exitCode": 1 }
153
+ ```
154
+
155
+ **Authentication failure (failed query):**
156
+ ```json
157
+ { "status": 1, "name": "NoOrgFound", "message": "No org configuration found for target-org. Run 'sf org login web' to authenticate.", "exitCode": 1 }
158
+ ```
159
+
160
+ **Rate limit / throttle (failed query):**
161
+ ```json
162
+ { "status": 1, "name": "REQUEST_LIMIT_EXCEEDED", "message": "TotalRequests Limit exceeded.", "exitCode": 1 }
163
+ ```
164
+ Back off — increase the polling interval; never poll below the 5-second floor.
165
+
166
+ ---
167
+
168
+ ## Authentication Requirements
169
+
170
+ `sf devops request status` requires:
171
+
172
+ 1. **Authenticated org**: `sf org login web` or JWT auth (for CI)
173
+ 2. **DevOps Center enabled**: org must have DOCe provisioned
174
+ 3. **Read access** to the request being queried
175
+
176
+ Auth is the caller's responsibility — this skill contains no auth logic. In CI, use a JWT-authenticated service-account alias with least-privilege scopes.
@@ -0,0 +1,134 @@
1
+ #!/usr/bin/env bash
2
+ # Query a DevOps Center async request and determine the true outcome. Runs a
3
+ # single check (--once) or polls until the request reaches a terminal state.
4
+ # Read-only: issues only `sf devops request status` queries; never mutates.
5
+ #
6
+ # IMPORTANT — two-level semantics:
7
+ # .result.status is the async REQUEST status (uppercase, operation-prefixed:
8
+ # PROMOTE_SUCCESS / PROMOTE_IN_PROGRESS / DEPLOY_FAILED / ...). It reports
9
+ # whether the request finished processing, NOT whether the underlying deploy
10
+ # succeeded. A request can show a *SUCCESS* status while the deployment itself
11
+ # FAILED — that failure lives in .result.errorDetails (an escaped JSON string
12
+ # with errorType/errorMessage). errorDetails is the outcome oracle: non-null
13
+ # => the operation failed.
14
+ #
15
+ # Usage:
16
+ # poll-status.sh --once <request-token> <target-org-alias>
17
+ # poll-status.sh <request-token> <target-org-alias> [interval-seconds] [timeout-seconds]
18
+ #
19
+ # Exit codes:
20
+ # 0 request reached a terminal state AND the operation succeeded (errorDetails null)
21
+ # 1 usage error / missing dependency / status query failed
22
+ # 2 request reached a terminal state BUT the operation failed (errorDetails set,
23
+ # or status suffix *FAILED*/*ERROR*/*CANCELED*/*ABORTED*)
24
+ # 3 timeout reached before a terminal state (poll mode only)
25
+ # 4 request is still processing (--once mode only — not yet terminal)
26
+ set -euo pipefail
27
+
28
+ ONCE=0
29
+ if [ "${1:-}" = "--once" ]; then
30
+ ONCE=1
31
+ shift
32
+ fi
33
+
34
+ REQUEST_TOKEN="${1:-}"
35
+ TARGET_ORG="${2:-}"
36
+ INTERVAL="${3:-10}"
37
+ TIMEOUT="${4:-1800}"
38
+
39
+ usage() {
40
+ echo "Usage: poll-status.sh [--once] <request-token> <target-org-alias> [interval-seconds] [timeout-seconds]" >&2
41
+ exit 1
42
+ }
43
+
44
+ [ -z "$REQUEST_TOKEN" ] && usage
45
+ [ -z "$TARGET_ORG" ] && usage
46
+
47
+ # Reject non-numeric interval/timeout up front so the bounded loop stays bounded.
48
+ # (Under `set -e`, an arithmetic test against a non-numeric value errors but the
49
+ # loop could otherwise keep running — validate before we ever enter it.)
50
+ is_positive_int() { case "$1" in ''|*[!0-9]*) return 1;; *) [ "$1" -gt 0 ];; esac; }
51
+ if ! is_positive_int "$INTERVAL"; then
52
+ echo "interval-seconds must be a positive integer, got: $INTERVAL" >&2; usage
53
+ fi
54
+ if ! is_positive_int "$TIMEOUT"; then
55
+ echo "timeout-seconds must be a positive integer, got: $TIMEOUT" >&2; usage
56
+ fi
57
+
58
+ command -v sf >/dev/null 2>&1 || { echo "sf CLI not found on PATH" >&2; exit 1; }
59
+ command -v jq >/dev/null 2>&1 || { echo "jq not found on PATH" >&2; exit 1; }
60
+
61
+ # Enforce a 5-second minimum polling interval (DOCe API rate limits).
62
+ if [ "$INTERVAL" -lt 5 ]; then INTERVAL=5; fi
63
+
64
+ # Query once and classify the outcome. Echoes a human-readable line and returns:
65
+ # 0 succeeded, 2 failed (operation), 3 still processing, 1 query error.
66
+ # `.result.status` is operation-PREFIXED — match on the suffix with globs so any
67
+ # prefix is handled. Order matters: check failure suffixes before success so a
68
+ # *_FAILED never falls through to the success arm.
69
+ classify() {
70
+ local status_json req_status err_details message detail
71
+ if ! status_json=$(sf devops request status --request-token "$REQUEST_TOKEN" --target-org "$TARGET_ORG" --json 2>/dev/null); then
72
+ echo "Status query failed for request $REQUEST_TOKEN (org $TARGET_ORG)" >&2
73
+ return 1
74
+ fi
75
+ req_status=$(printf '%s' "$status_json" | jq -r '.result.status // "UNKNOWN"')
76
+ # errorDetails is an escaped JSON string (or null). "null"/"" => no error.
77
+ err_details=$(printf '%s' "$status_json" | jq -r '.result.errorDetails // ""')
78
+ message=$(printf '%s' "$status_json" | jq -r '.result.message // ""')
79
+
80
+ case "$req_status" in
81
+ *FAILED*|*FAILURE*|*ERROR*|*CANCELED*|*CANCELLED*|*ABORTED*)
82
+ detail=$(printf '%s' "$err_details" | jq -r '"\(.errorType): \(.errorMessage)"' 2>/dev/null || printf '%s' "$err_details")
83
+ echo "Request $REQUEST_TOKEN failed (request status: $req_status). $message ${detail:+— $detail}" >&2
84
+ return 2
85
+ ;;
86
+ *SUCCESS*|*SUCCEEDED*|*COMPLETED*)
87
+ # Terminal request state — but a "success" request can still carry a failed
88
+ # operation. errorDetails is the outcome oracle: non-null => failure.
89
+ if [ -n "$err_details" ]; then
90
+ detail=$(printf '%s' "$err_details" | jq -r '"\(.errorType): \(.errorMessage)"' 2>/dev/null || printf '%s' "$err_details")
91
+ echo "Request $REQUEST_TOKEN failed (request status: $req_status, but errorDetails set). $message ${detail:+— $detail}" >&2
92
+ return 2
93
+ fi
94
+ echo "Request $REQUEST_TOKEN completed successfully (request status: $req_status). $message"
95
+ return 0
96
+ ;;
97
+ *)
98
+ # Non-terminal (*_IN_PROGRESS / *_PENDING / *_QUEUED / *_STARTED /
99
+ # *_RUNNING / *_NEW / UNKNOWN) — still processing.
100
+ echo "Request $REQUEST_TOKEN status: $req_status (still processing). $message"
101
+ return 3
102
+ ;;
103
+ esac
104
+ }
105
+
106
+ # --once: single query, no waiting. Map "still processing" (3) to exit 4.
107
+ if [ "$ONCE" -eq 1 ]; then
108
+ set +e; classify; rc=$?; set -e
109
+ [ "$rc" -eq 3 ] && exit 4
110
+ exit "$rc"
111
+ fi
112
+
113
+ # Track WALL-CLOCK time, not accumulated sleep — otherwise the per-poll CLI
114
+ # latency inside classify() is invisible to the timeout and the real deadline
115
+ # drifts past TIMEOUT by the summed query time. $SECONDS is bash's seconds-since-
116
+ # shell-start counter; snapshot it now and measure elapsed against that.
117
+ start=$SECONDS
118
+ while :; do
119
+ set +e; classify; rc=$?; set -e
120
+ case "$rc" in
121
+ 0|1|2) exit "$rc" ;; # terminal (succeeded/failed) or query error — done
122
+ esac
123
+ # rc == 3: still processing. Honor timeout-seconds as a true wall-clock cap.
124
+ elapsed=$((SECONDS - start))
125
+ if [ "$elapsed" -ge "$TIMEOUT" ]; then
126
+ echo "Timeout after ${elapsed}s — request $REQUEST_TOKEN still processing" >&2
127
+ exit 3
128
+ fi
129
+ remaining=$((TIMEOUT - elapsed))
130
+ wait_for=$INTERVAL
131
+ if [ "$remaining" -lt "$wait_for" ]; then wait_for=$remaining; fi
132
+ echo "Waiting ${wait_for}s (elapsed ${elapsed}s, timeout ${TIMEOUT}s)..."
133
+ sleep "$wait_for"
134
+ done
@@ -2,17 +2,17 @@
2
2
  name: dx-devops-test-failures-analyze
3
3
  description: "Analyzes DevOps Center test failures and Code Analyzer violations in plain language — failure category, offending file/class/method/line, rule violated, fix direction, and prioritized improvement suggestions (test-code vs production-code) — then optionally creates a tracked fix WorkItem on explicit request. Analysis is pure reasoning; work-item creation is a confirmation-gated write. Use this skill to explain failures or improvement suggestions, translate Code Analyzer violations, or track a fix as a work item. TRIGGER when: a run failed and the user wants root cause; a quality gate failure needs explaining; violations need translating; the user shares a failure payload and asks how to address it; wants to strengthen tests; or wants to create a fix work item, log a remediation, or assign a failure. DO NOT TRIGGER when: the user wants fix code written (use platform-apex-generate) or new test classes authored (use platform-apex-test-generate)."
4
4
  metadata:
5
- cliTools:
6
- - tool: ["sf"]
7
- semver: ">=2.67.0"
5
+ version: "1.0"
6
+ domains: ["Developer Experience"]
7
+ minApiVersion: "67.0"
8
8
  relatedSkills:
9
9
  - "dx-devops-test-suite-assignments-configure"
10
10
  - "dx-devops-test-suite-run"
11
11
  - "platform-apex-generate"
12
12
  - "platform-apex-test-generate"
13
- version: "1.0"
14
- domains: ["Developer Experience"]
15
- minApiVersion: "67.0"
13
+ cliTools:
14
+ - tool: ["sf"]
15
+ semver: ">=2.67.0"
16
16
  ---
17
17
 
18
18
  # Analyze DevOps Center Test Failures
@@ -2,16 +2,16 @@
2
2
  name: dx-devops-test-pipeline-configure
3
3
  description: "Configures DevOps Center pipeline testing infrastructure: enables a test provider so its suites become available, re-syncs a configured provider to pull in new suites, or creates a quality gate with rules on a stage. Routes by intent across three modes after running shared prerequisite checks and an explicit confirmation gate. Use this skill when a user wants to set up, configure, enable, sync, or refresh a test provider, or set/configure a quality gate or coverage threshold on a DevOps Center pipeline stage. TRIGGER when: the user wants to configure/enable/add/set up a test provider, re-sync or refresh a provider's suite list, pull in new suites, or set/configure a quality gate, coverage threshold, or testing benchmark on a stage. DO NOT TRIGGER when: assigning existing suites to a stage (use dx-devops-test-suite-assignments-configure), running or retriggering a suite (use dx-devops-test-suite-run), or non-DevOps-Center work."
4
4
  metadata:
5
- cliTools:
6
- - tool: ["sf"]
7
- semver: ">=2.67.0"
5
+ version: "1.0"
6
+ domains: ["Developer Experience"]
7
+ minApiVersion: "67.0"
8
8
  relatedSkills:
9
9
  - "dx-devops-test-failures-analyze"
10
10
  - "dx-devops-test-suite-assignments-configure"
11
11
  - "dx-devops-test-suite-run"
12
- version: "1.0"
13
- domains: ["Developer Experience"]
14
- minApiVersion: "67.0"
12
+ cliTools:
13
+ - tool: ["sf"]
14
+ semver: ">=2.67.0"
15
15
  ---
16
16
 
17
17
  # Configure DevOps Center Pipeline Testing Infrastructure
@@ -49,7 +49,7 @@ Carry forward the resolved `doce-org-alias`, `pipelineId`, and (Mode C) `stageId
49
49
  - Provider is **Configured** but suites are stale/missing → **Mode B** (sync).
50
50
  - Provider is **Configured** and the user can't see suites *when assigning to a stage* → this is a **stage-assignment gap, not a configuration gap**. Redirect to `dx-devops-test-suite-assignments-configure`.
51
51
 
52
- ⚠ **Never POST to the configure endpoint for an already-configured provider** — it creates duplicate `DevopsPipelineTestProvider` records. See `references/gotchas.md`.
52
+ **Never POST to the configure endpoint for an already-configured provider** — it creates duplicate `DevopsPipelineTestProvider` records. See `references/gotchas.md`.
53
53
 
54
54
  ---
55
55
 
@@ -2,18 +2,18 @@
2
2
  name: dx-devops-test-suite-assignments-configure
3
3
  description: "Recommends and manages DevOps Center test suite assignments for pipeline stages. Mode A analyzes a commit diff against assigned suite metadata to recommend relevant existing suites and flag coverage gaps (pure reasoning). Modes B-D assign a single suite, bulk-map multiple suites with a mandatory impact preview, or add/remove test classes with governance rules, via the testSuiteStages Connect API. Use this skill to recommend suites for a commit, assign or map suites to stages, or add/remove tests in a suite. TRIGGER when: the user asks which suites to run for a commit/diff or what covers their changes; a suite is unlinked and the user wants it assigned; the user wants to configure suite-to-stage mappings, assign multiple suites, or add/remove/sync tests in a suite. DO NOT TRIGGER when: configuring or syncing a test provider (use dx-devops-test-pipeline-configure), running suites (use dx-devops-test-suite-run), or authoring/running tests directly (use platform-apex-test-generate or platform-apex-test-run)."
4
4
  metadata:
5
- cliTools:
6
- - tool: ["sf"]
7
- semver: ">=2.67.0"
5
+ version: "1.0"
6
+ domains: ["Developer Experience"]
7
+ minApiVersion: "67.0"
8
8
  relatedSkills:
9
9
  - "dx-devops-test-failures-analyze"
10
10
  - "dx-devops-test-pipeline-configure"
11
11
  - "dx-devops-test-suite-run"
12
12
  - "platform-apex-test-generate"
13
13
  - "platform-apex-test-run"
14
- version: "1.0"
15
- domains: ["Developer Experience"]
16
- minApiVersion: "67.0"
14
+ cliTools:
15
+ - tool: ["sf"]
16
+ semver: ">=2.67.0"
17
17
  ---
18
18
 
19
19
  # Configure DevOps Center Suite Assignments
@@ -2,17 +2,17 @@
2
2
  name: dx-devops-test-suite-run
3
3
  description: "Runs DevOps Center test suites on a pipeline stage (Pre-Promote, Post-Promote, or Review event) end to end: triggers async execution via the Connect API after an explicit confirmation gate, then polls by runId at provider-specific intervals until it completes, fails, or times out, and hands results to failure analysis. Also retriggers a quality gate after fixes, but only once coverage meets the threshold. Use this skill when a user wants to run, kick off, or launch test suites on a stage, re-run a quality gate, or watch an in-progress run to completion. TRIGGER when: the user wants to run/launch suites on a stage, execute tests before or after promotion, re-run a quality gate after fixing failures, unblock a blocked promotion after adding tests, or poll/watch an in-progress run. DO NOT TRIGGER when: running sf apex run test directly (use platform-apex-test-run), or configuring a NEW gate or threshold (use dx-devops-test-pipeline-configure)."
4
4
  metadata:
5
- cliTools:
6
- - tool: ["sf"]
7
- semver: ">=2.67.0"
5
+ version: "1.0"
6
+ domains: ["Developer Experience"]
7
+ minApiVersion: "67.0"
8
8
  relatedSkills:
9
9
  - "dx-devops-test-failures-analyze"
10
10
  - "dx-devops-test-pipeline-configure"
11
11
  - "dx-devops-test-suite-assignments-configure"
12
12
  - "platform-apex-test-run"
13
- version: "1.0"
14
- domains: ["Developer Experience"]
15
- minApiVersion: "67.0"
13
+ cliTools:
14
+ - tool: ["sf"]
15
+ semver: ">=2.67.0"
16
16
  ---
17
17
 
18
18
  # Run a DevOps Center Test Suite
@@ -2,6 +2,8 @@
2
2
  name: dx-devops-work-item-manage
3
3
  description: "Use this skill to manage the full lifecycle of DevOps Center work items — list, create, update, commit changes, perform status transitions, and create pull requests. Update fields like subject, description, and status. Commit and push code changes to work item branches. Create pull requests for work item branches via DevOps Center API. Invoke when the user wants to track, find, create, or update a work item, commit changes to a work item branch, advance a work item's status through the pipeline, or create a pull request for code review. Consolidates sf devops work-item and review operations. DO NOT TRIGGER for promotion or deployment operations, or conflict detection."
4
4
  metadata:
5
+ relatedSkills:
6
+ - "dx-devops-promote"
5
7
  version: "1.0"
6
8
  domains: ["Developer Experience"]
7
9
  minApiVersion: "58.0"
@@ -36,9 +36,12 @@ Determine which approach based on user request:
36
36
 
37
37
  ### 2. Verify Dev Hub authentication
38
38
 
39
- Check if Dev Hub is authenticated:
39
+ Check if Dev Hub is authenticated (this mirrors the canonical Step 2 in `SKILL.md` — follow that as the source of truth):
40
40
  - If `--target-dev-hub` not provided, check `sf config get target-dev-hub`
41
- - If no Dev Hub configured, prompt user to authenticate: `sf org login web --set-default-dev-hub`
41
+ - If that is empty, enumerate every `sf org list --json` bucket (`devHubs`, `nonScratchOrgs`, `other`, `sandboxes`, `scratchOrgs`) for entries with `isDevHub: true`, then resolve by count:
42
+ - **Exactly one** → use that username.
43
+ - **Two or more** → ask the user which one; never pick arbitrarily.
44
+ - **Zero** → no hub is authenticated. Do NOT run `sf org create` (there is nothing to pass to `--target-dev-hub`). Stop and advise the user to authenticate: `sf org login web --set-default-dev-hub`.
42
45
 
43
46
  ### 3. Build the command
44
47
 
@@ -49,6 +49,7 @@ Infer from the user's request:
49
49
  | Issue | Resolution |
50
50
  |-------|------------|
51
51
  | Error creating snapshot | Surface the CLI's own error unchanged; the message states what to do next |
52
+ | `@salesforce/plugin-signups does not exist in the registry` | Snapshot commands live in the `signups` plugin, which ships bundled with a normal `sf` install. This error means the CLI environment is incomplete (slim image) or the plugin registry is unreachable (offline). Because the registry is unavailable, `sf plugins install` cannot succeed — do NOT attempt it (it will fail and loop). Surface the error and advise the user to repair their environment from a connected machine: reinstall or update the Salesforce CLI (for example with `sf update`, or a fresh global CLI install through their normal package manager) so the bundled `signups` plugin is present, or run in an image that already includes it. Never run any install/repair from inside the skill. |
52
53
  | "No org found for <alias>" error | Source org alias doesn't exist or isn't authenticated — verify with `sf org list` |
53
54
  | Snapshot name already exists | Use a different unique name — snapshot names must be unique per Dev Hub |
54
55
  | "An error while created the org snapshot" | Generic error — check that source org is a scratch org and still active |
@@ -0,0 +1,152 @@
1
+ ---
2
+ name: dx-org-shape-manage
3
+ description: "ALWAYS USE THIS SKILL to create, list, or delete org shapes. An org shape is a captured baseline configuration (features, limits, edition, and Metadata API settings) of a source org, without its data or metadata. Use when the user asks to create/make/take an org shape, capture or replicate an org's configuration/edition/limits, list/show/view existing org shapes (including INACTIVE/superseded ones) or their IDs and status, or delete/remove org shapes for a source org. Requires a source org with Dev Hub and Org Shape for Scratch Orgs enabled. DO NOT TRIGGER for creating snapshots or scratch orgs (use dx-org-manage)."
4
+ metadata:
5
+ version: "1.0"
6
+ domains: ["Developer Experience"]
7
+ relatedSkills:
8
+ - "dx-org-manage"
9
+ cliTools:
10
+ - tool: ["sf"]
11
+ semver: ">=2.0.0"
12
+ accessCheck:
13
+ - type: "orgPref"
14
+ value: "ScratchOrgManagementPref"
15
+ - type: "orgPref"
16
+ value: "ShapeExportPref"
17
+ ---
18
+
19
+ # dx-org-shape-manage
20
+
21
+ Coordinates the full lifecycle of Salesforce org shapes — **create**, **list**, and **delete** — via `sf org create shape`, `sf org list shape`, and `sf org delete shape`. An org shape captures the baseline setup of a source org (features, limits, edition, and Metadata API settings) **without** its data or metadata.
22
+
23
+ ---
24
+
25
+ ## Tool Restrictions
26
+
27
+ **Use ONLY the Bash tool** to execute the `sf org ... shape` commands. Do NOT use MCP tools — ignore them completely.
28
+
29
+ **Output artifacts for eval/testing:** ALWAYS write the command's complete JSON response to a file when an output directory is available. Do NOT ask the user what file to write — this skill defines the filenames. After executing each command: (1) if the user specified an output path (e.g. "write all generated files into folder X"), write there immediately; (2) otherwise run `[ -d force-app/main/adk-eval-output/ ] && echo 'force-app/main/adk-eval-output'` to detect the eval directory; (3) write the command's full, unmodified JSON response (including the `status`/`result`/`warnings` wrapper) to `<output-dir>/<filename>` using these filenames: `create-shape-result.json` for shape creation, `list-shapes-result.json` for listing shapes, `list-shapes-inactive-result.json` for the inactive-shapes SOQL query, or `delete-shapes-result.json` for shape deletion. This is the generated output — write it without asking. Do NOT say "no files to generate" for these operations; the JSON result IS the output artifact.
30
+
31
+ ---
32
+
33
+ ## Scope
34
+
35
+ - **In scope**: Creating (`sf org create shape`), listing (`sf org list shape`), listing including inactive shapes for a specific source org (SOQL against `ShapeRepresentation`), and deleting (`sf org delete shape`) org shapes
36
+ - **Out of scope**: Creating snapshots, creating scratch orgs (use `dx-org-manage`)
37
+
38
+ ---
39
+
40
+ ## Required Inputs
41
+
42
+ Infer from the user's request:
43
+
44
+ - **Operation**: create, list, list-including-inactive, or delete (see Workflow step 1)
45
+ - **Source org** (create, delete, & list-including-inactive): Username or alias of the org to shape / whose shapes to delete or query. Passed via `--target-org`. Plain listing (Active/InProgress only) needs no source org.
46
+
47
+ Notes:
48
+ - There is **no** `--name` or `--description` flag — a shape is identified by the source org's ID, not a custom name.
49
+ - There is **no** `--target-dev-hub` flag — the shape commands operate on the source org directly, not a Dev Hub.
50
+
51
+ ---
52
+
53
+ ## Workflow
54
+
55
+ 1. **Identify the operation** and match it to the command pattern below.
56
+ 2. **For create/delete, confirm the source org** — identify the username/alias. If not provided, check the default with `sf config get target-org`.
57
+ 3. **Execute via Bash tool** with the `--json` flag.
58
+ 4. **Report the result** (see Output Expectations and the example files).
59
+
60
+ ### Command Patterns
61
+
62
+ | Operation | User intent | Execute via Bash tool |
63
+ |-----------|-------------|------------------------|
64
+ | **Create** | Create shape from an org | `sf org create shape --target-org <alias> --json` |
65
+ | **Create** | Create shape from the default target org | `sf org create shape --json` |
66
+ | **List** | List all org shapes + IDs/status (Active/InProgress only) | `sf org list shape --json` |
67
+ | **List** | Save the list to a file | `sf org list shape --json > tmp/MyOrgShapeList.json` |
68
+ | **List (including inactive)** | List *all* shapes — including `Inactive` ones — for a specific source org | `sf data query --target-org <alias> --query "SELECT Id, Name, Status, CreatedDate, LastModifiedDate FROM ShapeRepresentation" --json` |
69
+ | **Delete** | Delete shapes for an org (with confirm prompt) | `sf org delete shape --target-org <alias> --json` |
70
+ | **Delete** | Delete shapes without prompting (scripts/CI) | `sf org delete shape --target-org <alias> --no-prompt --json` |
71
+
72
+ After creating a shape, run `sf org list shape --json` to get its **org ID**.
73
+
74
+ ### Listing Inactive Shapes
75
+
76
+ `sf org list shape` has **no flag** to surface `Inactive` shapes and **no `--target-org`** flag (it always scans every locally authenticated org). To see a source org's full shape history — including shapes superseded by a later `sf org create shape` run — query `ShapeRepresentation` directly:
77
+
78
+ ```bash
79
+ sf data query --target-org <alias> --query "SELECT Id, Name, Status, CreatedDate, LastModifiedDate FROM ShapeRepresentation" --json
80
+ ```
81
+
82
+ Only use this query when the user explicitly asks for **inactive** or **all/historical** shapes for a named source org. For ordinary "list my org shapes" requests, keep using `sf org list shape` — it is the documented, cross-org command and matches the rest of this skill's behavior.
83
+
84
+ Notes:
85
+ - `ShapeRepresentation` has no `SourceOrgId`, `username`, or `alias` field — report the raw query fields (`Id`, `Name`, `Status`, `CreatedDate`, `LastModifiedDate`) as returned; do not invent an `orgId`/`username`/`alias` for these rows.
86
+ - Add `WHERE Status = 'Inactive'` to scope to only inactive shapes if the user asks for inactive shapes specifically (as opposed to "all"/"history").
87
+ - Requires the same `ShapeRepresentation` CRUD access as create/delete.
88
+
89
+ ---
90
+
91
+ ## Rules / Constraints
92
+
93
+ | Constraint | Rationale |
94
+ |-----------|-----------|
95
+ | Always use `--json` flag | Provides structured output for reliable parsing and error handling |
96
+ | Source org must have **Org Shape for Scratch Orgs** enabled | Without it, create/delete fail with a no-access error — enable via **Setup → Scratch Orgs → Enable Org Shape for Scratch Orgs** in the source org |
97
+ | User needs access to the `ShapeRepresentation` object | Without CRUD access, create fails with `NoCrudAccessCreateShape` — ask the org admin |
98
+ | `--target-org` is the SOURCE org, not a Dev Hub | Create/delete operate *on* this org; it is not a Dev Hub operation. List takes no `--target-org` |
99
+ | No `--name` / `--description` flags | A shape is keyed off the source org's ID, not a custom name |
100
+ | One active shape per source org | Re-running create replaces the prior shape (marks it inactive). `delete` removes **all** shapes for the org |
101
+ | `delete` prompts for confirmation by default | Use `--no-prompt` (`-p`) for non-interactive/CI use; declining the prompt aborts with no deletion |
102
+
103
+ ---
104
+
105
+ ## Troubleshooting
106
+
107
+ | Issue | Resolution |
108
+ |-------|------------|
109
+ | `ShapeRepresentationNoAccess` — "The org needs to be enabled for org shape before one can be created" | Source org isn't enabled for org shape — in the source org go to **Setup → Scratch Orgs → Enable Org Shape for Scratch Orgs**, turn it on, then retry |
110
+ | `NoCrudAccessCreateShape` — "Can't create org shape. Contact the org admin..." | You lack access to the `ShapeRepresentation` object — ask the org admin to grant access, then retry |
111
+ | `ShapeCreateFailed` — "Error creating scratch definition file..." | Generic create failure — verify the source org is reachable/authenticated and retry; if it persists, contact Salesforce support |
112
+ | `UNKNOWN_EXCEPTION` on create (generic error with a support ErrorId, reproducible on retry) | The source org is not fully enabled for org shape even though `ShapeRepresentation` may be partially visible — confirm **Setup → Scratch Orgs → Enable Org Shape for Scratch Orgs** is on in the source org and that your user has CRUD on `ShapeRepresentation`, then retry |
113
+ | `sf org list shape` returns an empty list | No shapes exist yet (or none are `Active`/`InProgress`) — create one with `sf org create shape` |
114
+ | `sf org list shape` doesn't show a shape the user expects | It only surfaces `Active`/`InProgress` shapes and has no flag to change this — a prior `sf org create shape` run may have marked it `Inactive`. Use the SOQL query in "Listing Inactive Shapes" against that specific source org instead |
115
+ | Delete exits with code 68 (partial failure) | Some shapes failed to delete — inspect the `failures` array in the JSON for per-shape messages, then retry |
116
+ | Delete exits with code 1 (all failed) | Deletion failed entirely — confirm the org is enabled for org shape and you have access |
117
+ | `No org found for <alias>` / `NamedOrgNotFoundError` | Source org alias doesn't exist or isn't authenticated — verify with `sf org list` or re-auth with `sf org login web` |
118
+ | No default target org and `--target-org` omitted | Provide `--target-org <alias>` or set a default with `sf config set target-org=<alias>` |
119
+
120
+ ---
121
+
122
+ ## Output Expectations
123
+
124
+ All commands return JSON when `--json` is used:
125
+
126
+ - **Create** → `shapeId`, `success`, and `errors`.
127
+ - **List** → an array of shapes, each with `orgId`, `username`, `alias`, `shapeId`, `status` (`Active` or `InProgress`), `createdBy`, and `createdDate`.
128
+ - **List (including inactive)** → a SOQL query result (`records`, `totalSize`, `done`), each record with `Id`, `Name`, `Status` (`Active`, `InProgress`, or `Inactive`), `CreatedDate`, and `LastModifiedDate` — no `orgId`/`username`/`alias`, since `ShapeRepresentation` has no such fields.
129
+ - **Delete** → `orgId`, `shapeIds` (deleted), and `failures`. Returns no result if the user declines the confirmation prompt.
130
+
131
+ See the example files referenced below for full response structures.
132
+
133
+ ---
134
+
135
+ ## Cross-Skill Integration
136
+
137
+ | Need | Delegate to |
138
+ |------|-------------|
139
+ | Create a scratch org, or create/use a snapshot | `dx-org-manage` skill |
140
+
141
+ ---
142
+
143
+ ## Reference File Index
144
+
145
+ | File | When to read |
146
+ |------|-------------|
147
+ | `examples/create_success_output.json` | To understand the successful shape-creation response structure |
148
+ | `examples/create_error_output.json` | To handle common create error scenarios |
149
+ | `examples/list_output.json` | To understand the list response structure (org IDs, status) |
150
+ | `examples/list_inactive_output.json` | To understand the SOQL query response structure for listing shapes including `Inactive` ones |
151
+ | `examples/delete_output.json` | To understand the delete response structure (deleted IDs, failures) |
152
+ | `references/cli_flags.md` | For detailed explanation of all flags across create/list/delete |
@@ -0,0 +1,9 @@
1
+ {
2
+ "status": 1,
3
+ "name": "ShapeRepresentationNoAccess",
4
+ "message": "The org needs to be enabled for org shape before one can be created. test-org@example.com",
5
+ "exitCode": 1,
6
+ "commandName": "OrgShapeCreateCommand",
7
+ "stack": "ShapeRepresentationNoAccess: The org needs to be enabled for org shape before one can be created...",
8
+ "warnings": []
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "status": 0,
3
+ "result": {
4
+ "shapeId": "3SR5g00000001ABCAA",
5
+ "success": true,
6
+ "errors": []
7
+ },
8
+ "warnings": []
9
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "status": 0,
3
+ "result": {
4
+ "orgId": "00D5g00000001XyEAI",
5
+ "shapeIds": [
6
+ "3SR5g00000001ABCAA"
7
+ ],
8
+ "failures": []
9
+ },
10
+ "warnings": []
11
+ }