@salesforce/afv-skills 1.44.0 → 1.45.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 (97) hide show
  1. package/package.json +1 -1
  2. package/skills/consumer-goods-rtr-datacloud-export-configure/SKILL.md +72 -0
  3. package/skills/consumer-goods-rtr-datacloud-export-configure/references/inputs-and-namespace.md +38 -0
  4. package/skills/consumer-goods-rtr-datacloud-export-configure/references/procedure.md +158 -0
  5. package/skills/consumer-goods-rtr-datacloud-export-configure/scripts/detect-namespace.js +86 -0
  6. package/skills/consumer-goods-rtr-datacloud-export-configure/scripts/render-apex.js +64 -0
  7. package/skills/consumer-goods-rtr-datacloud-export-configure/scripts/resolve-id-by-name.js +47 -0
  8. package/skills/consumer-goods-rtr-datacloud-export-configure/scripts/sf-rest.js +171 -0
  9. package/skills/consumer-goods-rtr-datacloud-export-configure/scripts/soql-escape.js +26 -0
  10. package/skills/consumer-goods-rtr-datacloud-export-configure/scripts/upsert-report-config.apex +51 -0
  11. package/skills/consumer-goods-rtr-datacloud-export-configure/scripts/upsert-system-setting.apex +21 -0
  12. package/skills/consumer-goods-tpe-dashboard-configure/SKILL.md +74 -0
  13. package/skills/consumer-goods-tpe-dashboard-configure/references/phases-1-6.md +112 -0
  14. package/skills/consumer-goods-tpe-dashboard-configure/references/phases-7-12.md +157 -0
  15. package/skills/consumer-goods-tpe-dashboard-configure/scripts/find-failure-reason.js +132 -0
  16. package/skills/consumer-goods-tpe-dashboard-configure/scripts/poll-status.js +116 -0
  17. package/skills/consumer-goods-tpe-dashboard-configure/scripts/render-apex.js +64 -0
  18. package/skills/consumer-goods-tpe-dashboard-configure/scripts/run-data-transform.js +121 -0
  19. package/skills/consumer-goods-tpe-dashboard-configure/scripts/schedule-business-period-export.apex +27 -0
  20. package/skills/consumer-goods-tpe-dashboard-configure/scripts/sf-rest.js +171 -0
  21. package/skills/consumer-goods-tpe-dashboard-configure/scripts/soql-escape.js +25 -0
  22. package/skills/consumer-goods-tpe-dashboard-custom-kpi-configure/SKILL.md +141 -0
  23. package/skills/consumer-goods-tpe-dashboard-custom-kpi-configure/references/payload-shapes.md +447 -0
  24. package/skills/consumer-goods-tpe-dashboard-custom-kpi-configure/references/procedure.md +263 -0
  25. package/skills/consumer-goods-tpe-dashboard-custom-kpi-configure/scripts/clone-tpe-dashboards.js +537 -0
  26. package/skills/consumer-goods-tpe-dashboard-custom-kpi-configure/scripts/sf-rest.js +195 -0
  27. package/skills/consumer-goods-tpe-datakit-deploy/SKILL.md +157 -0
  28. package/skills/consumer-goods-tpe-datakit-deploy/scripts/detect-namespace.js +86 -0
  29. package/skills/consumer-goods-tpe-datakit-deploy/scripts/download-static-resource.js +151 -0
  30. package/skills/consumer-goods-tpe-datakit-deploy/scripts/extract-crm-field-permissions.js +115 -0
  31. package/skills/consumer-goods-tpe-datakit-deploy/scripts/sf-rest.js +109 -0
  32. package/skills/consumer-goods-tpe-datakit-deploy/scripts/update-field-permissions.js +433 -0
  33. package/skills/service-catalog-template-coordinate/SKILL.md +263 -0
  34. package/skills/service-catalog-template-coordinate/examples/output-templates.md +44 -0
  35. package/skills/service-catalog-template-coordinate/references/mcp-invocation.md +183 -0
  36. package/skills/service-catalog-template-coordinate/references/operations.md +230 -0
  37. package/skills/service-itsm-agentic-setup-agent-runtime-access-assign/SKILL.md +243 -0
  38. package/skills/service-itsm-agentic-setup-agent-runtime-access-assign/references/cli-invocation.md +205 -0
  39. package/skills/service-itsm-agentic-setup-agent-runtime-access-assign/references/helper-contracts.md +236 -0
  40. package/skills/service-itsm-agentic-setup-agent-runtime-access-assign/references/permset-topology.md +132 -0
  41. package/skills/service-itsm-agentic-setup-agent-runtime-access-assign/scripts/classify-activated-agents.mjs +106 -0
  42. package/skills/service-itsm-agentic-setup-agent-runtime-access-assign/scripts/classify-agent-access-state.mjs +113 -0
  43. package/skills/service-itsm-agentic-setup-agent-runtime-access-assign/scripts/classify-assignment-state.mjs +99 -0
  44. package/skills/service-itsm-agentic-setup-agent-runtime-access-assign/scripts/classify-platform-permset-availability.mjs +155 -0
  45. package/skills/service-itsm-agentic-setup-agent-runtime-access-assign/scripts/gate-unified-catalog-tiers.mjs +100 -0
  46. package/skills/service-itsm-agentic-setup-agent-runtime-access-assign/scripts/rank-candidate-users.mjs +95 -0
  47. package/skills/service-itsm-agentic-setup-agent-runtime-access-assign/scripts/resolve-target-user.mjs +86 -0
  48. package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +44 -23
  49. package/skills/service-itsm-agentic-setup-agentforce-coordinate/examples/output-templates.md +33 -9
  50. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/SKILL.md +17 -18
  51. package/skills/service-itsm-agentic-setup-cmdb-coordinate/SKILL.md +3 -1
  52. package/skills/service-itsm-agentic-setup-configure/SKILL.md +20 -12
  53. package/skills/service-itsm-agentic-setup-configure/examples/output-templates.md +73 -5
  54. package/skills/service-itsm-agentic-setup-employee-agent-configure/SKILL.md +8 -7
  55. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/cli-invocation.md +45 -33
  56. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/reactivation.md +8 -6
  57. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/workflow-detail.md +10 -10
  58. package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/classify-agent-existence.mjs +114 -56
  59. package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/classify-preflight.mjs +33 -17
  60. package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/render-report.mjs +9 -3
  61. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/SKILL.md +8 -7
  62. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/cli-invocation.md +43 -32
  63. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/reactivation.md +6 -4
  64. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/workflow-detail.md +10 -10
  65. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-agent-existence.mjs +106 -55
  66. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-preflight.mjs +27 -13
  67. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/render-report.mjs +9 -3
  68. package/skills/service-itsm-agentic-setup-incident-sla-configure/SKILL.md +159 -161
  69. package/skills/service-itsm-agentic-setup-incident-sla-configure/assets/attach-milestone-action.json +51 -0
  70. package/skills/service-itsm-agentic-setup-incident-sla-configure/assets/attach-milestone.json +1 -1
  71. package/skills/service-itsm-agentic-setup-incident-sla-configure/assets/predefined-incident-policy.json +120 -0
  72. package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/milestone-patterns.md +28 -5
  73. package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/output-templates.md +19 -1
  74. package/skills/service-itsm-agentic-setup-incident-sla-configure/references/mcp-invocation.md +350 -30
  75. package/skills/service-itsm-channels-coordinate/SKILL.md +80 -213
  76. package/skills/service-itsm-slack-itservice-configure/SKILL.md +363 -0
  77. package/skills/service-itsm-slack-itservice-configure/references/connect-agentforce-to-slack.md +159 -0
  78. package/skills/service-itsm-slack-itservice-configure/references/manage-slack-connection.md +88 -0
  79. package/skills/service-itsm-slack-itservice-configure/references/manage-user-access.md +117 -0
  80. package/skills/service-itsm-slack-itservice-configure/references/record-visibility.md +78 -0
  81. package/skills/service-itsm-slack-itservice-configure/references/site-membership-verification.md +126 -0
  82. package/skills/service-itsm-slack-itservice-configure/scripts/classify-user-access.mjs +167 -0
  83. package/skills/service-itsm-teams-configure/SKILL.md +50 -47
  84. package/skills/service-itsm-teams-configure/references/azure-credential-population.md +42 -28
  85. package/skills/service-itsm-teams-configure/references/gotchas.md +1 -2
  86. package/skills/service-itsm-teams-coordinate/SKILL.md +22 -18
  87. package/skills/service-itsm-teams-coordinate/examples/output-templates.md +12 -9
  88. package/skills/service-itsm-teams-itdesk-configure/SKILL.md +60 -44
  89. package/skills/service-itsm-teams-itservice-configure/SKILL.md +56 -70
  90. package/skills/service-catalog-template-deploy/SKILL.md +0 -310
  91. package/skills/service-catalog-template-deploy/references/cli-invocation.md +0 -258
  92. package/skills/service-catalog-template-deploy/scripts/activate-verify.mjs +0 -164
  93. package/skills/service-catalog-template-deploy/scripts/build-deploy-payload.mjs +0 -94
  94. package/skills/service-catalog-template-deploy/scripts/resolve-template.mjs +0 -331
  95. package/skills/service-catalog-template-search/SKILL.md +0 -212
  96. package/skills/service-catalog-template-search/references/cli-invocation.md +0 -128
  97. package/skills/service-catalog-template-search/scripts/classify-catalog.mjs +0 -205
