@salesforce/afv-skills 1.61.0 → 1.62.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 (44) hide show
  1. package/package.json +3 -3
  2. package/skills/agentforce-architecture-analyze/README.md +2 -1
  3. package/skills/agentforce-d360-analyze/README.md +1 -1
  4. package/skills/agentforce-generate/README.md +1 -0
  5. package/skills/crm-analytics-wave-generate/SKILL.md +212 -0
  6. package/skills/crm-analytics-wave-generate/assets/dashboard-template.json +66 -0
  7. package/skills/crm-analytics-wave-generate/assets/wapp-meta-template.xml +10 -0
  8. package/skills/crm-analytics-wave-generate/assets/wdash-meta-template.xml +6 -0
  9. package/skills/crm-analytics-wave-generate/assets/wdpr-meta-template.xml +11 -0
  10. package/skills/crm-analytics-wave-generate/examples/industry-binding-dashboard.wdash +67 -0
  11. package/skills/crm-analytics-wave-generate/examples/opportunity-revenue-recipe.wdpr +132 -0
  12. package/skills/crm-analytics-wave-generate/examples/pipeline-by-industry-quarter.wdpr +236 -0
  13. package/skills/crm-analytics-wave-generate/examples/wdpr-skeleton.wdpr +62 -0
  14. package/skills/crm-analytics-wave-generate/references/dashboard-authoring.md +157 -0
  15. package/skills/crm-analytics-wave-generate/references/dataset-hygiene.md +27 -0
  16. package/skills/crm-analytics-wave-generate/references/external-data-upload.md +61 -0
  17. package/skills/crm-analytics-wave-generate/references/method-decision-tree.md +12 -0
  18. package/skills/crm-analytics-wave-generate/references/r3-node-schema.md +194 -0
  19. package/skills/crm-analytics-wave-generate/references/scripts-reference.md +17 -0
  20. package/skills/crm-analytics-wave-generate/references/ui-section-template.md +68 -0
  21. package/skills/crm-analytics-wave-generate/scripts/check_connector_error.sh +53 -0
  22. package/skills/crm-analytics-wave-generate/scripts/create_app.js +59 -0
  23. package/skills/crm-analytics-wave-generate/scripts/deploy_and_run_recipe.js +122 -0
  24. package/skills/crm-analytics-wave-generate/scripts/fetch_dataset_xmd.js +59 -0
  25. package/skills/crm-analytics-wave-generate/scripts/find_unused_dataset_fields.js +96 -0
  26. package/skills/crm-analytics-wave-generate/scripts/gen_synthetic_dataset.js +137 -0
  27. package/skills/crm-analytics-wave-generate/scripts/patch_t_oppo_view.js +99 -0
  28. package/skills/crm-analytics-wave-generate/scripts/probe_recipe.js +47 -0
  29. package/skills/crm-analytics-wave-generate/scripts/upload_dataset.js +119 -0
  30. package/skills/crm-analytics-wave-generate/scripts/verify_dashboard_steps.js +99 -0
  31. package/skills/crm-analytics-wave-generate/scripts/verify_synthetic_dataset.js +86 -0
  32. package/skills/service-itsm-agentic-setup-incident-management/SKILL.md +59 -20
  33. package/skills/service-itsm-agentic-setup-incident-management/examples/output-templates.md +5 -1
  34. package/skills/service-itsm-agentic-setup-incident-management/references/incident-persona-psg.md +2 -2
  35. package/skills/service-itsm-agentic-setup-incident-management/references/incident-preferences.md +2 -2
  36. package/skills/service-itsm-agentic-setup-incident-management/references/major-incident-management.md +5 -5
  37. package/skills/service-itsm-agentic-setup-incident-management/references/service-mgmt-privilege.md +5 -5
  38. package/skills/service-itsm-agentic-setup-incident-sla-configure/SKILL.md +67 -100
  39. package/skills/service-itsm-agentic-setup-incident-sla-configure/assets/attach-milestone-action.json +2 -2
  40. package/skills/service-itsm-agentic-setup-incident-sla-configure/assets/attach-milestone.json +2 -2
  41. package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/milestone-patterns.md +23 -22
  42. package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/output-templates.md +3 -3
  43. package/skills/service-itsm-agentic-setup-incident-sla-configure/references/mcp-invocation.md +182 -58
  44. package/skills/service-itsm-agentic-setup-incident-sla-configure/references/workflow.md +157 -88
@@ -1,15 +1,10 @@
1
1
  ---
2
2
  name: service-itsm-agentic-setup-incident-sla-configure
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."
3
+ description: "End-to-end Incident SLA setup for Service Cloud ITSM — the policy's Business Hours (reuse a named schedule, or create one from described hours or a time zone), MilestoneTypes, an Incident-scoped SLA Policy (SlaProcess), Milestones with criteria, and the Entitlement so Incidents get an EntityMilestone with a computed TargetDate. Use when the user asks to create or set up an Incident SLA policy (predefined or custom, with or without specific business hours), configure SLA milestones on Incidents, set up entitlement processes for ITSM, or enable SLA tracking for incident management. For Incidents, use this instead of the single-step SLA policy, milestone, or activation skills. 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.8"
5
+ version: "3.10"
6
6
  domains: ["Service"]
7
7
  minApiVersion: "67.0"
8
- accessCheck:
9
- - type: "userPerm"
10
- value: "CustomizeApplication"
11
- - type: "orgPerm"
12
- value: "IncidentMgmt.orgHasITSMOrgPermission"
13
8
  relatedSkills:
14
9
  - "service-itsm-incident-mgmt-configure"
15
10
  - "service-itsm-incident-priority-configure"
@@ -31,21 +26,22 @@ allowed-tools: |
31
26
  Configures a complete **Incident SLA pipeline** for Service Cloud ITSM — the chain deriving an
32
27
  EntityMilestone (with a computed TargetDate) on every Incident with an Entitlement, all via the
33
28
  Salesforce-hosted **`headless-360`** MCP server (org from the OAuth JWT). Requires the org-level
34
- **SLA Management for IT Service** setup item (the Phase 0.5 gate).
29
+ **IT Service Management enablement** (the Phase 1a gate) and **SLA Management for IT Service**
30
+ setup item (the Phase 1b gate).
35
31
  The custom pipeline (four ordered writes): **MilestoneType** (what you measure) → **SLA Policy**
