@salesforce/afv-skills 1.55.0 → 1.56.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 (220) 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/consumer-goods-accruals-datakit-deploy/SKILL.md +383 -0
  19. package/skills/consumer-goods-accruals-datakit-deploy/scripts/setup.js +324 -0
  20. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/00-check-prerequisites.js +63 -0
  21. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/01-download-static-resource.js +100 -0
  22. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/02-replace-org-id.js +46 -0
  23. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/03-deploy-metadata.js +46 -0
  24. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/04-deploy-engine.js +198 -0
  25. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/05-deploy-tpm-accruals.js +231 -0
  26. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/06-create-dataspace.js +82 -0
  27. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/07-deploy-accruals-reports.js +517 -0
  28. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/08-deploy-ui.js +416 -0
  29. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/09-completion.js +44 -0
  30. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/utils.js +514 -0
  31. package/skills/consumer-goods-sync-management-configure/SKILL.md +137 -0
  32. package/skills/consumer-goods-sync-management-configure/examples/scenarios.md +294 -0
  33. package/skills/consumer-goods-sync-management-configure/references/act1-setup-sync.md +333 -0
  34. package/skills/consumer-goods-sync-management-configure/references/act2-assign-users.md +324 -0
  35. package/skills/consumer-goods-sync-management-configure/references/act3-plan-verify.md +113 -0
  36. package/skills/consumer-goods-sync-management-configure/references/readiness-and-enablement.md +164 -0
  37. package/skills/consumer-goods-sync-management-configure/references/sync-management-app-install-backbone.md +159 -0
  38. package/skills/consumer-goods-sync-management-configure/references/transports-and-namespace.md +220 -0
  39. package/skills/consumer-goods-sync-management-configure/references/verify-and-smoke.md +175 -0
  40. package/skills/dx-org-analyze/SKILL.md +0 -1
  41. package/skills/dx-org-analyze/scripts/collect_org_data.py +2 -2
  42. package/skills/dx-org-analyze/scripts/compute_diff.py +2 -4
  43. package/skills/dx-org-analyze/scripts/introspect_org.py +4 -40
  44. package/skills/dx-org-manage/SKILL.md +6 -50
  45. package/skills/dx-org-manage/examples/README.md +10 -16
  46. package/skills/dx-org-manage/references/scratch-org-create.md +1 -1
  47. package/skills/dx-org-manage/references/scratch-org-operations.md +1 -1
  48. package/skills/dx-org-shape-manage/SKILL.md +4 -3
  49. package/skills/education-cloud-domain-configure/references/gotchas-extended.md +1 -0
  50. package/skills/experience-accessibility-validate/SKILL.md +8 -5
  51. package/skills/experience-accessibility-validate/references/reviewers/sc-1-1-1-non-text-content.md +1 -4
  52. package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-1-i-lists.md +0 -4
  53. package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-1-ii-tables.md +20 -85
  54. package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-1-iii-form-labels.md +4 -4
  55. package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-1-iv-regions.md +0 -4
  56. package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-1-v-groups.md +2 -4
  57. package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-5-identify-input.md +0 -4
  58. package/skills/experience-accessibility-validate/references/reviewers/sc-1-4-3-contrast.md +4 -14
  59. package/skills/experience-accessibility-validate/references/reviewers/sc-2-1-1-keyboard.md +9 -5
  60. package/skills/experience-accessibility-validate/references/reviewers/sc-2-4-4-link-purpose.md +1 -4
  61. package/skills/experience-accessibility-validate/references/reviewers/sc-2-4-6-headings-labels.md +0 -4
  62. package/skills/experience-accessibility-validate/references/reviewers/sc-2-5-1-pointer-gestures.md +0 -4
  63. package/skills/experience-accessibility-validate/references/reviewers/sc-2-5-2-pointer-cancellation.md +0 -4
  64. package/skills/experience-accessibility-validate/references/reviewers/sc-2-5-3-label-in-name.md +0 -4
  65. package/skills/experience-accessibility-validate/references/reviewers/sc-2-5-7-dragging-movement.md +0 -4
  66. package/skills/experience-accessibility-validate/references/reviewers/sc-3-2-1-on-focus.md +0 -4
  67. package/skills/experience-accessibility-validate/references/reviewers/sc-3-2-2-on-input.md +1 -4
  68. package/skills/experience-accessibility-validate/references/reviewers/sc-3-3-1-error-identification.md +1 -4
  69. package/skills/experience-accessibility-validate/references/reviewers/sc-3-3-2-labels-instructions.md +1 -4
  70. package/skills/experience-accessibility-validate/references/reviewers/sc-3-3-3-error-suggestion.md +1 -4
  71. package/skills/experience-accessibility-validate/references/reviewers/sc-4-1-2-i-name.md +4 -5
  72. package/skills/experience-accessibility-validate/references/reviewers/sc-4-1-2-ii-role.md +1 -4
  73. package/skills/experience-accessibility-validate/references/reviewers/sc-4-1-2-iii-value.md +0 -4
  74. package/skills/experience-lwc-accessibility-jest-run/SKILL.md +104 -25
  75. package/skills/experience-lwc-accessibility-jest-run/assets/jest.config.js +4 -0
  76. package/skills/experience-lwc-accessibility-jest-run/assets/sa11y-jest-setup.js +5 -0
  77. package/skills/experience-ui-bundle-app-coordinate/SKILL.md +5 -5
  78. package/skills/experience-ui-bundle-features-generate/SKILL.md +65 -36
  79. package/skills/experience-ui-bundle-features-generate/references/angular/features.md +74 -0
  80. package/skills/experience-ui-bundle-features-generate/references/react/features.md +59 -0
  81. package/skills/experience-ui-bundle-features-generate/scripts/detect-framework.sh +73 -0
  82. package/skills/experience-ui-bundle-frontend-generate/SKILL.md +2 -2
  83. package/skills/experience-ui-bundle-metadata-generate/SKILL.md +26 -14
  84. package/skills/experience-ui-bundle-metadata-generate/references/angular-metadata-generate.md +37 -0
  85. package/skills/experience-ui-bundle-metadata-generate/references/react-metadata-generate.md +32 -0
  86. package/skills/experience-ui-bundle-metadata-generate/scripts/detect-framework.sh +73 -0
  87. package/skills/experience-ui-bundle-metadata-generate/scripts/verify-bundle-location.sh +30 -8
  88. package/skills/field-service-data-capture-migrate/SKILL.md +391 -0
  89. package/skills/field-service-data-capture-migrate/assets/sample-legacy-flow.flow-meta.xml +163 -0
  90. package/skills/field-service-data-capture-migrate/references/architecture-notes.md +40 -0
  91. package/skills/field-service-data-capture-migrate/references/component-mapping.md +278 -0
  92. package/skills/field-service-data-capture-migrate/references/converter-builder-contract.md +183 -0
  93. package/skills/field-service-data-capture-migrate/references/dc-platform-rules.md +130 -0
  94. package/skills/field-service-data-capture-migrate/references/fsm-dc-capability-catalog.md +215 -0
  95. package/skills/field-service-data-capture-migrate/references/known-deploy-errors.md +36 -0
  96. package/skills/field-service-data-capture-migrate/references/migration-checklist.md +121 -0
  97. package/skills/field-service-data-capture-migrate/references/transformer-rules.md +132 -0
  98. package/skills/field-service-data-capture-migrate/scripts/analyze_flow.py +277 -0
  99. package/skills/field-service-data-capture-migrate/scripts/convert_to_dc_spec.py +1311 -0
  100. package/skills/field-service-data-capture-migrate/scripts/cud_analysis.py +402 -0
  101. package/skills/field-service-data-capture-migrate/scripts/deploy_flow.sh +230 -0
  102. package/skills/field-service-data-capture-migrate/scripts/discover_subflow_tree.py +230 -0
  103. package/skills/field-service-data-capture-migrate/scripts/flow_input.py +186 -0
  104. package/skills/field-service-data-capture-migrate/scripts/flow_xml_utils.py +39 -0
  105. package/skills/field-service-data-capture-migrate/scripts/fsm_dc_catalog.py +413 -0
  106. package/skills/field-service-data-capture-migrate/scripts/generate_summary.py +199 -0
  107. package/skills/field-service-data-capture-migrate/scripts/json_to_flow_xml.py +146 -0
  108. package/skills/field-service-data-capture-migrate/scripts/manual_review_flags.py +42 -0
  109. package/skills/field-service-data-capture-migrate/scripts/retrieve_flow_rest.sh +155 -0
  110. package/skills/field-service-data-capture-migrate/scripts/subflow_names.py +49 -0
  111. package/skills/field-service-data-capture-migrate/scripts/transform_flow.py +1661 -0
  112. package/skills/field-service-data-capture-migrate/scripts/validate_flow.sh +147 -0
  113. package/skills/field-service-data-capture-migrate/scripts/vendor/build_flow.py +1258 -0
  114. package/skills/life-sciences-fieldsalesrep-coordinate/SKILL.md +1 -1
  115. package/skills/life-sciences-fieldsalesrep-coordinate/references/orchestration-flow.md +1 -1
  116. package/skills/life-sciences-kam-coordinate/references/stage-5-data-and-plan-templates-overview.md +14 -1
  117. package/skills/mobile-apps-create/SKILL.md +1 -1
  118. package/skills/{platform-agentsetup-categories-fetch → platform-agenticsetup-categories-get}/SKILL.md +7 -7
  119. package/skills/platform-sandbox-configure/SKILL.md +108 -133
  120. package/skills/platform-sandbox-configure/references/api-response-shapes.md +39 -0
  121. package/skills/platform-sandbox-configure/references/definition-file-approach.md +73 -0
  122. package/skills/platform-widget-generate/SKILL.md +26 -18
  123. package/skills/platform-widget-generate/examples/formulas.json +191 -0
  124. package/skills/platform-widget-generate/references/widget-formulas.md +123 -0
  125. package/skills/platform-widget-generate/references/widget-meta-directives.md +4 -4
  126. package/skills/sales-call-scoring-configure/SKILL.md +318 -0
  127. package/skills/sales-call-scoring-configure/assets/best-practice-competencies.json +67 -0
  128. package/skills/sales-call-scoring-configure/assets/ootb-competencies.json +58 -0
  129. package/skills/sales-call-scoring-configure/references/admin-communication.md +79 -0
  130. package/skills/sales-call-scoring-configure/references/competency-crud.md +130 -0
  131. package/skills/sales-call-scoring-configure/scripts/create-competency.sh +166 -0
  132. package/skills/sales-call-scoring-configure/scripts/create-custom-competency.sh +166 -0
  133. package/skills/sales-call-scoring-configure/scripts/edit-competency.sh +185 -0
  134. package/skills/sales-call-scoring-configure/scripts/edit-custom-competency.sh +190 -0
  135. package/skills/sales-call-scoring-configure/scripts/enable-call-scoring.sh +436 -0
  136. package/skills/sales-call-scoring-configure/scripts/get-competency.sh +72 -0
  137. package/skills/sales-call-scoring-configure/scripts/get-custom-competency.sh +78 -0
  138. package/skills/sales-call-scoring-configure/scripts/install-best-practice-competencies.sh +223 -0
  139. package/skills/sales-call-scoring-configure/scripts/install-ootb-competencies.sh +237 -0
  140. package/skills/sales-call-scoring-configure/scripts/list-competencies.sh +99 -0
  141. package/skills/sales-call-scoring-configure/scripts/shared/auth.sh +116 -0
  142. package/skills/sales-call-scoring-configure/scripts/shared/cap.sh +86 -0
  143. package/skills/sales-call-scoring-configure/scripts/shared/soap.sh +267 -0
  144. package/skills/sales-call-scoring-configure/scripts/shared/soql.sh +25 -0
  145. package/skills/sales-call-scoring-configure/scripts/toggle-competency.sh +112 -0
  146. package/skills/sales-call-scoring-configure/scripts/toggle-custom-competency.sh +125 -0
  147. package/skills/sales-call-scoring-configure/scripts/verify-ootb-competencies.sh +116 -0
  148. package/skills/service-concierge-portal-generate/references/portal-deploy-runbook.md +1 -0
  149. package/skills/service-de-channel-activate/SKILL.md +6 -5
  150. package/skills/service-de-channel-create/SKILL.md +3 -3
  151. package/skills/service-de-channel-routing-configure/SKILL.md +3 -3
  152. package/skills/service-de-channel-settings-configure/SKILL.md +195 -0
  153. package/skills/service-de-channel-settings-configure/references/channel-settings-facets.md +152 -0
  154. package/skills/{service-de-channel-consent-configure → service-de-channel-settings-configure}/references/gotchas.md +3 -3
  155. package/skills/{service-de-channel-consent-configure → service-de-channel-settings-configure}/references/language-keywords.md +4 -4
  156. package/skills/{service-de-channel-consent-configure → service-de-channel-settings-configure}/references/worked-examples.md +14 -14
  157. package/skills/service-de-headless-channel-configure/SKILL.md +6 -6
  158. package/skills/service-de-headless-channel-configure/references/worked-examples.md +1 -1
  159. package/skills/service-helpagent-coordinate/SKILL.md +3 -2
  160. package/skills/service-helpagent-coordinate/references/channel-voice.md +15 -4
  161. package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +49 -31
  162. package/skills/service-itsm-agentic-setup-agentforce-coordinate/examples/output-templates.md +71 -6
  163. package/skills/service-itsm-agentic-setup-agentforce-coordinate/scripts/verify-child-verdict.mjs +26 -4
  164. package/skills/service-itsm-agentic-setup-cmdb-access-assign/SKILL.md +35 -10
  165. package/skills/service-itsm-agentic-setup-cmdb-access-assign/references/mcp-invocation.md +25 -5
  166. package/skills/service-itsm-agentic-setup-cmdb-bundle-deploy/SKILL.md +1 -1
  167. package/skills/service-itsm-agentic-setup-cmdb-configure/SKILL.md +5 -5
  168. package/skills/service-itsm-agentic-setup-cmdb-configure/references/mcp-invocation.md +1 -1
  169. package/skills/service-itsm-agentic-setup-cmdb-coordinate/SKILL.md +2 -2
  170. package/skills/service-itsm-agentic-setup-cmdb-coordinate/examples/output-templates.md +1 -1
  171. package/skills/service-itsm-agentic-setup-cmdb-discovery-configure/SKILL.md +25 -15
  172. package/skills/service-itsm-agentic-setup-employee-agent-configure/SKILL.md +8 -5
  173. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/report-format.md +4 -2
  174. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/workflow-detail.md +1 -1
  175. package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/render-report.mjs +29 -16
  176. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/SKILL.md +8 -5
  177. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/report-format.md +4 -2
  178. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/workflow-detail.md +1 -1
  179. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/render-report.mjs +29 -16
  180. package/skills/service-itsm-agentic-setup-incident-management/SKILL.md +138 -68
  181. package/skills/service-itsm-agentic-setup-incident-management/examples/output-templates.md +31 -15
  182. package/skills/service-itsm-agentic-setup-incident-management/references/incident-persona-psg.md +156 -0
  183. package/skills/service-itsm-agentic-setup-incident-management/references/incident-preferences.md +148 -0
  184. package/skills/service-itsm-agentic-setup-incident-management/references/major-incident-management.md +162 -0
  185. package/skills/service-itsm-agentic-setup-incident-management/references/service-mgmt-privilege.md +149 -0
  186. package/skills/service-itsm-agentic-setup-incident-sla-configure/SKILL.md +103 -89
  187. package/skills/service-itsm-agentic-setup-incident-sla-configure/assets/attach-milestone.json +2 -2
  188. package/skills/service-itsm-agentic-setup-incident-sla-configure/assets/predefined-incident-policy.json +21 -39
  189. package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/milestone-patterns.md +3 -3
  190. package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/output-templates.md +18 -1
  191. package/skills/service-itsm-agentic-setup-incident-sla-configure/references/mcp-invocation.md +63 -37
  192. package/skills/service-omni-attribute-routing-configure/SKILL.md +53 -0
  193. package/skills/service-omni-attribute-routing-configure/references/api-notes.md +7 -0
  194. package/skills/service-omni-attribute-routing-configure/scripts/configure-and-report.sh +224 -0
  195. package/skills/service-omni-attribute-routing-configure/scripts/tests/test_attribute_routing_contracts.py +137 -0
  196. package/skills/service-omni-channel-inventory-analyze/SKILL.md +96 -0
  197. package/skills/service-omni-channel-inventory-analyze/references/api-notes.md +52 -0
  198. package/skills/service-omni-channel-inventory-analyze/scripts/analyze.sh +185 -0
  199. package/skills/service-omni-channel-inventory-analyze/scripts/tests/_bootstrap.py +84 -0
  200. package/skills/service-omni-channel-inventory-analyze/scripts/tests/test_inventory_analyze_contracts.py +141 -0
  201. package/skills/service-omni-channel-limits-analyze/SKILL.md +70 -0
  202. package/skills/service-omni-channel-limits-analyze/references/api-notes.md +22 -0
  203. package/skills/service-omni-channel-limits-analyze/scripts/analyze.sh +159 -0
  204. package/skills/service-omni-channel-limits-analyze/scripts/tests/_bootstrap.py +87 -0
  205. package/skills/service-omni-channel-limits-analyze/scripts/tests/test_limits_analyze_contracts.py +99 -0
  206. package/skills/service-omni-channel-setup-coordinate/SKILL.md +12 -20
  207. package/skills/service-omni-channel-setup-coordinate/scripts/integration-driver.sh +55 -5
  208. package/skills/service-omni-channel-setup-coordinate/scripts/tests/test_omni_contracts.py +38 -0
  209. package/skills/service-omni-command-center-analyze/SKILL.md +2 -2
  210. package/skills/service-omni-command-center-analyze/scripts/analyze.sh +3 -3
  211. package/skills/dx-org-manage/examples/snapshots/error_output.json +0 -9
  212. package/skills/dx-org-manage/examples/snapshots/success_output.json +0 -15
  213. package/skills/dx-org-manage/references/cli_flags.md +0 -67
  214. package/skills/dx-org-manage/references/creating-snapshot.md +0 -103
  215. package/skills/dx-org-manage/references/snapshot_usage.md +0 -74
  216. package/skills/experience-accessibility-validate/scripts/contrast-ratio.py +0 -153
  217. package/skills/experience-lwc-accessibility-jest-run/references/running-sa11y-jest-tests.md +0 -205
  218. package/skills/experience-ui-bundle-features-generate/scripts/verify-react-bundle.sh +0 -14
  219. /package/skills/experience-ui-bundle-features-generate/references/{conflict-resolution-schema.json → common/conflict-resolution-schema.json} +0 -0
  220. /package/skills/{platform-agentsetup-categories-fetch → platform-agenticsetup-categories-get}/references/api-response-schema.md +0 -0
