@salesforce/afv-skills 1.65.1 → 1.66.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 (31) hide show
  1. package/package.json +1 -1
  2. package/skills/agentforce-offline-experimentation-run/SKILL.md +16 -15
  3. package/skills/agentforce-offline-experimentation-run/scripts/sfap_replay.py +3 -245
  4. package/skills/dx-devops-work-item-manage/SKILL.md +34 -17
  5. package/skills/dx-devops-work-item-manage/examples/common-workflows.md +49 -0
  6. package/skills/dx-devops-work-item-manage/references/commit-api.md +116 -0
  7. package/skills/experience-lwc-widget-assess/SKILL.md +79 -0
  8. package/skills/experience-lwc-widget-migrate/SKILL.md +50 -0
  9. package/skills/platform-role-hierarchy-apply/SKILL.md +177 -0
  10. package/skills/platform-widget-generate/SKILL.md +58 -41
  11. package/skills/platform-widget-generate/references/widget-bundle-validation.md +14 -0
  12. package/skills/service-agentforce-contact-center-coordinate/SKILL.md +1 -1
  13. package/skills/service-agentforce-contact-center-coordinate/references/number_management_api.md +11 -1
  14. package/skills/service-agentforce-contact-center-coordinate/scripts/fetch-numbers.sh +12 -6
  15. package/skills/service-agentforce-contact-center-coordinate/scripts/lib.sh +16 -0
  16. package/skills/service-agentforce-contact-center-coordinate/scripts/procure-number.sh +2 -1
  17. package/skills/service-concierge-portal-generate/references/portal-deploy-runbook.md +24 -11
  18. package/skills/service-digital-engagement-channel-configure/SKILL.md +25 -14
  19. package/skills/service-digital-engagement-channel-configure/references/onboarding_contract.md +143 -0
  20. package/skills/service-digital-engagement-deployment-configure/SKILL.md +61 -12
  21. package/skills/service-digital-engagement-deployment-configure/references/connect_api_creation.md +14 -5
  22. package/skills/service-digital-engagement-deployment-configure/references/onboarding_contract.md +146 -0
  23. package/skills/service-itsm-agentic-setup-incident-management/SKILL.md +23 -13
  24. package/skills/service-itsm-agentic-setup-incident-management/references/incident-persona-psg.md +7 -6
  25. package/skills/service-itsm-agentic-setup-incident-management/references/incident-preferences.md +9 -10
  26. package/skills/service-itsm-agentic-setup-incident-management/references/major-incident-management.md +6 -6
  27. package/skills/service-itsm-agentic-setup-incident-management/references/service-mgmt-privilege.md +1 -1
  28. package/skills/service-itsm-agentic-setup-incident-sla-configure/SKILL.md +34 -25
  29. package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/milestone-patterns.md +1 -1
  30. package/skills/service-itsm-agentic-setup-incident-sla-configure/references/mcp-invocation.md +90 -86
  31. package/skills/service-itsm-agentic-setup-incident-sla-configure/references/workflow.md +63 -38
@@ -23,13 +23,30 @@ Configures `EmbeddedServiceConfig` metadata for Salesforce Messaging for In-App
23
23
  ## Scope
24
24
 
25
25
  - **In scope**: Creating new Embedded Service Deployments (API, Mobile, Web types) via Connect API; updating existing deployments with forms, branding, channel settings, and features via Metadata API; generating `EmbeddedServiceConfig` XML for updates
26
- - **Out of scope**: Creating the messaging channel itself (use `service-digital-engagement-channel-configure`), publishing deployments (Connect API post-step), creating Experience Sites (Connect API prerequisite for Web type)
26
+ - **Out of scope**: Creating the messaging channel itself (use `service-digital-engagement-channel-configure`), generating the website code snippet (offered only as a next step, see `references/code_snippet.md`), creating Experience Sites (Connect API prerequisite for Web type)
27
+
28
+ ---
29
+
30
+ ## Entry points: delegated or standalone
31
+
32
+ Decide this before asking anything.
33
+
34
+ - **Delegated** — the invocation carries `{ values, context }` with `context.calledFrom == "service-onboarding"`. The admin already approved `values` in the onboarding plan. Ask nothing; skip Clarifying Questions. If a required key is missing, stop and return `failed` naming it — do not guess.
35
+ - **Standalone** — no `context`. Run Clarifying Questions as written.
36
+
37
+ Both paths run the same pre-scan, write and validate steps. Full contract (payload, wording rules, result shape, registration entry): `references/onboarding_contract.md`.
38
+
39
+ ---
40
+
41
+ ## Transport
42
+
43
+ Org reads and writes go through the **headless-360 MCP `dispatch` / `dispatch_readonly`** tools on `/services/data/vXX.0/headless/metadata` (**Transport A, primary**). Use the **`sf` CLI** (**Transport B**) only for a type/verb that a read-only probe shows is not onboarded, or when the MCP is unavailable. Probe each type separately — never infer onboarding from a different type. Details, the GET → modify → full-document PUT rule, and the credential trap are in `references/onboarding_contract.md` §2. The `sf` commands in the steps below are the Transport B form. Exception: Web create always uses the `sf` CLI (step 17a).
27
44
 
28
45
  ---
29
46
 
30
47
  ## Clarifying Questions
31
48
 
32
- Before generating, ask the user if not already clear:
49
+ Before generating, ask the user if not already clear (standalone only):
33
50
 
34
51
  - **Create or update?** Are you creating a new deployment or updating an existing one?
35
52
  - **Deployment type?** API (headless), Mobile (native apps), or Web (browser widget)?
@@ -46,7 +63,7 @@ Gather or infer before proceeding:
46
63
 
47
64
  - **Operation**: `create` or `update`
48
65
  - **Deployment type**: `API`, `Mobile`, or `Web`
49
- - **Deployment name**: Used for `masterLabel` and the API name
66
+ - **Deployment name**: Used as `masterLabel`. Derive the API name (`fullName` / `DeveloperName`, Connect `name`) from it: replace each run of characters other than letters and digits with `_`, then trim leading/trailing `_` (`Acme Support Chat` → `Acme_Support_Chat`). The result must match `^[a-zA-Z][a-zA-Z0-9_]*$`. Use the API name for every lookup and write
50
67
  - **Channel name**: The `channelPlatformKey` of the associated messaging channel
