@salesforce/afv-skills 1.55.0 → 1.57.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 (274) hide show
  1. package/package.json +1 -1
  2. package/skills/agentforce-generate/SKILL.md +8 -0
  3. package/skills/agentforce-generate/references/actions-reference.md +2 -2
  4. package/skills/agentforce-generate/references/voice-modality-reference.md +51 -15
  5. package/skills/agentforce-generate/references/voice-telephony-cli.md +193 -0
  6. package/skills/agentforce-observe/SKILL.md +13 -9
  7. package/skills/agentforce-observe/references/ahm-alerts.md +193 -14
  8. package/skills/automation-sandbox-post-copy-config-generate/SKILL.md +24 -15
  9. package/skills/automation-sandbox-post-copy-config-generate/assets/config_template.json +11 -0
  10. package/skills/automation-sandbox-post-copy-config-generate/assets/json_schema.json +33 -1
  11. package/skills/automation-sandbox-post-copy-config-generate/references/configuration_catalog.md +32 -1
  12. package/skills/automation-sandbox-post-copy-configure/SKILL.md +75 -71
  13. package/skills/automation-sandbox-post-copy-configure/assets/scheduled_apex_template.apex +13 -0
  14. package/skills/automation-sandbox-post-copy-configure/examples/sample_scheduled_apex_config.json +13 -0
  15. package/skills/automation-sandbox-post-copy-configure/references/scheduled_apex_path.md +155 -0
  16. package/skills/automation-sandbox-post-copy-configure/scripts/build-scheduled-apex.mjs +62 -0
  17. package/skills/automation-sandbox-post-copy-configure/scripts/soql-escape-job-name.mjs +28 -0
  18. package/skills/commerce-b2b-open-code-components-integrate/SKILL.md +1 -1
  19. package/skills/commerce-b2b-open-code-components-replace/SKILL.md +16 -16
  20. package/skills/consumer-goods-accruals-datakit-deploy/SKILL.md +383 -0
  21. package/skills/consumer-goods-accruals-datakit-deploy/scripts/setup.js +324 -0
  22. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/00-check-prerequisites.js +63 -0
  23. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/01-download-static-resource.js +100 -0
  24. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/02-replace-org-id.js +46 -0
  25. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/03-deploy-metadata.js +46 -0
  26. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/04-deploy-engine.js +198 -0
  27. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/05-deploy-tpm-accruals.js +231 -0
  28. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/06-create-dataspace.js +82 -0
  29. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/07-deploy-accruals-reports.js +517 -0
  30. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/08-deploy-ui.js +416 -0
  31. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/09-completion.js +44 -0
  32. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/utils.js +514 -0
  33. package/skills/consumer-goods-sync-management-configure/SKILL.md +137 -0
  34. package/skills/consumer-goods-sync-management-configure/examples/scenarios.md +294 -0
  35. package/skills/consumer-goods-sync-management-configure/references/act1-setup-sync.md +333 -0
  36. package/skills/consumer-goods-sync-management-configure/references/act2-assign-users.md +324 -0
  37. package/skills/consumer-goods-sync-management-configure/references/act3-plan-verify.md +113 -0
  38. package/skills/consumer-goods-sync-management-configure/references/readiness-and-enablement.md +164 -0
  39. package/skills/consumer-goods-sync-management-configure/references/sync-management-app-install-backbone.md +159 -0
  40. package/skills/consumer-goods-sync-management-configure/references/transports-and-namespace.md +220 -0
  41. package/skills/consumer-goods-sync-management-configure/references/verify-and-smoke.md +175 -0
  42. package/skills/dx-devops-project-manage/SKILL.md +1 -1
  43. package/skills/dx-org-analyze/SKILL.md +0 -1
  44. package/skills/dx-org-analyze/scripts/collect_org_data.py +2 -2
  45. package/skills/dx-org-analyze/scripts/compute_diff.py +2 -4
  46. package/skills/dx-org-analyze/scripts/introspect_org.py +4 -40
  47. package/skills/dx-org-manage/SKILL.md +6 -50
  48. package/skills/dx-org-manage/examples/README.md +10 -16
  49. package/skills/dx-org-manage/references/scratch-org-create.md +1 -1
  50. package/skills/dx-org-manage/references/scratch-org-operations.md +1 -1
  51. package/skills/dx-org-shape-manage/SKILL.md +4 -3
  52. package/skills/education-cloud-domain-configure/references/gotchas-extended.md +1 -0
  53. package/skills/experience-accessibility-validate/SKILL.md +8 -5
  54. package/skills/experience-accessibility-validate/references/reviewers/sc-1-1-1-non-text-content.md +1 -4
  55. package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-1-i-lists.md +0 -4
  56. package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-1-ii-tables.md +20 -85
  57. package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-1-iii-form-labels.md +4 -4
  58. package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-1-iv-regions.md +0 -4
  59. package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-1-v-groups.md +2 -4
  60. package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-5-identify-input.md +0 -4
  61. package/skills/experience-accessibility-validate/references/reviewers/sc-1-4-3-contrast.md +4 -14
  62. package/skills/experience-accessibility-validate/references/reviewers/sc-2-1-1-keyboard.md +9 -5
  63. package/skills/experience-accessibility-validate/references/reviewers/sc-2-4-4-link-purpose.md +1 -4
  64. package/skills/experience-accessibility-validate/references/reviewers/sc-2-4-6-headings-labels.md +0 -4
  65. package/skills/experience-accessibility-validate/references/reviewers/sc-2-5-1-pointer-gestures.md +0 -4
  66. package/skills/experience-accessibility-validate/references/reviewers/sc-2-5-2-pointer-cancellation.md +0 -4
  67. package/skills/experience-accessibility-validate/references/reviewers/sc-2-5-3-label-in-name.md +0 -4
  68. package/skills/experience-accessibility-validate/references/reviewers/sc-2-5-7-dragging-movement.md +0 -4
  69. package/skills/experience-accessibility-validate/references/reviewers/sc-3-2-1-on-focus.md +0 -4
  70. package/skills/experience-accessibility-validate/references/reviewers/sc-3-2-2-on-input.md +1 -4
  71. package/skills/experience-accessibility-validate/references/reviewers/sc-3-3-1-error-identification.md +1 -4
  72. package/skills/experience-accessibility-validate/references/reviewers/sc-3-3-2-labels-instructions.md +1 -4
  73. package/skills/experience-accessibility-validate/references/reviewers/sc-3-3-3-error-suggestion.md +1 -4
  74. package/skills/experience-accessibility-validate/references/reviewers/sc-4-1-2-i-name.md +4 -5
  75. package/skills/experience-accessibility-validate/references/reviewers/sc-4-1-2-ii-role.md +1 -4
  76. package/skills/experience-accessibility-validate/references/reviewers/sc-4-1-2-iii-value.md +0 -4
  77. package/skills/experience-cms-content-generate/SKILL.md +1 -1
  78. package/skills/experience-cms-content-render/SKILL.md +3 -3
  79. package/skills/experience-cms-content-render/assets/angular/MediaRenderer.component.ts +35 -7
  80. package/skills/experience-cms-content-render/assets/angular/cms-item.service.ts +13 -4
  81. package/skills/experience-cms-content-render/assets/react/MediaRenderer.tsx +30 -8
  82. package/skills/experience-cms-content-render/assets/react/useCmsItem.ts +14 -4
  83. package/skills/experience-cms-content-render/assets/shared/cmsCore.types.ts +11 -1
  84. package/skills/experience-cms-content-render/assets/shared/externalRefs.ts +1 -1
  85. package/skills/experience-cms-content-render/assets/shared/mediaLabels.ts +62 -0
  86. package/skills/experience-cms-content-render/references/init-scaffold.md +13 -6
  87. package/skills/experience-content-media-stock-image-search/SKILL.md +0 -1
  88. package/skills/experience-lwc-accessibility-jest-run/SKILL.md +104 -25
  89. package/skills/experience-lwc-accessibility-jest-run/assets/jest.config.js +4 -0
  90. package/skills/experience-lwc-accessibility-jest-run/assets/sa11y-jest-setup.js +5 -0
  91. package/skills/experience-lwc-design-generate/SKILL.md +1 -1
  92. package/skills/experience-lwc-legacy-migrate/SKILL.md +212 -0
  93. package/skills/experience-lwc-legacy-migrate/assets/lo20-host-page-template.html +192 -0
  94. package/skills/experience-lwc-legacy-migrate/references/aura-to-lwc-completeness-checklist.md +188 -0
  95. package/skills/experience-lwc-legacy-migrate/references/lightning-out-2-system-reference.md +495 -0
  96. package/skills/experience-lwc-legacy-migrate/references/lightning-out-beta-to-2-migration.md +824 -0
  97. package/skills/experience-lwc-legacy-migrate/scripts/convert-lo-names.py +94 -0
  98. package/skills/experience-lwc-legacy-migrate/scripts/validate-lo20-page.py +133 -0
  99. package/skills/experience-ui-bundle-app-coordinate/SKILL.md +5 -5
  100. package/skills/experience-ui-bundle-features-generate/SKILL.md +65 -36
  101. package/skills/experience-ui-bundle-features-generate/references/angular/features.md +74 -0
  102. package/skills/experience-ui-bundle-features-generate/references/react/features.md +59 -0
  103. package/skills/experience-ui-bundle-features-generate/scripts/detect-framework.sh +73 -0
  104. package/skills/experience-ui-bundle-frontend-generate/SKILL.md +2 -2
  105. package/skills/experience-ui-bundle-metadata-generate/SKILL.md +26 -14
  106. package/skills/experience-ui-bundle-metadata-generate/references/angular-metadata-generate.md +37 -0
  107. package/skills/experience-ui-bundle-metadata-generate/references/react-metadata-generate.md +32 -0
  108. package/skills/experience-ui-bundle-metadata-generate/scripts/detect-framework.sh +73 -0
  109. package/skills/experience-ui-bundle-metadata-generate/scripts/verify-bundle-location.sh +30 -8
  110. package/skills/experience-ui-bundle-project-generate/SKILL.md +1 -1
  111. package/skills/field-service-data-capture-migrate/SKILL.md +391 -0
  112. package/skills/field-service-data-capture-migrate/assets/sample-legacy-flow.flow-meta.xml +163 -0
  113. package/skills/field-service-data-capture-migrate/references/architecture-notes.md +40 -0
  114. package/skills/field-service-data-capture-migrate/references/component-mapping.md +278 -0
  115. package/skills/field-service-data-capture-migrate/references/converter-builder-contract.md +183 -0
  116. package/skills/field-service-data-capture-migrate/references/dc-platform-rules.md +130 -0
  117. package/skills/field-service-data-capture-migrate/references/fsm-dc-capability-catalog.md +215 -0
  118. package/skills/field-service-data-capture-migrate/references/known-deploy-errors.md +36 -0
  119. package/skills/field-service-data-capture-migrate/references/migration-checklist.md +121 -0
  120. package/skills/field-service-data-capture-migrate/references/transformer-rules.md +132 -0
  121. package/skills/field-service-data-capture-migrate/scripts/analyze_flow.py +277 -0
  122. package/skills/field-service-data-capture-migrate/scripts/convert_to_dc_spec.py +1311 -0
  123. package/skills/field-service-data-capture-migrate/scripts/cud_analysis.py +402 -0
  124. package/skills/field-service-data-capture-migrate/scripts/deploy_flow.sh +230 -0
  125. package/skills/field-service-data-capture-migrate/scripts/discover_subflow_tree.py +230 -0
  126. package/skills/field-service-data-capture-migrate/scripts/flow_input.py +186 -0
  127. package/skills/field-service-data-capture-migrate/scripts/flow_xml_utils.py +39 -0
  128. package/skills/field-service-data-capture-migrate/scripts/fsm_dc_catalog.py +413 -0
  129. package/skills/field-service-data-capture-migrate/scripts/generate_summary.py +199 -0
  130. package/skills/field-service-data-capture-migrate/scripts/json_to_flow_xml.py +146 -0
  131. package/skills/field-service-data-capture-migrate/scripts/manual_review_flags.py +42 -0
  132. package/skills/field-service-data-capture-migrate/scripts/retrieve_flow_rest.sh +155 -0
  133. package/skills/field-service-data-capture-migrate/scripts/subflow_names.py +49 -0
  134. package/skills/field-service-data-capture-migrate/scripts/transform_flow.py +1661 -0
  135. package/skills/field-service-data-capture-migrate/scripts/validate_flow.sh +147 -0
  136. package/skills/field-service-data-capture-migrate/scripts/vendor/build_flow.py +1258 -0
  137. package/skills/integration-connectivity-connected-app-configure/SKILL.md +5 -5
  138. package/skills/integration-connectivity-generate/SKILL.md +10 -10
  139. package/skills/integration-connectivity-generate/scripts/configure-named-credential.sh +2 -2
  140. package/skills/life-sciences-fieldsalesrep-coordinate/SKILL.md +1 -1
  141. package/skills/life-sciences-fieldsalesrep-coordinate/references/orchestration-flow.md +1 -1
  142. package/skills/life-sciences-kam-coordinate/references/stage-5-data-and-plan-templates-overview.md +14 -1
  143. package/skills/mobile-apps-create/SKILL.md +1 -1
  144. package/skills/{platform-agentsetup-categories-fetch → platform-agenticsetup-categories-get}/SKILL.md +7 -7
  145. package/skills/platform-apex-test-generate/SKILL.md +1 -1
  146. package/skills/platform-apex-test-run/SKILL.md +1 -1
  147. package/skills/platform-custom-field-generate/SKILL.md +1 -1
  148. package/skills/platform-custom-lightning-type-generate/SKILL.md +1 -1
  149. package/skills/platform-custom-metadata-type-generate/SKILL.md +1 -1
  150. package/skills/platform-custom-object-generate/SKILL.md +1 -1
  151. package/skills/platform-custom-report-type-generate/SKILL.md +1 -1
  152. package/skills/platform-custom-setting-generate/SKILL.md +1 -1
  153. package/skills/platform-data-and-tooling-api-context-get/SKILL.md +1 -1
  154. package/skills/platform-data-manage/SKILL.md +10 -10
  155. package/skills/platform-flexipage-generate/SKILL.md +1 -1
  156. package/skills/platform-lightning-app-coordinate/SKILL.md +1 -1
  157. package/skills/platform-metadata-api-context-get/SKILL.md +1 -1
  158. package/skills/platform-metadata-retrieve/SKILL.md +1 -1
  159. package/skills/platform-permission-set-generate/SKILL.md +1 -1
  160. package/skills/platform-report-generate/SKILL.md +1 -1
  161. package/skills/platform-salesforce-connect-adapter-generate/SKILL.md +4 -4
  162. package/skills/platform-sandbox-configure/SKILL.md +108 -133
  163. package/skills/platform-sandbox-configure/references/api-response-shapes.md +39 -0
  164. package/skills/platform-sandbox-configure/references/definition-file-approach.md +73 -0
  165. package/skills/platform-sharing-owd-configure/SKILL.md +1 -1
  166. package/skills/platform-sharing-rules-generate/SKILL.md +1 -1
  167. package/skills/platform-soql-query/SKILL.md +1 -1
  168. package/skills/platform-value-set-generate/SKILL.md +1 -1
  169. package/skills/platform-widget-generate/SKILL.md +26 -18
  170. package/skills/platform-widget-generate/examples/formulas.json +191 -0
  171. package/skills/platform-widget-generate/references/widget-formulas.md +123 -0
  172. package/skills/platform-widget-generate/references/widget-meta-directives.md +4 -4
  173. package/skills/sales-call-scoring-configure/SKILL.md +318 -0
  174. package/skills/sales-call-scoring-configure/assets/best-practice-competencies.json +67 -0
  175. package/skills/sales-call-scoring-configure/assets/ootb-competencies.json +58 -0
  176. package/skills/sales-call-scoring-configure/references/admin-communication.md +79 -0
  177. package/skills/sales-call-scoring-configure/references/competency-crud.md +130 -0
  178. package/skills/sales-call-scoring-configure/scripts/create-competency.sh +166 -0
  179. package/skills/sales-call-scoring-configure/scripts/create-custom-competency.sh +166 -0
  180. package/skills/sales-call-scoring-configure/scripts/edit-competency.sh +185 -0
  181. package/skills/sales-call-scoring-configure/scripts/edit-custom-competency.sh +190 -0
  182. package/skills/sales-call-scoring-configure/scripts/enable-call-scoring.sh +436 -0
  183. package/skills/sales-call-scoring-configure/scripts/get-competency.sh +72 -0
  184. package/skills/sales-call-scoring-configure/scripts/get-custom-competency.sh +78 -0
  185. package/skills/sales-call-scoring-configure/scripts/install-best-practice-competencies.sh +223 -0
  186. package/skills/sales-call-scoring-configure/scripts/install-ootb-competencies.sh +237 -0
  187. package/skills/sales-call-scoring-configure/scripts/list-competencies.sh +99 -0
  188. package/skills/sales-call-scoring-configure/scripts/shared/auth.sh +116 -0
  189. package/skills/sales-call-scoring-configure/scripts/shared/cap.sh +86 -0
  190. package/skills/sales-call-scoring-configure/scripts/shared/soap.sh +267 -0
  191. package/skills/sales-call-scoring-configure/scripts/shared/soql.sh +25 -0
  192. package/skills/sales-call-scoring-configure/scripts/toggle-competency.sh +112 -0
  193. package/skills/sales-call-scoring-configure/scripts/toggle-custom-competency.sh +125 -0
  194. package/skills/sales-call-scoring-configure/scripts/verify-ootb-competencies.sh +116 -0
  195. package/skills/service-agentforce-human-escalation-configure/SKILL.md +4 -0
  196. package/skills/service-agentforce-human-escalation-configure/scripts/tests/_bootstrap.py +26 -6
  197. package/skills/service-agentforce-human-escalation-configure/scripts/tests/test_escalation_contracts.py +5 -4
  198. package/skills/service-concierge-portal-generate/references/portal-deploy-runbook.md +1 -0
  199. package/skills/service-de-channel-activate/SKILL.md +6 -5
  200. package/skills/service-de-channel-create/SKILL.md +3 -3
  201. package/skills/service-de-channel-routing-configure/SKILL.md +3 -3
  202. package/skills/service-de-channel-settings-configure/SKILL.md +195 -0
  203. package/skills/service-de-channel-settings-configure/references/channel-settings-facets.md +152 -0
  204. package/skills/{service-de-channel-consent-configure → service-de-channel-settings-configure}/references/gotchas.md +3 -3
  205. package/skills/{service-de-channel-consent-configure → service-de-channel-settings-configure}/references/language-keywords.md +4 -4
  206. package/skills/{service-de-channel-consent-configure → service-de-channel-settings-configure}/references/worked-examples.md +14 -14
  207. package/skills/service-de-headless-channel-configure/SKILL.md +6 -6
  208. package/skills/service-de-headless-channel-configure/references/worked-examples.md +1 -1
  209. package/skills/service-de-waba-integrate/SKILL.md +2 -1
  210. package/skills/service-digital-engagement-deployment-configure/SKILL.md +2 -0
  211. package/skills/service-digital-engagement-deployment-configure/scripts/check-api-version.sh +29 -0
  212. package/skills/service-email-to-case-configure/SKILL.md +1 -1
  213. package/skills/service-helpagent-coordinate/SKILL.md +3 -2
  214. package/skills/service-helpagent-coordinate/references/channel-voice.md +15 -4
  215. package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +49 -31
  216. package/skills/service-itsm-agentic-setup-agentforce-coordinate/examples/output-templates.md +71 -6
  217. package/skills/service-itsm-agentic-setup-agentforce-coordinate/scripts/verify-child-verdict.mjs +26 -4
  218. package/skills/service-itsm-agentic-setup-cmdb-access-assign/SKILL.md +35 -10
  219. package/skills/service-itsm-agentic-setup-cmdb-access-assign/references/mcp-invocation.md +25 -5
  220. package/skills/service-itsm-agentic-setup-cmdb-bundle-deploy/SKILL.md +1 -1
  221. package/skills/service-itsm-agentic-setup-cmdb-configure/SKILL.md +5 -5
  222. package/skills/service-itsm-agentic-setup-cmdb-configure/references/mcp-invocation.md +1 -1
  223. package/skills/service-itsm-agentic-setup-cmdb-coordinate/SKILL.md +2 -2
  224. package/skills/service-itsm-agentic-setup-cmdb-coordinate/examples/output-templates.md +1 -1
  225. package/skills/service-itsm-agentic-setup-cmdb-discovery-configure/SKILL.md +25 -15
  226. package/skills/service-itsm-agentic-setup-employee-agent-configure/SKILL.md +8 -5
  227. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/report-format.md +4 -2
  228. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/workflow-detail.md +1 -1
  229. package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/render-report.mjs +29 -16
  230. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/SKILL.md +8 -5
  231. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/report-format.md +4 -2
  232. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/workflow-detail.md +1 -1
  233. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/render-report.mjs +29 -16
  234. package/skills/service-itsm-agentic-setup-incident-management/SKILL.md +138 -68
  235. package/skills/service-itsm-agentic-setup-incident-management/examples/output-templates.md +31 -15
  236. package/skills/service-itsm-agentic-setup-incident-management/references/incident-persona-psg.md +156 -0
  237. package/skills/service-itsm-agentic-setup-incident-management/references/incident-preferences.md +148 -0
  238. package/skills/service-itsm-agentic-setup-incident-management/references/major-incident-management.md +162 -0
  239. package/skills/service-itsm-agentic-setup-incident-management/references/service-mgmt-privilege.md +149 -0
  240. package/skills/service-itsm-agentic-setup-incident-sla-configure/SKILL.md +103 -89
  241. package/skills/service-itsm-agentic-setup-incident-sla-configure/assets/attach-milestone.json +2 -2
  242. package/skills/service-itsm-agentic-setup-incident-sla-configure/assets/predefined-incident-policy.json +21 -39
  243. package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/milestone-patterns.md +3 -3
  244. package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/output-templates.md +18 -1
  245. package/skills/service-itsm-agentic-setup-incident-sla-configure/references/mcp-invocation.md +63 -37
  246. package/skills/service-omni-attribute-routing-configure/SKILL.md +53 -0
  247. package/skills/service-omni-attribute-routing-configure/references/api-notes.md +7 -0
  248. package/skills/service-omni-attribute-routing-configure/scripts/configure-and-report.sh +224 -0
  249. package/skills/service-omni-attribute-routing-configure/scripts/tests/test_attribute_routing_contracts.py +137 -0
  250. package/skills/service-omni-channel-inventory-analyze/SKILL.md +96 -0
  251. package/skills/service-omni-channel-inventory-analyze/references/api-notes.md +52 -0
  252. package/skills/service-omni-channel-inventory-analyze/scripts/analyze.sh +185 -0
  253. package/skills/service-omni-channel-inventory-analyze/scripts/tests/_bootstrap.py +84 -0
  254. package/skills/service-omni-channel-inventory-analyze/scripts/tests/test_inventory_analyze_contracts.py +141 -0
  255. package/skills/service-omni-channel-limits-analyze/SKILL.md +70 -0
  256. package/skills/service-omni-channel-limits-analyze/references/api-notes.md +22 -0
  257. package/skills/service-omni-channel-limits-analyze/scripts/analyze.sh +159 -0
  258. package/skills/service-omni-channel-limits-analyze/scripts/tests/_bootstrap.py +87 -0
  259. package/skills/service-omni-channel-limits-analyze/scripts/tests/test_limits_analyze_contracts.py +99 -0
  260. package/skills/service-omni-channel-setup-coordinate/SKILL.md +12 -20
  261. package/skills/service-omni-channel-setup-coordinate/scripts/integration-driver.sh +55 -5
  262. package/skills/service-omni-channel-setup-coordinate/scripts/tests/test_omni_contracts.py +38 -0
  263. package/skills/service-omni-command-center-analyze/SKILL.md +2 -2
  264. package/skills/service-omni-command-center-analyze/scripts/analyze.sh +3 -3
  265. package/skills/dx-org-manage/examples/snapshots/error_output.json +0 -9
  266. package/skills/dx-org-manage/examples/snapshots/success_output.json +0 -15
  267. package/skills/dx-org-manage/references/cli_flags.md +0 -67
  268. package/skills/dx-org-manage/references/creating-snapshot.md +0 -103
  269. package/skills/dx-org-manage/references/snapshot_usage.md +0 -74
  270. package/skills/experience-accessibility-validate/scripts/contrast-ratio.py +0 -153
  271. package/skills/experience-lwc-accessibility-jest-run/references/running-sa11y-jest-tests.md +0 -205
  272. package/skills/experience-ui-bundle-features-generate/scripts/verify-react-bundle.sh +0 -14
  273. /package/skills/experience-ui-bundle-features-generate/references/{conflict-resolution-schema.json → common/conflict-resolution-schema.json} +0 -0
  274. /package/skills/{platform-agentsetup-categories-fetch → platform-agenticsetup-categories-get}/references/api-response-schema.md +0 -0