@@ -2,13 +2,12 @@
2
2
  name: service-itsm-agentic-setup-incident-sla-configure
3
3
  description: "End-to-end Incident SLA setup for Service Cloud ITSM — creating a MilestoneType, an Incident-scoped SLA Policy (SlaProcess), attaching a Milestone with criteria, and wiring an Entitlement so Incidents derive an EntityMilestone with a computed TargetDate. Use when the user asks to configure SLA milestones on Incidents, create an SLA policy for Incident records, set up entitlement processes for ITSM, wire milestones so they appear on the Incident page, or enable SLA tracking for incident management. DO NOT TRIGGER when: the user asks about Case entitlements or Case SLA (not Incident), querying existing SLA policies without setup intent, general Entitlement sObject CRUD unrelated to Incident, or Milestone queries for reporting purposes only."
4
4
  metadata:
5
- version: "3.4"
5
+ version: "3.6"
6
6
  domains: ["Service"]
7
7
  minApiVersion: "67.0"
8
8
  relatedSkills:
9
9
  - "service-itsm-incident-mgmt-configure"
10
10
  - "service-itsm-incident-priority-configure"
11
- accessCheck: []
12
11
  mcpTools:
13
12
  headless-360:
14
13
  tools: ["describe", "discover", "dispatch", "dispatch_readonly"]
@@ -23,25 +22,23 @@ allowed-tools: |
23
22
 
24
23
  # Configuring Incident SLA (End-to-End)
25
24
 
26
- Configures a complete **Incident SLA pipeline** for Service Cloud ITSM — the chain that derives
27
- an EntityMilestone (with a computed TargetDate) on every Incident that has an Entitlement. Every
28
- operation runs through the **Salesforce-hosted Headless-360 MCP server** (server key `headless-360`)
29
- via its four meta-tools (`discover`, `describe`, `dispatch_readonly`, `dispatch`). The org is derived
30
- from the OAuth JWT — the skill never handles an org id, alias, or credentials. It also needs the
31
- org-level **SLA Management for IT Service** setup item — a Setup Discovery feature plus a separate,
32
- permanent **SLA Versioning** bit, both gated by Phase 0.5. Setup has four parts:
33
-
34
- 1. **MilestoneType** — define what you're measuring (e.g., "First Response").
35
- 2. **SLA Policy** — the SlaProcess scoped to Incident with entry/exit criteria.
36
- 3. **Milestone** — attach to the policy with a time trigger and filter criteria.
37
- 4. **Entitlement** — wire to an Account so Incidents with that Entitlement engage the SLA.
25
+ Configures a complete **Incident SLA pipeline** for Service Cloud ITSM — the chain that derives an
26
+ EntityMilestone (with a computed TargetDate) on every Incident with an Entitlement. Every operation
27
+ runs through the Salesforce-hosted **`headless-360`** MCP server; the org is derived from the OAuth
28
+ JWT — the skill never handles an org id, alias, or credentials. It also needs the org-level **SLA Management for IT
29
+ Service** setup item (the Phase 0.5 gate — see below). Setup has four parts:
30
+ **MilestoneType** (what you measure) → **SLA Policy** (SlaProcess scoped to Incident, entry/exit
31
+ criteria) → **Milestone** (time trigger + filter criteria) → **Entitlement** (wired to an Account so
32
+ Incidents engage the SLA).
38
33
 
39
34
  ## Scope
40
35
 
41
36
  - **In scope**: Creating MilestoneTypes, SLA Policies (SlaProcess), Milestones with criteria,
42
37
  Entitlements, and verifying SLA engagement on Incident records — all via `headless-360` MCP.
43
- - **In scope — prerequisite**: checking and (on confirmation) enabling the **SLA Management for IT
44
- Service** setup item — the feature + SLA Versioning (Phase 0.5).
38
+ - **In scope — prerequisite**: checking and (on consent) enabling **SLA Management for IT Service**
39
+ (Phase 0.5); halts if not fully enabled or consent declined.
40
+ - **In scope — predefined vs custom** (Phase 0.6): offering the OOB *Standard Support for Incidents*
41
+ policy (Incident only) vs a custom one.
45
42
  - **Out of scope**: Case SLA/entitlements; Assignment Rules; Escalation Rules; Notification
46
43
  Rules; general Entitlement CRUD not related to Incident SLA; SLA reporting.
47
44
 
@@ -49,43 +46,27 @@ permanent **SLA Versioning** bit, both gated by Phase 0.5. Setup has four parts:
49
46
 