51
68
 
52
69
  For **update** operations additionally:
@@ -69,12 +86,22 @@ All steps are sequential. Do not skip or reorder. Branch based on the operation
69
86
 
70
87
  1. **Verify org API version** — run `scripts/check-api-version.sh 67.0 <org-alias>` and report any errors it returns. If the script fails, generate a `sfdx-project.json` in the metadata output folder with `"sourceApiVersion": "67.0"`.
71
88
 
72
- 2. **Determine operation** — ask whether the user wants to create a new deployment or update an existing one.
89
+ 2. **Determine operation** — standalone: ask whether the user wants to create a new deployment or update an existing one. Delegated: taken from `values.operation`, then confirmed by the pre-scan (step 4a).
73
90
 
74
- 3. **Collect inputs** — gather deployment name, type, and channel name per Clarifying Questions above.
91
+ 3. **Collect inputs** — standalone: gather deployment name, type, and channel name per Clarifying Questions above. Delegated: bind them from `values`; stop with `failed` if `deploymentName`, `deploymentType` or `channelName` is missing.
92
+
93
+ 3a. **Probe transport** — read-only `GET` of `EmbeddedServiceConfig` via `dispatch_readonly`. Onboarded → Transport A. `UNSUPPORTED_OPERATION` or MCP unavailable → Transport B for that call. See `references/onboarding_contract.md` §2.
75
94
 
76
95
  4. **Read deployment settings reference** — load `references/deployment_settings.md` to understand all available configuration options.
77
96
 
97
+ 4a. **Pre-scan** — using the step 3a read, look for a deployment whose API name is the one derived from `deploymentName` (Required Inputs):
98
+ - none → operation is `create` (Phase 2A)
99
+ - exists and every targeted field already matches → **make no write**; return `already-configured` (delegated) or say so plainly (standalone). Skip to Phase 3
100
+ - exists with differences → operation is `update` (Phase 2B); announce each change, then write (standalone: ask for a yes first)
101
+ - exists but linked to a different channel → standalone: ask before repointing; delegated: return `failed`
102
+
103
+ Standalone with an existing deployment: offer no change / override / add to existing.
104
+
78
105
  ### Phase 2A — Create New Deployment
79
106
 
80
107
  Use this path when the operation is `create`.
@@ -99,11 +126,11 @@ Use this path when the operation is `create`.
99
126
  9. **Present output and next steps** — show the generated file and summarize what was configured. Recommend as next steps:
100
127
  - **Publish** the deployment via Connect API to make it live:
101
128
  ```bash
102
- sf api request rest "/services/data/v67.0/connect/embeddedservice/embeddedserviceconfig/publish/<EMBEDDED_SERVICE_CONFIG_ID>" -X POST -o <org-alias>
129
+ sf api request rest "/services/data/v67.0/connect/embeddedservice/embeddedserviceconfig/publish/<EMBEDDED_SERVICE_CONFIG_ID>" -X POST -b '{}' -o <org-alias>
103
130
  ```
104
131
  To obtain the `EMBEDDED_SERVICE_CONFIG_ID`:
105
132
  ```bash
106
- sf data query --query "SELECT Id FROM EmbeddedServiceConfig WHERE DeveloperName = '<DEPLOYMENT_NAME>'" --target-org <org-alias>
133
+ sf data query --use-tooling-api --query "SELECT Id FROM EmbeddedServiceConfig WHERE DeveloperName = '<DEPLOYMENT_NAME>'" --target-org <org-alias>
107
134
  ```
108
135
  - **Generate code snippet** for integration — see `references/code_snippet.md`
109
136
 
@@ -111,11 +138,11 @@ Use this path when the operation is `create`.
111
138
 
112
139
  Use this path when the operation is `update`.
113
140
 
114
- 10. **Retrieve the existing deployment** — retrieve the current `EmbeddedServiceConfig` metadata from the org before making changes:
141
+ 10. **Retrieve the existing deployment** — take the current `EmbeddedServiceConfig` from the org before making changes. Transport A: the `xmlRep` from the step 3a/4a `GET`. Transport B:
115
142
  ```bash
116
143
  sf project retrieve start --metadata EmbeddedServiceConfig:<DEPLOYMENT_NAME> --target-org <org-alias>
117
144
  ```
118
- Use the retrieved file as the starting structure. If retrieval is not possible, load `assets/esd_web_update_template.xml` as a fallback reference.
145
+ Use it as the starting structure — the update is always a **full document**, never a minimal payload (omitted inline blocks can be silently cleared). If retrieval is not possible, load `assets/esd_web_update_template.xml` as a fallback reference.
119
146
 
120
147
  11. **Apply messaging channel settings** — configure `<embeddedServiceMessagingChannel>` with:
121
148
  - `messagingChannel` — the channel's `channelPlatformKey`
@@ -146,18 +173,34 @@ Use this path when the operation is `update`.
146
173
  17. **Present output and next steps** — show the generated file and summarize what was configured. Recommend as next steps:
147
174
  - **Publish** the deployment via Connect API to make changes live:
148
175
  ```bash
149
- sf api request rest "/services/data/v67.0/connect/embeddedservice/embeddedserviceconfig/publish/<EMBEDDED_SERVICE_CONFIG_ID>" -X POST -o <org-alias>
176
+ sf api request rest "/services/data/v67.0/connect/embeddedservice/embeddedserviceconfig/publish/<EMBEDDED_SERVICE_CONFIG_ID>" -X POST -b '{}' -o <org-alias>
150
177
  ```
151
178
  To obtain the `EMBEDDED_SERVICE_CONFIG_ID`:
152
179
  ```bash
153
- sf data query --query "SELECT Id FROM EmbeddedServiceConfig WHERE DeveloperName = '<DEPLOYMENT_NAME>'" --target-org <org-alias>
180
+ sf data query --use-tooling-api --query "SELECT Id FROM EmbeddedServiceConfig WHERE DeveloperName = '<DEPLOYMENT_NAME>'" --target-org <org-alias>
154
181
  ```
155
182
  - **Generate code snippet** for integration — see `references/code_snippet.md`
156
183
 