@@ -1,127 +1,193 @@
1
1
  ---
2
2
  name: service-itsm-agentic-setup-incident-management
3
- description: "Orchestrator skill for setting up Incident Management features in Salesforce Service Cloud ITSM. Use when the user asks to set up incident management, configure ITSM incident features, wants a guided walkthrough of incident management configuration, or asks what incident features are available to configure. Presents the available Incident Management capabilities and delegates each selection to a specialized child skill — currently SLA & Milestones — while tracking progress across the setup. Triggers on: set up incident management, configure ITSM incident features, incident management walkthrough, incident management capabilities, what incident features can I configure. DO NOT TRIGGER when: the user asks about a specific feature directly (e.g., an SLA alone without mentioning incident management setup), asks to create, clone, or provision users, Case management setup, or general ITSM questions without setup intent."
3
+ description: "Orchestrator for Incident Management setup in Salesforce Service Cloud ITSM: presents the available features, tracks progress, and configures each — SLA & Milestones, Priority Matrix, Incident preferences, Major Incident Management, Incident persona PSG assignment, and Service Management Privilege. Use for: set up or configure incident management, incident management walkthrough, what incident features can I configure; the incident preference toggles (default field validations, auto-close child incidents, auto-triage, assign with Einstein, restrict assigned group, rich text descriptions); Major Incident Management (approval group + MIM preferences); assigning the Incident Fulfiller or Incident Manager persona PSG to a user; Service Management Privilege / privilege escalation setup. DO NOT TRIGGER for: the master on/off switch (service-itsm-incident-mgmt-configure), the Priority Matrix or SLA alone, the Major Incident Manager PSG, creating/editing PSGs, or Problem/Change/Case Management."
4
4
  metadata:
5
- version: "1.2"
5
+ version: "2.0"
6
6
  domains: ["Service"]
7
+ minApiVersion: "67.0"
7
8
  relatedSkills:
9
+ - "dx-org-permission-set-assign"
10
+ - "service-itsm-agentic-setup-cmdb-access-assign"
8
11
  - "service-itsm-agentic-setup-incident-sla-configure"
12
+ - "service-itsm-agentic-setup-itsm-agentforce-permset-assign"
9
13
  - "service-itsm-incident-mgmt-configure"
10
14
  - "service-itsm-incident-priority-configure"
11
- allowed-tools: Read AskUserQuestion
15
+ mcpTools:
16
+ headless-360:
17
+ tools: ["describe", "discover", "dispatch", "dispatch_readonly"]
18
+ semver: ">=1.0.0"
19
+ accessCheck:
20
+ - type: "userPerm"
21
+ value: "CustomizeApplication"
22
+ - type: "orgPerm"
23
+ value: "IncidentMgmt.orgHasITSMOrgPermission"
24
+ allowed-tools: |
25
+ Read AskUserQuestion
26
+ mcp__headless-360__discover
27
+ mcp__headless-360__describe
28
+ mcp__headless-360__dispatch
29
+ mcp__headless-360__dispatch_readonly
12
30
  ---