36
32
  (SlaProcess, Incident-scoped, created inactive, entry/exit criteria) → **Milestone** (time trigger +
37
33
  criteria) → **activate the policy** (`createEntitlement=true`, which auto-provisions the Entitlement —
38
34
  matching Incidents then engage the SLA **per-Incident via `EntitlementId`**, with no Account). An
39
35
  org-wide auto-apply **entitlement criterion** is an *optional* fifth write, dispatched **only** on an
40
- explicit always-match request (Phase 2 step 12) — never by default. (The predefined/OOB
36
+ explicit always-match request (Phase 4A step 6) — never by default. (The predefined/OOB
41
37
  seed fork differs — it does none of this by hand: a single seed call provisions the whole active
42
- bundle — policy, milestones, and Entitlement — in one shot; see Phase 0.6 / Phase 2-OOB.)
38
+ bundle — policy, milestones, and Entitlement — in one shot; see Phase 2 / Phase 4B.)
43
39
  This skill owns all the Incident-SLA **interaction** (gates, forks, milestone strategy,
44
- verification); the raw **write** operations are **delegated to the approved CSP-Sun SLA
40
+ verification); the raw **write** operations are **delegated to the approved SLA
45
41
  leaf capabilities** (`csp-sun/MilestoneTypes`, `create-sla-policy`, `create-milestone`,
46
42
  `create-milestone-action`, `activate-sla-policy`, `create-entitlement-criteria`), which own the
47
43
  approved Connect contracts — discover → describe → dispatch each rather than re-deriving its shape here.
48
- The Phase 0.5 **enable** (+ Versioning) and Phase 2-OOB **seed** writes delegate to
44
+ The Phase 1b **enable** (+ Versioning) and Phase 4B **seed** writes delegate to
49
45
  **`itsm-shakti/SLASettings`** (owns the SLA-Management settings surface) — same discover → describe → dispatch.
50
46
 
51
47
  ## Scope
@@ -54,8 +50,8 @@ The Phase 0.5 **enable** (+ Versioning) and Phase 2-OOB **seed** writes delegate
54
50
  activation with its auto-provisioned Entitlement, and — only on an explicit org-wide always-match
55
51
  request — the optional auto-apply criterion) + verifying SLA
56
52
  engagement on Incident records; gating
57
- **SLA Management for IT Service** (Phase 0.5); offering the OOB *Standard Support for Incidents*
58
- policy vs a custom one (Phase 0.6, Incident only) — all via `headless-360` MCP.
53
+ **SLA Management for IT Service** (Phase 1b); offering the OOB *Standard Support for Incidents*
54
+ policy vs a custom one (Phase 2, Incident only) — all via `headless-360` MCP.
59
55
  - **Out of scope**: Case SLA/entitlements; Assignment Rules; Escalation Rules; Notification
60
56
  Rules; general Entitlement CRUD not related to Incident SLA; SLA reporting.
61
57
 
@@ -68,7 +64,7 @@ masked** (`557VW…R3XVYA0` still leaks) — in **any** user-facing text: interi
68
64
  final report. Holds for artifacts you **created** *and* ones you **detected/reused** — name each (the
69
65
  name you supplied on create, or matched on reuse), keep its Id internal (chaining only). Verifying or
70
66
  matching via SOQL? Report the **verified attributes/name**, never the Id you queried by. **Looking *up*
71
- an Id is the same rule** — resolving the default **BusinessHours** or an existing policy returns
67
+ an Id is the same rule** — resolving **Business Hours** (resolved, user-selected, or created in Phase 4A step 1) or an existing policy returns
72
68
  `{Id, Name}`; narrate the resolved **name only** and keep the returned Id internal — **never** echo it
73
69
  back as `Resolved "<name>" (001VW…)`. One
74
70
  exception: on a **halt** you may relay the raw error body verbatim even if it embeds an Id —
@@ -76,7 +72,7 @@ don't hand-edit it.
76
72
 
77
73
  - **Wrong:** `SLA policy created (552VW…)` · `Incident created (0ny…)` · `First Response → 557VW…R3XVYA0` (reuse)
78
74
  - **Right:** `Created SLA policy "Standard Support for Incidents"` · `reusing the existing First Response
79
- milestone type` · the test Incident is "the test Incident" until Phase 3, then its `IncidentNumber`;
75
+ milestone type` · the test Incident is "the test Incident" until Phase 6, then its `IncidentNumber`;
80
76
  milestones by `MilestoneType` name.
81
77
 
82
78
  ---
@@ -92,81 +88,49 @@ from `{status_code, body}`. Full route table with request/response shapes: `refe
92
88
  ## Clarifying Questions
93
89
 
94
90
  Ask only what you cannot infer from context (pre-populate; note "(from conversation)"). **Resolve the