@@ -2,9 +2,14 @@
2
2
  name: service-itsm-agentic-setup-incident-sla-configure
3
3
  description: "End-to-end Incident SLA setup for Service Cloud ITSM — creating a MilestoneType, an Incident-scoped SLA Policy (SlaProcess), attaching a Milestone with criteria, and wiring an Entitlement so Incidents derive an EntityMilestone with a computed TargetDate. Use when the user asks to configure SLA milestones on Incidents, create an SLA policy for Incident records, set up entitlement processes for ITSM, wire milestones so they appear on the Incident page, or enable SLA tracking for incident management. DO NOT TRIGGER when: the user asks about Case entitlements or Case SLA (not Incident), querying existing SLA policies without setup intent, general Entitlement sObject CRUD unrelated to Incident, or Milestone queries for reporting purposes only."
4
4
  metadata:
5
- version: "3.6"
5
+ version: "3.8"
6
6
  domains: ["Service"]
7
7
  minApiVersion: "67.0"
8
+ accessCheck:
9
+ - type: "userPerm"
10
+ value: "CustomizeApplication"
11
+ - type: "orgPerm"
12
+ value: "IncidentMgmt.orgHasITSMOrgPermission"
8
13
  relatedSkills:
9
14
  - "service-itsm-incident-mgmt-configure"