184
+ ### Phase 2C — Apply to the org
185
+
186
+ Runs for both Phase 2A and 2B, except when the pre-scan returned `already-configured`. Standalone: confirm before writing. Delegated: the plan approval is the confirmation; still announce each write.
187
+
188
+ 17a. **Write the deployment** —
189
+ - Web create: Connect API (see `references/connect_api_creation.md`) via `sf api request rest` — always, not `dispatch` (MCP `dispatch` fails with `INTERNAL_ERROR` during site creation).
190
+ - API/Mobile create: Transport A `POST` `EmbeddedServiceConfig` (body carries `type`, `fullName`, `xmlRep`); Transport B `sf project deploy start`.
191
+ - Update: Transport A `PUT` of the **full** document; Transport B `sf project deploy start`.
192
+ Check `results[].success`, not just HTTP status. On failure stop and report the step — no silent retry.
193
+
194
+ 17b. **Re-read and diff** — `GET` the component again and confirm every intended field landed and no inline block (`embeddedServiceMessagingChannel`, forms) was dropped.
195
+
196
+ 17c. **Publish (Web only, only if something was written)** — `dispatch` `POST` on the fully-qualified publish path; if it returns a path/route error, run the `sf` publish command from the next-steps block above. Skip after a Web create alone when the create response has `isPublishSuccess: true` — the create already published.
197
+
157
198
  ### Phase 3 — Validate
158
199
 
159
200
  18. **Verify against checklist** — confirm all items in the Verification Checklist below pass.
160
201
 
202
+ 19. **Report** — delegated: return `{ "status": "success" | "already-configured" | "failed", "errorMessage": "...", "outputs": { ... } }` (shape in `references/onboarding_contract.md` §5). Standalone: the same outcome in plain language.
203
+
161
204
  ---
162
205
 
163
206
  ## Rules / Constraints
@@ -174,7 +217,9 @@ Use this path when the operation is `update`.
174
217
  | Pre-chat form fields must reference valid channel custom parameters | ChoiceList fields need the parameter deployed on the channel first |
175
218
  | File extension is `.EmbeddedServiceConfig-meta.xml` | Metadata API uses this specific extension |
176
219
  | Do not hardcode file paths — respect `sfdx-project.json` package directories | Customer orgs customize source paths |
177
- | Never include deploy/push commands in generated output | This skill produces artifacts only |
220
+ | Do not embed deploy/push commands inside generated files or artifacts | Artifacts stay portable; in-session writes happen in Phase 2C through the chosen transport |
221
+ | Update with the full retrieved document, never a minimal PUT | Omitted inline blocks can be silently cleared by the update |
222
+ | Pre-scan before every write; no write when the org already matches | Makes re-runs idempotent and keeps "already configured" honest |
178
223
  | Publish step (Connect API) required after Web ESD updates | Changes are not live until published |
179
224
 
180
225
  ---
@@ -188,6 +233,9 @@ Use this path when the operation is `update`.
188
233
  | Branding overrides not applied | Use Tooling API to update individual BrandingSet properties after the deployment is created |
189
234
  | Pre-chat ChoiceList not showing | ChoiceList requires two-step deploy: create ChoiceList first, then assign to form field |
190
235
  | Changes not appearing in widget | Web ESDs must be published via Connect API after any update |
236
+ | `sf api request rest` POST fails with "No 'mode' found in 'body' entry" | The CLI rejects a POST with no body (and `-b ""`). Pass `-b '{}'` — the publish endpoint takes no input |
237
+ | `sf api request rest` fails with "Nonexistent flag: --url" | The URL is a positional argument, not a flag, and must be fully qualified (`/services/data/vXX.0/connect/...`) |
238
+ | Web create via MCP `dispatch` returns `INTERNAL_ERROR` | Platform limitation of the MCP route during site creation — use `sf api request rest` for Web create. API/Mobile create and publish work via `dispatch` |
191
239
  | `embeddedServiceFlowConfig.enabled` error | Set to `false` unless you specifically need embedded flows (not routing flows) |
192
240
  | reCAPTCHA configuration rejected | reCAPTCHA is `@HideInWsdl` — must use Tooling API |
193
241
  | Business hours not taking effect | Only updating existing business hours works; creation is managed separately |
@@ -246,6 +294,7 @@ File structure follows the templates in `assets/`.
246
294
 
247
295
  | File | When to read |
248
296
  |------|-------------|
297
+ | `references/onboarding_contract.md` | Delegated mode (`context.calledFrom == "service-onboarding"`), org writes (transport), module registration |
249
298
  | `assets/esd_api_mobile_template.xml` | Before generating API or Mobile type deployments |
250
299
  | `assets/esd_web_update_template.xml` | Before generating Web type updates |
251
300
  | `references/deployment_settings.md` | When configuring deployment options beyond defaults |
@@ -15,9 +15,11 @@ Web-type Embedded Service Deployments cannot be created via Metadata API due to
15
15
  ## Connect API Endpoint
16
16
 
17
17
  ```text
18
- POST /connect/embeddedmessaging/deployment/setup
18
+ POST /services/data/vXX.0/connect/embeddedmessaging/deployment/setup
19
19
  ```
20
20
 
21
+ Always use the fully-qualified path (minimum `v67.0`). A bare `/connect/...` path is not routed.
22
+
21
23
  ### Request Body (Web)
22
24
 
23
25
  ```json
@@ -55,10 +57,13 @@ POST /connect/embeddedmessaging/deployment/setup
55
57
 
56
58
  ### Using Salesforce CLI (Web)
57
59
 
60
+ Always create Web deployments with the CLI. The same call through the headless-360 MCP `dispatch` fails with an
61
+ `INTERNAL_ERROR` server error during site creation.
62
+
58
63
  ```bash
59
64
  sf api request rest \
65
+ "/services/data/v67.0/connect/embeddedmessaging/deployment/setup" \
60
66
  --method POST \
61
- --url "/connect/embeddedmessaging/deployment/setup" \
62
67
  --body '{"name":"<NAME>","masterLabel":"<LABEL>","deploymentType":"Web","clientVersion":"WebV2","hostDomain":"<DOMAIN>","messagingChannelId":"<CHANNEL_ID>"}' \
63
68
  --target-org <org-alias>
64
69
  ```
@@ -67,8 +72,8 @@ sf api request rest \
67
72
 
68
73
  ```bash