95
- Phase 0.5 gate first.** Then: **which org?** (`headless-360` binds to the current OAuth session —
96
- confirm before mutating); **milestone strategy?** (Phase 1.4); **milestone criteria?** (default
91
+ Phase 1a and Phase 1b gates first, in that order.** Then: **which org?** (`headless-360` binds to the current OAuth session —
92
+ confirm before mutating); **milestone strategy?** (Phase 3b); **milestone criteria?** (default
97
93
  `Status != Closed` + pattern-specific filters). **Do not ask for an Account** — Incident has no
98
- Account field; engagement is per-Incident via `EntitlementId`.
94
+ Account field; engagement is per-Incident via `EntitlementId`. **Business Hours:** ask only when the
95
+ user's choice is ambiguous or the org has none (Phase 3a step 4); never ask on the Predefined path.
99
96
 
100
- Default suggestion: SLA Policy `Incident SLA Policy`, default BusinessHours, Entitlement
97
+ Default suggestion: SLA Policy `Incident SLA Policy`, suggested default Business Hours (confirmed at
98
+ Phase 3c), Entitlement
101
99
  auto-provisioned on activation (no Account), engagement per-Incident via `EntitlementId`, milestone
102
- strategy resolved per Phase 1.4.
100
+ strategy resolved per Phase 3b.
103
101
 
104
102
  ---
105
103
 
106
104
  ## Workflow
107
105
 
108
- All steps are sequential — **always read before you write**; every call goes through
109
- `mcp__headless-360__*`. **The full step-by-step detail — every phase's reads, delegated writes, and
110
- API quirks — lives in `references/workflow.md`; read it before executing.** The phases and their
111
- non-negotiable gates (constraints table + verification checklist below):
112
-
113
- - **Phase 0 — Reuse session state.** Skip a Phase 1 read only when the same fact was produced *this
114
- session* by a successful `dispatch_readonly` on the current org and unwritten since; a user
115
- statement is never cache-eligible. When in doubt, re-check.
116
- - **Phase 0.5 — SLA Management gate (resolve first, alone).** Enabled only when **both** SLA
117
- Management and SLA Versioning are on — **two separate writes**: enabling SLA Management does **not**
118
- turn on Versioning; Versioning is a distinct, **permanent, one-way** write. **Two separate
119
- `AskUserQuestion` acks — never merged:** (a) a reversible master Incident-Mgmt enable if
120
- `NOT_ENABLED`; (b) a distinct **permanence** ack for the irreversible Versioning switch — a bare
121
- "enable SLA" is **not** consent. Decline (b) / non-empty `enableBlockedReasons` / re-read mismatch /
122
- master `NOT_AVAILABLE` → **HALT**. After each write, re-read and report the REAL state — never trust
123
- `200`/`204`. Enable + versioning writes **delegate to `itsm-shakti/SLASettings`**.
124
- - **Phase 0.6 — Predefined (OOB) vs Custom (Incident only).** Detect *Standard Support for Incidents*
125
- first (already present → report seeded; no re-seed — the OOB seed isn't idempotent — and no
126
- upsell). **Before** the fork prompt, read the live `Incident.Priority` picklist (Phase 1 step 3's
127
- Incident describe, pulled forward): any custom active
128
- value beyond the four standard tiers (e.g. `Emergency`) means OOB covers standard tiers only — say
129
- so plainly and **redirect to Custom** by default; don't *proactively* bolt a custom milestone onto
130
- the predefined policy (and never re-seed). Attach one only if the user **explicitly** asks — a direct
131
- `csp-sun/create-milestone` against the seeded policy (resolved by name), never a re-seed.
132
- Then one `AskUserQuestion`, **Predefined first/recommended**. Predefined → Phase 2-OOB → 2.5 →
133
- verify → **STOP**; Custom → Phase 1 → 1.4 → 1.5 → 2 → 3.
134
- - **Phase 1 — Preflight & discovery.** Master Incident-Mgmt pref (exact `service-cloud-itsm-incident`,
135
- never a look-alike; `NOT_AVAILABLE` → HALT, `NOT_ENABLED` → ack + delegate), `discover`/`describe`
136
- the SLA Connect ops, Incident describe (`EntitlementId`/`SlaStartDate`/`SlaExitDate` **+ the live
137
- `Incident.Priority` picklist** for Priority-tiered reconciliation), default BusinessHours,
138
- idempotency probe. **No Account is resolved — Incident has no Account field; engagement is
139
- per-Incident via `EntitlementId` (neither flow needs or asks for an Account).** Any
140
- `401`/`403`/`404` → halt and surface the raw error.
141
- - **Phase 1.4 — Milestone strategy.** Load `examples/milestone-patterns.md` (skip conditions + the
142
- five strategies, defaults, MilestoneType-reuse). Never silently default to Single.
143
- - **Phase 1.5 — Confirm before mutating.** Narrate the resolved plan (org, SLA name, engagement model
144
- = per-Incident via `EntitlementId` (no Account), **full per-milestone list** — never collapse to "N
145
- milestones"); require an explicit "yes" unless a skip
146
- condition holds (up-front auth / no-op / prior confirmation). Everything after this mutates the org.
147
- - **Phase 2 — Create SLA artifacts (delegated writes, exact order).** The skill decides every input;
148
- **delegate each raw write to its approved csp-sun SLA leaf**. The **four ordered core writes**:
149
- `MilestoneTypes` → `create-sla-policy` (created inactive) → `create-milestone` ×N →
150
- `activate-sla-policy` (auto-provisions the Entitlement). Do not re-derive Connect shapes.
151
- `create-entitlement-criteria` is an **optional step 12** — dispatch it **only** on an explicit
152
- org-wide always-match request; otherwise engagement is per-Incident via `EntitlementId` and no
153
- criterion is written. The **Priority reconciliation** lands at the milestone step: match every value to
154
- the live picklist, drop/rename unmatched standard rows, **and add a milestone for each custom active
155
- value**. Verify via SOQL, not the write response; halt on any milestone-create failure (no
156
- half-attached policy).
157
- - **Phase 2-OOB — Seed the predefined policy.** One call to the platform seeder route
158
- (`PATCH /headless/invoke/platform/slasettings/save-selected-options`, body
159
- `{"selectedOptions":["incident"]}` — values **lowercase**) provisions the whole active bundle:
160
- the policy, its 2 MilestoneTypes + 6 milestones, and the Entitlement + auto-apply criteria — all
161
- active, in one shot. No per-leaf csp-sun calls, no manual `POST /sobjects/Entitlement`, no activate
162
- PATCH. Detect first (`GET /headless/invoke/platform/slasettings`, key `incident:true` = already
163
- seeded) because the seeder isn't idempotent. Detect + seed **delegate to `itsm-shakti/SLASettings`**.
164
- - **Phase 2.5 — Milestone actions (optional).** Only if warn/escalate/notify asked; apply to **every**
165
- named milestone; confirm from `body.success` + non-empty `actionMappings`, not the `201`.
166
- - **Phase 3 — Verify.** SOQL-confirm the policy read back `active=true`; create a test Incident on a
167
- **non-lowest tier** (set `Urgency`/`Impact` — `Priority` is matrix-derived, not directly
168
- insertable); confirm an `EntityMilestone` on the correct tier with a `TargetDate` (a null
169
- `SlaStartDate` under auto-apply is a non-blocker). Then report.
106
+ Sequential — **always read before you write**; every call goes through `mcp__headless-360__*`.
107
+ **Per-phase detail (reads, delegated writes, API quirks) lives in `references/workflow.md` — read it
108
+ before executing.** Phase index and their non-negotiable gates:
109
+
110
+ - **Before you start — Reuse session state** only from a successful `dispatch_readonly` this session on this
111
+ org, unwritten since; a user statement is never cache-eligible.
112
+ - **Phase 1a — IT Service Management gate** (`service-cloud-itsm-setup`). `NOT_ENABLED` → one ack
113
+ (reversible) → direct enable → re-read.
114
+ - **Phase 1b — SLA Management gate.** SLA Management **and** the permanent SLA Versioning switch — two
115
+ writes, two separate acks (master, then permanence); delegate to `itsm-shakti/SLASettings`.
116
+ - **Phase 2 — Predefined vs Custom** (Incident only). Detect the seeded policy first; read the live
117
+ `Incident.Priority` picklist before the fork (custom values → recommend Custom); warn if the
118
+ priority matrix is off (only the default tier fires); Business Hours note only if the user
119
+ specified hours. Predefined → 4B → 5 (if asked) → 6 → **STOP**;
120
+ Custom → 3a → 3b → 3c → 4A → 5 (if asked) → 6.
121
+ - **Phase 3a — Preflight.** Master Incident Mgmt (`service-cloud-itsm-incident`; `NOT_AVAILABLE` →
122
+ HALT, `NOT_ENABLED` → one ack + delegate), `discover`/`describe` the SLA ops, Incident describe,
123
+ resolve Business Hours, idempotency probe. No Account. `401`/`403`/`404` → halt with the raw error.
124
+ - **Phase 3b — Milestone strategy** per `examples/milestone-patterns.md`.
125
+ - **Phase 3c — Confirm** the full plan (Business Hours by name, every milestone) before any write.
126
+ - **Phase 4A — Create** (Business Hours first if planned, step 1) → `MilestoneTypes` →
127
+ `create-sla-policy` → `create-milestone` ×N → `activate-sla-policy`; optional step 6 criterion
128
+ only on an explicit always-match request.
129
+ - **Phase 4B — Seed** via `save-selected-options` (`{"selectedOptions":["incident"]}`), delegated
130
+ to `itsm-shakti/SLASettings`; verify and name its Business Hours.
131
+ - **Phase 5 — Milestone actions** (only if asked) on every named milestone.
132
+ - **Phase 6 — Verify** via SOQL + a non-lowest-tier test Incident with an `EntityMilestone`; matrix
133
+ off or still order-1 after one retry → stop and report the other tiers unchecked.
170
134
 
171
135
  ---
172
136
 
@@ -174,16 +138,18 @@ non-negotiable gates (constraints table + verification checklist below):
174
138
 
175
139
  | Constraint | Rationale |
176
140
  |-----------|-----------|
177
- | Gate **SLA Management** first (Phase 0.5) — **two separate writes** (SLA Management, then the one-way **SLA Versioning**); **two separate acks (master, then permanence) — never merged**; decline/blocked/verify-fail → **HALT**; re-read + report real state | Versioning is irreversible; writes don't confirm state |
178
- | Offer **predefined (OOB)** first (Phase 0.6, Incident only); detect before seed; if chosen, seed → verify → **STOP** (no custom upsell) | OOB seed isn't idempotent — re-seed duplicates |
141
+ | Gate **IT Service Management enablement** first (Phase 1a, before Phase 1b) — exact apiName `service-cloud-itsm-setup`, never a look-alike; `NOT_ENABLED` → tell the user plainly + a single ack to enable (reversible) or stop; the enable write is dispatched **directly** (no owning SOR exists yet) and re-read to confirm | Higher-level org gate sits above every ITSM feature, including the Master Incident Mgmt pref below |
142
+ | Gate **SLA Management** first (Phase 1b) — **two separate writes** (SLA Management, then the one-way **SLA Versioning**); **two separate acks (master, then permanence) — never merged**; decline/blocked/verify-fail → **HALT**; re-read + report real state | Versioning is irreversible; writes don't confirm state |
143
+ | Offer **predefined (OOB)** first (Phase 2, Incident only); detect before seed; if chosen, seed → verify → **STOP** (no custom upsell) | OOB seed isn't idempotent — re-seed duplicates |
179
144
  | `discover` + `describe` before any mutation | Catches a missing SLA surface / disabled Incident Mgmt early |
180
145
  | Ask (`AskUserQuestion`) the milestone strategy — never silently default to Single | Real ITSM policies have >1 milestone |
181
146
  | Reuse one MilestoneType per shared name; a distinct one per distinct concern | Runtime keys milestones by MilestoneType |
182
147
  | Multi-milestone: halt on any milestone-create failure (no half-attached policy) | Partial attach diverges from the confirmed plan |
183
148
  | Priority-tiered: reconcile every `Priority` value against the live picklist before dispatch — drop/rename standard rows that don't match **and add a milestone for each custom active value** the org added | Server accepts any string → an unknown value is a dead milestone; a custom value with no milestone gets no SLA |
184
- | **Delegate every write to its approved csp-sun SLA leaf** (`MilestoneTypes`, `create-sla-policy`, `create-milestone`, `create-milestone-action`, `activate-sla-policy`, `create-entitlement-criteria`) — the skill decides inputs, the leaf owns the contract | Single contract-owner per write; the skill re-deriving Connect shapes drifts from the served leaves |
149
+ | **Delegate every write to its approved SLA leaf** (`MilestoneTypes`, `create-sla-policy`, `create-milestone`, `create-milestone-action`, `activate-sla-policy`, `create-entitlement-criteria`) — the skill decides inputs, the leaf owns the contract. Scoped inline exceptions (no served owning SOR yet): the Phase 1a enable and the Phase 4A step 1 Business Hours create | Single contract-owner per write; the skill re-deriving Connect shapes drifts from the served leaves |
150
+ | **Business Hours** (Custom): honor a named schedule, described calendar, or time zone (time zone only → ask 24×7 (recommended) or custom hours; reuse a match, else create one after the Phase 3c confirm); zero active → offer a 24×7 create. Never set `IsDefault` or modify an existing record. Predefined: the seeder always uses the org default — warn only if the user specified hours | Default 24×7 or the customer's own calendar; `BusinessHours` is not API-deletable, so creates are confirmed first |
185
151
  | **Custom flow**: activation provisions the auto-Entitlement (`activate-sla-policy`: `isActive` + `createEntitlement` as **QUERY params**) — matching Incidents then engage **per-Incident via `EntitlementId`** (**not** a manual sObject Entitlement, and no Account). An org-wide auto-apply criterion via `create-entitlement-criteria` is **optional** — only on an explicit always-match request, never by default. **OOB seed path**: one seeder call (`save-selected-options`, lowercase `selectedOptions`) provisions the entire active bundle incl. the Entitlement — no per-leaf calls, no manual `POST /sobjects/Entitlement`, no activate PATCH | Custom: one call activates **and** provisions, so a manual `POST /sobjects/Entitlement` would duplicate it. OOB: the platform seeder builds and activates the whole default bundle server-side, so the skill neither rebuilds it leaf-by-leaf nor provisions the Entitlement by hand |
186
- | **No record Id in any message** (see Output contract, incl. reused artifacts); `AskUserQuestion` labels customer-facing (no "demo"/internal defaults) | The #1 retest failure; leaked Ids / internal framing look unprofessional |
152
+ | **No record Id in any message** (see Output contract, incl. reused artifacts); `AskUserQuestion` labels customer-facing (no "demo"/internal defaults) | Leaked Ids / internal framing look unprofessional to the customer |
187
153
  | **Another Incident policy already active + Custom chosen → narrate coexistence only.** The custom policy is targeted **per-Incident via `EntitlementId`** (Incident has no Account field to scope on) and **additive**; the existing (predefined/broad) policy stays the org-wide one. **Never offer, plan, or perform — in the fork *or* the closing report —** deactivating an existing policy, reordering its entitlement criteria, **broadening the custom policy to match-all / auto-apply-to-all, or "deciding/resolving precedence" across policies**. Target specific Incidents via `EntitlementId`; the existing policy stays active (see `references/workflow.md` → Coexistence) | Changing a policy the user didn't ask to touch is out of scope — this skill configures a *new* coexisting custom policy, not edits to an existing one. Deactivating (`activate-sla-policy` *can* send `isActive=false`) or re-ranking another policy's criteria risks disrupting a live SLA, and no leaf arbitrates cross-policy precedence (predefined: no un-seed path, manual delete only). Both are meant to coexist — the agent otherwise improvises an out-of-scope deactivation/reorder/precedence upsell |
188
154
 
189
155
  Additional API quirks: `references/mcp-invocation.md`.
@@ -192,18 +158,19 @@ Additional API quirks: `references/mcp-invocation.md`.
192
158
 
193
159
  ## Verification Checklist
194
160
 
195
- - [ ] **SLA Management gated (Phase 0.5)** — SLA Management + SLA Versioning both on (two separate writes), only after the **permanence ack** (separate from the master ack); reported state = a re-read, not the write. Declined / blocked / verify-fail → **HALTED** before Phase 0.6/1, no artifacts.
196
- - [ ] **Predefined vs Custom offered (Phase 0.6)** — with the feature ON, OOB *Standard Support for Incidents* offered first; if present, reported not re-seeded; if chosen, seeded (2 MilestoneTypes + 6 milestones + Entitlement), verified, **no** custom offer after.
161
+ - [ ] **IT Service Management enablement gated (Phase 1a)** — exact apiName `service-cloud-itsm-setup` read `ENABLED` via live read, or the user explicitly acked an enable (reversible) that a re-read confirms; declined / unexpected status → **HALTED** before Phase 1b.
162
+ - [ ] **SLA Management gated (Phase 1b)** — SLA Management + SLA Versioning both on (two separate writes), only after the **permanence ack** (separate from the master ack); reported state = a re-read, not the write. Declined / blocked / verify-fail → **HALTED** before Phase 2/3a, no artifacts.
163
+ - [ ] **Predefined vs Custom offered (Phase 2)** — with the feature ON, OOB *Standard Support for Incidents* offered first; if present, reported not re-seeded; if chosen, seeded (2 MilestoneTypes + 6 milestones + Entitlement), verified, **no** custom offer after.
197
164
  - [ ] Master Incident Mgmt pref (exact `service-cloud-itsm-incident`) `ENABLED` via live read, or delegated when `NOT_ENABLED` (`NOT_AVAILABLE` → HALT) — not a user assertion, not a look-alike.
198
165
  - [ ] `discover`/`describe` confirmed the SLA Connect ops.
199
166
  - [ ] Incident describe returned 200 with `EntitlementId`, `SlaStartDate`, `SlaExitDate`.
200
- - [ ] Default BusinessHours found.
201
- - [ ] **Milestone strategy resolved** — Phase 1.4 skip condition OR `AskUserQuestion`; Priority-tiered / Custom reconciled every `Priority`/criteria value against the live picklist before dispatch (dropped/renamed unmatched standard rows **and** added a milestone for each custom active `Priority` value).
202
- - [ ] **Configuration confirmed OR skip condition met** (up-front auth / no-op / prior confirmation / "yes"); the resolved plan (org, SLA name, engagement model = per-Incident via `EntitlementId` (no Account), per-milestone list) narrated before Phase 2.
203
- - [ ] Writes **delegated to the csp-sun leaves** in order — the four core writes: MilestoneType(s) → Policy → Milestone(s) → activate + auto-Entitlement (the optional org-wide auto-apply criterion only if explicitly requested); any milestone-create failure halted (no partial attach). Trivial on no-op.
204
- - [ ] **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.
205
- - [ ] SLA Policy verified via SOQL, not the create response (no-op: the Phase-1 read is the verification).
206
- - [ ] Test Incident has ≥1 EntityMilestone on the **correct tier** with a `TargetDate` (the engagement proof; Priority matched for Priority-tiered); expected milestone(s) present. `SlaStartDate` populated confirms it too, but may be null when the Entitlement is auto-applied via criteria — not a failure. Skip on no-op.
167
+ - [ ] Active Business Hours resolved and named in the confirmed plan — the user's named schedule / a matching calendar / the org default / a user-selected record, or a create (described calendar or 24×7 when none exist) confirmed at Phase 3c, then SOQL-verified active. Predefined: the seeded policy's Business Hours reported by name (or "none").
168
+ - [ ] **Milestone strategy resolved** — Phase 3b skip condition OR `AskUserQuestion`; Priority-tiered / Custom reconciled every `Priority`/criteria value against the live picklist before dispatch (dropped/renamed unmatched standard rows **and** added a milestone for each custom active `Priority` value).
169
+ - [ ] **Configuration confirmed OR skip condition met** (up-front auth / no-op / prior confirmation / "yes"); the resolved plan (org, SLA name, Business Hours by name, engagement model = per-Incident via `EntitlementId` (no Account), per-milestone list) narrated before Phase 4A.
170
+ - [ ] Writes **delegated to the SLA leaves** in order — the four core writes: MilestoneType(s) → Policy → Milestone(s) → activate + auto-Entitlement (the optional org-wide auto-apply criterion only if explicitly requested); any milestone-create failure halted (no partial attach). Trivial on no-op.
171
+ - [ ] **Milestone actions (Phase 5)** — if requested, attached to **every** named milestone; each confirmed from `body.success` + `actionMappings`, not the `201`; full set narrated before write.
172
+ - [ ] SLA Policy verified via SOQL, not the create response (no-op: the Phase-3a read is the verification).
173
+ - [ ] Test Incident has ≥1 EntityMilestone on the **correct tier** with a `TargetDate` (the engagement proof; Priority matched for Priority-tiered); expected milestone(s) present. Matrix off / still order-1 after one retry → reported "other tiers not checked" + pointed to `service-itsm-incident-priority-configure`, no recreate loop. `SlaStartDate` populated confirms it too, but may be null when the Entitlement is auto-applied via criteria — not a failure. Skip on no-op.
207
174
  - [ ] **No record Id in any message** — interim narration *and* final report; artifacts by name, test Incident by `IncidentNumber` (see Output contract).
208
175
  - [ ] Before/after + summary shown; no-op states the pre-existing config verbatim + "no changes made".
209
176
 
@@ -219,11 +186,11 @@ Use the `examples/output-templates.md` templates; fill placeholders as-is. The s
219
186
 
220
187
  | File | When to read |
221
188
  |------|--------------|
222
- | `references/workflow.md` | Executing — the full step-by-step Phase 0–3 detail (per-phase reads, delegated writes, API quirks); the constraints table + verification checklist stay in this SKILL.md body |
189
+ | `references/workflow.md` | Executing — the full step-by-step Phase 1–6 detail (per-phase reads, delegated writes, API quirks); the constraints table + verification checklist stay in this SKILL.md body |
223
190
  | `references/mcp-invocation.md` | Every phase — call shapes, templates, response envelope, discovery, gotchas |
224
- | `examples/milestone-patterns.md` | Phase 1.4 — the five strategies: times, criteria, MilestoneType reuse, filter extensions |
225
- | `assets/attach-milestone.json` | Phase 2 step 10 — milestone POST body; substitute ids/timeTrigger/order; append `filterItems` |
226
- | `assets/attach-milestone-action.json` | Phase 2.5 — Warn/Escalate action body templates (Field Update); pair with mcp-invocation.md (Milestone Actions) |
191
+ | `examples/milestone-patterns.md` | Phase 3b — the five strategies: times, criteria, MilestoneType reuse, filter extensions |
192
+ | `assets/attach-milestone.json` | Phase 4A step 4 — milestone POST body; substitute ids/timeTrigger/order; append `filterItems` |
193
+ | `assets/attach-milestone-action.json` | Phase 5 — Warn/Escalate action body templates (Field Update); pair with mcp-invocation.md (Milestone Actions) |
227
194
  | `examples/output-templates.md` | Output Format — success/partial report templates; fill placeholders, no record Id |
228
195
 
229
196
  ---
@@ -1,5 +1,5 @@
1
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 example bodies in references/mcp-invocation.md (Milestone Actions — see 'Milestone-action bodies', pending live verification) — keep the two in sync.",
2
+ "_notes": "Phase 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 example bodies in references/mcp-invocation.md (Milestone Actions — see 'Milestone-action bodies') — keep the two in sync.",
3
3
 
4
4
  "warningAction": {
5
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 raising Urgency = High. NOTE: Incident.Priority is DERIVED from Impact x Urgency and is NOT directly updateable (createable:false/updateable:false) — a Field Update targeting Priority fails INVALID_FIELD_FOR_INSERT_UPDATE, so escalate by driving its updateable inputs (Urgency here, Impact on breach). 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).",
@@ -34,7 +34,7 @@
34
34
  },
35
35
 
36
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.",
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. ignoreMilestoneBusinessHours only changes how time remaining is displayed; target dates still follow these Business Hours.",
38
38
  "Name": "IST Business Hours",
39
39
  "TimeZoneSidKey": "Asia/Kolkata",
40
40
  "MondayStartTime": "09:00:00.000Z",
@@ -1,6 +1,6 @@
1
1
  {
2
- "milestoneTypeId": "<milestoneTypeId from Phase 2 step 8>",
3
- "businessHoursId": "<businessHoursId resolved in Phase 1>",
2
+ "milestoneTypeId": "<milestoneTypeId from Phase 4A step 2>",
3
+ "businessHoursId": "<businessHoursId resolved in Phase 3a>",
4
4
  "timeTrigger": 60,
5
5
  "order": 1,
6
6
  "startTimeBasedOn": "MILESTONE_CRITERIA",
@@ -1,14 +1,14 @@
1
1
  # Milestone Strategy Patterns — Incident SLA
2
2
 
3
- Phase 1.4 of the SLA workflow either infers the milestone strategy from the user's prompt (see
4
- "Phase 1.4 skip conditions" below) or asks the user to pick one. This file lists each option with
3
+ Phase 3b of the SLA workflow either infers the milestone strategy from the user's prompt (see
4
+ "Phase 3b skip conditions" below) or asks the user to pick one. This file lists each option with
5
5
  its default configuration, MilestoneType-reuse rules, and the exact `Attach Milestone` payloads