13
31
 
14
32
  # Incident Management Setup Orchestrator
15
33
 
16
- Guide the user through setting up Incident Management features in Salesforce Service Cloud ITSM by presenting the available capabilities, delegating to specialized child skills, and tracking progress.
34
+ Guide the user through setting up Incident Management features in Salesforce Service Cloud ITSM by
35
+ presenting the available capabilities, tracking progress, and — per feature — either **delegating** to a
36
+ specialized child skill or **executing the feature inline over its system of record (SOR)**.
17
37
 
18
38
  ## Goal
19
39
 
20
- Act as the coordinator for Incident Management feature configuration. Present the user with a menu of configurable features, invoke the appropriate child skill for each selection, and after each feature completes, return to the menu with updated progress until the user is done.
40
+ Act as the coordinator for Incident Management feature configuration. Present a menu of configurable
41
+ features, handle each selection, and after each feature completes, return to the menu with updated progress
42
+ until the user is done.
43
+
44
+ ## How each feature is handled
45
+
46
+ | # | Feature | Handled by |
47
+ |---|---------|-----------|
48
+ | 1 | SLA & Milestones | **Delegate** → `service-itsm-agentic-setup-incident-sla-configure` |
49
+ | 2 | Priority Matrix | **Delegate** → `service-itsm-incident-priority-configure` |
50
+ | 3 | Incident Preferences | **Inline over SOR** → `references/incident-preferences.md` |
51
+ | 4 | Major Incident Management | **Inline over SOR** → `references/major-incident-management.md` |
52
+ | 5 | Incident Persona PSG | **Inline over SOR** → `references/incident-persona-psg.md` |
53
+ | 6 | Service Management Privilege | **Inline over SOR** → `references/service-mgmt-privilege.md` |
54
+
55
+ **Delegated** features invoke their child skill (this skill only coordinates). **Inline** features are run
56
+ by this skill directly through the `headless-360` MCP server — **read the matching reference file before
57
+ executing that feature** and follow it. Every inline operation is fetched at runtime: `discover` by intent,
58
+ `describe` for the current route/schema/labels, then `dispatch_readonly` (reads) / `dispatch` (writes).
59
+ **Hardcode nothing — `describe` wins.**
21
60
 
22
61
  ## Behavior
23
62
 
24
63
  ### 0. Reuse what the session already knows
25
64
 
26
- Before running any preflight below, check whether the same fact was already established
27
- earlier in this conversation. Cache-eligible facts for this orchestrator:
28
-
29
- - **Master switch state** — reuse **only when the master switch was confirmed
30
- enabled** by an earlier read or flip in this conversation. A cached "off" value
31
- MUST NOT let step 2 skip: the delegation exists precisely to flip an off switch
32
- on with user confirmation before downstream feature setup runs.
33
- - **Already-completed features** — features the user (or a child skill) reported "Done"
34
- in an earlier turn stay "Done" — do not re-run their child skill unless the user asks
35
- to reconfigure.
36
- - **Target org** — if the target org was already confirmed earlier in the conversation,
37
- reuse it; do not re-ask.
38
-
39
- **When in doubt, re-check.** Skip only when the earlier fact is unambiguously in context
40
- AND you have not switched orgs. If the user hints at a different org, or a child skill's
41
- write elsewhere in the session could have invalidated the cached state (e.g., the master
42
- switch was toggled off after being confirmed on), re-run the check. A wrong skip on a
43
- live org write is worse than a duplicated read.
65
+ Before running any preflight below, check whether the same fact was already established earlier in this
66
+ conversation. Cache-eligible: the **master switch state** (reuse **only when confirmed *enabled***; a
67
+ cached "off" MUST NOT let step 2 skip), **already-completed features** (stay "Done"; don't re-run unless
68
+ asked to reconfigure), and the **target org**. **When in doubt, re-check.** Skip only when the earlier fact
69
+ is unambiguously in context AND you have not switched orgs — a wrong skip on a live write is worse than a
70
+ duplicated read.
44
71
 
45
72
  ### 1. Extract context from conversation
46
73
 
47
- Before presenting options, scan chat history for:
48
-
49
- - Which features the user has already set up (skip or mark as done)
50
- - Any preferences or constraints mentioned (e.g., "we only need the SLA milestones")
51
- - The target org (if mentioned)
52
- - Business context that informs which features are relevant
74
+ Scan chat history for which features are already done, any stated preferences/constraints, the target org,
75
+ and business context that informs which features are relevant.
53
76
 
54
77
  ### 2. Ensure the Incident Management master switch is on (prerequisite)
55
78
 
56
- Every Incident Management feature below depends on the org-level `service-cloud-itsm-incident` master switch being enabled — SLA milestones and downstream features cannot function while the switch is off. Before showing the feature menu, delegate to `service-itsm-incident-mgmt-configure` to read current state; if the switch is already on, it is a no-op — otherwise it confirms with the user before flipping it. **Skip this delegation only when the master switch was already confirmed *enabled* in this session — see Behavior step 0**. A cached "off" or unknown state MUST fall through to the delegation; a wrong skip here would silently let downstream feature setup run against an org where the master is off.
57
-
58
- ### 3. Present the Incident Management feature menu as a multi-select
79
+ Every feature below depends on the org-level `service-cloud-itsm-incident` master switch being enabled.
80
+ Before showing the menu, delegate to `service-itsm-incident-mgmt-configure` to read current state; if on,
81
+ it is a no-op — otherwise it confirms with the user before flipping it. **Skip only when the master switch
82
+ was already confirmed *enabled* in this session** (see step 0). A cached "off"/unknown state MUST fall
83
+ through to the delegation.
59
84
 
60
- Show the user what's available and what's done. Only features with a working child skill appear in the menu. Emit the **Feature menu** template from `examples/output-templates.md` AND, in the same response, a single `AskUserQuestion` call with `multiSelect: true` whose options mirror the rendered rows — the table is the visual view; the tool call is how the selection is collected. Both MUST appear together, never one without the other. Selecting one feature is valid; selecting several enqueues them for sequential handling in step 4. Do NOT show placeholder features that cannot be executed. Additional Incident Management features (Major Incident Management, Custom Fields, incident permission assignment, user provisioning) will be added to this menu as their child skills become available.
85
+ ### 3. Present the feature menu as a multi-select
61
86
 
62
- ### 4. Delegate to child skills for each selected feature in order
87
+ Emit the **Feature menu** template from `examples/output-templates.md` AND, in the same response, a single
88
+ `AskUserQuestion` (`multiSelect: true`) whose options mirror the rendered rows — the table is the visual
89
+ view; the tool call collects the selection. Both MUST appear together. Selecting one feature is valid;
90
+ several enqueue for sequential handling in step 4.
63
91
 
