@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.
- package/package.json +1 -1
- package/skills/agentforce-generate/SKILL.md +8 -0
- package/skills/agentforce-generate/references/actions-reference.md +2 -2
- package/skills/agentforce-generate/references/voice-modality-reference.md +51 -15
- package/skills/agentforce-generate/references/voice-telephony-cli.md +193 -0
- package/skills/agentforce-observe/SKILL.md +13 -9
- package/skills/agentforce-observe/references/ahm-alerts.md +193 -14
- package/skills/automation-sandbox-post-copy-config-generate/SKILL.md +24 -15
- package/skills/automation-sandbox-post-copy-config-generate/assets/config_template.json +11 -0
- package/skills/automation-sandbox-post-copy-config-generate/assets/json_schema.json +33 -1
- package/skills/automation-sandbox-post-copy-config-generate/references/configuration_catalog.md +32 -1
- package/skills/automation-sandbox-post-copy-configure/SKILL.md +75 -71
- package/skills/automation-sandbox-post-copy-configure/assets/scheduled_apex_template.apex +13 -0
- package/skills/automation-sandbox-post-copy-configure/examples/sample_scheduled_apex_config.json +13 -0
- package/skills/automation-sandbox-post-copy-configure/references/scheduled_apex_path.md +155 -0
- package/skills/automation-sandbox-post-copy-configure/scripts/build-scheduled-apex.mjs +62 -0
- package/skills/automation-sandbox-post-copy-configure/scripts/soql-escape-job-name.mjs +28 -0
- package/skills/consumer-goods-accruals-datakit-deploy/SKILL.md +383 -0
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/setup.js +324 -0
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/00-check-prerequisites.js +63 -0
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/01-download-static-resource.js +100 -0
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/02-replace-org-id.js +46 -0
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/03-deploy-metadata.js +46 -0
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/04-deploy-engine.js +198 -0
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/05-deploy-tpm-accruals.js +231 -0
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/06-create-dataspace.js +82 -0
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/07-deploy-accruals-reports.js +517 -0
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/08-deploy-ui.js +416 -0
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/09-completion.js +44 -0
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/utils.js +514 -0
- package/skills/consumer-goods-sync-management-configure/SKILL.md +137 -0
- package/skills/consumer-goods-sync-management-configure/examples/scenarios.md +294 -0
- package/skills/consumer-goods-sync-management-configure/references/act1-setup-sync.md +333 -0
- package/skills/consumer-goods-sync-management-configure/references/act2-assign-users.md +324 -0
- package/skills/consumer-goods-sync-management-configure/references/act3-plan-verify.md +113 -0
- package/skills/consumer-goods-sync-management-configure/references/readiness-and-enablement.md +164 -0
- package/skills/consumer-goods-sync-management-configure/references/sync-management-app-install-backbone.md +159 -0
- package/skills/consumer-goods-sync-management-configure/references/transports-and-namespace.md +220 -0
- package/skills/consumer-goods-sync-management-configure/references/verify-and-smoke.md +175 -0
- package/skills/dx-org-analyze/SKILL.md +0 -1
- package/skills/dx-org-analyze/scripts/collect_org_data.py +2 -2
- package/skills/dx-org-analyze/scripts/compute_diff.py +2 -4
- package/skills/dx-org-analyze/scripts/introspect_org.py +4 -40
- package/skills/dx-org-manage/SKILL.md +6 -50
- package/skills/dx-org-manage/examples/README.md +10 -16
- package/skills/dx-org-manage/references/scratch-org-create.md +1 -1
- package/skills/dx-org-manage/references/scratch-org-operations.md +1 -1
- package/skills/dx-org-shape-manage/SKILL.md +4 -3
- package/skills/education-cloud-domain-configure/references/gotchas-extended.md +1 -0
- package/skills/experience-accessibility-validate/SKILL.md +8 -5
- package/skills/experience-accessibility-validate/references/reviewers/sc-1-1-1-non-text-content.md +1 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-1-i-lists.md +0 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-1-ii-tables.md +20 -85
- package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-1-iii-form-labels.md +4 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-1-iv-regions.md +0 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-1-v-groups.md +2 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-5-identify-input.md +0 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-1-4-3-contrast.md +4 -14
- package/skills/experience-accessibility-validate/references/reviewers/sc-2-1-1-keyboard.md +9 -5
- package/skills/experience-accessibility-validate/references/reviewers/sc-2-4-4-link-purpose.md +1 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-2-4-6-headings-labels.md +0 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-2-5-1-pointer-gestures.md +0 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-2-5-2-pointer-cancellation.md +0 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-2-5-3-label-in-name.md +0 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-2-5-7-dragging-movement.md +0 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-3-2-1-on-focus.md +0 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-3-2-2-on-input.md +1 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-3-3-1-error-identification.md +1 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-3-3-2-labels-instructions.md +1 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-3-3-3-error-suggestion.md +1 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-4-1-2-i-name.md +4 -5
- package/skills/experience-accessibility-validate/references/reviewers/sc-4-1-2-ii-role.md +1 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-4-1-2-iii-value.md +0 -4
- package/skills/experience-lwc-accessibility-jest-run/SKILL.md +104 -25
- package/skills/experience-lwc-accessibility-jest-run/assets/jest.config.js +4 -0
- package/skills/experience-lwc-accessibility-jest-run/assets/sa11y-jest-setup.js +5 -0
- package/skills/experience-ui-bundle-app-coordinate/SKILL.md +5 -5
- package/skills/experience-ui-bundle-features-generate/SKILL.md +65 -36
- package/skills/experience-ui-bundle-features-generate/references/angular/features.md +74 -0
- package/skills/experience-ui-bundle-features-generate/references/react/features.md +59 -0
- package/skills/experience-ui-bundle-features-generate/scripts/detect-framework.sh +73 -0
- package/skills/experience-ui-bundle-frontend-generate/SKILL.md +2 -2
- package/skills/experience-ui-bundle-metadata-generate/SKILL.md +26 -14
- package/skills/experience-ui-bundle-metadata-generate/references/angular-metadata-generate.md +37 -0
- package/skills/experience-ui-bundle-metadata-generate/references/react-metadata-generate.md +32 -0
- package/skills/experience-ui-bundle-metadata-generate/scripts/detect-framework.sh +73 -0
- package/skills/experience-ui-bundle-metadata-generate/scripts/verify-bundle-location.sh +30 -8
- package/skills/field-service-data-capture-migrate/SKILL.md +391 -0
- package/skills/field-service-data-capture-migrate/assets/sample-legacy-flow.flow-meta.xml +163 -0
- package/skills/field-service-data-capture-migrate/references/architecture-notes.md +40 -0
- package/skills/field-service-data-capture-migrate/references/component-mapping.md +278 -0
- package/skills/field-service-data-capture-migrate/references/converter-builder-contract.md +183 -0
- package/skills/field-service-data-capture-migrate/references/dc-platform-rules.md +130 -0
- package/skills/field-service-data-capture-migrate/references/fsm-dc-capability-catalog.md +215 -0
- package/skills/field-service-data-capture-migrate/references/known-deploy-errors.md +36 -0
- package/skills/field-service-data-capture-migrate/references/migration-checklist.md +121 -0
- package/skills/field-service-data-capture-migrate/references/transformer-rules.md +132 -0
- package/skills/field-service-data-capture-migrate/scripts/analyze_flow.py +277 -0
- package/skills/field-service-data-capture-migrate/scripts/convert_to_dc_spec.py +1311 -0
- package/skills/field-service-data-capture-migrate/scripts/cud_analysis.py +402 -0
- package/skills/field-service-data-capture-migrate/scripts/deploy_flow.sh +230 -0
- package/skills/field-service-data-capture-migrate/scripts/discover_subflow_tree.py +230 -0
- package/skills/field-service-data-capture-migrate/scripts/flow_input.py +186 -0
- package/skills/field-service-data-capture-migrate/scripts/flow_xml_utils.py +39 -0
- package/skills/field-service-data-capture-migrate/scripts/fsm_dc_catalog.py +413 -0
- package/skills/field-service-data-capture-migrate/scripts/generate_summary.py +199 -0
- package/skills/field-service-data-capture-migrate/scripts/json_to_flow_xml.py +146 -0
- package/skills/field-service-data-capture-migrate/scripts/manual_review_flags.py +42 -0
- package/skills/field-service-data-capture-migrate/scripts/retrieve_flow_rest.sh +155 -0
- package/skills/field-service-data-capture-migrate/scripts/subflow_names.py +49 -0
- package/skills/field-service-data-capture-migrate/scripts/transform_flow.py +1661 -0
- package/skills/field-service-data-capture-migrate/scripts/validate_flow.sh +147 -0
- package/skills/field-service-data-capture-migrate/scripts/vendor/build_flow.py +1258 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/SKILL.md +1 -1
- package/skills/life-sciences-fieldsalesrep-coordinate/references/orchestration-flow.md +1 -1
- package/skills/life-sciences-kam-coordinate/references/stage-5-data-and-plan-templates-overview.md +14 -1
- package/skills/mobile-apps-create/SKILL.md +1 -1
- package/skills/{platform-agentsetup-categories-fetch → platform-agenticsetup-categories-get}/SKILL.md +7 -7
- package/skills/platform-sandbox-configure/SKILL.md +108 -133
- package/skills/platform-sandbox-configure/references/api-response-shapes.md +39 -0
- package/skills/platform-sandbox-configure/references/definition-file-approach.md +73 -0
- package/skills/platform-widget-generate/SKILL.md +26 -18
- package/skills/platform-widget-generate/examples/formulas.json +191 -0
- package/skills/platform-widget-generate/references/widget-formulas.md +123 -0
- package/skills/platform-widget-generate/references/widget-meta-directives.md +4 -4
- package/skills/sales-call-scoring-configure/SKILL.md +318 -0
- package/skills/sales-call-scoring-configure/assets/best-practice-competencies.json +67 -0
- package/skills/sales-call-scoring-configure/assets/ootb-competencies.json +58 -0
- package/skills/sales-call-scoring-configure/references/admin-communication.md +79 -0
- package/skills/sales-call-scoring-configure/references/competency-crud.md +130 -0
- package/skills/sales-call-scoring-configure/scripts/create-competency.sh +166 -0
- package/skills/sales-call-scoring-configure/scripts/create-custom-competency.sh +166 -0
- package/skills/sales-call-scoring-configure/scripts/edit-competency.sh +185 -0
- package/skills/sales-call-scoring-configure/scripts/edit-custom-competency.sh +190 -0
- package/skills/sales-call-scoring-configure/scripts/enable-call-scoring.sh +436 -0
- package/skills/sales-call-scoring-configure/scripts/get-competency.sh +72 -0
- package/skills/sales-call-scoring-configure/scripts/get-custom-competency.sh +78 -0
- package/skills/sales-call-scoring-configure/scripts/install-best-practice-competencies.sh +223 -0
- package/skills/sales-call-scoring-configure/scripts/install-ootb-competencies.sh +237 -0
- package/skills/sales-call-scoring-configure/scripts/list-competencies.sh +99 -0
- package/skills/sales-call-scoring-configure/scripts/shared/auth.sh +116 -0
- package/skills/sales-call-scoring-configure/scripts/shared/cap.sh +86 -0
- package/skills/sales-call-scoring-configure/scripts/shared/soap.sh +267 -0
- package/skills/sales-call-scoring-configure/scripts/shared/soql.sh +25 -0
- package/skills/sales-call-scoring-configure/scripts/toggle-competency.sh +112 -0
- package/skills/sales-call-scoring-configure/scripts/toggle-custom-competency.sh +125 -0
- package/skills/sales-call-scoring-configure/scripts/verify-ootb-competencies.sh +116 -0
- package/skills/service-concierge-portal-generate/references/portal-deploy-runbook.md +1 -0
- package/skills/service-de-channel-activate/SKILL.md +6 -5
- package/skills/service-de-channel-create/SKILL.md +3 -3
- package/skills/service-de-channel-routing-configure/SKILL.md +3 -3
- package/skills/service-de-channel-settings-configure/SKILL.md +195 -0
- package/skills/service-de-channel-settings-configure/references/channel-settings-facets.md +152 -0
- package/skills/{service-de-channel-consent-configure → service-de-channel-settings-configure}/references/gotchas.md +3 -3
- package/skills/{service-de-channel-consent-configure → service-de-channel-settings-configure}/references/language-keywords.md +4 -4
- package/skills/{service-de-channel-consent-configure → service-de-channel-settings-configure}/references/worked-examples.md +14 -14
- package/skills/service-de-headless-channel-configure/SKILL.md +6 -6
- package/skills/service-de-headless-channel-configure/references/worked-examples.md +1 -1
- package/skills/service-helpagent-coordinate/SKILL.md +3 -2
- package/skills/service-helpagent-coordinate/references/channel-voice.md +15 -4
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +49 -31
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/examples/output-templates.md +71 -6
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/scripts/verify-child-verdict.mjs +26 -4
- package/skills/service-itsm-agentic-setup-cmdb-access-assign/SKILL.md +35 -10
- package/skills/service-itsm-agentic-setup-cmdb-access-assign/references/mcp-invocation.md +25 -5
- package/skills/service-itsm-agentic-setup-cmdb-bundle-deploy/SKILL.md +1 -1
- package/skills/service-itsm-agentic-setup-cmdb-configure/SKILL.md +5 -5
- package/skills/service-itsm-agentic-setup-cmdb-configure/references/mcp-invocation.md +1 -1
- package/skills/service-itsm-agentic-setup-cmdb-coordinate/SKILL.md +2 -2
- package/skills/service-itsm-agentic-setup-cmdb-coordinate/examples/output-templates.md +1 -1
- package/skills/service-itsm-agentic-setup-cmdb-discovery-configure/SKILL.md +25 -15
- package/skills/service-itsm-agentic-setup-employee-agent-configure/SKILL.md +8 -5
- package/skills/service-itsm-agentic-setup-employee-agent-configure/references/report-format.md +4 -2
- package/skills/service-itsm-agentic-setup-employee-agent-configure/references/workflow-detail.md +1 -1
- package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/render-report.mjs +29 -16
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/SKILL.md +8 -5
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/report-format.md +4 -2
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/workflow-detail.md +1 -1
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/render-report.mjs +29 -16
- package/skills/service-itsm-agentic-setup-incident-management/SKILL.md +138 -68
- package/skills/service-itsm-agentic-setup-incident-management/examples/output-templates.md +31 -15
- package/skills/service-itsm-agentic-setup-incident-management/references/incident-persona-psg.md +156 -0
- package/skills/service-itsm-agentic-setup-incident-management/references/incident-preferences.md +148 -0
- package/skills/service-itsm-agentic-setup-incident-management/references/major-incident-management.md +162 -0
- package/skills/service-itsm-agentic-setup-incident-management/references/service-mgmt-privilege.md +149 -0
- package/skills/service-itsm-agentic-setup-incident-sla-configure/SKILL.md +103 -89
- package/skills/service-itsm-agentic-setup-incident-sla-configure/assets/attach-milestone.json +2 -2
- package/skills/service-itsm-agentic-setup-incident-sla-configure/assets/predefined-incident-policy.json +21 -39
- package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/milestone-patterns.md +3 -3
- package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/output-templates.md +18 -1
- package/skills/service-itsm-agentic-setup-incident-sla-configure/references/mcp-invocation.md +63 -37
- package/skills/service-omni-attribute-routing-configure/SKILL.md +53 -0
- package/skills/service-omni-attribute-routing-configure/references/api-notes.md +7 -0
- package/skills/service-omni-attribute-routing-configure/scripts/configure-and-report.sh +224 -0
- package/skills/service-omni-attribute-routing-configure/scripts/tests/test_attribute_routing_contracts.py +137 -0
- package/skills/service-omni-channel-inventory-analyze/SKILL.md +96 -0
- package/skills/service-omni-channel-inventory-analyze/references/api-notes.md +52 -0
- package/skills/service-omni-channel-inventory-analyze/scripts/analyze.sh +185 -0
- package/skills/service-omni-channel-inventory-analyze/scripts/tests/_bootstrap.py +84 -0
- package/skills/service-omni-channel-inventory-analyze/scripts/tests/test_inventory_analyze_contracts.py +141 -0
- package/skills/service-omni-channel-limits-analyze/SKILL.md +70 -0
- package/skills/service-omni-channel-limits-analyze/references/api-notes.md +22 -0
- package/skills/service-omni-channel-limits-analyze/scripts/analyze.sh +159 -0
- package/skills/service-omni-channel-limits-analyze/scripts/tests/_bootstrap.py +87 -0
- package/skills/service-omni-channel-limits-analyze/scripts/tests/test_limits_analyze_contracts.py +99 -0
- package/skills/service-omni-channel-setup-coordinate/SKILL.md +12 -20
- package/skills/service-omni-channel-setup-coordinate/scripts/integration-driver.sh +55 -5
- package/skills/service-omni-channel-setup-coordinate/scripts/tests/test_omni_contracts.py +38 -0
- package/skills/service-omni-command-center-analyze/SKILL.md +2 -2
- package/skills/service-omni-command-center-analyze/scripts/analyze.sh +3 -3
- package/skills/dx-org-manage/examples/snapshots/error_output.json +0 -9
- package/skills/dx-org-manage/examples/snapshots/success_output.json +0 -15
- package/skills/dx-org-manage/references/cli_flags.md +0 -67
- package/skills/dx-org-manage/references/creating-snapshot.md +0 -103
- package/skills/dx-org-manage/references/snapshot_usage.md +0 -74
- package/skills/experience-accessibility-validate/scripts/contrast-ratio.py +0 -153
- package/skills/experience-lwc-accessibility-jest-run/references/running-sa11y-jest-tests.md +0 -205
- package/skills/experience-ui-bundle-features-generate/scripts/verify-react-bundle.sh +0 -14
- /package/skills/experience-ui-bundle-features-generate/references/{conflict-resolution-schema.json → common/conflict-resolution-schema.json} +0 -0
- /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
|
|
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: "
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
-
|
|
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
|
|
57
|
-
|
|
58
|
-
|
|
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
|
-
|
|
85
|
+
### 3. Present the feature menu as a multi-select
|
|
61
86
|
|
|
62
|
-
|
|
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
|
-
|
|
92
|
+
### 4. Handle each selected feature in order
|
|
65
93
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
89
|
-
2. Priority Matrix
|
|
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
|
|
100
|
-
|
|
101
|
-
- ALWAYS present the feature menu
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
-
|
|
105
|
-
|
|
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 —
|
|
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
|
|
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
|
|
118
|
-
|
|
119
|
-
- [ ] The feature menu
|
|
120
|
-
|
|
121
|
-
- [ ] Each feature row's `Status`
|
|
122
|
-
- [ ]
|
|
123
|
-
|
|
124
|
-
- [ ]
|
|
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,
|
|
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.
|
|
4
|
-
|
|
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,
|
|
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
|
|
36
|
+
Example after the Incident Preferences feature completes (others still `Not done`):
|
|
28
37
|
|
|
29
38
|
```text
|
|
30
|
-
|
|
31
|
-
(via service-itsm-agentic-setup-incident-
|
|
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 │
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
69
|
+
Example — user finished with three features configured, three left:
|
|
58
70
|
|
|
59
71
|
```text
|
|
60
|
-
Incident Management Setup —
|
|
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 │
|
|
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
|
-
|
|
86
|
+
You have finished the features you selected. The remaining features can be resumed later by re-invoking this orchestrator.
|
|
71
87
|
```
|
package/skills/service-itsm-agentic-setup-incident-management/references/incident-persona-psg.md
ADDED
|
@@ -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.
|