50
47
  ## Routes at a glance
51
48
 
52
- Reads dispatch through `mcp__headless-360__dispatch_readonly`, writes through
53
- `mcp__headless-360__dispatch`. Both take raw HTTP:
54
- `{"url": "<path>", "method": "GET|POST|PATCH|...", "body"?: {...}, "query_params"?: {...}}` — **not**
55
- `{operation_id, arguments}`. Full request/response shapes live in `references/mcp-invocation.md`.
56
-
57
- | Concern | Method + path | Body |
58
- |---------|---------------|------|
59
- | Master Incident Mgmt pref (read) | `GET /services/data/v67.0/connect/setup/discovery/features`, filter `apiName == "service-cloud-itsm-incident"` for `status` | — |
60
- | SLA Mgmt prerequisite (Phase 0.5) | Feature `status`/`enable` + SLA Versioning read/PATCH on `EntitlementSettings` — see `references/mcp-invocation.md` | see ref |
61
- | Preflight (Incident on) | `GET /services/data/v67.0/sobjects/Incident/describe` | — |
62
- | Default BusinessHours | `GET /services/data/v67.0/query` (q via `query_params.q`) | — |
63
- | Create MilestoneType | `POST /services/data/v67.0/connect/sla-management/milestone-types` | `{"name","description","recurrenceType"}` |
64
- | Create SLA Policy | `POST /services/data/v67.0/connect/sla-management/sla-policies` | `{"name","processType":"Incident","businessHourId",...}` |
65
- | Attach Milestone | `POST /services/data/v67.0/connect/sla-management/sla-policies/<id>/milestones` | `{"milestoneTypeId","timeTrigger","milestoneCriteria":[...]}` |
66
- | Create Entitlement | `POST /services/data/v67.0/sobjects/Entitlement` | `{"Name","AccountId","SlaProcessId","BusinessHoursId","StartDate","EndDate"}` |
67
- | Create test Incident | `POST /services/data/v67.0/sobjects/Incident` | `{"Subject","EntitlementId",...}` |
68
- | Verify SLA policy | `GET /services/data/v67.0/query` (q for `SlaProcess`) | — |
69
- | Verify engagement | `GET /services/data/v67.0/query` (q for `EntityMilestone`) | — |
70
-
71
- **Response envelope**: SLA Management Connect, `/sobjects/…`, and `/query` are standard REST — the
72
- `dispatch*` MCP tool returns the REST response directly (`{status_code, body}`); read `body`. Only
73
- `/headless/invoke/…` Aura-controller routes are doubly wrapped (`body.body`) — this skill uses none.
49
+ Reads → `mcp__headless-360__dispatch_readonly`, writes → `mcp__headless-360__dispatch`. Both take raw
50
+ HTTP: `{"url","method","body"?,"query_params"?}` — **not** `{operation_id, arguments}`. **Response
51
+ envelope**: standard REST — read `body` from `{status_code, body}`. The full route table — create
52
+ MilestoneType / SLA Policy / Milestone, Entitlement, BusinessHours, test Incident, the Phase 0.5
53
+ feature calls, and the `create-milestone-action` op — with request/response shapes lives in
54
+ `references/mcp-invocation.md`.
74
55
 
75
56
  ---
76
57
 
77
58
  ## Clarifying Questions
78
59
 
79
- Ask only what you cannot infer from conversation context (pre-populate and note "(from
80
- conversation)"). **Resolve the Phase 0.5 gate first, on its own.**
60
+ Ask only what you cannot infer from context (pre-populate; note "(from
61
+ conversation)"). **Resolve the Phase 0.5 gate first.**
81
62
 
82
63
  - **Which org?** `headless-360` binds to the current OAuth session; confirm the target before mutating.
83
- - **Milestone strategy?** See Phase 1.4 — skipped when the prompt already names a shape, when the branch is a no-op, or when up-front authorization + a derivable shape are given.
84
- - **Target Account?** Account to attach the Entitlement to.
64
+ - **Milestone strategy?** See Phase 1.4 (skipped per its skip conditions).
65
+ - **Target Account?** For the Entitlement.
85
66
  - **Milestone criteria?** Default `Status != Closed`, plus pattern-specific filters.
86
67
 
87
- Default suggestion: SLA Policy `Incident SLA Policy`, default BusinessHours, first active Account,
88
- Entitlement `today → today + 1 year`, milestone strategy resolved per Phase 1.4.
68
+ Default suggestion: SLA Policy `Incident SLA Policy`, default BusinessHours, the Account the user
69
+ picks, Entitlement `today → today + 1 year`, milestone strategy resolved per Phase 1.4.
89
70
 
90
71
  ---
91
72
 
@@ -96,62 +77,66 @@ All steps are sequential. **Always read before you write.** Every call goes thro
96
77
 
97
78
  ### Phase 0 — Reuse what the session already knows
98
79
 
99
- Each Phase 1 read below carries a **skip-if-already-known** clause: skip only when the
100
- same fact was produced this session **from a successful `dispatch_readonly` response
101
- tied to the current org**. A user statement is not cache-eligible — a mistaken assertion
102
- would produce a stale create. When the only source is a user statement, re-read.
103
-
104
- - **Master Incident Management pref** — reuse only when the pref was read live this
105
- session (successful `dispatch_readonly` on Setup Discovery, or a live read by
106
- `service-itsm-incident-mgmt-configure`) AND `status` was `ENABLED` AND no write since.
107
- A cached "not enabled" / unknown / user-asserted value is NOT cache-eligible — fall
108
- through to step 1.
109
- - **SLA Management feature + SLA Versioning** — reuse only if both were read live this session
110
- (Phase 0.5) and unwritten since; else re-run Phase 0.5.
111
- - **Incident describe / SLA-field presence** — if `Incident.describe` was already run against
112
- the current org this session and the presence of `EntitlementId` / `SlaStartDate` /
113
- `SlaExitDate` is in context, skip step 3 and reuse the answer.
114
- - **Default BusinessHours id** — if a `BusinessHoursId` for the current org's default is
115
- already captured, skip step 4.
116
- - **Account id** — if the Account the user named (or the fallback first-active Account)
117
- was already resolved to an `Id` this session, skip step 5.
118
- - **Discover / describe of SLA Connect operations** — if the routes were already verified
119
- as indexed this session, skip step 2.
120
-
121
- **When in doubt, re-check.** Skip only when the earlier fact is unambiguously in context
122
- AND you have not switched orgs — the `headless-360` MCP session binds to one org via the
123
- JWT, so an org change is only possible if the session was re-authed mid-conversation. If
124
- the user hints at a different org, or you cannot tell which org the earlier fact came
125
- from, re-run the read. A wrong skip on a live org write is worse than a duplicated read.
80
+ Each Phase 1 read carries a **skip-if-already-known** clause: skip only when the same fact was
81
+ produced **this session** by a successful `dispatch_readonly` on the current org and unwritten since —
82
+ a user statement is never cache-eligible. Cacheable: master Incident Mgmt pref (step 1, only if
83
+ `ENABLED`), SLA feature + Versioning (Phase 0.5), Incident describe (3), `BusinessHoursId` (4), Account
84
+ id (5), SLA Connect ops indexed (2). **When in doubt, re-check** — a wrong skip on a live write is
85
+ worse than a re-read.
126
86
 