64
- Handle the user's selected features sequentially in dependency order (or the order given). For each selected feature, invoke the corresponding child skill:
92
+ ### 4. Handle each selected feature in order
65
93
 
66
- | # | Feature | Child Skill |
67
- |---|---------|-------------|
68
- | 1 | SLA & Milestones | `service-itsm-agentic-setup-incident-sla-configure` |
69
- | 2 | Priority Matrix | `service-itsm-incident-priority-configure` |
94
+ Handle selected features sequentially in dependency order (or the order given). For each: if it is a
95
+ **delegated** feature, invoke its child skill; if it is an **inline** feature, **read its reference file**
96
+ and execute it there — always **read live state before writing, confirm before every write, and verify
97
+ every write by read-back**. Honor the per-feature invariants below.
70
98
 
71
99
  ### 5. After each feature completes
72
100
 
73
- Once a child skill finishes:
74
-
75
- 1. **Update the status** — mark the completed feature as "Done"
76
- 2. **Suggest the next logical step** — if another feature is available, recommend it based on the dependency order
77
- 3. **Re-present the menu** with updated status — use the **Post-feature progress** template in `examples/output-templates.md`
101
+ Mark it "Done", suggest the next logical step, and re-present the menu with updated status using the
102
+ **Post-feature progress** template in `examples/output-templates.md`.
78
103
 
79
104
  ### 6. Completion summary
80
105
 
81
- When the user says they're done (or all available features are configured), present a final summary using the **Completion summary** template in `examples/output-templates.md`.
106
+ When the user says they're done (or all features are configured), present the **Completion summary**
107
+ template in `examples/output-templates.md`.
108
+
109
+ ---
110
+
111
+ ## Critical inline-execution invariants (load-bearing — full detail in each reference)
112
+
113
+ Apply these whenever an inline feature runs. They are irreversible or silently-wrong if missed.
114
+
115
+ - **Resolve the right node (Preferences).** Target the ITSM Incident Management org-preferences node
116
+ (controller `IPCManagementSetupController`), **not** the Service-Foundation look-alike
117
+ (`IncidentMgmtSetupController`, broadcast channels + a master switch).
118
+ - **Two preferences are one-way / enable-only (Preferences).** *Restrict Assigned Group to Regular Groups*
119
+ and *Enable Rich Text for Incident Descriptions* cannot be turned off once on. Never offer to disable
120
+ them; require an explicit "I understand this can't be undone" confirmation before enabling; never enable
121
+ to test. *Restrict Assigned Group…* also **freezes once the org has any Incident record** — an enable can
122
+ fail outright; do not retry.
123
+ - **License, not assignment (Major Incident Management).** MIM is the approval group + two preferences on
124
+ top of **base** Incident Management. The Major Incident Manager grant is a **LICENSE**
125
+ (`PermissionSetLicenseAssign`), never a `PermissionSetAssignment`. **License before group membership;
126
+ validate group users before designating a group; remove before reassign.** Only two preference names are
127
+ valid: `AutoCreationOfProblem`, `AutoClosureChildIncidents`.
128
+ - **PSL before PSG (Persona).** Assign the union of a persona PSG's member permission-set **licenses first,
129
+ then the PSG** (keyed on `PermissionSetGroupId`, never a permission-set Id) — otherwise the persona is
130
+ silently half-provisioned. Query the persona PSGs by `DeveloperName` with **no** `NamespacePrefix` filter.
131
+ - **Destructive delete + unverifiable assignments (Service Management Privilege).** Deleting a Service
132
+ Management Privilege is irreversible — confirm explicitly, never delete to test. Bulk employee↔privilege
133
+ assignments have **no read-back** — report them as applied, not verified. The *Enable Privilege Assignment*
134
+ master toggle is the UI entry gate (reversible; the controller does not re-check it), so enable it first as
135
+ workflow ordering, not a hard precondition. No public API substitute exists — a `404` / discover-miss means
136
+ the surface isn't served on this org yet; surface it and stop.
137
+ - **Everywhere:** read before write; treat "already in that state" / a duplicate as idempotent success;
138
+ verify by read-back (a write response alone is not proof); each license consumes a seat; on `401`/`403`/
139
+ `404` surface the raw error and stop; keep record Ids, HTTP codes, route paths, and tooling terms
140
+ (`dispatch`, `headless-360`, SOR/step ids) out of user-facing output.
82
141
 
83
142
  ---
84
143
 
85
144
  ## Feature Dependencies & Recommended Order
86
145
 
87
146
  ```text
88
- 1. SLA & Milestones (attaches time-based commitments to incidents)
89
- 2. Priority Matrix (derives Incident.Priority from Impact × Urgency)
147
+ 1. SLA & Milestones (time-based commitments on incidents) [delegated]
148
+ 2. Priority Matrix (Impact × Urgency → Incident.Priority) [delegated]
149
+ 3. Incident Preferences (the six per-feature setup toggles) [inline]
150
+ 4. Major Incident Management (approval group + two MIM preferences) [inline]
151
+ 5. Incident Persona PSG (Fulfiller / Manager persona for a user) [inline]
152
+ 6. Service Management Privilege (escalation level + privilege assignments) [inline]
90
153
  ```
91
154
 
92
- Additional Incident Management features (Major Incident Management, Custom Fields, incident permission assignment, user provisioning) will be added to this menu as their child skills merge.
93
-
94
155
  ---
95
156
 
96
157
  ## Rules
97
158
 
98
159
  - ALWAYS show "(via service-itsm-agentic-setup-incident-management)" in the setup header
99
- - ALWAYS run the Incident Management master-switch prerequisite (Behavior step 2) before showing the feature menu, unless the user has already confirmed the switch is on earlier in this conversation — every downstream feature depends on it
100
- - ALWAYS present the feature menu before configuring any selected feature — do not assume which feature the user wants (the master-switch prerequisite in Behavior step 2 is the only permitted action before the menu)
101
- - ALWAYS present the feature menu as a multi-select — accept a set of one or more features in a single interaction
102
- - ALWAYS pair the rendered feature-menu table with an `AskUserQuestion` (`multiSelect: true`) call in the same response — the table is the visual view; the tool call is the selection channel. Emitting the table alone breaks the selection channel; emitting the tool call alone hides the visual view
103
- - NEVER set up a feature without the user selecting it (explicit selection confirms intent and avoids partial configurations if the user cancels mid-flow; for "set up everything" requests, use the sequential-confirmation loop in the rule below rather than batching all features in one pass)
104
- - NEVER show features that do not have a working child skill
105
- - If the user says "set up everything" or "all", walk through each available feature sequentially in the recommended order, confirming between each step
160
+ - ALWAYS run the master-switch prerequisite (Behavior step 2) before showing the menu, unless the user
161
+ already confirmed the switch is on earlier in this conversation
162
+ - ALWAYS present the feature menu before configuring any selected feature (the master-switch prerequisite
163
+ is the only permitted action before the menu) — do not assume which feature the user wants, **except**
164
+ when the user named a specific feature, in which case go straight to it (single-select is fine)
165
+ - ALWAYS pair the rendered feature-menu table with an `AskUserQuestion` (`multiSelect: true`) in the same
166
+ response — the table is the visual view; the tool call is the selection channel
167
+ - For an **inline** feature, ALWAYS read its reference file first and follow the SOR at runtime — never
168
+ hardcode a route, body, or preference name
169
+ - NEVER set up a feature the user did not select; for "set up everything", walk each feature sequentially
170
+ in recommended order, confirming between each step
106
171
  - Track progress across the conversation — do not re-present completed features as "Not done"