6
- that Phase 2 step 10 dispatches. Every `filterItems.operator` value here uses the exact enum the
6
+ that Phase 4A step 4 dispatches. Every `filterItems.operator` value here uses the exact enum the
7
7
  server accepts — `Equals`, `NotEqual` — never `!=` or `Equal`.
8
8
 
9
9
  ---
10
10
 
11
- ## Phase 1.4 skip conditions (do NOT dispatch `AskUserQuestion` when any hold)
11
+ ## Phase 3b skip conditions (do NOT dispatch `AskUserQuestion` when any hold)
12
12
 
13
13
  Every SLA policy needs at least one milestone, but the strategy question is skipped when the
14
14
  milestone shape is already determined by the request:
@@ -17,14 +17,14 @@ milestone shape is already determined by the request:
17
17
  first-response trigger", "Response + Resolution defaults", "per-priority tiers". Extract the
18
18
  described milestone(s) verbatim (time, criteria, name) and use the pattern defaults below. Do
19
19
  NOT re-ask.
20
- - **(b) The eventual branch is an idempotent no-op** — Phase 1 step 6 established `noOp=true`
21
- (every requested artifact already exists with matching configuration). Skip Phase 1.4, skip
22
- Phase 2, and report the no-op verbatim citing the read evidence.
20
+ - **(b) The eventual branch is an idempotent no-op** — Phase 3a step 6 established `noOp=true`
21
+ (every requested artifact already exists with matching configuration). Skip Phase 3b, skip
22
+ Phase 4A, and report the no-op verbatim citing the read evidence.
23
23
  - **(c) Explicit up-front authorization** — a phrase that unambiguously waives the confirm gate