69
74
  sf api request rest \
75
+ "/services/data/v67.0/connect/embeddedmessaging/deployment/setup" \
70
76
  --method POST \
71
- --url "/connect/embeddedmessaging/deployment/setup" \
72
77
  --body '{"name":"<NAME>","masterLabel":"<LABEL>","deploymentType":"API","messagingChannelId":"<CHANNEL_ID>"}' \
73
78
  --target-org <org-alias>
74
79
  ```
@@ -123,16 +128,20 @@ After creating the Web ESD via Connect API:
123
128
  After any update to a Web ESD (branding, forms, labels, settings), publish to make changes live:
124
129
 
125
130
  ```text
126
- POST /connect/embeddedservice/embeddedserviceconfig/publish/<EMBEDDED_SERVICE_CONFIG_ID>
131
+ POST /services/data/vXX.0/connect/embeddedservice/embeddedserviceconfig/publish/<EMBEDDED_SERVICE_CONFIG_ID>
127
132
  ```
128
133
 
129
134
  ```bash
130
135
  sf api request rest \
131
- /services/data/v67.0/connect/embeddedservice/embeddedserviceconfig/publish/<EMBEDDED_SERVICE_CONFIG_ID> \
136
+ "/services/data/v67.0/connect/embeddedservice/embeddedserviceconfig/publish/<EMBEDDED_SERVICE_CONFIG_ID>" \
132
137
  --method POST \
138
+ --body '{}' \
133
139
  --target-org <org-alias>