10
15
  - "service-itsm-incident-priority-configure"
@@ -22,48 +27,55 @@ allowed-tools: |
22
27
 
23
28
  # Configuring Incident SLA (End-to-End)
24
29
 
25
- Configures a complete **Incident SLA pipeline** for Service Cloud ITSM — the chain that derives an
26
- EntityMilestone (with a computed TargetDate) on every Incident with an Entitlement. Every operation
27
- runs through the Salesforce-hosted **`headless-360`** MCP server; the org is derived from the OAuth
28
- JWT — the skill never handles an org id, alias, or credentials. It also needs the org-level **SLA Management for IT
29
- Service** setup item (the Phase 0.5 gate — see below). Setup has four parts:
30
- **MilestoneType** (what you measure) → **SLA Policy** (SlaProcess scoped to Incident, entry/exit
31
- criteria) → **Milestone** (time trigger + filter criteria) → **Entitlement** (wired to an Account so
30
+ Configures a complete **Incident SLA pipeline** for Service Cloud ITSM — the chain deriving an
31
+ EntityMilestone (with a computed TargetDate) on every Incident with an Entitlement, all via the
32
+ Salesforce-hosted **`headless-360`** MCP server (org from the OAuth JWT). Requires the org-level
33
+ **SLA Management for IT Service** setup item (the Phase 0.5 gate).
34
+ Four parts: **MilestoneType** (what you measure) → **SLA Policy** (SlaProcess, Incident-scoped,
35
+ entry/exit criteria) → **Milestone** (time trigger + criteria) → **Entitlement** (Account-wired, so
32
36
  Incidents engage the SLA).
33
37
 
34
38
  ## Scope
35
39
 
36
- - **In scope**: Creating MilestoneTypes, SLA Policies (SlaProcess), Milestones with criteria,
37
- Entitlements, and verifying SLA engagement on Incident records — all via `headless-360` MCP.
38
- - **In scope — prerequisite**: checking and (on consent) enabling **SLA Management for IT Service**
39
- (Phase 0.5); halts if not fully enabled or consent declined.
40
- - **In scope — predefined vs custom** (Phase 0.6): offering the OOB *Standard Support for Incidents*
41
- policy (Incident only) vs a custom one.
40
+ - **In scope**: the four artifacts above + verifying SLA engagement on Incident records; gating
41
+ **SLA Management for IT Service** (Phase 0.5); offering the OOB *Standard Support for Incidents*
42
+ policy vs a custom one (Phase 0.6, Incident only) — all via `headless-360` MCP.
42
43
  - **Out of scope**: Case SLA/entitlements; Assignment Rules; Escalation Rules; Notification
43
44
  Rules; general Entitlement CRUD not related to Incident SLA; SLA reporting.
44
45
 
45
46
  ---
46
47
 
48
+ ## Output contract — applies to EVERY message
49
+
50
+ **Never print a raw Salesforce record Id** (15/18-char: `55…`, `550…`, `0ny…`, `00…`) — full **or
51
+ masked** (`557VW…R3XVYA0` still leaks) — in **any** user-facing text: interim narration *and* the
52
+ final report. Holds for artifacts you **created** *and* ones you **detected/reused** — name each (the
53
+ name you supplied on create, or matched on reuse), keep its Id internal (chaining only). Verifying or
54
+ matching via SOQL? Report the **verified attributes/name**, never the Id you queried by. One
55
+ exception: on a **halt** you may relay the raw error body verbatim even if it embeds an Id —
56
+ don't hand-edit it.
57
+
58
+ - **Wrong:** `SLA policy created (552VW…)` · `Incident created (0ny…)` · `First Response → 557VW…R3XVYA0` (reuse)
59
+ - **Right:** `Created SLA policy "Standard Support for Incidents"` · `reusing the existing First Response
60
+ milestone type` · the test Incident is "the test Incident" until Phase 3, then its `IncidentNumber`;
61
+ milestones by `MilestoneType` name.
62
+
63
+ ---
64
+
47
65
  ## Routes at a glance
48
66
 
49
67
  Reads → `mcp__headless-360__dispatch_readonly`, writes → `mcp__headless-360__dispatch`. Both take raw
50
- HTTP: `{"url","method","body"?,"query_params"?}` — **not** `{operation_id, arguments}`. **Response
51
- envelope**: standard REST — read `body` from `{status_code, body}`. The full route table — create
52
- MilestoneType / SLA Policy / Milestone, Entitlement, BusinessHours, test Incident, the Phase 0.5
53
- feature calls, and the `create-milestone-action` op — with request/response shapes lives in
54
- `references/mcp-invocation.md`.
68
+ HTTP `{"url","method","body"?,"query_params"?}` — **not** `{operation_id, arguments}`; read `body`
69
+ from `{status_code, body}`. Full route table with request/response shapes: `references/mcp-invocation.md`.
55
70
 
56
71
  ---
57
72
 
58
73
  ## Clarifying Questions
59
74
 
60
- Ask only what you cannot infer from context (pre-populate; note "(from
61
- conversation)"). **Resolve the Phase 0.5 gate first.**
62
-
63
- - **Which org?** `headless-360` binds to the current OAuth session; confirm the target before mutating.
64
- - **Milestone strategy?** See Phase 1.4 (skipped per its skip conditions).
65
- - **Target Account?** For the Entitlement.
66
- - **Milestone criteria?** Default `Status != Closed`, plus pattern-specific filters.
75
+ Ask only what you cannot infer from context (pre-populate; note "(from conversation)"). **Resolve the
76
+ Phase 0.5 gate first.** Then: **which org?** (`headless-360` binds to the current OAuth session —
77
+ confirm before mutating); **milestone strategy?** (Phase 1.4); **target Account?** (for the
78
+ Entitlement); **milestone criteria?** (default `Status != Closed` + pattern-specific filters).
67
79
 
68
80
  Default suggestion: SLA Policy `Incident SLA Policy`, default BusinessHours, the Account the user
69
81
  picks, Entitlement `today → today + 1 year`, milestone strategy resolved per Phase 1.4.
@@ -81,8 +93,7 @@ Each Phase 1 read carries a **skip-if-already-known** clause: skip only when the
81
93
  produced **this session** by a successful `dispatch_readonly` on the current org and unwritten since —
82
94
  a user statement is never cache-eligible. Cacheable: master Incident Mgmt pref (step 1, only if
83
95
  `ENABLED`), SLA feature + Versioning (Phase 0.5), Incident describe (3), `BusinessHoursId` (4), Account
84
- id (5), SLA Connect ops indexed (2). **When in doubt, re-check** — a wrong skip on a live write is
85
- worse than a re-read.
96
+ id (5), SLA Connect ops (2). **When in doubt, re-check.**
86
97
 
87
98
  ### Phase 0.5 — SLA Management for IT Service prerequisite gate
88
99
 
@@ -114,19 +125,16 @@ Once the gate passes, offer the OOB policy **before** any custom-flow questions.
114
125
  - **Already present** → **no re-seed** (no idempotency), no custom upsell; report it is seeded.
115
126
  **If warn/escalate actions were requested → resolve the named existing milestones → Phase 2.5 →
116
127
  Phase 3 verify → STOP** (attach actions even though the policy was already seeded).
117
- 2. **Fork** — one `AskUserQuestion`, **Predefined listed first / recommended**: use Salesforce's
118
- predefined Incident SLA policy (*Standard Support for Incidents* — priority-tiered milestones)
119
- **or** build a custom one. One-way note: predefined seeds an
120
- **active** policy + Entitlement, no un-seed path (manual delete only).
128
+ 2. **Fork** — one `AskUserQuestion`, **Predefined first / recommended**: Salesforce's predefined
129
+ Incident policy (*Standard Support for Incidents* — priority-tiered) **or** a custom one. One-way:
130
+ predefined seeds an **active** policy + Entitlement, no un-seed path (manual delete only).
121
131
  - **Predefined →** resolve BusinessHours + Account (Phase 1 steps 4–5) → **Phase 2-OOB** → **Phase
122
132
  2.5** (if actions requested) → Phase 3 verify → **STOP**.
123
133
  - **Custom →** existing Phase 1 → 1.4 → 1.5 → 2 → 3, unchanged.
124
134
 
125
- **MUST read `references/mcp-invocation.md` (Predefined Incident Policy) before seeding.**
126
-
127
135
  ### Phase 1 — Preflight & discovery
128
136
 
129
- **On any `401` / `403` / `404` from a step below, halt and surface the raw error** — the org/client is misconfigured. `401` → MCP auth (ECA not propagated / expired token). `403` → user perm OR ITSM Incident Management license/pref missing (`ITSMIncidentMgmtEnabled` / `IncidentMgmt.orgHasITSMOrgPermission`). `404` → `headless-360` not activated OR Entitlement Management not enabled for Incident.
137
+ **On any `401` / `403` / `404` from a step below, halt and surface the raw error** — the org/client is misconfigured. `401` → MCP auth (ECA/token). `403` → user perm OR ITSM Incident Management license/pref missing. `404` → `headless-360` not activated OR Entitlement Management not enabled for Incident.
130
138
 
131
139
  1. **Master Incident Management pref — direct read** *(skip conditions in Phase 0)*.
132
140
  `dispatch_readonly` `GET .../connect/setup/discovery/features`, filter `features[]` to the **exact**
@@ -183,61 +191,68 @@ selection expands to N creates in Phase 2 step 10 (one POST per milestone, `orde
183
191
  Priority-tiered / Custom to "N milestones"). **Skip the `AskUserQuestion`** (but still narrate the
184
192
  plan before dispatch) when up-front authorization was granted (note `(authorized in prompt)`), the
185
193
  branch is a no-op, or it was already confirmed in conversation (note `(confirmed in conversation)`);
186
- otherwise require an explicit "yes" before Phase 2. Everything before this step is read-only;
187
- everything after mutates the org.
194
+ otherwise require an explicit "yes" before Phase 2. Everything after this step mutates the org.
188
195
 
189
196
  ### Phase 2 — Create SLA Artifacts (exact order — each depends on the previous)
190
197
 
198
+ Capture each returned `id` for chaining only.
199
+
191
200
  8. **Create MilestoneType(s)** — `POST /connect/sla-management/milestone-types`. One POST per
192
201
  distinct MilestoneType required by the strategy. Reuse a single MilestoneType across milestones
193
202
  that share a name (Priority-tiered "First Response" reuses one MilestoneType across all four
194
203
  milestones); create separate MilestoneTypes for distinct concerns (Response + Resolution =
195
- two MilestoneTypes; Escalation ladder = three). Capture each `id`.
204
+ two MilestoneTypes; Escalation ladder = three). Capture each `id`. A feature enable pre-seeds a
205
+ default MilestoneType catalog; a detected/reused one is narrated by name only (Output contract:
206
+ name, never `→ <Id>`).
196
207
  9. **Create SLA Policy** — `POST /connect/sla-management/sla-policies` with `processType='Incident'`
197
208
  and the `businessHourId` from Phase 1. Capture `id`. **The response echoes nulls — verify via
198
- SOQL, not the response body.**
209
+ SOQL, not the body; narrate the policy by name, never the Id** (Output contract).
199
210
  10. **Attach Milestone(s)** — load the request-body template from `assets/attach-milestone.json`
200
211
  and, for each milestone in the strategy, populate `milestoneTypeId`, `timeTrigger`, `order`
201
212
  (1..N in the strategy's order) and any per-pattern `filterItems` additions from
202
213
  `examples/milestone-patterns.md`, then `POST /connect/sla-management/sla-policies/<slaId>/milestones`.
203
214
  Each `milestoneCriteria[]` item needs `milestoneAgreementType` (`SLA`/`OLA`) and
204
215
  `filterType: RuleFilter`. Do **not** put `slaProcessId` in the body — carried by the path.
205
- Multi-milestone strategies dispatch once per milestone; on any milestone POST failure, halt
206
- and surface the raw error — do not continue with a half-attached policy.
216
+ One POST per milestone; on any failure, halt and surface the raw error (no half-attached policy) —
217
+ narrate each by `MilestoneType` name, never its Id/`triggerId` (Output contract).
207
218
  11. **Create Entitlement** — `POST /sobjects/Entitlement` linking the resolved Account (from Phase 1
208
219
  step 5), the SLA Policy (`SlaProcessId`), and Business Hours. For immediate engagement, backdate
209
- `StartDate` to yesterday.
220
+ `StartDate` to yesterday — narrate it by name/Account, never its Id (Output contract).
210
221
 
211
222
  ### Phase 2-OOB — Seed the Predefined Incident Policy
212
223
 
213
- Reached only from Phase 0.6 Predefined (replaces Phase 1.4/1.5/2). Follow the seed recipe
214
- in `references/mcp-invocation.md` (**Predefined Incident Policy**) with the template in
215
- `assets/predefined-incident-policy.json` — it uses the **Phase 2 routes** (2 MilestoneTypes → SLA
216
- Policy `active:true` → 8 priority-tiered milestones → Entitlement), validates each `Priority`/`Status`
217
- against the live picklist, and avoids the Connect activate PATCH. Then run **Phase 2.5** (if actions
218
- requested), then **Phase 3** (Critical test Incident), and **STOP** — no *proactive* custom offer.
224
+ Reached only from Phase 0.6 Predefined (replaces Phase 1.4/1.5/2). Follow the seed recipe in
225
+ `references/mcp-invocation.md` (**Predefined Incident Policy**) with `assets/predefined-incident-policy.json`
226
+ — it uses the **Phase 2 routes** (2 MilestoneTypes → SLA Policy `active:true` → 6 milestones,
227
+ each `startTimeBasedOn: MILESTONE_CRITERIA` → Entitlement), validates each `Priority`/`Status`
228
+ against the live picklist, and avoids the Connect activate PATCH. Then Phase 2.5 (if actions requested), Phase 3 (a non-lowest tier — Moderate/Low, not Critical),
229
+ and **STOP** — no *proactive* custom offer.
219
230
 
220
231
  ### Phase 2.5 — Milestone Actions (optional: Warn / Escalate)
221
232
 
222
233
  After milestones exist (Phase 2 or 2-OOB), **only if** the user asked to warn/escalate/notify: apply
223
- the requested checkpoint(s) to **every milestone the user named** (not just one), computing each
224
- offset from that milestone's own target. Map "warn at X%" → an offset *before* target, "on breach" →
234
+ the requested checkpoint(s) to **every milestone the user named** (not just one), each offset computed
235
+ from that milestone's own target. Map "warn at X%" → an offset *before* target, "on breach" →
225
236
  *at/after* it; **confirm the full set before writing** (up-front auth waives the re-ask; narrate it
226
237
  regardless — no headless delete), then, per milestone, delegate to headless
227
238
  **`create-milestone-action`** (`discover` → `describe` → `dispatch`). **Confirm each from the response
228
239
  body** (`success` + non-empty `actionMappings`; a *timed* checkpoint also returns a `triggerId`), never
229
- the `201`. Formula, roles, proven body, defaults, and the IST business-hours note:
240
+ the `201`. Narrate each by its **`MilestoneType` name**, never the milestone Id/`triggerId` (Output
241
+ contract). Formula, roles, proven body, defaults, IST business-hours note:
230
242
  `references/mcp-invocation.md` (Milestone Actions).
231
243
 
232
244
  ### Phase 3 — Verify
233
245
 
234
246
  12. **Verify the SLA Policy** — SOQL on `SlaProcess` (do not trust the create response).
235
- 13. **Create a test Incident** with `EntitlementId` set to the new Entitlement. For Priority-tiered
236
- strategies, set a `Priority` that matches at least one milestone's criteria (or one test Incident
237
- per Priority) — otherwise no `EntityMilestone` spawns even with the policy wired correctly.
238
- 14. **Verify engagement** — SOQL confirming `Incident.SlaStartDate` is populated and the expected
239
- `EntityMilestone` row(s) exist with correct `TargetDate`(s) — one per milestone whose criteria
240
- the Incident satisfies.
247
+ 13. **Create a test Incident** with `EntitlementId` set. For Priority-tiered / OOB strategies, test a
248
+ tier **other than the lowest `order`** — Critical is order-1, the collapse fallback, so it can't
249
+ detect a dropped criterion. If a direct `Priority`
250
+ insert is rejected (it may be matrix-derived), set `Urgency`/`Impact` to derive the tier. Narrate
251
+ by `IncidentNumber`, never the Id.
252
+ 14. **Verify engagement + tiering** — SOQL that `Incident.SlaStartDate` is populated and the
253
+ `EntityMilestone` lands on the **correct tier** (a Moderate/Low Incident → the 240/960 tier, NOT
254
+ 30/120). The create `201` always echoes `milestoneCriteria:[]`; only this runtime read proves the
255
+ ACTIVE criteria persisted.
241
256
  15. **Report results** using the output format below.
242
257
 
243
258
  ---
@@ -246,42 +261,42 @@ the `201`. Formula, roles, proven body, defaults, and the IST business-hours not
246
261
 
247
262
  | Constraint | Rationale |
248
263
  |-----------|-----------|
249
- | Gate on **SLA Management for IT Service** first (Phase 0.5) — one enable turns on the feature **and**, one-way, **SLA Versioning**; **two separate acks (master, then permanence) — never merged**; decline / blocked / verify-fail → **HALT, no fall-through**; re-read + report real state | Versioning can't be undone; writes don't confirm state |
250
- | Offer the **predefined (OOB)** policy first (Phase 0.6, Incident only); detect before seed; if chosen, seed → verify → **STOP** (no custom upsell) | OOB seed has no server idempotency (re-seeding duplicates) |
251
- | Discover + describe before any mutation | Catches a missing SLA surface / disabled Incident Management early |
252
- | Ask (via `AskUserQuestion`) which milestone strategy to use — don't silently default to Single | Real ITSM policies usually have >1 milestone; a silent default hides it |
253
- | Reuse one MilestoneType per shared name; create a distinct one per distinct concern | The runtime keys milestones by MilestoneType — sharing collapses distinct concerns |
254
- | For multi-milestone strategies, halt on any milestone POST failure (no half-attached policy) | Partial attach diverges from the confirmed plan |
255
- | Priority-tiered: validate every `Priority` value against the live Incident picklist before dispatch | The server accepts any string on `filterItems.value` — an unknown value silently makes the milestone dead code |
256
- | Entitlement is standard sObject DML (not Connect API); `StartDate` controls status (future = Inactive) | Not part of the `/connect/sla-management/` surface |
257
- | Verify SLA Policy via SOQL, not the create response | The create response echoes nulls |
258
- | Never show record IDs **in any message, incl. interim narration** — the test Incident by **IncidentNumber**, milestones by **MilestoneType name**, never the 15/18-char Id; keep `AskUserQuestion` labels customer-facing (no "demo", "the skill", internal defaults) | Leaked Ids and internal/demo framing look unprofessional |
259
-
260
- Additional API quirks (payload rules, operator enum, missing-criteria error): `references/mcp-invocation.md`.
264
+ | Gate **SLA Management** first (Phase 0.5) — one enable turns on the feature **and**, one-way, **SLA Versioning**; **two separate acks (master, then permanence) — never merged**; decline/blocked/verify-fail → **HALT**; re-read + report real state | Versioning is irreversible; writes don't confirm state |
265
+ | Offer **predefined (OOB)** first (Phase 0.6, Incident only); detect before seed; if chosen, seed → verify → **STOP** (no custom upsell) | OOB seed isn't idempotent — re-seed duplicates |
266
+ | `discover` + `describe` before any mutation | Catches a missing SLA surface / disabled Incident Mgmt early |
267
+ | Ask (`AskUserQuestion`) the milestone strategy — never silently default to Single | Real ITSM policies have >1 milestone |
268
+ | Reuse one MilestoneType per shared name; a distinct one per distinct concern | Runtime keys milestones by MilestoneType |
269
+ | Multi-milestone: halt on any milestone POST failure (no half-attached policy) | Partial attach diverges from the confirmed plan |
270
+ | Priority-tiered: validate every `Priority` value against the live picklist before dispatch | Server accepts any string → an unknown value is a dead milestone |
271
+ | Entitlement is standard sObject DML; `StartDate` controls status (future = Inactive) | Not on the `/connect/sla-management/` surface |
272
+ | **No record Id in any message** (see Output contract, incl. reused artifacts); `AskUserQuestion` labels customer-facing (no "demo"/internal defaults) | The #1 retest failure; leaked Ids / internal framing look unprofessional |
273
+
274
+ Additional API quirks: `references/mcp-invocation.md`.
261
275
 
262
276
  ---
263
277
 
264
278
  ## Verification Checklist
265
279
 
266
- - [ ] **SLA Management gated (Phase 0.5)** — feature + SLA Versioning both on, only after the **permanence ack** (separate from the master ack); reported state matches a re-read, not the write. If it couldn't be enabled (declined / blocked / verify-fail), the run **HALTED** before Phase 0.6/1 — no artifacts.
267
- - [ ] **Predefined vs Custom offered (Phase 0.6)** — with the feature ON, the OOB *Standard Support for Incidents* policy was offered first; if it existed, reported not re-seeded; if chosen, seeded (2 MilestoneTypes + 8 tiered milestones + Entitlement), verified, **no** custom offer followed.
268
- - [ ] Master Incident Mgmt pref (exact `service-cloud-itsm-incident`) confirmed `ENABLED` via a live read, or delegated to `service-itsm-incident-mgmt-configure` when `NOT_ENABLED` (`NOT_AVAILABLE` → HALT) — not a user assertion, not a look-alike.
269
- - [ ] `discover`/`describe` (or the Incident describe) confirmed the SLA Connect operations.
280
+ - [ ] **SLA Management gated (Phase 0.5)** — feature + SLA Versioning both on, only after the **permanence ack** (separate from the master ack); reported state = a re-read, not the write. Declined / blocked / verify-fail → **HALTED** before Phase 0.6/1, no artifacts.
281
+ - [ ] **Predefined vs Custom offered (Phase 0.6)** — with the feature ON, OOB *Standard Support for Incidents* offered first; if present, reported not re-seeded; if chosen, seeded (2 MilestoneTypes + 6 milestones + Entitlement), verified, **no** custom offer after.
282
+ - [ ] Master Incident Mgmt pref (exact `service-cloud-itsm-incident`) `ENABLED` via live read, or delegated when `NOT_ENABLED` (`NOT_AVAILABLE` → HALT) — not a user assertion, not a look-alike.
283
+ - [ ] `discover`/`describe` confirmed the SLA Connect ops.
270
284
  - [ ] Incident describe returned 200 with `EntitlementId`, `SlaStartDate`, `SlaExitDate`.
271
285
  - [ ] Default BusinessHours found.
272
- - [ ] **Milestone strategy resolved** — via a Phase 1.4 skip condition OR `AskUserQuestion`; for Priority-tiered / Custom, every `Priority`/criteria value was validated against the live Incident picklist before dispatch.
273
- - [ ] **Configuration confirmed OR skip condition met** (up-front authorization / no-op / prior confirmation / explicit "yes"); the resolved plan (org, SLA name, account, entitlement range, per-milestone list) was narrated before Phase 2.
274
- - [ ] Artifacts created in order (MilestoneType(s) → Policy → Milestone(s) → Entitlement); each POST 201; any milestone POST failure halted the run (no partial attach). Trivial on no-op runs.
286
+ - [ ] **Milestone strategy resolved** — Phase 1.4 skip condition OR `AskUserQuestion`; Priority-tiered / Custom validated every `Priority`/criteria value against the live picklist before dispatch.
287
+ - [ ] **Configuration confirmed OR skip condition met** (up-front auth / no-op / prior confirmation / "yes"); the resolved plan (org, SLA name, account, entitlement range, per-milestone list) narrated before Phase 2.
288
+ - [ ] Artifacts created in order (MilestoneType(s) → Policy → Milestone(s) → Entitlement), each POST 201; any milestone POST failure halted (no partial attach). Trivial on no-op.
275
289
  - [ ] **Milestone actions (Phase 2.5)** — if requested, attached to **every** named milestone; each confirmed from `body.success` + `actionMappings`, not the `201`; full set narrated before write.
276
- - [ ] SLA Policy verified via SOQL, not the create response (on no-op, the Phase-1 read is the verification).
277
- - [ ] Test Incident has `SlaStartDate` populated (Priority chosen to match a criterion for Priority-tiered) and ≥1 EntityMilestone with the correct TargetDate; expected milestone(s) present for multi-milestone. Skip on no-op.
278
- - [ ] Before/after + summary shown; on no-op, the summary states the pre-existing configuration verbatim and reports "no changes made".
290
+ - [ ] SLA Policy verified via SOQL, not the create response (no-op: the Phase-1 read is the verification).
291
+ - [ ] Test Incident has `SlaStartDate` populated (Priority matched for Priority-tiered) and ≥1 EntityMilestone with correct TargetDate; expected milestone(s) present. Skip on no-op.
292
+ - [ ] **No record Id in any message** — interim narration *and* final report; artifacts by name, test Incident by `IncidentNumber` (see Output contract).
293
+ - [ ] Before/after + summary shown; no-op states the pre-existing config verbatim + "no changes made".
279
294
 
280
295
  ---
281
296
 
282
297
  ## Output Format
283
298
 
284
- See `examples/output-templates.md` for the canonical failure / single-milestone success / multi-milestone success templates. Fill in the placeholders as-is. No files are produced — the skill mutates org configuration in place through headless-360 MCP dispatch.
299
+ Use the `examples/output-templates.md` templates; fill placeholders as-is. The success report must carry, unambiguously: the **SLA Policy**; **every milestone** by MilestoneType name + time + criteria; the **Entitlement → Account**; **every requested action** by milestone + Warning/Violation role + offset + how confirmed; a **Verification** section (SOQL-confirmed policy + test-Incident `SlaStartDate`/EntityMilestones, or an honest partial note); created-vs-reused per artifact; a **scope line** (only the Incident SLA). No record Id anywhere.
285
300
 
286
301
  ---
287
302
 
@@ -289,18 +304,17 @@ See `examples/output-templates.md` for the canonical failure / single-milestone
289
304
 
290
305
  | File | When to read |
291
306
  |------|--------------|
292
- | `references/mcp-invocation.md` | Every phase — exact `mcp__headless-360__*` call shapes, payload templates, response envelope, discovery, and gotchas (filter-operator enum, v67 routes, entitlement behavior) |
293
- | `examples/milestone-patterns.md` | Phase 1.4 — the five milestone strategies with default times, criteria, MilestoneType reuse rules, and per-pattern filter-item extensions |
294
- | `examples/output-templates.md` | Output Format — canonical failure / single-milestone success / multi-milestone success templates |
295
- | `assets/attach-milestone.json` | Phase 2 step 10 — request-body template for the milestone POST (`sla-policies/<slaId>/milestones`); substitute `milestoneTypeId`, `businessHoursId`, `timeTrigger`, `order`; append per-pattern `filterItems` |
296
- | `assets/predefined-incident-policy.json` | Phase 0.6 / Phase 2-OOB — the OOB *Standard Support for Incidents* seed template (policy + 2 MilestoneTypes + 8 priority-tiered milestones) |
297
- | `assets/attach-milestone-action.json` | Phase 2.5 — Warn/Escalate milestone-action body templates (Field Update); pair with `references/mcp-invocation.md` (Milestone Actions) |
307
+ | `references/mcp-invocation.md` | Every phase — call shapes, templates, response envelope, discovery, gotchas |
308
+ | `examples/milestone-patterns.md` | Phase 1.4 — the five strategies: times, criteria, MilestoneType reuse, filter extensions |
309
+ | `assets/attach-milestone.json` | Phase 2 step 10 — milestone POST body; substitute ids/timeTrigger/order; append `filterItems` |
310
+ | `assets/predefined-incident-policy.json` | Phase 0.6 / 2-OOB — OOB seed template (policy + 2 MilestoneTypes + 6 milestones, Moderate+Low merged) |
311
+ | `assets/attach-milestone-action.json` | Phase 2.5 — Warn/Escalate action body templates (Field Update); pair with mcp-invocation.md (Milestone Actions) |
312
+ | `examples/output-templates.md` | Output Format — success/partial report templates; fill placeholders, no record Id |
298
313
 
299
314
  ---
300
315
 
301
316
  ## Related Skills
302
317
 
303
318
  The priority matrix (Impact × Urgency → Priority) is separate — `service-itsm-incident-priority-configure`;
304
- if a Priority-tiered strategy is requested but `Incident.Priority` is missing values, direct the user
305
- there first. Other adjacent ITSM flows (Major Incident Mgmt, custom fields on Incident/Problem/ChangeRequest)
306
- are out of scope.
319
+ if a Priority-tiered strategy is requested but `Incident.Priority` lacks values, direct the user there
320
+ first. Other ITSM flows (Major Incident Mgmt, custom fields) are out of scope.
@@ -3,10 +3,10 @@
3
3
  "businessHoursId": "<businessHoursId resolved in Phase 1>",
4
4
  "timeTrigger": 60,
5
5
  "order": 1,
6
- "startTimeBasedOn": "SlaProcessCreatedDate",
6
+ "startTimeBasedOn": "MILESTONE_CRITERIA",
7
7
  "milestoneCriteria": [
8
8
  {
9
- "milestoneState": "Active",
9
+ "milestoneState": "ACTIVE",
10
10
  "milestoneAgreementType": "SLA",
11
11
  "filterType": "RuleFilter",
12
12
  "filterItems": [
@@ -1,5 +1,5 @@
1
1
  {
2
- "_comment": "Out-of-box 'Standard Support for Incidents' predefined SLA policy — the exact template Salesforce ITSM seeds when a customer clicks 'Create Predefined Policies' in Setup (Incident process type only). Source of truth for Phase 2-OOB. This is a DATA template, not a ready-to-POST body: substitute <businessHoursId> / <AccountId> at runtime and translate the criteria per the recipe in references/mcp-invocation.md (Predefined Incident Policy). Modeled on core service-itsm-impl default-sla-policies/incident.json + shared_core_ui_labels/incident-management.xml (DefaultSeededSla). The core template groups Moderate+Low into one Priority In[Moderate,Low] tier (6 milestones); this template expresses it as 8 milestones (Moderate and Low as separate Priority Equals rows) because the public /connect/sla-management milestone-criteria route has no In operator — behavior-equivalent, and this is the shape the headless seed produces.",
2
+ "_comment": "Out-of-box 'Standard Support for Incidents' predefined SLA policy — a faithful replica of what Salesforce ITSM seeds when a customer clicks the Incident checkbox under 'Create Predefined Policies' in Setup (Incident process type only). Source of truth for Phase 2-OOB. This is a DATA template, not a ready-to-POST body: substitute <businessHoursId> / <AccountId> at runtime and translate the criteria per the recipe in references/mcp-invocation.md (Predefined Incident Policy). Byte-for-byte modeled on core service-itsm-impl default-sla-policies/incident.json (the resource DefaultSlaServiceImpl reads and seeds) + shared_core_ui_labels/incident-management.xml (DefaultSeededSla): 6 milestones — Critical (30/120) and High (60/240) each Priority Equals, plus a MERGED Moderate-or-Low tier (240/960) whose ACTIVE criterion is a Priority OR (filterLogic '1 OR 2' over two Equals rows, Moderate + Low). NOTE: the core template also carries a per-tier CANCEL criterion, but the public /connect/sla-management route has NO 'CANCEL' milestoneState (valid states: ACTIVE, COMPLETE, PAUSE, UNPAUSE) — so this replica OMITS cancelWhen. The ACTIVE Priority criterion alone gates engagement (an off-tier Incident never matches), making CANCEL redundant. Every milestone uses startTimeBasedOn MILESTONE_CRITERIA (the OOB timer starts when the milestone criteria first match, NOT from the SLA-process created date). WHY REPLICATE INSTEAD OF CALLING THE UI'S OWN API: the checkbox invokes DefaultSlaPolicyController.saveSelectedOptions, an @AuraEnabled controller (core/ui-service-itsm-components) whose only caller of DefaultSlaService.createDefaultSlaPolicies is that Aura action — there is NO public REST/Connect wrapper, so the headless MCP (which dispatches REST/Connect) cannot invoke the seeder directly; it reproduces the seeder's exact output via the public /connect/sla-management routes.",
3
3
 
4
4
  "policy": {
5
5
  "name": "Standard Support for Incidents",
@@ -27,72 +27,54 @@
27
27
  "milestoneType": "Acknowledge Within",
28
28
  "timeTrigger": 30,
29
29
  "priorityTier": "Critical",
30
+ "startTimeBasedOn": "MILESTONE_CRITERIA",
30
31
  "activeWhen": { "field": "Priority", "operator": "Equals", "value": "Critical" },
31
- "completeWhen": { "field": "Status", "operator": "NotEqual", "value": "New" },
32
- "cancelWhen": { "field": "Priority", "operator": "NotEqual", "value": "Critical" }
32
+ "completeWhen": { "field": "Status", "operator": "NotEqual", "value": "New" }
33
33
  },
34
34
  {
35
35
  "order": 2,
36
36
  "milestoneType": "Resolve Within",
37
37
  "timeTrigger": 120,
38
38
  "priorityTier": "Critical",
39
+ "startTimeBasedOn": "MILESTONE_CRITERIA",
39
40
  "activeWhen": { "field": "Priority", "operator": "Equals", "value": "Critical" },
40
- "completeWhen": { "field": "Status", "filterLogic": "1 OR 2 OR 3", "rows": [ { "operator": "Equals", "value": "Resolved" }, { "operator": "Equals", "value": "Completed" }, { "operator": "Equals", "value": "Closed" } ] },
41
- "cancelWhen": { "field": "Priority", "operator": "NotEqual", "value": "Critical" }
41
+ "completeWhen": { "field": "Status", "filterLogic": "1 OR 2 OR 3", "rows": [ { "operator": "Equals", "value": "Resolved" }, { "operator": "Equals", "value": "Completed" }, { "operator": "Equals", "value": "Closed" } ] }
42
42
  },
43
43
  {
44
44
  "order": 3,
45
45
  "milestoneType": "Acknowledge Within",
46
46
  "timeTrigger": 60,
47
47
  "priorityTier": "High",
48
+ "startTimeBasedOn": "MILESTONE_CRITERIA",
48
49
  "activeWhen": { "field": "Priority", "operator": "Equals", "value": "High" },
49
- "completeWhen": { "field": "Status", "operator": "NotEqual", "value": "New" },
50
- "cancelWhen": { "field": "Priority", "operator": "NotEqual", "value": "High" }
50
+ "completeWhen": { "field": "Status", "operator": "NotEqual", "value": "New" }
51
51
  },
52
52
  {
53
53
  "order": 4,
54
54
  "milestoneType": "Resolve Within",
55
55
  "timeTrigger": 240,
56
56
  "priorityTier": "High",
57
+ "startTimeBasedOn": "MILESTONE_CRITERIA",
57
58
  "activeWhen": { "field": "Priority", "operator": "Equals", "value": "High" },
58
- "completeWhen": { "field": "Status", "filterLogic": "1 OR 2 OR 3", "rows": [ { "operator": "Equals", "value": "Resolved" }, { "operator": "Equals", "value": "Completed" }, { "operator": "Equals", "value": "Closed" } ] },
59
- "cancelWhen": { "field": "Priority", "operator": "NotEqual", "value": "High" }
59
+ "completeWhen": { "field": "Status", "filterLogic": "1 OR 2 OR 3", "rows": [ { "operator": "Equals", "value": "Resolved" }, { "operator": "Equals", "value": "Completed" }, { "operator": "Equals", "value": "Closed" } ] }
60
60
  },
61
61
  {
62
62
  "order": 5,
63
63
  "milestoneType": "Acknowledge Within",
64
64
  "timeTrigger": 240,
65
- "priorityTier": "Moderate",
66
- "activeWhen": { "field": "Priority", "operator": "Equals", "value": "Moderate" },
67
- "completeWhen": { "field": "Status", "operator": "NotEqual", "value": "New" },
68
- "cancelWhen": { "field": "Priority", "operator": "NotEqual", "value": "Moderate" }
65
+ "priorityTier": "Moderate or Low",
66
+ "startTimeBasedOn": "MILESTONE_CRITERIA",
67
+ "activeWhen": { "field": "Priority", "filterLogic": "1 OR 2", "rows": [ { "operator": "Equals", "value": "Moderate" }, { "operator": "Equals", "value": "Low" } ] },
68
+ "completeWhen": { "field": "Status", "operator": "NotEqual", "value": "New" }
69
69
  },
70
70
  {
71
71
  "order": 6,
72
72
  "milestoneType": "Resolve Within",
73
73
  "timeTrigger": 960,
74
- "priorityTier": "Moderate",
75
- "activeWhen": { "field": "Priority", "operator": "Equals", "value": "Moderate" },
76
- "completeWhen": { "field": "Status", "filterLogic": "1 OR 2 OR 3", "rows": [ { "operator": "Equals", "value": "Resolved" }, { "operator": "Equals", "value": "Completed" }, { "operator": "Equals", "value": "Closed" } ] },
77
- "cancelWhen": { "field": "Priority", "operator": "NotEqual", "value": "Moderate" }
78
- },
79
- {
80
- "order": 7,
81
- "milestoneType": "Acknowledge Within",
82
- "timeTrigger": 240,
83
- "priorityTier": "Low",
84
- "activeWhen": { "field": "Priority", "operator": "Equals", "value": "Low" },
85
- "completeWhen": { "field": "Status", "operator": "NotEqual", "value": "New" },
86
- "cancelWhen": { "field": "Priority", "operator": "NotEqual", "value": "Low" }
87
- },
88
- {
89
- "order": 8,
90
- "milestoneType": "Resolve Within",
91
- "timeTrigger": 960,
92
- "priorityTier": "Low",
93
- "activeWhen": { "field": "Priority", "operator": "Equals", "value": "Low" },
94
- "completeWhen": { "field": "Status", "filterLogic": "1 OR 2 OR 3", "rows": [ { "operator": "Equals", "value": "Resolved" }, { "operator": "Equals", "value": "Completed" }, { "operator": "Equals", "value": "Closed" } ] },
95
- "cancelWhen": { "field": "Priority", "operator": "NotEqual", "value": "Low" }
74
+ "priorityTier": "Moderate or Low",
75
+ "startTimeBasedOn": "MILESTONE_CRITERIA",
76
+ "activeWhen": { "field": "Priority", "filterLogic": "1 OR 2", "rows": [ { "operator": "Equals", "value": "Moderate" }, { "operator": "Equals", "value": "Low" } ] },
77
+ "completeWhen": { "field": "Status", "filterLogic": "1 OR 2 OR 3", "rows": [ { "operator": "Equals", "value": "Resolved" }, { "operator": "Equals", "value": "Completed" }, { "operator": "Equals", "value": "Closed" } ] }
96
78
  }
97
79
  ],
98
80
 
@@ -111,10 +93,10 @@
111
93
 
112
94
  "_replicationNotes": {
113
95
  "table": "Every criterion filters the Incident table (filterItems[].table = \"Incident\").",
114
- "activeCriterion": "The public Attach-Milestone route's milestoneCriteria carries the ACTIVE criterion — filterType RuleFilter, milestoneState Active, milestoneAgreementType SLA (customer-facing; OLA is the internal alternative — W-23959162). The priority-tier row IS this active criterion.",
115
- "completionAndCancel": "The OOB completion (Status In resolved-set) and cancel (Priority NotEqual tier) criteria use milestoneState Complete / Cancel. Confirm the public milestone-criteria route accepts those states in the live smoke test; if it accepts only the Active criterion, seeding the priority-tiered Active criterion still engages each milestone (matches examples/milestone-patterns.md Pattern 3).",
116
- "orClause": "The core OOB template groups Moderate+Low into one Priority In[Moderate,Low] tier. Because the public route's filterItems AND by default and Priority has no In operator, this template already splits that tier into separate Priority Equals Moderate (orders 5-6) and Priority Equals Low (orders 7-8) milestones with the same timeTriggers — behavior-equivalent to the merged core tier. Seed all 8 as listed.",
96
+ "activeCriterion": "The public Attach-Milestone route's milestoneCriteria carries the ACTIVE criterion — filterType RuleFilter, milestoneState ACTIVE (UPPERCASE — the server matches this case-sensitively; a wrong-case 'Active' returns 201 but silently drops the criterion, collapsing every Incident onto the lowest-order/Critical tier), milestoneAgreementType SLA (customer-facing; OLA is the internal alternative — W-23959162). The priority-tier row IS this active criterion; it is what tiers the policy.",
97
+ "completion": "The OOB completion (Status In resolved-set) criterion uses milestoneState COMPLETE (UPPERCASE). There is NO CANCEL state on the public route (valid: ACTIVE, COMPLETE, PAUSE, UNPAUSE), so no cancel criterion is sent — the ACTIVE Priority criterion alone gates engagement (matches examples/milestone-patterns.md Pattern 3). Verify tiering by runtime: create a Moderate/Low test Incident and confirm its EntityMilestone lands on the 240/960 tier, not 30/120 (the create response always echoes milestoneCriteria:[] regardless of success, so it cannot confirm persistence).",
98
+ "orClause": "The core OOB template groups Moderate+Low into ONE tier via an ACTIVE filterLogic '1 OR 2' over two Priority Equals rows (Moderate, Low) — see incident.json orders 5-6. This template mirrors that exactly: orders 5-6 carry activeWhen.filterLogic '1 OR 2' with rows [Priority Equals Moderate, Priority Equals Low]. The public milestone-criteria route accepts this OR via customLogicExpression (the same MilestoneCriteriaInputRepresentation the /connect/sla-management milestones route consumes), so it need NOT be split into separate Equals milestones. Seed 6 milestones as listed. If the live route rejects the OR filterLogic, fall back to two separate Priority Equals milestones (Moderate, Low) with the same timeTriggers — behavior-equivalent. The merged tier has NO cancelWhen, matching the core template (orders 5-6 have ACTIVE + COMPLETE only).",
117
99
  "statusIn": "Status 'In [Resolved, Completed, Closed]' has no single-row In operator, so each completeWhen above is already PRE-SPLIT into a filterLogic ('1 OR 2 OR 3') across three Status Equals rows — the data file never carries a route-rejected In operator. If the route rejects filterLogic, split into one Status Equals row per value (behavior-equivalent). Validate each Status/Priority value against the live Incident picklist before seeding.",
118
- "midTier": "Map the mid tier to the org's ACTUAL mid-priority label — 'Moderate' on the standard ITSM picklist, but many orgs label it 'Medium'. Seed orders 5-6 with whichever the live Incident.Priority picklist carries rather than dropping the tier; drop a row only when its value is genuinely absent, and note any dropped/relabeled tier in the report."
100
+ "midTier": "Map the mid tier to the org's ACTUAL mid-priority label — 'Moderate' on the standard ITSM picklist, but many orgs label it 'Medium'. In the merged orders 5-6 activeWhen.rows, use whichever label the live Incident.Priority picklist carries in place of 'Moderate' (keep the 'Low' row as-is). Drop a row from the OR only when its value is genuinely absent from the picklist, and note any dropped/relabeled tier in the report."
119
101
  }
120
102
  }
@@ -34,9 +34,9 @@ dispatch `AskUserQuestion` with the five options below. Priority-tiered requires
34
34
  All strategies share these defaults unless overridden:
35
35
 
36
36
  - `businessHoursId`: the default BusinessHours resolved in Phase 1 step 4
37
- - `startTimeBasedOn`: `SlaProcessCreatedDate`
37
+ - `startTimeBasedOn`: `MILESTONE_CRITERIA` (timer starts when the milestone's criteria first match; this is the OOB default — send this exact token, see `references/mcp-invocation.md` Attach Milestone)
38
38
  - `milestoneAgreementType`: `SLA` — inside each `milestoneCriteria[]` item (mandatory per the UI). Valid UI values are `SLA` (customer-facing) or `OLA` (internal); the API accepts any string because the underlying field is `Text(40)` with no server-side picklist, but the UI renders unrecognized values as blank (W-23959162)
39
- - `milestoneState`: `Active` (inside `milestoneCriteria[]`)
39
+ - `milestoneState`: `ACTIVE` (**uppercase — the server matches this value case-sensitively**; `Active`/`active` silently fail to register the criterion) inside `milestoneCriteria[]`
40
40
  - `filterType`: `RuleFilter` (inside `milestoneCriteria[]`)
41
41
  - Base filter row: `Incident.Status NotEqual Closed` (keeps every milestone alive until the
42
42
  Incident closes; ANDs with pattern-specific criteria below)
@@ -142,7 +142,7 @@ Incident create (e.g. via the Priority Matrix), the milestone re-evaluates on th
142
142
  | 2 | Incident Manager Escalation | 120 | *(none)* |
143
143
  | 3 | Incident Executive Escalation | 480 | *(none)* |
144
144
 
145
- All three run concurrently from `SlaProcessCreatedDate` — the "ladder" is enforced by the timers,
145
+ All three run concurrently once their criteria match (`startTimeBasedOn: MILESTONE_CRITERIA`) — the "ladder" is enforced by the timers,
146
146
  not by chaining. To fire automation at a milestone's warning/violation checkpoint (warn before
147
147
  target, escalate on breach), attach a **milestone action** in Phase 2.5 — see
148
148
  `references/mcp-invocation.md` (Milestone Actions). (Strictly *sequential* chaining across separate
@@ -54,8 +54,20 @@ Verification:
54
54
  Chain: MilestoneTypes > SLA Policy > Milestones > Entitlement > Incident > EntityMilestones
55
55
  ```
56
56
 
57
+ If a test Incident was not created (verification partial), replace the Verification block with:
58
+
59
+ ```text
60
+ Verification:
61
+ SLA Policy confirmed active (Incident) with all <N> milestones attached.
62
+ No test Incident was created, so EntityMilestone firing was not exercised in this run.
63
+ ```
64
+
57
65
  ## Success — milestone actions (Phase 2.5, when Warn/Escalate was requested)
58
66
 
67
+ Append this **Milestone Actions** block to the multi-milestone success report above — do not emit it
68
+ alone. The report must still carry the policy, both milestones (name, time, criteria), the
69
+ Entitlement, the Verification section, and the scope line below.
70
+
59
71
  ```text
60
72
  Milestone Actions attached:
61
73
  <MilestoneType name>:
@@ -65,11 +77,16 @@ Milestone Actions attached:
65
77
  - Warning: fires <Y> min before target -> <action summary>
66
78
  - Violation: fires at breach -> <action summary>
67
79
 
80
+ Warn offsets are computed per milestone (offset = round(target * (1 - warn%))); each milestone
81
+ keeps its own offset. Escalate-on-breach is a Violation at the target (offset 0).
82
+
68
83
  Confirmation: each action was confirmed from its create response (success + action mapping
69
84
  returned). The attached warning/escalation settings can't be independently queried after creation,
70
85
  so that create-response confirmation is the verification.
86
+
87
+ Scope: only the Incident SLA setup was configured — no other Setup preference was changed.
71
88
  ```
72
89
 
73
- No record IDs in user-facing output — this applies to **every interim progress/narration message too**, not just these final templates: refer to the test Incident by its **`IncidentNumber`** and to milestones by their **`MilestoneType` name**, never the 15/18-char record Id.
90
+ No record Ids in user-facing text — **every interim progress/narration message too**, not just these final templates (this enforces the SKILL.md **Output contract**): refer to the test Incident by its **`IncidentNumber`** and to milestones by their **`MilestoneType` name**, never the 15/18-char record Id.
74
91
 
75
92
  **No implementation/MCP jargon in user-facing text.** Terms like "headless", "read-back", "dispatch", "Connect API", or operation ids are internal — never surface them in the report or narration. Say "the settings can't be independently queried after creation", **not** "no headless read-back". No files are produced — the skill mutates org configuration in place through headless-360 MCP dispatch.