24
24
  (`"you have my explicit authorization to create"`, `"do not re-ask me to confirm"`,
25
25
  `"proceed without asking"`) **and** a concrete milestone shape is derivable per (a). A passing
26
26
  mention ("build it", "go ahead") is NOT sufficient by itself. Waives the interactive confirm;
27
- does NOT waive Phase 1.5 plan-narration — dispatch only after SLA Policy name, the engagement model
27
+ does NOT waive Phase 3c plan-narration — dispatch only after SLA Policy name, the engagement model
28
28
  (per-Incident via `EntitlementId`; no Account), and the per-milestone list have been written to the
29
29
  response.
30
30
 
@@ -34,7 +34,8 @@ dispatch `AskUserQuestion` with the five options below. Priority-tiered requires
34
34
 
35
35
  All strategies share these defaults unless overridden:
36
36
 
37
- - `businessHoursId`: the default BusinessHours resolved in Phase 1 step 4
37
+ - `businessHoursId`: the Business Hours Id resolved in Phase 3a step 4, or created in Phase 4A step 1 (suggested default or
38
+ user-selected)
38
39
  - `startTimeBasedOn`: `MILESTONE_CRITERIA` (timer starts when the milestone's criteria first match; this is the OOB default — send this exact token, see `references/mcp-invocation.md` Attach Milestone)
39
40
  - `milestoneAgreementType`: `SLA` — inside each `milestoneCriteria[]` item (mandatory per the UI). Valid UI values are `SLA` (customer-facing) or `OLA` (internal); the API accepts any string because the underlying field is `Text(40)` with no server-side picklist, but the UI renders unrecognized values as blank
40
41
  - `milestoneState`: `ACTIVE` (**uppercase — the server matches this value case-sensitively**; `Active`/`active` silently fail to register the criterion) inside `milestoneCriteria[]`
@@ -44,7 +45,7 @@ All strategies share these defaults unless overridden:
44
45
 
45
46
  ---
46
47
 
47
- ## AskUserQuestion prompt (Phase 1.4, only when no skip condition applies)
48
+ ## AskUserQuestion prompt (Phase 3b, only when no skip condition applies)
48
49
 
49
50
  ```text
50
51
  Question: How many milestones do you want on this SLA policy?
@@ -63,16 +64,16 @@ Before rendering options 3 and 5, confirm the live `Incident.Priority` picklist
63
64
  the pattern against them in **both** directions: if any value used in a default row is missing from
64
65
  the org's picklist, drop that milestone; and if the org has **added** active Priority values beyond
65
66
  the four default tiers, add a milestone for each so no active Priority value is left without one.
66
- Note both adjustments in the Phase-1.5 confirmation.
67
+ Note both adjustments in the Phase-3c confirmation.
67
68
 
68
69
  **Hard gate — never assume the picklist.** The reconciliation above requires the *actual* live
69
70
  `Incident.Priority` picklist. Do **not** present the Priority-tiered milestone list, and do **not**
70
71
  state or imply that the picklist "is the four standard tiers" / "needs no reconciliation", **from
71
72
  assumption**. The four standard tiers (Critical/High/Moderate/Low) are only *defaults* — they are
72
73
  NOT what the org necessarily has. You may present the tier list **only after** the live
73
- `Incident.Priority` describe (Phase 1 step 3) has actually been dispatched **this session** and you
74
+ `Incident.Priority` describe (Phase 3a step 3) has actually been dispatched **this session** and you
74
75
  have its `fields[].picklistValues` in hand. If it has not run yet — e.g. Custom was invoked
75
- **directly**, skipping the Phase 0.6 fork where the describe is normally pulled forward — run
76
+ **directly**, skipping the Phase 2 fork where the describe is normally pulled forward — run
76
77
  `GET /services/data/v{version}/sobjects/Incident/describe` **now**, before offering or rendering any
77
78
  per-priority list, and derive the tiers from its **active** `picklistValues`. An org-added active
78
79
  value such as `Emergency` MUST appear as its own milestone; silently defaulting to four tiers leaves
@@ -84,11 +85,11 @@ those Incidents with no milestone and no SLA engagement.
84
85
 
85
86
  Dispatch every pattern below via `mcp__headless-360__dispatch` with `method: "POST"` and
86
87
  `url: "/services/data/v{version}/connect/sla-management/sla-policies/<slaId>/milestones"` (substitute
87
- the SLA policy id captured in Phase 2 step 9). The reusable request-body template lives at
88
+ the SLA policy id captured in Phase 4A step 3). The reusable request-body template lives at
88
89
  `assets/attach-milestone.json` — load and populate it rather than reconstructing the JSON.
89
90
 
90
91
  Substitute per-pattern: `milestoneTypeId` is the id returned when you created the MilestoneType,
91
- `businessHoursId` is the id resolved in Phase 1, and `timeTrigger` + `order` come from the
92
+ `businessHoursId` is the id resolved in Phase 3a, and `timeTrigger` + `order` come from the
92
93
  pattern's row. `filterItems` in the template carries the base "Status != Closed" row that every
93
94
  pattern shares; each pattern's table lists **additional** row objects to append to `filterItems`
94
95
  (same schema: `table`, `column`, `operator`, `order`, `value`) — do not replace the base row, add
@@ -136,7 +137,7 @@ concurrently on its own 8-hour timer.
136
137
 
137
138
  Assumes the standard `Critical / High / Moderate / Low` picklist (some orgs and prompts label the
138
139
  mid tier `Medium` instead of `Moderate` — same P3 tier, different label). Reconcile the four default
139
- rows against the **live `Incident.Priority` picklist** (from the Phase-1 Incident describe) before
140
+ rows against the **live `Incident.Priority` picklist** (from the Phase-3a Incident describe) before
140
141
  dispatch, handling every difference:
141
142
 
142
143
  - **Renamed** value → rename the milestone's filter to the live label (e.g. `Medium` for the P3 tier).
@@ -145,7 +146,7 @@ dispatch, handling every difference:
145
146
  - **Added / custom active** value (any active Priority value not covered by the four default rows) →
146
147
  **add a milestone for it** so those Incidents still engage an SLA. Reuse the `Incident First Response`
147
148
  MilestoneType, filter `Incident.Priority Equals <customValue>`, and confirm its `timeTrigger` with the
148
- user in Phase 1.5 (offer a sensible default from the nearest standard tier). Do **not** silently skip a
149
+ user in Phase 3c (offer a sensible default from the nearest standard tier). Do **not** silently skip a
149
150
  custom value — an uncovered active Priority means those Incidents get no milestone and no SLA engagement.
150
151
 
151
152
  The multi-item `filterItems` array combines with `AND` by default — both `Status != Closed` AND
@@ -168,7 +169,7 @@ Incident create (e.g. via the Priority Matrix), the milestone re-evaluates on th
168
169
 
169
170
  All three run concurrently once their criteria match (`startTimeBasedOn: MILESTONE_CRITERIA`) — the "ladder" is enforced by the timers,
170
171
  not by chaining. To fire automation at a milestone's warning/violation checkpoint (warn before
171
- target, escalate on breach), attach a **milestone action** in Phase 2.5 — see
172
+ target, escalate on breach), attach a **milestone action** in Phase 5 — see
172
173
  `references/mcp-invocation.md` (Milestone Actions). (Strictly *sequential* chaining across separate
173
174
  milestones is a different mechanism — workflow SLA actions — and remains out of scope.)
174
175
 
@@ -191,7 +192,7 @@ For each milestone `i` from 1 to N (where N is confirmed up front):
191
192
  5. **Criteria value** — validated against the live picklist for picklist fields; free-form
192
193
  otherwise.
193
194
 
194
- After collecting all N milestones, render the full list in Phase 1.5 confirmation and require an
195
+ After collecting all N milestones, render the full list in Phase 3c confirmation and require an
195
196
  explicit "yes" before dispatching the create loop.
196
197
 
197
198
  **Custom-mixed example** (Response for all + per-category resolution):
@@ -211,7 +212,7 @@ before creating the MilestoneType or attaching the milestone.
211
212
  ## Predefined preset — "Standard Support for Incidents" (OOB)
212
213
 
213
214
  This is Salesforce's out-of-box predefined Incident SLA policy — a fixed priority-tiered preset offered
214
- at the Phase 0.6 fork (not one of the Phase 1.4 custom options above). It pairs an **Acknowledge Within**
215
+ at the Phase 2 fork (not one of the Phase 3b custom options above). It pairs an **Acknowledge Within**
215
216
  and a **Resolve Within** milestone per priority tier:
216
217
 
217
218
  | tier | Acknowledge Within | Resolve Within |
@@ -239,7 +240,7 @@ never a re-seed).
239
240
  | Issue | Detail |
240
241
  |-------|--------|
241
242
  | MilestoneType reuse vs. create | Priority-tiered = 1 MilestoneType reused 4 times. Response + Resolution = 2 types. Escalation ladder = 3 types. |
242
- | Priority-tiered needs a Priority | The test Incident in Phase 3 must derive a `Priority` value matching one of the milestones — otherwise no EntityMilestone spawns. `Priority` is not directly insertable — set `Impact` and `Urgency` so the org's matrix derives the target Priority (see `references/mcp-invocation.md` → Verify SLA engagement), or create one test Incident per tier. |
243
+ | Priority-tiered needs a Priority | The test Incident in Phase 6 must derive a `Priority` value matching one of the milestones — otherwise no EntityMilestone spawns. `Priority` is not directly insertable — set `Impact` and `Urgency` so the org's matrix derives the target Priority (see `references/mcp-invocation.md` → Verify SLA engagement) — subject to the Phase 6 step 2 stopping rule. |
243
244
  | Multi-milestone partial-failure | If milestone #2 of N fails to attach, halt and surface the raw error. Do NOT continue attaching #3..N — the policy will be half-configured. |
244
245
  | `order` field | Numeric 1..N. Not load-bearing for runtime evaluation (all milestones fire independently), but controls display order in the UI. |
245
- | Priority-tiered + Priority Matrix skill | `Incident.Priority` is always derived from the Impact × Urgency matrix (a default matrix always exists). The Priority Matrix skill configures the *mapping* (which Impact × Urgency combination yields which Priority) — it does not turn derivation on or off. Run it first if you need a mapping other than the default. |
246
+ | Priority-tiered + Priority Matrix skill | `Incident.Priority` is derived from the Impact × Urgency matrix only when the matrix is **on** (`IncPriorityMatrixEnabled`); when it is off, every Incident gets the org's default priority, so only that tier's milestone fires. `service-itsm-incident-priority-configure` turns the matrix on and configures the mapping — run it first (see `references/mcp-invocation.md` → Priority matrix flag). |
@@ -12,7 +12,7 @@ Display the error from the `dispatch` response (`{status_code, body}`) exactly a
12
12
  Incident SLA Setup Complete (via service-itsm-agentic-setup-incident-sla-configure)
13
13
 
14
14
  Artifacts created:
15
- Milestone Type: <name> (OneTime)
15
+ Milestone Type: <name> (No Recurrence)
16
16
  SLA Policy: <name> (Active, Incident)
17
17
  Milestone: <time> min, criteria: <criteria summary>
18
18
  Entitlement: <name> (auto-provisioned; no Account — Incident engages per-Incident via EntitlementId)
@@ -35,7 +35,7 @@ Incident SLA Setup Complete (via service-itsm-agentic-setup-incident-sla-configu
35
35
  Strategy: <Response + Resolution | Priority-tiered | Escalation ladder | Custom>
36
36
 
37
37
  Artifacts created:
38
- Milestone Types: <name1>, <name2>, ... (OneTime)
38
+ Milestone Types: <name1>, <name2>, ... (No Recurrence)
39
39
  SLA Policy: <name> (Active, Incident)
40
40
  Milestones:
41
41
  #1 <MilestoneType name> <time> min criteria: <summary>
@@ -62,7 +62,7 @@ Verification:
62
62
  No test Incident was created, so EntityMilestone firing was not exercised in this run.
63
63
  ```
64
64
 
65
- ## Success — milestone actions (Phase 2.5, when Warn/Escalate was requested)
65
+ ## Success — milestone actions (Phase 5, when Warn/Escalate was requested)
66
66
 
67
67
  Append this **Milestone Actions** block to the multi-milestone success report above — do not emit it
68
68
  alone. The report must still carry the policy, both milestones (name, time, criteria), the