107
- - Do not show Salesforce record IDs in any output — use human-readable names only
108
- - If the user asks to create, clone, or provision users, or to assign incident permission sets, tell them those features are not yet available in this orchestrator and will be added as their child skills merge
172
+ - Do not show Salesforce record IDs in any output — human-readable names only
109
173
 
110
174
  ---
111
175
 
112
176
  ## Verification checklist
113
177
 
114
- Before emitting any menu or summary in this skill, mentally confirm each of the following. If any box is unchecked, adjust the output before sending.
178
+ Before emitting any menu or summary, confirm each; adjust the output before sending if any is unchecked.
115
179
 
116
180
  - [ ] The header line ends with `(via service-itsm-agentic-setup-incident-management)`
117
- - [ ] The Incident Management master switch has been confirmed on (via `service-itsm-incident-mgmt-configure`) before the feature menu is emitted, unless the user already confirmed it earlier in this conversation
118
- - [ ] Only features with a working child skill are shown; placeholder features are hidden
119
- - [ ] The feature menu is presented as a multi-select (single-select only if the user has already named a specific feature)
120
- - [ ] The feature menu emitted BOTH the ASCII table AND an `AskUserQuestion` (`multiSelect: true`) presenting the same options in the same response — never one without the other
121
- - [ ] Each feature row's `Status` column reflects the actual tracked state from the conversation (`Not done`, `In progress`, or `Done`) — not a hard-coded default
122
- - [ ] For a completion summary, the header line and closing line are chosen by the rubric in `examples/output-templates.md` (all `Done` → *Complete*; any `Not done`/`In progress` → *Finished*)
123
- - [ ] A feature is being configured only because the user explicitly selected it (or is being walked through sequentially with confirmation under an "all" / "everything" request)
124
- - [ ] The next action delegates to a child skill, never configures a feature inline
181
+ - [ ] The master switch was confirmed on (via `service-itsm-incident-mgmt-configure`) before the menu,
182
+ unless already confirmed earlier in this conversation
183
+ - [ ] The feature menu emitted BOTH the ASCII table AND an `AskUserQuestion` (`multiSelect: true`) in the
184
+ same response (single-select only if the user already named a specific feature)
185
+ - [ ] Each feature row's `Status` reflects the actual tracked state (`Not done`, `In progress`, `Done`)
186
+ - [ ] A feature is being handled only because the user explicitly selected it (or is being walked through
187
+ sequentially with confirmation under an "all" / "everything" request)
188
+ - [ ] For an inline feature: its reference file was read; live state was read before any write; each write
189
+ was confirmed and verified by read-back; one-way / license-ordering invariants were honored
190
+ - [ ] For a delegated feature: the child skill was invoked, not configured inline
125
191
  - [ ] No Salesforce record IDs appear in the output — human-readable names only
126
192
 
127
193
  ---
@@ -130,4 +196,8 @@ Before emitting any menu or summary in this skill, mentally confirm each of the
130
196
 
131
197
  | File | When to read |
132
198
  |------|--------------|
133
- | `examples/output-templates.md` | Behavior steps 3, 5, and 6 — feature menu (multi-select), post-feature progress, and completion summary text blocks |
199
+ | `examples/output-templates.md` | Behavior steps 3, 5, 6 — feature menu (multi-select), post-feature progress, completion summary |
200
+ | `references/incident-preferences.md` | Before executing the **Incident Preferences** feature — the six preferences, the one-way rules, the SOR delegation map, invariants, and failure taxonomy |
201
+ | `references/major-incident-management.md` | Before executing the **Major Incident Management** feature — the two surfaces (approval group + preferences), licensing preconditions, ordering, invariants |
202
+ | `references/incident-persona-psg.md` | Before executing the **Incident Persona PSG** feature — the two persona PSGs, PSL-before-PSG ordering, resolution rules, invariants |
203
+ | `references/service-mgmt-privilege.md` | Before executing the **Service Management Privilege** feature — the Enable Privilege Assignment toggle, escalation level, privilege CRUD (destructive delete), bulk assignments (no read-back), and the SOR step map |
@@ -1,7 +1,8 @@
1
1
  # Output Templates — service-itsm-agentic-setup-incident-management
2
2
 
3
- Emit one of these text blocks at the corresponding step in the workflow. Only features with a
4
- working child skill appear — hide placeholder rows.
3
+ Emit one of these text blocks at the corresponding step in the workflow. Show every feature the master
4
+ switch enables; render each row's `Status` from the actual tracked state (`Not done`, `In progress`,
5
+ `Done`) — never hard-code it.
5
6
 
6
7
  ## Feature menu (Behavior step 3)
7
8
 
@@ -17,36 +18,47 @@ Here are the features available for Incident Management. Select one or more to c
17
18
  │ │ │ Entitlement so Incidents inherit SLA milestones │ │
18
19
  │ 2 │ Priority Matrix │ Enable and shape the Impact × Urgency grid that │ Not done │
19
20
  │ │ │ derives Priority on Incident records │ │
21
+ │ 3 │ Incident Preferences │ The six per-feature setup toggles (validations, │ Not done │
22
+ │ │ │ auto-close, triage, Einstein assign, rich text) │ │
23
+ │ 4 │ Major Incident Management │ Approval group + the two MIM preferences │ Not done │
24
+ │ │ │ (auto-create problem, auto-close child) │ │
25
+ │ 5 │ Incident Persona PSG │ Assign the Incident Fulfiller / Incident Manager │ Not done │
26
+ │ │ │ persona to a user (bundle + backing licenses) │ │
27
+ │ 6 │ Service Management Privilege │ Escalation level, privilege records + employee │ Not done │
28
+ │ │ │ assignments, behind Enable Privilege Assignment │ │
20
29
  └───┴───────────────────────────────┴──────────────────────────────────────────────────┴──────────┘
21
30
 
22
- Reply with the numbers of the features you want to set up (one or more, e.g. `1,2`).
31
+ Reply with the numbers of the features you want to set up (one or more, e.g. `1,3`).
23
32
  ```
24
33
 
25
34
  ## Post-feature progress (Behavior step 5)
26
35
 
27
- Example after the SLA & Milestones child skill completes (Priority Matrix still `Not done`):
36
+ Example after the Incident Preferences feature completes (others still `Not done`):
28
37
 
29
38
  ```text
30
- SLA & Milestones — configured successfully
31
- (via service-itsm-agentic-setup-incident-sla-configure)
39
+ Incident Preferences — configured successfully
40
+ (via service-itsm-agentic-setup-incident-management)
32
41
 
33
42
  ┌───┬───────────────────────────────┬──────────┐