127
87
  ### Phase 0.5 — SLA Management for IT Service prerequisite gate
128
88
 
129
- **Resolve this gate on its own first — not batched with the clarifying questions. Its reads are
130
- safe to run up front; still confirm the target org before the enable write.** Gate on the
131
- org-level **SLA Management for IT Service** setup item before any Phase 2 mutation — two
132
- independent bits: the Setup Discovery feature `service-cloud-itsm-manage-sla-policies` (Connect route,
133
- **not** Tooling) and the separate, **permanent** **SLA Versioning** bit
134
- (`EntitlementSettings.IsEntitlementVersioningEnabled`). Full call shapes, `enableBlockedReasons`
135
- handling, and the permanence rule are in `references/mcp-invocation.md`.
136
-
137
- - **Read both** (`dispatch_readonly`); feature `ENABLED` **and** versioning `true` → skip to Phase 1.
138
- - **Confirm, then enable only what's off** (`AskUserQuestion`) — stop and relay if `enableBlockedReasons`
139
- is non-empty; if versioning is off, flag it's **permanent**.
140
- - **Enable, then re-read** — never trust the `201` / empty-`204` write response; require `ENABLED` /
141
- `true` first.
89
+ **Resolve this gate first, on its own. Reads are safe up front; confirm the org before any write.**
90
+ "SLA Management for IT Service" is enabled only when **both** Simplified SLA Setup (feature
91
+ `service-cloud-itsm-manage-sla-policies`) **and** SLA Versioning
92
+ (`EntitlementSettings.IsEntitlementVersioningEnabled`) are on; either off → not enabled. The one
93
+ feature-`enable` turns on both, **permanently** enabling versioning — inseparable. Shapes /
94
+ `enableBlockedReasons` / ack wording: `references/mcp-invocation.md`.
95
+
96
+ - **Read both** (`dispatch_readonly`); proceed to Phase 0.6 **only when both are on**.
97
+ - **On an OFF org, read the master license first** (Phase 1 step 1, `service-cloud-itsm-incident`):
98
+ `NOT_AVAILABLE` → **HALT** — don't flip the permanent Versioning switch where Incident SLA can't run.
99
+ - **Two separate `AskUserQuestion` acks — never merge.** (a) master Incident Mgmt `NOT_ENABLED` → ask
100
+ to enable it first (reversible, no permanence warning). (b) a *distinct* permanence ack: enabling
101
+ **SLA Management** turns on **SLA Versioning**, which **can't be turned off** (the feature disables
102
+ later but Versioning stays on). Offer **enable**/**stop** — no "versioning-off"; a bare "enable SLA"
103
+ is **not** consent.
104
+ - **Decline (b), non-empty `enableBlockedReasons`, or a re-read mismatch → HALT** — enable no SLA
105
+ Mgmt/Versioning, don't proceed to Phase 0.6/1 (a reversible master enable from (a) stands). **After
106
+ any write, re-read both and report the REAL state** — never trust `201`/`204`.
107
+
108
+ ### Phase 0.6 — Predefined (OOB) vs Custom
109
+
110
+ Once the gate passes, offer the OOB policy **before** any custom-flow questions. **Incident only.**
111
+
112
+ 1. **Prerequisite + detect.** Confirm master Incident Mgmt pref `ENABLED` (Phase 1 step 1). Then `dispatch_readonly` `GET /connect/sla-management/sla-policies` with
113
+ `query_params.processTypes=Incident`; match display name **"Standard Support for Incidents"**.
114
+ - **Already present** → **no re-seed** (no idempotency), no custom upsell; report it is seeded.
115
+ **If warn/escalate actions were requested → resolve the named existing milestones → Phase 2.5 →
116
+ Phase 3 verify → STOP** (attach actions even though the policy was already seeded).
117
+ 2. **Fork** — one `AskUserQuestion`, **Predefined listed first / recommended**: use Salesforce's
118
+ predefined Incident SLA policy (*Standard Support for Incidents* — priority-tiered milestones)
119
+ **or** build a custom one. One-way note: predefined seeds an
120
+ **active** policy + Entitlement, no un-seed path (manual delete only).
121
+ - **Predefined →** resolve BusinessHours + Account (Phase 1 steps 4–5) → **Phase 2-OOB** → **Phase
122
+ 2.5** (if actions requested) → Phase 3 verify → **STOP**.
123
+ - **Custom →** existing Phase 1 → 1.4 → 1.5 → 2 → 3, unchanged.
124
+
125
+ **MUST read `references/mcp-invocation.md` (Predefined Incident Policy) before seeding.**
142
126
 
143
127
  ### Phase 1 — Preflight & discovery
144
128
 
145
- **On any `401` / `403` / `404` from a step below, halt and surface the raw error** — the org or client is not configured correctly. `401` → MCP auth (ECA not propagated / expired token). `403` → user perm missing OR ITSM Incident Management license/preference missing (`ITSMIncidentMgmtEnabled` / `IncidentMgmt.orgHasITSMOrgPermission`). `404` → `headless-360` server not activated OR Entitlement Management not enabled for Incident.
129
+ **On any `401` / `403` / `404` from a step below, halt and surface the raw error** — the org/client is misconfigured. `401` → MCP auth (ECA not propagated / expired token). `403` → user perm OR ITSM Incident Management license/pref missing (`ITSMIncidentMgmtEnabled` / `IncidentMgmt.orgHasITSMOrgPermission`). `404` → `headless-360` not activated OR Entitlement Management not enabled for Incident.
146
130
 
147
131
  1. **Master Incident Management pref — direct read** *(skip conditions in Phase 0)*.
148
- `dispatch_readonly` on `GET /services/data/v67.0/connect/setup/discovery/features`,
149
- filter `features[]` client-side to `apiName == "service-cloud-itsm-incident"`, read
150
- `status`. If `ENABLED`, proceed. **If not, delegate to `service-itsm-incident-mgmt-configure`
151
- inline to enable** (it runs its own confirm-to-write), then re-read to verify. If the
152
- user declines, halt — every SLA artifact below depends on the master being on. Full
153
- call shape + why the setup-org-preferences endpoint 404s here is in
154
- `references/mcp-invocation.md` (Preflight A).
132
+ `dispatch_readonly` `GET .../connect/setup/discovery/features`, filter `features[]` to the **exact**
133
+ `apiName == "service-cloud-itsm-incident"` — never a look-alike (`service-cloud-incident-management`
134
+ is generic Case-based Incident Management, not our target). Read `status`: `ENABLED` → proceed;
135
+ `NOT_AVAILABLE` (license missing) → **halt and surface it** — cannot be enabled here, no delegate/ack;
136
+ `NOT_ENABLED` → **explicit `AskUserQuestion` ack first (never auto-enable as an implied SLA
137
+ dependency)**, then delegate to `service-itsm-incident-mgmt-configure` inline (confirms-to-write) and
138
+ re-read; if declined, halt — every SLA artifact below depends on the master being on. Full shape + why
139
+ setup-org-preferences 404s here: `references/mcp-invocation.md` (Preflight A).
155
140
  2. **Discover the Connect operations** — *(skip if already verified this session — see Phase 0)*.
156
141
  `mcp__headless-360__discover(query="sla-management milestone")` to confirm the SLA Management
157
142
  Connect API is indexed, then `mcp__headless-360__describe(id=<operation_id>)`
@@ -169,46 +154,37 @@ handling, and the permanence rule are in `references/mcp-invocation.md`.
169
154
  `query_params.q="SELECT Id, Name FROM BusinessHours WHERE IsActive = true AND IsDefault = true"`.
170
155
  If `body.records` is empty, stop with a message to create default Business Hours in Setup. Capture
171
156
  `BusinessHoursId`.
172
- 5. **Resolve the target Account** — *(skip if the Account the user named — or, absent a name,
173
- the fallback first-active Account — is already resolved to an Id this session)*. Otherwise the
174
- Entitlement in Phase 2 requires an `AccountId`, so resolve it now, before any mutation. If the
175
- user named an Account, look it up by name via a `dispatch_readonly`
176
- SOQL: `SELECT Id, Name FROM Account WHERE Name = '<escaped name>' LIMIT 1`. If the named Account is
177
- not found, **stop and ask** — do NOT silently substitute a different Account. Only when the user
178
- did **not** name one, fall back to the first active Account
179
- (`SELECT Id, Name FROM Account WHERE IsDeleted = false ORDER BY CreatedDate LIMIT 1`) and surface
180
- which Account you chose in the confirmation gate below. If no Account exists at all, stop with a
181
- message to create one first. Capture `AccountId` and the Account name.
182
- 6. **Read existing SLA artifacts (idempotency probe)** — `dispatch_readonly` SOQL against
183
- `SlaProcess` by name (`SELECT Id, Name FROM SlaProcess WHERE Name = '<name>' AND SObjectType = 'Incident' LIMIT 1` — the physical sObject field is `SObjectType`; `ProcessType` returns `INVALID_FIELD`),
184
- `MilestoneType` by name for each type the strategy would create, `SlaMilestone` under the matched
185
- `SlaProcess`, and `Entitlement` by name against the resolved Account. Record which artifacts
186
- already exist. If **every** artifact the request would create already exists with the requested
187
- configuration, Phase 1.4 skip condition (b) applies — set `noOp=true` and skip Phase 1.4 and
188
- Phase 2. Any missing or divergent artifact means a mutation is required; proceed to Phase 1.4.
157
+ 5. **Resolve the target Account** — *(skip if already resolved this session)*. Phase 2's Entitlement
158
+ needs an `AccountId`. If the user **named** one → look up (`SELECT Id, Name FROM Account WHERE Name
159
+ = '<escaped>' LIMIT 1`); not found → **stop and ask**, never substitute. If the user **authorized
160
+ any/existing Account** → pick the most recently active (`... WHERE IsDeleted = false ORDER BY
161
+ LastModifiedDate DESC LIMIT 1`) and **surface which** in the plan. Otherwise → **ask via
162
+ `AskUserQuestion`**: list real candidates by **name only** + "type a name"; **never auto-pick,
163
+ pre-select, or expose an internal sort key** (e.g. recency). If none exists, stop. Capture `AccountId` + name.
164
+ 6. **Read existing SLA artifacts (idempotency probe)** — `dispatch_readonly` SOQL for `SlaProcess` by
165
+ name (`... WHERE Name = '<name>' AND SobjectType = 'Incident'` — the field is `SobjectType`;
166
+ `ProcessType` returns `INVALID_FIELD`), each `MilestoneType` the strategy would create,
167
+ `SlaMilestone` under the matched policy, and `Entitlement` by name on the resolved Account. If
168
+ **every** artifact already exists with the requested config, set `noOp=true` and skip Phase 1.4 +
169
+ Phase 2 (skip condition (b)); any missing/divergent artifact → proceed to Phase 1.4.
189
170
 
190
171
  ### Phase 1.4 — Milestone Strategy
191
172
 
192
173
  Every SLA policy needs at least one milestone. Load `examples/milestone-patterns.md` — it lists the
193
- Phase 1.4 skip conditions (concrete shape in prompt, idempotent no-op, explicit up-front
194
- authorization) and the five strategy options (Single, Response + Resolution, Priority-tiered,
195
- Escalation ladder, Custom/mixed) with their `AskUserQuestion` prompt, default numbers, and
196
- MilestoneType-reuse rules. Skip conditions (c) still requires Phase 1.5 plan-narration before
197
- dispatch. Multi-milestone selection expands to N milestone creates in Phase 2 step 10 (one POST per
198
- milestone, `order` 1..N, all attached to the same SlaProcess).
174
+ skip conditions (concrete shape in prompt / idempotent no-op / explicit up-front authorization) and
175
+ the five strategy options with their `AskUserQuestion` prompt, defaults, and MilestoneType-reuse
176
+ rules. Skip condition (c) still requires Phase 1.5 plan-narration before dispatch. Multi-milestone
177
+ selection expands to N creates in Phase 2 step 10 (one POST per milestone, `order` 1..N, same SlaProcess).
199
178
 
200
179
  ### Phase 1.5 — Confirm before mutating
201
180
 
202
- 7. **Confirm the plan** — present the resolved configuration (target **org**, **SLA Policy** name,
203
- resolved **Account** name, **Entitlement** date range, and the **full per-milestone list** from
204
- Phase 1.4 — never collapse Priority-tiered / Custom to "N milestones").
205
-
206
- **Skip the `AskUserQuestion` confirmation prompt** (still narrate the plan before dispatch)
207
- when: up-front authorization was granted (note `(authorized in prompt)`); the branch is a no-op
208
- (skip Phase 1.5 + Phase 2, report the no-op); or the plan was already confirmed in conversation
209
- (note `(confirmed in conversation)`). Otherwise dispatch `AskUserQuestion` and require an
210
- explicit "yes" before Phase 2. Everything before this step is read-only; everything after
211
- mutates the org.
181
+ 7. **Confirm the plan** — present the resolved config (target **org**, **SLA Policy** name, resolved
182
+ **Account** name, **Entitlement** date range, and the **full per-milestone list** — never collapse
183
+ Priority-tiered / Custom to "N milestones"). **Skip the `AskUserQuestion`** (but still narrate the
184
+ plan before dispatch) when up-front authorization was granted (note `(authorized in prompt)`), the
185
+ branch is a no-op, or it was already confirmed in conversation (note `(confirmed in conversation)`);
186
+ otherwise require an explicit "yes" before Phase 2. Everything before this step is read-only;
187
+ everything after mutates the org.
212
188
 
213
189
  ### Phase 2 — Create SLA Artifacts (exact order — each depends on the previous)
214
190
 
@@ -224,24 +200,44 @@ milestone, `order` 1..N, all attached to the same SlaProcess).
224
200
  and, for each milestone in the strategy, populate `milestoneTypeId`, `timeTrigger`, `order`
225
201
  (1..N in the strategy's order) and any per-pattern `filterItems` additions from
226
202
  `examples/milestone-patterns.md`, then `POST /connect/sla-management/sla-policies/<slaId>/milestones`.
227
- `milestoneCriteria` is mandatory (`filterType: RuleFilter`). Do **not** put `slaProcessId` in the
228
- body — it is carried by the path. Multi-milestone strategies dispatch this call once per
229
- milestone; if any milestone POST fails, halt and surface the raw error — do not continue with a
230
- half-attached policy.
203
+ Each `milestoneCriteria[]` item needs `milestoneAgreementType` (`SLA`/`OLA`) and
204
+ `filterType: RuleFilter`. Do **not** put `slaProcessId` in the body — carried by the path.
205
+ Multi-milestone strategies dispatch once per milestone; on any milestone POST failure, halt
206
+ and surface the raw error — do not continue with a half-attached policy.
231
207
  11. **Create Entitlement** — `POST /sobjects/Entitlement` linking the resolved Account (from Phase 1
232
208
  step 5), the SLA Policy (`SlaProcessId`), and Business Hours. For immediate engagement, backdate
233
209
  `StartDate` to yesterday.
234
210
 
211
+ ### Phase 2-OOB — Seed the Predefined Incident Policy
212
+
213
+ Reached only from Phase 0.6 Predefined (replaces Phase 1.4/1.5/2). Follow the seed recipe
214
+ in `references/mcp-invocation.md` (**Predefined Incident Policy**) with the template in
215
+ `assets/predefined-incident-policy.json` — it uses the **Phase 2 routes** (2 MilestoneTypes → SLA
216
+ Policy `active:true` → 8 priority-tiered milestones → Entitlement), validates each `Priority`/`Status`
217
+ against the live picklist, and avoids the Connect activate PATCH. Then run **Phase 2.5** (if actions
218
+ requested), then **Phase 3** (Critical test Incident), and **STOP** — no *proactive* custom offer.
219
+
220
+ ### Phase 2.5 — Milestone Actions (optional: Warn / Escalate)
221
+
222
+ After milestones exist (Phase 2 or 2-OOB), **only if** the user asked to warn/escalate/notify: apply
223
+ the requested checkpoint(s) to **every milestone the user named** (not just one), computing each
224
+ offset from that milestone's own target. Map "warn at X%" → an offset *before* target, "on breach" →
225
+ *at/after* it; **confirm the full set before writing** (up-front auth waives the re-ask; narrate it
226
+ regardless — no headless delete), then, per milestone, delegate to headless
227
+ **`create-milestone-action`** (`discover` → `describe` → `dispatch`). **Confirm each from the response
228
+ body** (`success` + non-empty `actionMappings`; a *timed* checkpoint also returns a `triggerId`), never
229
+ the `201`. Formula, roles, proven body, defaults, and the IST business-hours note:
230
+ `references/mcp-invocation.md` (Milestone Actions).
231
+
235
232
  ### Phase 3 — Verify
236
233
 
237
234
  12. **Verify the SLA Policy** — SOQL on `SlaProcess` (do not trust the create response).
238
- 13. **Create a test Incident** with `EntitlementId` pointing at the new Entitlement. For
239
- Priority-tiered strategies, set a specific `Priority` on the test Incident (or create one test
240
- Incident per Priority) so at least one milestone's criteria matches — otherwise no
241
- `EntityMilestone` will spawn even though the policy is wired correctly.
235
+ 13. **Create a test Incident** with `EntitlementId` set to the new Entitlement. For Priority-tiered
236
+ strategies, set a `Priority` that matches at least one milestone's criteria (or one test Incident
237
+ per Priority) — otherwise no `EntityMilestone` spawns even with the policy wired correctly.
242
238
  14. **Verify engagement** — SOQL confirming `Incident.SlaStartDate` is populated and the expected
243
- `EntityMilestone` row(s) exist with the correct `TargetDate`(s). For multi-milestone
244
- strategies, expect one `EntityMilestone` per milestone whose criteria the Incident satisfies.
239
+ `EntityMilestone` row(s) exist with correct `TargetDate`(s) — one per milestone whose criteria
240
+ the Incident satisfies.
245
241
  15. **Report results** using the output format below.
246
242
 
247
243
  ---
@@ -250,40 +246,42 @@ milestone, `order` 1..N, all attached to the same SlaProcess).
250
246
 
251
247
  | Constraint | Rationale |
252
248
  |-----------|-----------|
253
- | Gate on **SLA Management for IT Service** first (Phase 0.5) — feature `ENABLED` AND versioning `true`; confirm before enabling, versioning permanent, re-read after each write | Skipping risks a mid-flow 403/404; versioning can't be undone; writes don't confirm state |
249
+ | Gate on **SLA Management for IT Service** first (Phase 0.5) — one enable turns on the feature **and**, one-way, **SLA Versioning**; **two separate acks (master, then permanence) — never merged**; decline / blocked / verify-fail → **HALT, no fall-through**; re-read + report real state | Versioning can't be undone; writes don't confirm state |
250
+ | Offer the **predefined (OOB)** policy first (Phase 0.6, Incident only); detect before seed; if chosen, seed → verify → **STOP** (no custom upsell) | OOB seed has no server idempotency (re-seeding duplicates) |
254
251
  | Discover + describe before any mutation | Catches a missing SLA surface / disabled Incident Management early |
255
- | Ask (via `AskUserQuestion`) which milestone strategy to use — do not silently default to Single | Real ITSM policies almost always have more than one milestone; picking silently hides the choice from the user |
256
- | Reuse one MilestoneType per shared name; create a distinct MilestoneType per distinct concern | The runtime keys milestones by MilestoneType — sharing collapses distinct concerns |
257
- | For multi-milestone strategies, halt on any milestone POST failure — do not continue with a half-attached policy | The confirmation gate covers all N milestones together; partial attach diverges from the confirmed plan |
258
- | Priority-tiered strategy: validate every `Priority` value against the live Incident picklist before dispatch | The server accepts any string on `filterItems.value` — an unknown Priority value silently makes the milestone dead code |
252
+ | Ask (via `AskUserQuestion`) which milestone strategy to use — don't silently default to Single | Real ITSM policies usually have >1 milestone; a silent default hides it |
253
+ | Reuse one MilestoneType per shared name; create a distinct one per distinct concern | The runtime keys milestones by MilestoneType — sharing collapses distinct concerns |
254
+ | For multi-milestone strategies, halt on any milestone POST failure (no half-attached policy) | Partial attach diverges from the confirmed plan |
255
+ | Priority-tiered: validate every `Priority` value against the live Incident picklist before dispatch | The server accepts any string on `filterItems.value` — an unknown value silently makes the milestone dead code |
259
256
  | Entitlement is standard sObject DML (not Connect API); `StartDate` controls status (future = Inactive) | Not part of the `/connect/sla-management/` surface |
260
257
  | Verify SLA Policy via SOQL, not the create response | The create response echoes nulls |
261
- | Never show Salesforce record IDs to the user | Use human-readable names and IncidentNumber |
258
+ | Never show record IDs **in any message, incl. interim narration** — the test Incident by **IncidentNumber**, milestones by **MilestoneType name**, never the 15/18-char Id; keep `AskUserQuestion` labels customer-facing (no "demo", "the skill", internal defaults) | Leaked Ids and internal/demo framing look unprofessional |
262
259
 
263
- Additional API quirks (payload rules, filter-operator enum, missing-criteria error) are documented in `references/mcp-invocation.md` — consult before dispatch.
260
+ Additional API quirks (payload rules, operator enum, missing-criteria error): `references/mcp-invocation.md`.
264
261
 
265
262
  ---
266
263
 
267
264
  ## Verification Checklist
268
265
 
269
- - [ ] **SLA Management prerequisite gated (Phase 0.5)** — feature `ENABLED` AND `IsEntitlementVersioningEnabled` `true`; whatever was off was enabled only after confirmation (versioning flagged permanent) and re-read to verify, never trusting the write response; non-empty `enableBlockedReasons` halted the run.
270
- - [ ] Master Incident Management pref was confirmed `ENABLED` via a live Setup Discovery read this session (or via an inline delegation to `service-itsm-incident-mgmt-configure` when it came back off). A user-asserted state is NOT a substitute for the live read.
271
- - [ ] `discover` + `describe` (or the Incident describe) confirmed the SLA Management Connect operations.
266
+ - [ ] **SLA Management gated (Phase 0.5)** — feature + SLA Versioning both on, only after the **permanence ack** (separate from the master ack); reported state matches a re-read, not the write. If it couldn't be enabled (declined / blocked / verify-fail), the run **HALTED** before Phase 0.6/1 — no artifacts.
267
+ - [ ] **Predefined vs Custom offered (Phase 0.6)** — with the feature ON, the OOB *Standard Support for Incidents* policy was offered first; if it existed, reported not re-seeded; if chosen, seeded (2 MilestoneTypes + 8 tiered milestones + Entitlement), verified, **no** custom offer followed.
268
+ - [ ] Master Incident Mgmt pref (exact `service-cloud-itsm-incident`) confirmed `ENABLED` via a live read, or delegated to `service-itsm-incident-mgmt-configure` when `NOT_ENABLED` (`NOT_AVAILABLE` → HALT) — not a user assertion, not a look-alike.
269
+ - [ ] `discover`/`describe` (or the Incident describe) confirmed the SLA Connect operations.
272
270
  - [ ] Incident describe returned 200 with `EntitlementId`, `SlaStartDate`, `SlaExitDate`.
273
271
  - [ ] Default BusinessHours found.
274
- - [ ] **Milestone strategy resolved** — via a Phase 1.4 skip condition (prompt named a shape / no-op branch / up-front authorization + derivable shape) OR via `AskUserQuestion`. A skipped `AskUserQuestion` under a valid skip condition is honoring the contract, not violating it. For Priority-tiered / Custom, every `Priority` / criteria value was validated against the live Incident picklist before dispatch.
275
- - [ ] **Configuration confirmed OR skip condition met** — up-front authorization, no-op branch, prior confirmation in conversation, OR explicit "yes" via `AskUserQuestion`. In every case, the resolved plan (org, SLA name, account, entitlement range, per-milestone list) was narrated before Phase 2 dispatched.
276
- - [ ] Artifacts created in order (MilestoneType(s) → Policy → Milestone(s) → Entitlement); each POST returned 201; any milestone POST failure halted the run (no partial attach). Trivially satisfied on no-op runs.
277
- - [ ] SLA Policy verified via SOQL (not the create response). On no-op runs, the Phase-1 read is the verification.
278
- - [ ] Test Incident has `SlaStartDate` populated (Priority chosen to match at least one criterion for Priority-tiered). Skip on no-op runs.
279
- - [ ] At least one EntityMilestone exists with the correct TargetDate; for multi-milestone strategies, the expected milestone(s) are present. Skip on no-op runs.
280
- - [ ] Before/after and summary shown. On no-op runs, the summary states the pre-existing configuration verbatim and reports "no changes made".
272
+ - [ ] **Milestone strategy resolved** — via a Phase 1.4 skip condition OR `AskUserQuestion`; for Priority-tiered / Custom, every `Priority`/criteria value was validated against the live Incident picklist before dispatch.
273
+ - [ ] **Configuration confirmed OR skip condition met** (up-front authorization / no-op / prior confirmation / explicit "yes"); the resolved plan (org, SLA name, account, entitlement range, per-milestone list) was narrated before Phase 2.
274
+ - [ ] Artifacts created in order (MilestoneType(s) → Policy → Milestone(s) → Entitlement); each POST 201; any milestone POST failure halted the run (no partial attach). Trivial on no-op runs.
275
+ - [ ] **Milestone actions (Phase 2.5)** — if requested, attached to **every** named milestone; each confirmed from `body.success` + `actionMappings`, not the `201`; full set narrated before write.
276
+ - [ ] SLA Policy verified via SOQL, not the create response (on no-op, the Phase-1 read is the verification).
277
+ - [ ] Test Incident has `SlaStartDate` populated (Priority chosen to match a criterion for Priority-tiered) and ≥1 EntityMilestone with the correct TargetDate; expected milestone(s) present for multi-milestone. Skip on no-op.
278
+ - [ ] Before/after + summary shown; on no-op, the summary states the pre-existing configuration verbatim and reports "no changes made".
281
279
 
282
280
  ---
283
281
 
284
282
  ## Output Format
285
283
 
286
- See `examples/output-templates.md` for the canonical failure / single-milestone success / multi-milestone success templates. Fill in the placeholders as-is. No record IDs in user-facing output. No files are produced — the skill mutates org configuration in place through headless-360 MCP dispatch.
284
+ See `examples/output-templates.md` for the canonical failure / single-milestone success / multi-milestone success templates. Fill in the placeholders as-is. No files are produced — the skill mutates org configuration in place through headless-360 MCP dispatch.
287
285
 
288
286
  ---
289
287
 
@@ -292,17 +290,17 @@ See `examples/output-templates.md` for the canonical failure / single-milestone
292
290
  | File | When to read |
293
291
  |------|--------------|
294
292
  | `references/mcp-invocation.md` | Every phase — exact `mcp__headless-360__*` call shapes, payload templates, response envelope, discovery, and gotchas (filter-operator enum, v67 routes, entitlement behavior) |
295
- | `examples/milestone-patterns.md` | Phase 1.4 — the five milestone strategies (Single, Response + Resolution, Priority-tiered, Escalation ladder, Custom) with default times, criteria, MilestoneType reuse rules, and per-pattern filter-item extensions |
293
+ | `examples/milestone-patterns.md` | Phase 1.4 — the five milestone strategies with default times, criteria, MilestoneType reuse rules, and per-pattern filter-item extensions |
296
294
  | `examples/output-templates.md` | Output Format — canonical failure / single-milestone success / multi-milestone success templates |
297
- | `assets/attach-milestone.json` | Phase 2 step 10 — reusable request-body template for `POST /connect/sla-management/sla-policies/<slaId>/milestones`; substitute `milestoneTypeId`, `businessHoursId`, `timeTrigger`, `order`, and append per-pattern `filterItems` |
295
+ | `assets/attach-milestone.json` | Phase 2 step 10 — request-body template for the milestone POST (`sla-policies/<slaId>/milestones`); substitute `milestoneTypeId`, `businessHoursId`, `timeTrigger`, `order`; append per-pattern `filterItems` |
296
+ | `assets/predefined-incident-policy.json` | Phase 0.6 / Phase 2-OOB — the OOB *Standard Support for Incidents* seed template (policy + 2 MilestoneTypes + 8 priority-tiered milestones) |
297
+ | `assets/attach-milestone-action.json` | Phase 2.5 — Warn/Escalate milestone-action body templates (Field Update); pair with `references/mcp-invocation.md` (Milestone Actions) |
298
298
 
299
299
  ---
300
300
 
301
301
  ## Related Skills
302
302
 
303
- This skill configures the end-to-end **Incident SLA** pipeline. Configuring the priority matrix
304
- (Impact × Urgency → Priority) is a separate concern handled by
305
- `service-itsm-incident-priority-configure` — if a Priority-tiered milestone strategy is requested
306
- but the org's `Incident.Priority` picklist is missing values, direct the user to that skill first.
307
- Other adjacent ITSM setup flows (Major Incident Management, custom fields on Incident / Problem /
308
- ChangeRequest) are out of scope; use their dedicated skill when available.
303
+ The priority matrix (Impact × Urgency → Priority) is separate — `service-itsm-incident-priority-configure`;
304
+ if a Priority-tiered strategy is requested but `Incident.Priority` is missing values, direct the user
305
+ there first. Other adjacent ITSM flows (Major Incident Mgmt, custom fields on Incident/Problem/ChangeRequest)
306
+ are out of scope.
@@ -0,0 +1,51 @@
1
+ {
2
+ "_notes": "Phase 2.5 request-body templates for POST /connect/sla-management/sla-policies/<slaId>/milestones/<milestoneId>/actions. Send EXACTLY ONE action sub-object per call. timeLength/timeUnit live INSIDE checkpoint. timeUnit is Minutes|Hours|Days only. Never send isInitiationCheckpoint. Confirm success from body.success + non-empty body.actionMappings (+ triggerId for timed checkpoints), not the 201. UNIQUENESS: the actionFieldUpdate name/developerName must be unique per milestone (a WorkflowFieldUpdate DeveloperName is unique on the Incident object) — attaching the same-named action to a second milestone fails with DUPLICATE_DEVELOPER_NAME. Suffix both with the milestone (e.g. _FR for First Response, _RES for Resolution). These mirror the live-validated 'Proven bodies' in references/mcp-invocation.md (Milestone Actions) — keep the two in sync.",
3
+
4
+ "warningAction": {
5
+ "_notes": "Warn BEFORE target. timeLength = round(targetMinutes * (1 - X/100)). 2-hr (120-min) milestone, warn at 75% -> 30 min before. Default action = Field Update setting Priority = High. Replace <MS> in name/developerName with a per-milestone suffix. For a custom-field target, put its 00N... CustomField id in columnEnumOrId (not the __c API name).",
6
+ "isSuccessCheckpoint": false,
7
+ "checkpoint": { "isWarning": true, "timeLength": 30, "timeUnit": "Minutes" },
8
+ "entityName": "Incident",
9
+ "actionFieldUpdate": {
10
+ "name": "SLA Warn 75pct <MS>",
11
+ "sourceTable": "Incident",
12
+ "targetTable": "Incident",
13
+ "columnEnumOrId": "Priority",
14
+ "developerName": "SLA_Warn_75_<MS>",
15
+ "operationString": "LITERAL",
16
+ "literal": "High"
17
+ }
18
+ },
19
+
20
+ "violationAction": {
21
+ "_notes": "Escalate ON breach = Violation with timeLength 0 (fires at target). Default: set Priority = Critical. Replace <MS> in name/developerName with the same per-milestone suffix used for the warning.",
22
+ "isSuccessCheckpoint": false,
23
+ "checkpoint": { "isWarning": false, "timeLength": 0, "timeUnit": "Minutes" },
24
+ "entityName": "Incident",
25
+ "actionFieldUpdate": {
26
+ "name": "SLA Escalate on Breach <MS>",
27
+ "sourceTable": "Incident",
28
+ "targetTable": "Incident",
29
+ "columnEnumOrId": "Priority",
30
+ "developerName": "SLA_Escalate_Breach_<MS>",
31
+ "operationString": "LITERAL",
32
+ "literal": "Critical"
33
+ }
34
+ },
35
+
36
+ "istBusinessHours": {
37
+ "_notes": "'IST business hours' is a POLICY-level BusinessHours, not a milestone-action field. Resolve-then-create: reuse an existing BusinessHours with TimeZoneSidKey='Asia/Kolkata' if present, else POST /sobjects/BusinessHours with this body (confirm first; BusinessHours is NOT API-deletable). Attach via the policy/Entitlement BusinessHoursId. If the org has ignoreMilestoneBusinessHours=true, milestone timers run 24/7 and ignore this - disclose that.",
38
+ "Name": "IST Business Hours",
39
+ "TimeZoneSidKey": "Asia/Kolkata",
40
+ "MondayStartTime": "09:00:00.000Z",
41
+ "MondayEndTime": "18:00:00.000Z",
42
+ "TuesdayStartTime": "09:00:00.000Z",
43
+ "TuesdayEndTime": "18:00:00.000Z",
44
+ "WednesdayStartTime": "09:00:00.000Z",
45
+ "WednesdayEndTime": "18:00:00.000Z",
46
+ "ThursdayStartTime": "09:00:00.000Z",
47
+ "ThursdayEndTime": "18:00:00.000Z",
48
+ "FridayStartTime": "09:00:00.000Z",
49
+ "FridayEndTime": "18:00:00.000Z"
50
+ }
51
+ }
@@ -7,7 +7,7 @@
7
7
  "milestoneCriteria": [
8
8
  {
9
9
  "milestoneState": "Active",
10
- "milestoneAgreementType": "Warning",
10
+ "milestoneAgreementType": "SLA",
11
11
  "filterType": "RuleFilter",
12
12
  "filterItems": [
13
13
  {