134
140
  ```
135
141
 
142
+ The `--body '{}'` is required: a POST with no body (or `--body ""`) fails in the CLI with
143
+ "No 'mode' found in 'body' entry" before any request is sent.
144
+
136
145
  ---
137
146
 
138
147
  ## Known Limitations
@@ -0,0 +1,146 @@
1
+ # Onboarding contract — delegated mode, transport, pre-scan, registration
2
+
3
+ Read this when the invocation carries a `context` object, when you are about to write to the org, or when the
4
+ skill is being registered in an onboarding module. It implements the Feature Setup Skill Guidelines (Conversational
5
+ Onboarding, Service Cloud) for this skill.
6
+
7
+ ## 1. Two entry points, one write procedure
8
+
9
+ | | Delegated | Standalone |
10
+ |---|---|---|
11
+ | Detected by | invocation has `context.calledFrom == "service-onboarding"` | no `context` object |
12
+ | Values come from | `values` in the payload — already approved in the plan table | you ask, using the defaults in SKILL.md |
13
+ | Questions | none. A missing required key is a caller bug: stop and report `failed` naming the key. Never default a value the admin did not approve | the Clarifying Questions in SKILL.md |
14
+ | Wording | `discoveryMode == "guided"` → plain business language (§4). `"pickAreas"` → Salesforce terminology | Salesforce terminology (the Clarifying Questions as written) |
15
+ | Ends with | the structured result in section 5 | a plain-language summary of the same outcome |
16
+
17
+ Both paths converge on the same pre-scan → write → validate procedure. The only difference is where values come from.
18
+
19
+ Delegated payload:
20
+
21
+ ```json
22
+ {
23
+ "values": {
24
+ "operation": "create",
25
+ "deploymentType": "Web",
26
+ "deploymentName": "Acme Support Chat",
27
+ "channelName": "Acme_Support_Channel",
28
+ "siteName": "ESW_AcmeSupport_1700000000000"
29
+ },
30
+ "context": { "calledFrom": "service-onboarding", "discoveryMode": "guided" }
31
+ }
32
+ ```
33
+
34
+ Required `values`: `deploymentName`, `deploymentType`, `channelName`. `deploymentName` is the label; the API name is
35
+ derived from it (SKILL.md Required Inputs: `Acme Support Chat` → `Acme_Support_Chat`). `operation` defaults to `create` when the pre-scan
36
+ finds nothing and `update` when it finds a deployment. `siteName` is required for Web updates. Optional feature keys
37
+ (pre-chat fields, business hours, T&C, branding) are applied only when present — do not invent them.
38
+
39
+ ## 2. Transport — `/headless/metadata` first, `sf` CLI as fallback
40
+
41
+ **Transport A (primary): the headless-360 MCP `dispatch` / `dispatch_readonly` tools** against the synchronous
42
+ Metadata-CRUD route, fully-qualified: `/services/data/vXX.0/headless/metadata/<Type>?type=<Type>&fullName=<Name>`.
43
+
44
+ - `GET` = read (`dispatch_readonly`) → `{type, fullName, xmlRep}`. `POST` = create-only (duplicate → `DUPLICATE_VALUE`).
45
+ `PUT` = update. On writes the body must carry `type`, `fullName` **and** `xmlRep`.
46
+ - Response is synchronous: `{results:[{success, errors[], ...}]}`. HTTP 200 can still be a failure — inner `success` wins.
47
+ - **PUT is not a safe merge for `EmbeddedServiceConfig`.** Child collections survive an omitted block but inline
48
+ complex blocks can be silently cleared. Always GET → modify → PUT the **full** document. Never PUT a minimal payload.
49
+ Re-GET after the PUT and diff, so a dropped block is caught here and not in the widget.
50
+ - Use the same `dispatch` tool for the probe and for the write. `sf api request rest` / `curl` carry the `sf` CLI's
51
+ separate credential, which can be expired while the MCP token is valid — a REST URL called through the CLI is
52
+ **not** Transport A.
53
+
54
+ **Probe per type, per operation — do not infer from another type.** Before the first write run a read-only
55
+ `GET` for `EmbeddedServiceConfig` (and for any other type you are about to touch).
56
+
57
+ | Probe result | Meaning | Action |
58
+ |---|---|---|
59
+ | `xmlRep` returned, or "Metadata not found" style error | type is onboarded | Transport A |
60
+ | `UNSUPPORTED_OPERATION` for the type or verb | not onboarded for that verb | Transport B for that call only |
61
+ | auth / connection error | MCP unavailable | Transport B; say so |
62
+
63
+ **Transport B (fallback): `sf` CLI** — the retrieve/deploy commands already in SKILL.md. Use it only when the probe
64
+ says Transport A is unavailable for that type/verb, never as a convenience.
65
+
66
+ What is not a transport choice:
67
+ - **Web deployment creation is a Connect API call — send it with `sf api request rest`, not `dispatch`.** Through
68
+ `dispatch` it always fails with an `INTERNAL_ERROR` server error while building the ESW site; the same body via the CLI
69
+ succeeds. Do not try `dispatch` first.
70
+ - **Publish is a Connect API call.** Send it with `dispatch` on the fully-qualified path. If `dispatch` returns a
71
+ path/route error (not a business error), repeat that one call with `sf api request rest`.
72
+ - **Tooling API** work (custom labels, branding, reCAPTCHA) is not verified through `dispatch`. Use `sf` CLI.
73
+
74
+ ## 3. Pre-scan (idempotency)
75
+
76
+ Run before any write, both modes. Read `EmbeddedServiceConfig` by `fullName` = the API name derived from `deploymentName` (Transport A GET).
77
+
78
+ | Finding | Outcome |
79
+ |---|---|
80
+ | No such deployment | not set up → create path |
81
+ | Exists, and every targeted field already equals the target (channel link, `isEnabled`, type, and each optional feature supplied) | **already configured** — make no write, return `already-configured` |
82
+ | Exists, some targeted field differs | **drift** — announce each change ("pre-chat form: on → off"), then write. Standalone: ask for a yes first. Delegated: the plan approval covers it |
83
+ | Exists but links a different channel than `channelName` | Standalone: ask before repointing. Delegated: return `failed`, `errorMessage` = "deployment <name> already uses channel <other>" |
84
+
85
+ Standalone, deployment exists: offer exactly three choices — no change / override / add to existing.
86
+
87
+ The metadata read does not say whether the latest edits are **published**. After any write to a Web deployment,
88
+ publish. If nothing was written, do not publish.
89
+
90
+ ## 4. Questions in the admin's language (guided mode)
91
+
92
+ Ask about the outcome, not the Salesforce feature. Keep it to a handful; state the default with each.
93
+
94
+ | Instead of | Ask |
95
+ |---|---|
96
+ | "Which deployment type: API, Mobile or Web?" | "Where will customers chat with you — on your website, in a mobile app, or through your own custom app?" (website=Web, mobile app=Mobile, custom=API) |
97
+ | "Associate which `channelPlatformKey`?" | Not asked. Delegated: comes from the channel step. Standalone: "Which messaging channel should this chat use?" listing existing ones |
98
+ | "Enable pre-chat form fields?" | "Do you want to ask customers for their name and email before the chat starts? (Default: yes — name and email.)" |
99
+ | "Enable `isTermsAndConditionsEnabled`?" | "Do customers need to accept terms before chatting? (Default: no.)" |
100
+ | "Business hours record?" | "Should the chat only be offered during your business hours? (Default: no.)" |
101
+ | "Chat invitation conditions" | Skip in guided mode unless the admin raises it. It is a pickAreas/expert option |
102
+
103
+ ## 5. Result returned to the coordinator
104
+
105
+ ```json
106
+ {
107
+ "status": "success | already-configured | failed",
108
+ "errorMessage": "<empty unless failed>",
109
+ "outputs": {
110
+ "deploymentName": "Acme_Support_Chat",
111
+ "embeddedServiceConfigId": "<id or null>",
112
+ "published": true
113
+ }
114
+ }
115
+ ```
116
+
117
+ `status` and `errorMessage` are the contract. `outputs` is always returned; it is an addition to the documented shape.
118
+ On `failed`: `errorMessage` names the failed step and the platform error; stop; do not retry.
119
+
120
+ ## 6. Registration entry (draft for the onboarding team to place in a module)
121
+
122
+ ```yaml
123
+ - id: messagingDeployment
124
+ title: "Chat widget for your website or app"
125
+ description: "Create the chat widget (embedded messaging deployment) that customers use to start a messaging conversation: where it appears, what it asks before chat starts, and publishing it live."
126
+ delegateSkill: service-digital-engagement-deployment-configure
127
+ dependsOn: [messagingChannel]
128
+ revisionOwner: service-digital-engagement-deployment-configure
129
+ # org perms: confirm exact names with Digital Engagement licensing (not yet confirmed)
130
+ values:
131
+ deploymentType: { from: signal.messagingSurface, default: "Web" }
132
+ deploymentName: { from: signal.messagingWidgetName, default: "<company> Support Chat" }
133
+ channelName: { from: outputs.messagingChannel.channelName }
134
+ writes: "EmbeddedServiceConfig (Metadata CRUD); Web create via Connect API embeddedmessaging/deployment/setup (sf CLI); publish via Connect API; optional BrandingSet / custom labels via Tooling API"
135
+ gating:
136
+ irreversible: false
137
+ note: "Reversible by disabling the deployment (isEnabled=false). Pre-chat form fields can be deactivated but the form cannot be fully deleted."
138
+ validate:
139
+ check: check-messaging-deployment
140
+ passWhen: "GET EmbeddedServiceConfig fullName=<derived API name> returns isEnabled=true and the embeddedServiceMessagingChannel links values.channelName; for Web, the deployment has been published"
141
+ alternative: "Setup > Embedded Service Deployments > New Deployment > Messaging for In-App and Web; choose the channel, set pre-chat, then Publish."
142
+ ```
143
+
144
+ Open items for the onboarding team: the `signal.*` keys do not exist in `onboarding-state.schema.json` yet
145
+ (`channels` allows only email/web); the coordinator must accept `outputs` and pass `outputs.messagingChannel.channelName`
146
+ to this skill; org perm names are not yet confirmed.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: service-itsm-agentic-setup-incident-management
3
- description: "Orchestrator for Incident Management setup in Service Cloud ITSM: presents the features, tracks progress, and configures each — SLA & Milestones, Priority Matrix, Incident preferences, Major Incident Management, Incident persona PSG assignment, Service Management Privilege, and Incident audit tracking. 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; Service Management Privilege / privilege escalation setup. DO NOT TRIGGER for: the master on/off switch (service-itsm-incident-mgmt-configure), the Priority Matrix, SLA, or field history tracking alone, the Major Incident Manager PSG, creating/editing PSGs, or Problem/Change/Case Management."
3
+ description: "Orchestrator for Incident Management setup in Service Cloud ITSM: presents the features, tracks progress, and configures each — SLA & Milestones, Priority Matrix, Incident preferences, Major Incident Management, Incident persona PSG assignment, Service Management Privilege, and Incident audit tracking. 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; Service Management Privilege / privilege escalation setup. DO NOT TRIGGER for: the master on/off switch alone (use the IncidentMgmt SOR), the Priority Matrix, SLA, or field history tracking alone, the Major Incident Manager PSG, creating/editing PSGs, or Problem/Change/Case Management."
4
4
  metadata:
5
5
  version: "2.1"
6
6
  domains: ["Service"]
@@ -10,7 +10,6 @@ metadata:
10
10
  - "service-itsm-agentic-setup-cmdb-access-assign"
11
11
  - "service-itsm-agentic-setup-incident-sla-configure"
12
12
  - "service-itsm-agentic-setup-itsm-agentforce-permset-assign"
13
- - "service-itsm-incident-mgmt-configure"
14
13
  - "service-itsm-incident-priority-configure"
15
14
  mcpTools:
16
15
  headless-360:
@@ -52,7 +51,7 @@ until the user is done.
52
51
 
53
52
  **Delegated** features hand off to their child skill or SOR. A child skill runs its own confirmations and
54
53
  read-backs, so this skill only coordinates. A SOR is a recipe, not an agent: for a SOR hand-off this skill
55
- runs the SOR's steps itself and owns the confirmation and read-back (see Audit Tracking below).
54
+ runs the SOR's steps itself and owns the confirmation and read-back (see the master switch and Audit Tracking below).
56
55
  **Inline** features are run by this skill directly through the `headless-360` MCP server — **read the
57
56
  matching reference file before executing that feature** and follow it. Every inline operation is fetched at
58
57
  runtime: `discover` by intent, `describe` for the current route/schema/labels, then `dispatch_readonly`
@@ -105,10 +104,21 @@ and business context that informs which features are relevant.
105
104
  ### 2. Ensure the Incident Management master switch is on (prerequisite)
106
105
 
107
106
  Every feature below depends on the org-level `service-cloud-itsm-incident` master switch being enabled.
108
- Before showing the menu, delegate to `service-itsm-incident-mgmt-configure` to read current state; if on,
109
- it is a no-op — otherwise it confirms with the user before flipping it. **Skip only when the master switch
110
- was already confirmed *enabled* in this session** (see step 0). A cached "off"/unknown state MUST fall
111
- through to the delegation.
107
+ Before showing the menu, `discover` the `IncidentMgmt` SOR by intent and `describe` its master-feature
108
+ steps (`read-itsm-incident-feature-status`, `enable-itsm-incident-feature`,
109
+ `verify-itsm-incident-feature-status`). Follow its current invocation and prefix the stored path as its
110
+ version note says (`v67.0` is the minimum and a safe default). A `404` from a version above the org's
111
+ maximum is a version mismatch: retry once at `v67.0` before treating `404` as unavailable.
112
+ Do not use the Service-Foundation `IncidentManagement` look-alike or its broadcast toggles.
113
+ Read the master status via `dispatch_readonly` and decide on `status` first: `ENABLED` is an idempotent
114
+ no-op even if `enableBlockedReasons` is non-empty; `NOT_AVAILABLE` means halt (do not attempt enable);
115
+ for `NOT_ENABLED`, surface any `enableBlockedReasons` as plain text (their messages are HTML-escaped
116
+ markup) and halt if present. Otherwise show the exact off → on change and ask for explicit confirmation before
117
+ running the SOR's enable step via `dispatch`. Re-read via the SOR's verify step and require
118
+ `ENABLED` before continuing. On a declined confirmation, unexpected status, `401`/`403`/`404`,
119
+ failed write, or read-back mismatch, stop without showing the menu; never infer success from
120
+ the write response. **Skip only when the master switch was already confirmed *enabled* in this
121
+ session** (see step 0). A cached "off"/unknown state MUST fall through to the live read.
112
122
 
113
123
  ### 3. Present the feature menu as a multi-select
114
124
 
@@ -144,8 +154,8 @@ Apply these whenever an inline feature runs; the **Everywhere** rules also apply
144
154
  hand-off. They are irreversible or silently-wrong if missed.
145
155
 
146
156
  - **Resolve the right node (Preferences).** Target the ITSM Incident Management org-preferences node
147
- (controller `IPCManagementSetupController`), **not** the Service-Foundation look-alike
148
- (`IncidentMgmtSetupController`, broadcast channels + a master switch).
157
+ (the one with the six per-feature toggles), **not** the Service-Foundation look-alike whose toggles
158
+ are broadcast channels plus its own master switch.
149
159
  - **Two preferences are one-way / enable-only (Preferences).** *Restrict Assigned Group to Regular Groups*
150
160
  and *Enable Rich Text for Incident Descriptions* cannot be turned off once on. Never offer to disable
151
161
  them; require an explicit "I understand this can't be undone" confirmation before enabling; never enable
@@ -189,8 +199,8 @@ hand-off. They are irreversible or silently-wrong if missed.
189
199
  ## Rules
190
200
 
191
201
  - ALWAYS show "(via service-itsm-agentic-setup-incident-management)" in the setup header
192
- - ALWAYS run the master-switch prerequisite (Behavior step 2) before showing the menu, unless the user
193
- already confirmed the switch is on earlier in this conversation
202
+ - ALWAYS run the master-switch prerequisite (Behavior step 2) before showing the menu, unless a live
203
+ status read already confirmed the switch ENABLED on this org earlier in this session
194
204
  - ALWAYS present the feature menu before configuring any selected feature (the master-switch prerequisite
195
205
  is the only permitted action before the menu) — do not assume which feature the user wants, **except**
196
206
  when the user named a specific feature, in which case go straight to it (single-select is fine)
@@ -214,8 +224,8 @@ hand-off. They are irreversible or silently-wrong if missed.
214
224
  Before emitting any menu or summary, confirm each; adjust the output before sending if any is unchecked.
215
225
 
216
226
  - [ ] The header line ends with `(via service-itsm-agentic-setup-incident-management)`
217
- - [ ] The master switch was confirmed on (via `service-itsm-incident-mgmt-configure`) before the menu,
218
- unless already confirmed earlier in this conversation
227
+ - [ ] The master switch was confirmed on (via the `IncidentMgmt` SOR status/verify steps) before the menu,
228
+ unless a live read already confirmed it ENABLED on this org earlier in this session
219
229
  - [ ] The feature menu emitted BOTH the ASCII table AND an `AskUserQuestion` (`multiSelect: true`) in the
220
230
  same response (single-select only if the user already named a specific feature)
221
231
  - [ ] Each feature row's `Status` reflects the actual tracked state (`Not done`, `In progress`, `Done`)
@@ -51,7 +51,7 @@ licensing is part of the orchestrator's **Major Incident Management** feature).
51
51
  existing assignments (idempotency); assigning the missing backing PSL(s) and then the PSG; verifying by
52
52
  read-back.
53
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
54
+ membership; enabling ITSM / incident-management features (the `IncidentMgmt` SOR's master-feature steps); the
55
55
  `IncidentFulfiller` permission **set** for the Fulfiller **agent's** access
56
56
  (`service-itsm-agentic-setup-itsm-agentforce-permset-assign`); CMDB access
57
57
  (`service-itsm-agentic-setup-cmdb-access-assign`); generic, non-incident permission-set / PSG assignment
@@ -60,7 +60,8 @@ licensing is part of the orchestrator's **Major Incident Management** feature).
60
60
  ## Preconditions
61
61
 
62
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.
63
+ neither is found, **stop and report that the personas are not provisioned**; the master-feature
64
+ prerequisite is handled by the orchestrator, but enabling it does not prove the PSGs exist.
64
65
  - **The acting user must be able to assign permission sets** (the SOR gates writes on it). A write that
65
66
  fails with an access error that is not a duplicate → surface it plainly and stop; an admin must do it.
66
67
  - **Each backing license consumes a seat.** A seat-exhausted license blocks that persona; report it.
@@ -68,8 +69,8 @@ licensing is part of the orchestrator's **Major Incident Management** feature).
68
69
  ## Operations (shapes come from `describe`)
69
70
 
70
71
  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.
72
+ (`IncidentFulfillerPSG`, `IncidentManagerPSG`) with **no `NamespacePrefix` filter**. None found →
73
+ stop and report that the personas are not provisioned. Capture each PSG's Id and status.
73
74
  2. **Resolve the target user (read).** To exactly one active user. For "me" / "the current user", read the
74
75
  API root's identity (the running user's `005…` Id) — **not** the `USER_ID()` SOQL function (Apex-only)
75
76
  and **not** the Chatter current-user endpoint (fails when Chatter is off). Zero / multiple → disambiguate.
@@ -124,13 +125,13 @@ Persona: <Incident Fulfiller | Incident Manager>
124
125
  ```