34
43
  │ # │ Feature │ Status │
35
44
  ├───┼───────────────────────────────┼──────────┤
36
- │ 1 │ SLA & Milestones │ Done │
45
+ │ 1 │ SLA & Milestones │ Not done │
37
46
  │ 2 │ Priority Matrix │ Not done │
47
+ │ 3 │ Incident Preferences │ Done │
48
+ │ 4 │ Major Incident Management │ Not done │
49
+ │ 5 │ Incident Persona PSG │ Not done │
50
+ │ 6 │ Service Management Privilege │ Not done │
38
51
  └───┴───────────────────────────────┴──────────┘
39
52
 
40
- The next logical step is Priority Matrix — say `2` to configure it now, or `done` to finish.
53
+ Say a number to configure the next feature, or `done` to finish.
41
54
  ```
42
55
 
43
56
  ## Completion summary (Behavior step 6)
44
57
 
45
- The completion summary fires either (a) after every feature completes, or (b) when the user says
46
- they are finished — even if some features are still `Not done`. When rendering:
58
+ The completion summary fires either (a) after every feature completes, or (b) when the user says they are
59
+ finished — even if some features are still `Not done`. When rendering:
47
60
 
48
61
  - Substitute each feature's row with its actual tracked status: `Done`, `In progress`, or `Not done`.
49
- Do NOT hard-code `Done`.
50
62
  - Choose the header line based on whether every feature is `Done`:
51
63
  - All features `Done` → `Incident Management Setup — Complete`
52
64
  - Any feature still `Not done` or `In progress` → `Incident Management Setup — Finished`
@@ -54,18 +66,22 @@ they are finished — even if some features are still `Not done`. When rendering
54
66
  - All `Done` → `Your Incident Management features are configured.`
55
67
  - Otherwise → `You have finished the features you selected. The remaining features can be resumed later by re-invoking this orchestrator.`
56
68
 
57
- Example — user finished the setup with both features configured:
69
+ Example — user finished with three features configured, three left:
58
70
 
59
71
  ```text
60
- Incident Management Setup — Complete
72
+ Incident Management Setup — Finished
61
73
  (via service-itsm-agentic-setup-incident-management)
62
74
 
63
75
  ┌───────────────────────────────┬──────────┐
64
76
  │ Feature │ Status │
65
77
  ├───────────────────────────────┼──────────┤
66
78
  │ SLA & Milestones │ Done │
67
- │ Priority Matrix │ Done │
79
+ │ Priority Matrix │ Not done │
80
+ │ Incident Preferences │ Done │
81
+ │ Major Incident Management │ Done │
82
+ │ Incident Persona PSG │ Not done │
83
+ │ Service Management Privilege │ Not done │
68
84
  └───────────────────────────────┴──────────┘
69
85
 
70
- Your Incident Management features are configured.
86
+ You have finished the features you selected. The remaining features can be resumed later by re-invoking this orchestrator.
71
87
  ```
@@ -0,0 +1,156 @@
1
+ # Feature: Incident Persona PSG Assignment (inline execution)
2
+
3
+ How the orchestrator executes the **Persona** feature — granting a **specific user** an ITSM Incident
4
+ Management **persona** by assigning the persona's **permission set group (PSG)** (the **Incident Fulfiller**
5
+ or **Incident Manager** bundle) together with the **backing permission-set licenses** its member permission
6
+ sets require. This runs **inline** through the Salesforce-hosted **`headless-360`** MCP server (server key
7
+ `headless-360`) via its four meta-tools (`discover`, `describe`, `dispatch_readonly`, `dispatch`). The org
8
+ comes from the OAuth JWT on the MCP session — never handle an org id, alias, or credentials. Minimum API
9
+ version **67.0**.
10
+
11
+ ## Delegate to the systems of record
12
+
13
+ Every operation is delegated to a system of record (SOR) and its exact shape is fetched at runtime —
14
+ `discover` by intent, `describe` the SOR step for its **current** route, method, and argument schema, then
15
+ `dispatch_readonly` (reads) / `dispatch` (writes). **Hardcode no routes, SOQL, or request bodies; use what
16
+ `describe` returns, and if it disagrees with anything here, `describe` wins.** Discover by intent, not by
17
+ id; a `discover` miss is not proof an operation is unavailable.
18
+
19
+ | SOR | Owns | Status |
20
+ |-----|------|--------|
21
+ | **`PermSetGroups`** (approved) | Assigning a PSG to a user; listing a user's PSG assignments | Served today |
22
+ | **ITSM incident-persona assignment SOR** | Resolving the incident persona PSGs; resolving the target user; resolving a PSG's member permission sets + their backing licenses; assigning the backing permission-set licenses; the license-seat check; read-back verification | Being onboarded separately. Until served, resolve these via the standard Salesforce Data API **by intent** — the objects and invariants are named below; never via a route written here |
23
+
24
+ Discover each by intent — e.g. `discover("assign a permission set group to a user")` for the assignment,
25
+ `discover("assign the backing permission-set licenses of an incident persona PSG")` for the license recipe.
26
+
27
+ > **Load-bearing trap the SOR does not encode.** Assigning the PSG *alone* sticks the assignment, but any
28
+ > permission in a member set whose backing **permission-set license (PSL)** the user lacks **never
29
+ > activates** — the persona is silently half-provisioned, and Salesforce does not auto-assign a PSG's
30
+ > member PSLs. **Assign the union of the member sets' backing PSLs first, then the PSG.** The PSL set
31
+ > differs per PSG and the Ids differ per org, so resolve it at runtime — never hardcode it.
32
+
33
+ ## The two Incident Management persona PSGs
34
+
35
+ Both are Core-shipped in namespace `force` — query by `DeveloperName` with **no** `NamespacePrefix` filter
36
+ (which would exclude them). Resolve each PSG's Id, its member permission sets, and their backing license Ids
37
+ at **runtime**.
38
+
39
+ | Persona | PSG (`DeveloperName`) | Grants |
40
+ |---------|-----------------------|--------|
41
+ | Incident Fulfiller | `IncidentFulfillerPSG` | Work incidents as a fulfiller (incident + problem/change/release associators, major-incident proposer) |
42
+ | Incident Manager | `IncidentManagerPSG` | Manage the incident-management process and its records |
43
+
44
+ The **Major Incident Manager** PSG (`MajorIncidentManagerPSG`) is **out of scope** here (its approver
45
+ licensing is part of the orchestrator's **Major Incident Management** feature).
46
+
47
+ ## Scope
48
+
49
+ - **In scope**: resolving which incident persona PSG(s) exist on the org; resolving the target user;
50
+ resolving each chosen PSG's member permission sets and their backing licenses at runtime; checking
51
+ existing assignments (idempotency); assigning the missing backing PSL(s) and then the PSG; verifying by
52
+ read-back.
53
+ - **Out of scope**: the **Major Incident Manager** PSG; creating / editing / recalculating a PSG or its
54
+ membership; enabling ITSM / incident-management features (`service-itsm-incident-mgmt-configure`); the
55
+ `IncidentFulfiller` permission **set** for the Fulfiller **agent's** access
56
+ (`service-itsm-agentic-setup-itsm-agentforce-permset-assign`); CMDB access
57
+ (`service-itsm-agentic-setup-cmdb-access-assign`); generic, non-incident permission-set / PSG assignment
58
+ (`dx-org-permission-set-assign`).
59
+
60
+ ## Preconditions
61
+
62
+ - **ITSM Incident Management must be provisioned** — the incident persona PSGs must exist on the org. If
63
+ neither is found, **stop and hand off** to `service-itsm-incident-mgmt-configure`; assign nothing.
64
+ - **The acting user must be able to assign permission sets** (the SOR gates writes on it). A write that
65
+ fails with an access error that is not a duplicate → surface it plainly and stop; an admin must do it.
66
+ - **Each backing license consumes a seat.** A seat-exhausted license blocks that persona; report it.
67
+
68
+ ## Operations (shapes come from `describe`)
69
+
70
+ 1. **Resolve which incident persona PSGs exist (read).** Look up the two PSGs by `DeveloperName`
71
+ (`IncidentFulfillerPSG`, `IncidentManagerPSG`) with **no `NamespacePrefix` filter**. None found → hand
72
+ off to `service-itsm-incident-mgmt-configure` and stop. Capture each PSG's Id and status.
73
+ 2. **Resolve the target user (read).** To exactly one active user. For "me" / "the current user", read the
74
+ API root's identity (the running user's `005…` Id) — **not** the `USER_ID()` SOQL function (Apex-only)
75
+ and **not** the Chatter current-user endpoint (fails when Chatter is off). Zero / multiple → disambiguate.
76
+ 3. **Resolve the chosen PSG's member licenses (read).** From the PSG's member permission sets, collect the
77
+ **distinct, non-null backing permission-set-license Ids** — the link is each member permission set's
78
+ `LicenseId`. Do **not** traverse the license's `Name`/`DeveloperName` from the member (that relationship
79
+ rejects); resolve the license label separately by Id. No members → the bundle is empty; surface and stop.
80
+ 4. **Check existing assignments (read — idempotency).** Whether the PSG is already assigned, and which
81
+ backing licenses the user already holds. Write only what is missing.
82
+ 5. **Assign the missing backing licenses, then the PSG (write — confirm first).** Assign each **missing
83
+ backing license first**, then the PSG (keyed on `PermissionSetGroupId`). A duplicate = already-assigned
84
+ (idempotent success). A seat/limit error on a license = exhausted; stop and report — do not retry.
85
+ 6. **Verify (read).** Re-read the PSG assignment and every backing license for the user, and re-read the
86
+ PSG's status. Provisioned only when all read back. If `Status` is still `Updating`, tell the user
87
+ effective permissions are settling and will be active shortly.
88
+
89
+ If the user picks **both** personas, run steps 3–6 once **per PSG** (the bundles have different member
90
+ licenses) and report each.
91
+
92
+ ## Invariants — the contract (these do NOT come from `describe`)
93
+
94
+ - **Assign the backing licenses before the PSG — correctness ordering, not a platform gate.** The PSG
95
+ sticks on its own, but any member-set permission whose backing license the user lacks **never activates**.
96
+ Salesforce neither rejects the PSG assignment for a missing license nor auto-assigns the licenses.
97
+ - **A PSG assignment keys on the permission-set-*group* Id, never a permission-set Id.**
98
+ - **Query the persona PSGs by `DeveloperName` with no `NamespacePrefix` filter** (namespace `force`).
99
+ - **Idempotent** — read before every write; a duplicate is already-assigned success, not a failure.
100
+ - **The PSG recalculates asynchronously** after an assignment; effective permissions can be stale until its
101
+ status settles.
102
+ - **Verify by read-back** — the write response alone is not proof (half-provisioning / recalculation).
103
+ - **Resolve the backing-license set at runtime** — it differs per PSG and Ids differ per org; never hardcode.
104
+
105
+ ## Clarifying questions
106
+
107
+ - **Which user?** A username / name / email resolving to exactly one active user; for "me", the running user.
108
+ - **Which persona(s)?** For a generic request, do **not** auto-select — present an `AskUserQuestion` menu of
109
+ the incident PSGs that **exist on the org** (Fulfiller = work incidents; Manager = manage the process),
110
+ multi-select (one or both). Never offer the Major Incident Manager PSG.
111
+ - **Which org?** Confirm it and state plainly the org will be **modified** (a PSG + licenses are writes;
112
+ each license consumes a seat). For production, get explicit confirmation.
113
+
114
+ ## Output expectations
115
+
116
+ ```text
117
+ Incident Management Persona Assignment
118
+ User: <name> (<username>)
119
+ Persona: <Incident Fulfiller | Incident Manager>
120
+
121
+ Persona bundle .................... Assigned | Already had it
122
+ Backing licenses (N) .............. Assigned N | M already held
123
+ Effective permissions ............. Active | Recalculating (settles shortly)
124
+ ```
125
+
126
+ Repeat the `Persona:` block per PSG if both were chosen. Report only what read-back confirmed. If the
127
+ personas are not on the org, say so and name `service-itsm-incident-mgmt-configure`.
128
+
129
+ ## Common failures (surface in plain language)
130
+
131
+ | Symptom | Likely cause | What to tell the user |
132
+ |---------|--------------|-----------------------|
133
+ | No incident PSG on the org | ITSM Incident Management not provisioned | The incident personas aren't set up yet — that's a separate step (`service-itsm-incident-mgmt-configure`) |
134
+ | Duplicate on assign | User already has that grant | Not an error — report as already assigned |
135
+ | Seat / limit error on a license | An incident license has no free seats | A seat must free up (or more licenses added); the persona is incomplete without it |
136
+ | PSG assigned but some actions missing | A backing license wasn't assigned, or the PSG is still recalculating | Confirm every backing license is assigned; if it's settling, retry in a moment |
137
+ | Access error on the PSG write (not a duplicate) | Acting user can't assign permission sets | An admin must grant that or perform the assignment |
138
+ | `dispatch*` auth error | headless-360 session not authenticated / expired | Re-authenticate the connection and confirm it points at the intended org |
139
+
140
+ ## Reading `dispatch` results
141
+
142
+ Responses come back wrapped as `{ status_code, body }`; read what you need from `body`. A write success is a
143
+ created record. A `400` carrying a duplicate code = already-assigned (treat as success). A seat/limit error
144
+ on a license = no free seats (report used-vs-total; do not retry). An access error that is **not** a
145
+ duplicate on the PSG write = the acting user can't assign permission sets (an admin must). A `404` = the
146
+ operation isn't available on this org.
147
+
148
+ ## Dead ends — do NOT do these
149
+
150
+ - Assign the PSG with a permission-set Id — a PSG assignment keys on the group Id.
151
+ - Assign the PSG without its members' backing licenses — it silently half-provisions the persona.
152
+ - Hardcode the backing-license list, or add a `NamespacePrefix` filter to the PSG lookup.
153
+ - Create, edit, or recalculate the PSG or its membership — this feature only **assigns** the standard
154
+ incident PSGs.
155
+ - Retry a write that failed with a seat/limit error — the shortage is real; surface it.
156
+ - Write a route, SOQL string, or request body here — delegate to the SOR and let `describe` carry the shape.