125
126
 
126
127
  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
+ personas are not on the org, say so without claiming master enablement will provision them.
128
129
 
129
130
  ## Common failures (surface in plain language)
130
131
 
131
132
  | Symptom | Likely cause | What to tell the user |
132
133
  |---------|--------------|-----------------------|
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
+ | No incident PSG on the org | Incident persona PSGs not provisioned | The incident personas aren't set up yet — stop and report the missing PSGs |
134
135
  | Duplicate on assign | User already has that grant | Not an error — report as already assigned |
135
136
  | 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
137
  | 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 |
@@ -6,7 +6,7 @@ Incident Management preferences** (the feature toggles on the Incident Managemen
6
6
  four meta-tools (`discover`, `describe`, `dispatch_readonly`, `dispatch`). The org comes from the OAuth JWT
7
7
  on the MCP session — never handle an org id, alias, or credentials. Minimum API version **67.0**.
8
8
 
9
- This is **not** the master Incident Management on/off switch (`service-itsm-incident-mgmt-configure`) nor
9
+ This is **not** the master Incident Management on/off switch (the master-feature steps of the `IncidentMgmt` SOR) nor
10
10
  the Incident Priority Matrix (`service-itsm-incident-priority-configure`).
11
11
 
12
12
  ## Delegate to the Setup Operation Recipe
@@ -20,17 +20,16 @@ id; a `discover` miss is not proof an operation is unavailable.
20
20
 
21
21
  | SOR | Owns | Status |
22
22
  |-----|------|--------|
23
- | **`IncidentMgmt`** (owning team ITSM-Aditya; controller `IPCManagementSetupController`) | Read a preference; toggle a preference; verify a preference read-back | Served |
23
+ | **`IncidentMgmt`** | Read a preference; toggle a preference; verify a preference read-back | Served |
24
24
 
25
25
  Discover by intent — e.g. `discover("configure ITSM incident management preferences: automatically triage
26
26
  incidents, assign incidents with Einstein, enable rich text for incident descriptions")`.
27
27
 
28
28
  > **Resolve the right node — load-bearing.** Two setup nodes share the "Incident" name. Target the
29
- > **ITSM Incident Management org-preferences** node (controller `IPCManagementSetupController`) whose
30
- > toggles are the six below — **not** the Service-Foundation "Incident Management" node
31
- > (`IncidentMgmtSetupController`), whose toggles are broadcast/notification channels (Email/Sites/Alerts/
32
- > Slack) and a master switch. If a `discover` result is about broadcast channels or a master on/off, it is
33
- > the wrong node.
29
+ > **ITSM Incident Management org-preferences** node whose toggles are the six below — **not** the
30
+ > Service-Foundation "Incident Management" node, whose toggles are broadcast/notification channels
31
+ > (Email/Sites/Alerts/Slack). The `IncidentMgmt` SOR also owns the master on/off switch; a `discover`
32
+ > result about broadcast channels is the wrong node.
34
33
 
35
34
  ## Operations (shapes come from `describe`)
36
35
 
@@ -78,7 +77,7 @@ phrasing and the known-name enumeration.
78
77
  surface the raw access error and stop.
79
78
  - **Incident Management provisioned**: these preferences are writable only when Incident Management is
80
79
  enabled at the feature/license level. If reads or writes fail with an availability error, say the feature
81
- must be enabled first (`service-itsm-incident-mgmt-configure`) and stop.
80
+ must be enabled first (the `IncidentMgmt` SOR's master-feature steps) and stop.
82
81
 
83
82
  ## Workflow
84
83
 
@@ -124,7 +123,7 @@ and what it means (e.g. "that setting can't be turned on once incidents exist").
124
123
  |---------|--------------|-----------------------|
125
124
  | Enable of "Restrict Assigned Group…" fails | The org already has Incident records (server freezes it) | That setting can only be turned on before any incidents exist; it can't be enabled now |
126
125
  | Read/write blocked with an access error | Caller lacks ITSM setup access | An admin with setup access must make this change |
127
- | Read/write unavailable on the org | Incident Management not enabled | Enable Incident Management first (`service-itsm-incident-mgmt-configure`) |
126
+ | Read/write unavailable on the org | Incident Management not enabled | Enable Incident Management first through the `IncidentMgmt` SOR's master-feature steps |
128
127
  | Change didn't persist on read-back | Write did not take | Report it as failed and show the current state; do not claim success |
129
128
  | `dispatch*` auth error | headless-360 session not authenticated / expired | Re-authenticate the connection and confirm it points at the intended org |
130
129
 
@@ -144,5 +143,5 @@ missing setup access or an unauthenticated session. A `404` = the operation is n
144
143
  - Read or write against the Service-Foundation `IncidentManagement` node (broadcast channels) — wrong node.
145
144
  - Read or write any preference name the SOR does not list — an unknown name reads as `false` and is
146
145
  rejected on write.
147
- - Toggle the **master** Incident Management switch here (`service-itsm-incident-mgmt-configure`) or the
146
+ - Toggle the **master** Incident Management switch as part of this preferences feature (use the orchestrator's prerequisite over the `IncidentMgmt` SOR) or the
148
147
  **Incident Priority Matrix** (`service-itsm-incident-priority-configure`).
@@ -25,7 +25,7 @@ routes are not always ranked first; only a `404` from the dispatch itself means
25
25
  Read each step's `status` from `describe`: `implemented` = live; `proposed` = not served on every org yet.
26
26
 
27
27
  > **MIM is configured by the two surfaces below.** The only feature that must be *on* first is **base**
28
- > Incident Management (`service-itsm-incident-mgmt-configure`) — see Preconditions.
28
+ > Incident Management (the master-feature steps of the `IncidentMgmt` SOR) — see Preconditions.
29
29
 
30
30
  ### Transports MIM uses (all via the same `dispatch*` tools)
31
31
 
@@ -44,7 +44,7 @@ Read each step's `status` from `describe`: `implemented` = live; `proposed` = no
44
44
  precondition, licensing approvers with the **Major Incident Manager permission-set license** and standing
45
45
  up the approvers **public group**. Verify every write by read-back.
46
46
  - **Out of scope**: base Incident Management enablement
47
- (`service-itsm-incident-mgmt-configure` — a prerequisite); the Incident Fulfiller / Incident Manager
47
+ (the `IncidentMgmt` SOR's master-feature steps — a prerequisite); the Incident Fulfiller / Incident Manager
48
48
  **persona** PSG (the orchestrator's **Persona** feature — see `references/incident-persona-psg.md`);
49
49
  Problem / Change / Case Management; the Priority Matrix; SLA / entitlement setup; any MIM org preference
50
50
  **other than** the two allowlisted.
@@ -53,8 +53,8 @@ Read each step's `status` from `describe`: `implemented` = live; `proposed` = no
53
53
 
54
54
  The acting user needs **ITSM setup access** (the SOR gates every MIM route on it), and:
55
55
 
56
- 1. **Base Incident Management must be enabled** — MIM layers on it. If it is off, **stop and hand off** to
57
- `service-itsm-incident-mgmt-configure`; do not configure MIM without base Incident Management.
56
+ 1. **Base Incident Management must be enabled** — MIM layers on it. The orchestrator first follows the
57
+ `IncidentMgmt` SOR's read/confirm/enable/verify prerequisite; stop if it cannot confirm ENABLED.
58
58
  2. **Approvers must hold the Major Incident Manager permission-set license.** This is a **LICENSE** —
59
59
  granted via `PermissionSetLicenseAssign` (`{AssigneeId, PermissionSetLicenseId}`), **never** a
60
60
  `PermissionSetAssignment`. Group-user validation requires every direct and transitive user of a group
@@ -135,7 +135,7 @@ Major Incident Management
135
135
  ```
136
136
 
137
137
  Report only what read-back confirmed; omit lines for surfaces out of the requested scope. If base Incident
138
- Management is off, say so and name `service-itsm-incident-mgmt-configure`.
138
+ Management cannot be confirmed on, say so and stop without configuring MIM.
139
139
 
140
140
  ## Common failures (surface in plain language)
141
141
 
@@ -158,5 +158,5 @@ Management is off, say so and name `service-itsm-incident-mgmt-configure`.
158
158
  - Designate a **group** approver without `validate-group-users` returning **true** first.
159
159
  - Reassign without removing the existing designation first (create is a silent no-op).
160
160
  - Send any preference name other than `AutoCreationOfProblem` / `AutoClosureChildIncidents`.
161
- - Attempt MIM setup when base Incident Management is off — hand off to `service-itsm-incident-mgmt-configure`.
161
+ - Attempt MIM setup when base Incident Management is off — first complete the `IncidentMgmt` master-feature prerequisite.
162
162
  - Pass `dispatch` the `{operation_id, arguments}` shape — it takes raw HTTP.
@@ -70,7 +70,7 @@ keyed on the org preference **`PrivilegeAssignmentEnabled`**.
70
70
  - **In scope**: read / set the **Enable Privilege Assignment** master toggle; read / set the org-wide
71
71
  **escalation level**; list / create / update / delete **Service Management Privilege** definitions; bulk
72
72
  **add / remove employee assignments** for a privilege; verify by read-back where one exists.
73
- - **Out of scope**: base Incident Management enablement (`service-itsm-incident-mgmt-configure`); the
73
+ - **Out of scope**: base Incident Management enablement (the `IncidentMgmt` SOR's master-feature steps); the
74
74
  Incident Fulfiller / Incident Manager **persona** PSG (the orchestrator's **Persona** feature); the Major
75
75
  Incident Manager approver licensing (the **Major Incident Management** feature); Problem / Change / Case
76
76
  Management; the Priority Matrix; SLA setup.