@salesforce/afv-skills 1.47.0 → 1.48.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 (160) hide show
  1. package/package.json +1 -1
  2. package/skills/education-cloud-domain-configure/SKILL.md +234 -0
  3. package/skills/education-cloud-domain-configure/references/dependent-features.md +198 -0
  4. package/skills/education-cloud-domain-configure/references/domain-features/academic-operations.md +386 -0
  5. package/skills/education-cloud-domain-configure/references/domain-features/alumni-relations.md +155 -0
  6. package/skills/education-cloud-domain-configure/references/domain-features/cross-domain-dependencies.md +18 -0
  7. package/skills/education-cloud-domain-configure/references/domain-features/industriessettings-toggle-reference.md +43 -0
  8. package/skills/education-cloud-domain-configure/references/domain-features/mentoring.md +198 -0
  9. package/skills/education-cloud-domain-configure/references/domain-features/recruitment-admissions.md +315 -0
  10. package/skills/education-cloud-domain-configure/references/domain-features/student-management.md +155 -0
  11. package/skills/education-cloud-domain-configure/references/domain-features/student-success.md +249 -0
  12. package/skills/education-cloud-domain-configure/references/domain-features.md +27 -0
  13. package/skills/education-cloud-domain-configure/references/gotchas-extended.md +23 -0
  14. package/skills/education-cloud-domain-configure/references/toggle-write-path.md +67 -0
  15. package/skills/education-cloud-domain-configure/scripts/check_license_provisioned.py +62 -0
  16. package/skills/education-cloud-domain-configure/scripts/check_org_edition.py +44 -0
  17. package/skills/education-cloud-domain-configure/scripts/check_permission_assigned.py +39 -0
  18. package/skills/education-cloud-multi-campus-configure/SKILL.md +7 -0
  19. package/skills/education-cloud-multi-campus-configure/references/foundation_prerequisites.md +4 -3
  20. package/skills/service-agentforce-channel-configure/SKILL.md +33 -28
  21. package/skills/service-agentforce-human-escalation-configure/SKILL.md +205 -0
  22. package/skills/service-agentforce-human-escalation-configure/assets/escalation-thresholds.instructions.md +37 -0
  23. package/skills/service-agentforce-human-escalation-configure/assets/force-app/main/default/flows/Human_Escalation_Outbound_Flow.flow-meta.xml +173 -0
  24. package/skills/service-agentforce-human-escalation-configure/assets/package.xml +8 -0
  25. package/skills/service-agentforce-human-escalation-configure/assets/sfdx-project.json +5 -0
  26. package/skills/service-agentforce-human-escalation-configure/references/classifier-contracts.md +103 -0
  27. package/skills/service-agentforce-human-escalation-configure/references/escalation-mechanism.md +63 -0
  28. package/skills/service-agentforce-human-escalation-configure/references/failure-policy.md +44 -0
  29. package/skills/service-agentforce-human-escalation-configure/references/nga-escalation.md +57 -0
  30. package/skills/service-agentforce-human-escalation-configure/references/runtime-verification.md +72 -0
  31. package/skills/service-agentforce-human-escalation-configure/scripts/classify-agent-active.mjs +49 -0
  32. package/skills/service-agentforce-human-escalation-configure/scripts/classify-nga-escalation.mjs +166 -0
  33. package/skills/service-agentforce-human-escalation-configure/scripts/extract-outbound-route.mjs +67 -0
  34. package/skills/service-agentforce-human-escalation-configure/scripts/patch-escalation-surfaces.mjs +131 -0
  35. package/skills/service-agentforce-human-escalation-configure/scripts/tests/__init__.py +0 -0
  36. package/skills/service-agentforce-human-escalation-configure/scripts/tests/_bootstrap.py +249 -0
  37. package/skills/service-agentforce-human-escalation-configure/scripts/tests/test_escalation_contracts.py +899 -0
  38. package/skills/service-agentforce-human-escalation-configure/scripts/verify-and-configure.sh +705 -0
  39. package/skills/service-agentforce-human-escalation-configure/scripts/verify-escalation-config.mjs +89 -0
  40. package/skills/service-de-channel-routing-configure/SKILL.md +13 -5
  41. package/skills/service-de-channel-routing-configure/scripts/tests/test_skill_contract.py +25 -0
  42. package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +23 -10
  43. package/skills/service-itsm-agentic-setup-agentforce-coordinate/examples/output-templates.md +63 -48
  44. package/skills/service-itsm-agentic-setup-agentforce-coordinate/scripts/verify-child-verdict.mjs +6 -2
  45. package/skills/service-omni-agent-users-create/SKILL.md +96 -0
  46. package/skills/service-omni-agent-users-create/assets/create-users.apex.template +80 -0
  47. package/skills/service-omni-agent-users-create/references/apex-patterns.md +135 -0
  48. package/skills/service-omni-agent-users-create/references/apex-template-notes.md +40 -0
  49. package/skills/service-omni-agent-users-create/scripts/detect-and-create.sh +206 -0
  50. package/skills/service-omni-agent-users-create/scripts/detect-existing.sh +122 -0
  51. package/skills/service-omni-agent-users-create/scripts/run-create.sh +298 -0
  52. package/skills/service-omni-agent-users-create/scripts/tests/test_user_create_security.py +171 -0
  53. package/skills/service-omni-agent-work-sharing-configure/SKILL.md +78 -0
  54. package/skills/service-omni-agent-work-sharing-configure/references/api-notes.md +31 -0
  55. package/skills/service-omni-agent-work-sharing-configure/scripts/configure-and-report.sh +186 -0
  56. package/skills/service-omni-agent-work-sharing-configure/scripts/tests/_bootstrap.py +120 -0
  57. package/skills/service-omni-agent-work-sharing-configure/scripts/tests/test_agent_work_sharing_contracts.py +93 -0
  58. package/skills/service-omni-base-settings-configure/SKILL.md +77 -0
  59. package/skills/service-omni-base-settings-configure/assets/force-app/main/default/settings/OmniChannel.settings-meta.xml +8 -0
  60. package/skills/service-omni-base-settings-configure/assets/package.xml +8 -0
  61. package/skills/service-omni-base-settings-configure/assets/sfdx-project.json +12 -0
  62. package/skills/service-omni-base-settings-configure/references/api-notes.md +121 -0
  63. package/skills/service-omni-base-settings-configure/scripts/configure-and-report.sh +164 -0
  64. package/skills/service-omni-base-settings-configure/scripts/detect-existing.sh +69 -0
  65. package/skills/service-omni-channel-setup-coordinate/SKILL.md +168 -0
  66. package/skills/service-omni-channel-setup-coordinate/examples/output-templates.md +161 -0
  67. package/skills/service-omni-channel-setup-coordinate/references/gap-catalog.md +99 -0
  68. package/skills/service-omni-channel-setup-coordinate/scripts/integration-driver.sh +1542 -0
  69. package/skills/service-omni-channel-setup-coordinate/scripts/tests/__init__.py +0 -0
  70. package/skills/service-omni-channel-setup-coordinate/scripts/tests/_bootstrap.py +223 -0
  71. package/skills/service-omni-channel-setup-coordinate/scripts/tests/test_omni_contracts.py +804 -0
  72. package/skills/service-omni-command-center-analyze/SKILL.md +84 -0
  73. package/skills/service-omni-command-center-analyze/references/api-notes.md +54 -0
  74. package/skills/service-omni-command-center-analyze/scripts/analyze.sh +198 -0
  75. package/skills/service-omni-command-center-analyze/scripts/tests/_bootstrap.py +115 -0
  76. package/skills/service-omni-command-center-analyze/scripts/tests/test_command_center_analyze_contracts.py +165 -0
  77. package/skills/service-omni-permission-set-assign/SKILL.md +88 -0
  78. package/skills/service-omni-permission-set-assign/assets/package.xml +8 -0
  79. package/skills/service-omni-permission-set-assign/references/api-notes.md +143 -0
  80. package/skills/service-omni-permission-set-assign/scripts/verify-and-assign.sh +397 -0
  81. package/skills/service-omni-presence-status-deploy/SKILL.md +87 -0
  82. package/skills/service-omni-presence-status-deploy/assets/package.xml +12 -0
  83. package/skills/service-omni-presence-status-deploy/references/api-notes.md +115 -0
  84. package/skills/service-omni-presence-status-deploy/scripts/deploy-and-report.sh +422 -0
  85. package/skills/service-omni-presence-user-config-deploy/SKILL.md +80 -0
  86. package/skills/service-omni-presence-user-config-deploy/references/api-notes.md +60 -0
  87. package/skills/service-omni-presence-user-config-deploy/scripts/deploy-and-report.sh +261 -0
  88. package/skills/service-omni-presence-user-config-deploy/scripts/tests/_bootstrap.py +106 -0
  89. package/skills/service-omni-presence-user-config-deploy/scripts/tests/test_presence_user_config_contracts.py +142 -0
  90. package/skills/service-omni-queue-deploy/SKILL.md +91 -0
  91. package/skills/service-omni-queue-deploy/references/api-notes.md +140 -0
  92. package/skills/service-omni-queue-deploy/scripts/verify-and-align.sh +470 -0
  93. package/skills/service-omni-queue-members-assign/SKILL.md +93 -0
  94. package/skills/service-omni-queue-members-assign/references/api-notes.md +144 -0
  95. package/skills/service-omni-queue-members-assign/scripts/tests/_bootstrap.py +67 -0
  96. package/skills/service-omni-queue-members-assign/scripts/tests/test_queue_members_contracts.py +73 -0
  97. package/skills/service-omni-queue-members-assign/scripts/verify-and-bind.sh +362 -0
  98. package/skills/service-omni-queue-routing-config-deploy/SKILL.md +101 -0
  99. package/skills/service-omni-queue-routing-config-deploy/references/api-notes.md +127 -0
  100. package/skills/service-omni-queue-routing-config-deploy/scripts/tests/_bootstrap.py +90 -0
  101. package/skills/service-omni-queue-routing-config-deploy/scripts/tests/test_queue_routing_config_contracts.py +70 -0
  102. package/skills/service-omni-queue-routing-config-deploy/scripts/upsert-and-report.sh +538 -0
  103. package/skills/service-omni-routing-flow-deploy/SKILL.md +111 -0
  104. package/skills/service-omni-routing-flow-deploy/assets/force-app/main/default/flows/Omni_Route_Case_Trigger.SkillsBased.flow-meta.xml +94 -0
  105. package/skills/service-omni-routing-flow-deploy/assets/force-app/main/default/flows/Omni_Route_Case_Trigger.flow-meta.xml +88 -0
  106. package/skills/service-omni-routing-flow-deploy/assets/force-app/main/default/flows/Omni_Route_Cases.flow-meta.xml +144 -0
  107. package/skills/service-omni-routing-flow-deploy/assets/force-app/main/default/flows/Omni_Route_VoiceCall_Trigger.SkillsBased.flow-meta.xml +94 -0
  108. package/skills/service-omni-routing-flow-deploy/assets/force-app/main/default/flows/Omni_Route_VoiceCall_Trigger.flow-meta.xml +88 -0
  109. package/skills/service-omni-routing-flow-deploy/assets/force-app/main/default/flows/Omni_Route_VoiceCalls.flow-meta.xml +144 -0
  110. package/skills/service-omni-routing-flow-deploy/assets/package.xml +11 -0
  111. package/skills/service-omni-routing-flow-deploy/assets/sfdx-project.json +11 -0
  112. package/skills/service-omni-routing-flow-deploy/references/api-notes.md +265 -0
  113. package/skills/service-omni-routing-flow-deploy/scripts/deploy-and-report.sh +684 -0
  114. package/skills/service-omni-service-channel-configure/SKILL.md +83 -0
  115. package/skills/service-omni-service-channel-configure/assets/force-app/main/default/serviceChannels/Cases.serviceChannel-meta.xml +9 -0
  116. package/skills/service-omni-service-channel-configure/assets/force-app/main/default/serviceChannels/Incidents.serviceChannel-meta.xml +9 -0
  117. package/skills/service-omni-service-channel-configure/assets/force-app/main/default/serviceChannels/MessagingSessions.serviceChannel-meta.xml +9 -0
  118. package/skills/service-omni-service-channel-configure/assets/force-app/main/default/serviceChannels/VoiceCalls.serviceChannel-meta.xml +9 -0
  119. package/skills/service-omni-service-channel-configure/assets/package.xml +11 -0
  120. package/skills/service-omni-service-channel-configure/assets/sfdx-project.json +12 -0
  121. package/skills/service-omni-service-channel-configure/references/api-notes.md +84 -0
  122. package/skills/service-omni-service-channel-configure/scripts/deploy-and-report.sh +383 -0
  123. package/skills/service-omni-sidebar-configure/SKILL.md +77 -0
  124. package/skills/service-omni-sidebar-configure/references/api-notes.md +51 -0
  125. package/skills/service-omni-sidebar-configure/scripts/enable-and-report.sh +315 -0
  126. package/skills/service-omni-sidebar-configure/scripts/tests/_bootstrap.py +142 -0
  127. package/skills/service-omni-sidebar-configure/scripts/tests/test_sidebar_contracts.py +139 -0
  128. package/skills/service-omni-skills-based-routing-configure/SKILL.md +81 -0
  129. package/skills/service-omni-skills-based-routing-configure/references/api-notes.md +50 -0
  130. package/skills/service-omni-skills-based-routing-configure/scripts/configure-and-report.sh +270 -0
  131. package/skills/service-omni-skills-based-routing-configure/scripts/tests/_bootstrap.py +120 -0
  132. package/skills/service-omni-skills-based-routing-configure/scripts/tests/test_sbr_contracts.py +129 -0
  133. package/skills/service-omni-supervisor-config-deploy/SKILL.md +97 -0
  134. package/skills/service-omni-supervisor-config-deploy/assets/force-app/main/default/omniSupervisorConfigs/Omni_Supervisor.omniSupervisorConfig-meta.xml +9 -0
  135. package/skills/service-omni-supervisor-config-deploy/assets/package.xml +8 -0
  136. package/skills/service-omni-supervisor-config-deploy/assets/sfdx-project.json +12 -0
  137. package/skills/service-omni-supervisor-config-deploy/references/api-notes.md +205 -0
  138. package/skills/service-omni-supervisor-config-deploy/scripts/deploy-and-report.sh +586 -0
  139. package/skills/service-omni-supervisor-config-deploy/scripts/tests/_bootstrap.py +153 -0
  140. package/skills/service-omni-supervisor-config-deploy/scripts/tests/test_supervisor_config_contracts.py +116 -0
  141. package/skills/service-omni-supervisor-permset-assign/SKILL.md +88 -0
  142. package/skills/service-omni-supervisor-permset-assign/references/api-notes.md +48 -0
  143. package/skills/service-omni-supervisor-permset-assign/scripts/verify-and-assign.sh +316 -0
  144. package/skills/service-omni-supervisor-surface-deploy/SKILL.md +85 -0
  145. package/skills/service-omni-supervisor-surface-deploy/references/api-notes.md +47 -0
  146. package/skills/service-omni-supervisor-surface-deploy/scripts/deploy-and-report.sh +216 -0
  147. package/skills/service-omni-supervisor-surface-deploy/scripts/tests/_bootstrap.py +95 -0
  148. package/skills/service-omni-supervisor-surface-deploy/scripts/tests/test_supervisor_surface_contracts.py +154 -0
  149. package/skills/service-omni-supervisor-users-create/SKILL.md +92 -0
  150. package/skills/service-omni-supervisor-users-create/assets/create-supervisors.apex.template +72 -0
  151. package/skills/service-omni-supervisor-users-create/references/apex-patterns.md +73 -0
  152. package/skills/service-omni-supervisor-users-create/references/apex-template-notes.md +41 -0
  153. package/skills/service-omni-supervisor-users-create/scripts/detect-and-create.sh +197 -0
  154. package/skills/service-omni-supervisor-users-create/scripts/detect-existing.sh +112 -0
  155. package/skills/service-omni-supervisor-users-create/scripts/run-create.sh +296 -0
  156. package/skills/service-omni-work-skill-routing-configure/SKILL.md +80 -0
  157. package/skills/service-omni-work-skill-routing-configure/references/api-notes.md +67 -0
  158. package/skills/service-omni-work-skill-routing-configure/scripts/configure-and-report.sh +262 -0
  159. package/skills/service-omni-work-skill-routing-configure/scripts/tests/_bootstrap.py +121 -0
  160. package/skills/service-omni-work-skill-routing-configure/scripts/tests/test_work_skill_routing_contracts.py +161 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/afv-skills",
3
- "version": "1.47.0",
3
+ "version": "1.48.0",
4
4
  "description": "Salesforce skills for Agentforce Vibes",
5
5
  "license": "CC-BY-NC-4.0",
6
6
  "files": [
@@ -0,0 +1,234 @@
1
+ ---
2
+ name: education-cloud-domain-configure
3
+ description: "Use this skill to configure Education Cloud domains (Student Success, Recruitment & Admissions, Academic Operations, Alumni Relations, Student Management, or Mentoring) through conversational setup. Triggers when a user wants to enable or configure Education Cloud features. Guides step-by-step: enables Person Accounts prerequisite, activates target domain, then configures domain sub-features. Covers support processes, case record types, success teams, care plans, applications, admissions, course catalog, alumni engagement, fundraising, enrollment, programs, and mentoring. Explains each feature, confirms before proceeding, verifies every change took effect, and warns that domain and feature toggles are IRREVERSIBLE. DO NOT TRIGGER for metadata generation, custom objects, or package deployment — this configures existing platform features via org settings, not metadata files."
4
+ metadata:
5
+ version: "1.0"
6
+ minApiVersion: "60.0"
7
+ domains:
8
+ - "Education"
9
+ cliTools:
10
+ - tool: ["python3"]
11
+ semver: ">=3.9.0"
12
+ - tool: ["sf"]
13
+ semver: ">=2.0.0"
14
+ relatedSkills:
15
+ - "platform-custom-field-generate"
16
+ - "platform-custom-object-generate"
17
+ - "platform-metadata-deploy"
18
+ - "platform-permission-set-generate"
19
+ - "platform-validation-rule-generate"
20
+ accessCheck:
21
+ - type: "license"
22
+ value: "Education Cloud"
23
+ ---
24
+
25
+ # Configuring Education Cloud Domains
26
+
27
+ Guide users through conversational setup of Education Cloud domains. Enable Person Accounts prerequisite, activate target domain via Setup, and configure domain-specific sub-features with user confirmation at each step.
28
+
29
+ ## Scope
30
+
31
+ - **In scope**: Education Cloud domain configuration (Student Success, Recruitment & Admissions, Academic Operations, Alumni Relations, Student Management, Mentoring), Person Accounts enablement, sub-feature configuration, API-first with UI fallback
32
+ - **Out of scope**: Generating custom metadata or objects (delegate to `platform-custom-object-generate`), deploying managed packages, data migration, EDA (Education Data Architecture) configuration — native Education Cloud only
33
+
34
+ ---
35
+
36
+ ## Required Inputs
37
+
38
+ Gather before starting:
39
+
40
+ - **Target domain**: Which Education Cloud domain to configure (Student Success, Recruitment & Admissions, Academic Operations, Alumni Relations, Student Management, or Mentoring)
41
+ - **Target org**: Active Salesforce org with admin access
42
+ - **Sub-features** (optional): Specific sub-features the user wants enabled within the domain
43
+
44
+ Defaults:
45
+ - Confirmation style: Ask before each step
46
+ - Error handling: Explain errors, suggest fixes, wait for user decision
47
+
48
+ ---
49
+
50
+ ## Domain & Feature Toggle Write Path (authoritative)
51
+
52
+ Every domain/sub-feature toggle lives on the `IndustriesSettings` settings file (NOT Core's `ORG_PREFERENCES` allowlist) and is **IRREVERSIBLE** (`false → true` only — warn before flipping, never promise a revert). Write sequence is always **READ (tooling GET by DurableId) → WRITE (`PUT /services/data/v68.0/headless/metadata` via the write-enabled `dispatch` tool) → cold-VERIFY (repeat the GET — `success:true` alone is not proof)**. Read `references/toggle-write-path.md` before any toggle write for the full endpoint table, exact `xmlRep` shape, the `DurableId` constant, and the confirmed failure classes (silent no-op, cold-verify 500s, license-gating).
53
+
54
+ ---
55
+
56
+ ## Authoring conventions
57
+
58
+ 1. **Feature-first framing.** Lead with the FEATURE NAME and a plain-language description of what it does for the customer (e.g. "Enforce Time Conflicts — prevents learners registering for course offerings with conflicting schedules") — not the toggle's API element name (`enableCosConflicts`). Keep the element name only in the technical/API-call subsection.
59
+ 2. **Describe before toggling.** For every feature and sub-feature, include a one-line "What it does" so the customer understands what's being enabled before confirming.
60
+ 3. **List sub-features + confirm.** When a domain has sub-features, enumerate all of them and ask the customer to confirm or exclude before proceeding.
61
+ 4. **Announce every C/U/D.** Before any create/update/delete, state the operation and offer approve / reject / modify.
62
+ 5. **Flag manual steps.** If a step can't be done via API, note it as manual and surface it at the end of the domain's configuration.
63
+ 6. **Always cold-verify.** `success:true` on a write is not proof. Re-read state (GET on the record or settings object) and confirm the intended field/element value.
64
+
65
+ ---
66
+
67
+ ## Execution Transport
68
+
69
+ Before first call, probe transport health: `GET /services/data/vXX.X/limits` via headless-360 dispatch. 2xx → route all calls through it. On absent/4xx/5xx → probe other available transports (other Salesforce MCP, authenticated `sf` CLI, custom MCP) with the same read, use first healthy, announce it. None healthy → stop, ask user to connect one; never fabricate.
70
+
71
+ > **SOQL routes via headless-360 — pass the query through `queryParams`, NOT inline `?q=` in `url`.** `GET /services/data/vXX.0/query` (or `/tooling/query`) with `queryParams: {"q": "SELECT ..."}` returns records normally; putting `?q=...` directly in the `url` string 404s (`ROUTE_NOT_FOUND`) — a call-shape mistake, not a platform limitation. `?fields=` on a plain sObject GET is still not supported (router treats it as an external-id path segment) — use `/describe` for field lists instead. Prefer a direct SOQL existence/Id lookup over asking the user to supply a record Id; where no REST route exists at all (license/permission provisioning UI-only), ask the user or confirm in Setup UI.
72
+
73
+ ---
74
+
75
+ ## Workflow
76
+
77
+ ### Phase 0 — Foundation Prerequisites (Org-Level)
78
+
79
+ All Education Cloud domains require these foundation settings. Verify before proceeding to domain configuration.
80
+
81
+ 1. **Check org edition** — query `GET /services/data/v68.0/query` with `queryParams: {"q": "SELECT OrganizationType FROM Organization"}` (singleton, no Id needed), then pipe the record into `scripts/check_org_edition.py --allowed "Enterprise Edition,Performance Edition,Unlimited Edition,Developer Edition"` (stdin: `{"records": [...]}`). `eligible: false` → warn user Education Cloud requires Enterprise+ edition.
82
+
83
+ 2. **Check Lightning Experience** — verify Lightning Experience is enabled. If not enabled, instruct user to navigate to Setup → User Interface → Enable Lightning Experience.
84
+
85
+ 3. **Check Education Cloud license** — permission set names vary by org/release (neither of two confirmed orgs shipped `EducationCloudUser`; look for `%EducationCloud%` matches instead). Query `GET /services/data/v68.0/query` with `queryParams: {"q": "SELECT Id, Name FROM PermissionSet WHERE Name LIKE '%EducationCloud%'"}` and `GET /services/data/v68.0/sobjects/BusinessProfile/describe` (capture `createable`, or `null` if it 404'd), then pipe both into `scripts/check_license_provisioned.py` (stdin: `{"permissionSets": [...], "businessProfileDescribe": {...}}`). `provisioned: false` → not provisioned, tell the user and stop. `provisioned: true` with empty `matchingPermissionSets` → treat as provisioned but note the mismatch.
86
+
87
+ 4. **Assign Education Cloud Full Access** — resolve the running user's Id (ask for their username if unknown), query `GET /services/data/v68.0/query` with `queryParams: {"q": "SELECT Id, PermissionSet.Name FROM PermissionSetAssignment WHERE AssigneeId='<running user Id>' AND PermissionSet.Name LIKE '%EducationCloud%'"}`, and pipe the result into `scripts/check_permission_assigned.py` (stdin: `{"records": [...]}`). `assigned: false` → instruct user to assign the org's actual permission set (from step 3's `matchingPermissionSets`) via Setup → Permission Sets → Manage Assignments.
88
+
89
+ > **No Bash tool available on this surface?** These scripts are local data transforms only — no org call, no credentials. Perform the equivalent comparison inline instead of skipping the check.
90
+
91
+ 5. **Enable Education Cloud Foundation** — **IRREVERSIBLE — warn the user before flipping; do NOT promise a revert.** This does NOT go through the metadata PUT path (confirmed silent no-op on `enableEducationCloud`) — it needs the dedicated invoke endpoint. Read `references/toggle-write-path.md` ("Enabling the foundation") for the READ → WRITE → cold-VERIFY sequence and the UI fallback. Proceed to step 6 once cold-verify shows `true`.
92
+
93
+ ### Phase 1 — Enable Person Accounts
94
+
95
+ 6. **Confirm domain choice** — ask user which domain to configure if not already specified. Present list:
96
+ - Student Success
97
+ - Recruitment & Admissions
98
+ - Academic Operations
99
+ - Alumni Relations
100
+ - Student Management
101
+ - Mentoring
102
+
103
+ 7. **Explain Person Accounts** — explain: "Person Accounts are required for Education Cloud. They allow individuals (students, applicants, alumni) to be tracked as both Accounts and Contacts in a unified record."
104
+
105
+ > **WARNING**: Person Accounts cannot be disabled once enabled. Confirm user understands this is irreversible before proceeding.
106
+
107
+ 8. **Enable Person Accounts (UI)** — Person Accounts has no supported org-preferences write API (the `setup/org/preferences/{name}` endpoint returns 404). Instruct user to navigate to Setup → Quick Find → "Account Settings" → Select Account Settings → Turn on "Enable Person Accounts" → Click Save. Wait for user confirmation toggle is ON and saved, then proceed to Phase 1.5.
108
+
109
+ To verify: `GET /services/data/v68.0/sobjects/Account/describe` and confirm `IsPersonAccount`/`Person*` fields are present in the `fields` array; if headless routing is unavailable, fall back to `sf sobject describe -s Account` and grep for the same. This describe call is the ONLY valid verification method — do NOT run any SOQL query against `IsPersonAccount` or Person-Account fields (on `Account`, `Organization`, or any object) to check enablement status; SOQL on an unrecognized field returns `INVALID_FIELD`/"No such column", and that failure does NOT mean Person Accounts is off — it means you used the wrong check.
110
+
111
+ ### Phase 1.5 — Setup Basics: Dependent Features & Data Space Mapping
112
+
113
+ This mirrors Setup's own "Setup Basics" grouping (Person Accounts, Dependent Features, Data Space Mapping) that sits before the domain sections. Several dependent features are referenced by more than one domain's sub-features, so configuring them here avoids re-discovering them mid-domain.
114
+
115
+ 9. **Present Dependent Features** — read `references/dependent-features.md` and present the full list to the user, grouped by category (confirmed API toggle / manual-UI-only / untested), leading with feature name + one-line "what it does", not the API element name. **Always present this list and ask which to enable now**, even if the user declines all of them — record that decision explicitly and proceed to Phase 2 rather than skipping the step. Anything declined can be revisited later.
116
+
117
+ 10. **Configure each selected Dependent Feature** — `references/dependent-features.md` categorizes every feature into one of four shapes; look up the selected feature there for its exact element names, DurableIds, and gotchas:
118
+ - **Confirmed `IndustriesSettings` toggle** — IRREVERSIBLE, warn user. Use the **Domain & Feature Toggle Write Path**: READ → WRITE (`PUT /services/data/v68.0/headless/metadata`) → cold-VERIFY.
119
+ - **Confirmed toggle via a different mechanism** (e.g. Einstein Generative AI master toggle) — a Setup-Connect **org preference**, not `IndustriesSettings`: `GET /services/data/v68.0/setup/org/preferences/<PrefName>` → `PATCH` same path with `{"desiredState": true|false}` → cold-VERIFY. Some of these are reversible — check the reference before assuming one-way.
120
+ - **Overlaps a domain sub-feature** (several toggles are shared with Student Success and/or Mentoring sub-features) — cold-read first; if already `true` from a prior domain's configuration, report as already enabled rather than re-writing.
121
+ - **Manual UI only, no API route** — instruct user to the Setup path in the reference. Flag where a custom permission set / object permissions are also required, not just a toggle — surface as manual follow-up.
122
+
123
+ 11. **Enable OmniStudio** — OmniStudio is included with Education Cloud license. Attempt API call or instruct user to navigate to Setup → OmniStudio Settings → Enable.
124
+
125
+ 12. **Enable Business Rules Engine** — Business Rules Engine is included with Education Cloud license. Instruct user to navigate to Setup → Business Rules Engine → Enable.
126
+
127
+ 13. **Data Space Mapping** — via the `DataSpaceFeatureMappings` Setup Operation Recipe (`/headless/invoke/platform/data-space-feature-mappings`). Unlike most toggles in this skill, it's **reversible** (delete supported). Full pre-flight/READ/WRITE/cold-VERIFY/undo sequence, valid feature values, and status-code handling are in `references/dependent-features.md` ("Data Space Mapping" section). If the pre-flight check fails or any invoke call errors, fall back to manual UI (Setup → "Set Up Education Cloud" → Data Space Mapping).
128
+
129
+ ### Phase 2 — Enable Target Domain
130
+
131
+ 14. **Explain domain purpose** — look up the selected domain in `references/domain-features.md`'s index and open the linked per-domain file (e.g. `references/domain-features/student-success.md`) to explain to user what the domain provides, including prerequisites.
132
+
133
+ 15. **Check domain-specific prerequisites** — beyond OmniStudio/Business Rules Engine (already enabled in Phase 0), most domains need an added license: Experience Cloud (Recruitment & Admissions, Mentoring, and portals generally), Salesforce Scheduler (Student Success, Recruitment & Admissions), Fundraising (Alumni Relations, if using gift management), or a prior domain (Student Management requires Academic Operations already configured). See the selected domain's file under `references/domain-features/` for the full list. If prerequisites are missing, warn user and ask whether to continue with available features or provision prerequisites first.
134
+
135
+ 16. **Confirm domain enablement** — **IRREVERSIBLE — one-way by design (`false → true` only).** Warn the user explicitly and do NOT promise a revert/rollback. Ask: "Ready to enable [Domain Name]? This activates domain-specific objects, fields, and setup features and CANNOT be turned off afterward."
136
+
137
+ 17. **Enable the domain toggle** — each domain is an `enableXXX` field on `IndustriesSettings`. Follow the **Domain & Feature Toggle Write Path**: READ (tooling GET via DurableId) → WRITE (`PUT /services/data/v68.0/headless/metadata` with the single `<enableXXX>true</enableXXX>` element in `xmlRep`, via the `dispatch` write tool) → VERIFY (tooling GET shows `true`).
138
+
139
+ Toggle field per domain:
140
+
141
+ | Domain | `IndustriesSettings` field |
142
+ |--------|----------------------------|
143
+ | Student Success | `enableStudentSuccess` |
144
+ | Academic Operations | `enableAcademicOperations` |
145
+ | Mentoring | `enableMentoring` |
146
+ | Alumni Relations | `enableAlumniRelations` |
147
+ | Recruitment & Admissions | **No master toggle** — configured via 2 independent sub-feature settings (`enableApplnDecStdSharing`, `enableAppMaterialsProtection`); skip this step, go to `references/domain-features/recruitment-admissions.md` "Enablement & Toggles" |
148
+ | Student Management | `enableStudentManagement` |
149
+
150
+ On success (`200 { success: true }`, synchronous, no polling), proceed to step 18. On failure, instruct user to navigate to Setup → "Set Up Education Cloud" → the domain section (e.g., "Set Up the Student Success App") → turn on the domain toggle → Save, and wait for confirmation.
151
+
152
+ 18. **Verify domain active** — the step-17 cold-verify (`Is<Domain>Enabled` = `true`) already confirms the toggle. To confirm object provisioning, `GET /services/data/v68.0/sobjects/CaseTeamTemplate/describe`: 200 means the object exists (domain active); 404/NOT_FOUND → wait 1-2 minutes for async provisioning and retry. A SOQL `SELECT count() FROM <Object>` via `queryParams` also works.
153
+
154
+ ### Phase 3 — Configure Sub-Features
155
+
156
+ 19. **Read sub-feature reference** — load the selected domain's file under `references/domain-features/` to identify available sub-features and their detailed setup steps.
157
+
158
+ 20. **Present sub-feature options** — list the sub-features available for the domain (per the domain's `references/domain-features/` file) and ask user which to configure. Student Success has a required execution order (Support Process → Case Record Types → Success Teams → Care Plans → Support Programs → Salesforce Scheduler → consoles/portal); the other domains' sub-features are independent of each other.
159
+
160
+ 21. **Configure each selected sub-feature** — explain what it does, warn if irreversible, confirm with user, then follow the exact setup path in the domain's `references/domain-features/` file (covers all five shapes: record creation via Data/Tooling API, `IndustriesSettings` toggles via the Toggle Write Path, app/console setup, Experience Cloud portal setup, OmniStudio activation — with endpoints, body shapes, gotchas, and verification per sub-feature). Toggles follow the same IRREVERSIBLE + READ→WRITE→cold-VERIFY rule as domain toggles; cold-read first if already set from Phase 1.5. On API failure, fall back to the Setup UI path in the reference.
161
+
162
+ 22. **Summary** — after all sub-features configured, list what was enabled via which method (API, UI, OmniStudio). Report any failures or manual steps required. If suggesting next steps, limit them to genuine blockers/dependencies actually surfaced during this session (e.g. a prerequisite that's still off, a sub-feature the user asked about but deferred) — not a generic list of every related feature or domain regardless of relevance.
163
+
164
+ ---
165
+
166
+ ## Rules / Constraints
167
+
168
+ | Constraint | Rationale |
169
+ |-----------|-----------|
170
+ | Foundation, Person Accounts, OmniStudio, and Business Rules Engine must be enabled before any domain | Domains depend on these foundation objects/settings, and on OmniStudio/BRE for portal components and policy rules |
171
+ | Always confirm with user before each step and explain what a feature does first | Conversational workflow pattern — no commands without explicit user approval or understanding |
172
+ | Wait for user confirmation after UI fallback steps, and cold-verify after every enablement | Never assume success — re-read state (tooling GET, describe, record GET, or `SELECT ...` via `queryParams`) |
173
+ | Check domain-specific prerequisites before domain enablement | Some domains need added licenses or a prior domain already configured |
174
+ | Use the `scripts/` helpers for Phase 0 checks, not inline prose logic | Deterministic, fast, no org call/credentials — run the equivalent comparison inline only if no Bash tool is available |
175
+
176
+ ---
177
+
178
+ ## Gotchas
179
+
180
+ | Issue | Resolution |
181
+ |-------|------------|
182
+ | Education Cloud license not provisioned | Contact Salesforce account team to provision the license before proceeding |
183
+ | Person Accounts, Education Cloud Foundation, and domain toggles cannot be disabled once ON | Warn user before attempting enablement — this is a one-way operation |
184
+ | `setup/org/preferences/{name}` returns 404 for EDU toggles | Not in the ORG_PREFERENCES allowlist — write via `PUT /services/data/v68.0/headless/metadata` instead |
185
+ | Tooling sObject `PATCH` on `IndustriesSettings` returns 400 `JSON_PARSER_ERROR` | complexvalue fields reject PATCH — use the headless metadata PUT path; tooling GET is for read/verify only |
186
+ | Tooling GET needs the real `DurableId`, not `000000000000000AAA` | Query `SELECT Id,DurableId FROM IndustriesSettings` first |
187
+ | Domain/sub-feature enablement may take 1-2 minutes to propagate | If verification returns nothing right after the API call, wait 2-3 minutes and retry |
188
+
189
+ See `references/toggle-write-path.md` for the AURA-IS-CANONICAL silent no-op, cold-verify 500, and license-gating failure classes, and `references/gotchas-extended.md` for lower-frequency gotchas.
190
+
191
+ ---
192
+
193
+ ## Final Verification Checklist (Irreversible Writes)
194
+
195
+ Before reporting any of the following as complete, confirm both boxes for that write:
196
+
197
+ - [ ] **Education Cloud Foundation** — user was warned it cannot be turned off, and cold-verify (`educationCloudEnabled: true` on a fresh read) passed after enabling.
198
+ - [ ] **Person Accounts** — user was warned it cannot be disabled once enabled, and `Account` describe confirms `IsPersonAccount`/`Person*` fields are present.
199
+ - [ ] **Each domain toggle enabled this session** — user confirmed "cannot be turned off afterward" before the write, and the tooling GET cold-verify shows `Is<Domain>Enabled: true`. (Object-describe in step 18 confirms object provisioning only — not a substitute for this cold-verify.)
200
+ - [ ] **Each irreversible sub-feature/dependent-feature toggle enabled this session** — user confirmed before the write, and cold-verify shows the field is `true`.
201
+
202
+ Do not include a feature in the final summary as "enabled" unless both its approval and cold-verify boxes are checked.
203
+
204
+ ---
205
+
206
+ ## Output Expectations
207
+
208
+ This skill produces no files — configuration happens via Setup navigation, CLI commands, or API calls. Expected outputs: conversational confirmation after each step, verification results showing configuration is active, error messages with suggested fixes on failure, and a final summary listing all configured features.
209
+
210
+ ---
211
+
212
+ ## Cross-Skill Integration
213
+
214
+ | Need | Delegate to |
215
+ |------|-------------|
216
+ | Create custom objects for Education Cloud | `platform-custom-object-generate` |
217
+ | Create custom fields on Education Cloud objects | `platform-custom-field-generate` |
218
+ | Generate validation rules | `platform-validation-rule-generate` |
219
+ | Configure permission sets | `platform-permission-set-generate` |
220
+ | Deploy metadata packages | `platform-metadata-deploy` |
221
+
222
+ ---
223
+
224
+ ## Reference File Index
225
+
226
+ | File | When to read |
227
+ |------|-------------|
228
+ | `references/domain-features.md` | Index of per-domain reference files — start here to find the right file for the selected domain |
229
+ | `references/domain-features/<domain>.md` | Phase 2 step 14 (explain domain purpose), Phase 3 step 19 (identify sub-features), Phase 3 step 21 (sub-feature configuration setup paths and API preference names) |
230
+ | `references/dependent-features.md` | Phase 1.5 steps 11-12 (Setup Basics — present and configure Dependent Features before any domain), and whenever the user asks about a cross-product feature not owned by one domain — surface as "Set Up Dependent Features" and note domain overlap where relevant |
231
+ | `references/gotchas-extended.md` | When an error doesn't match one of the 10 entries in the Gotchas table above |
232
+ | `scripts/check_org_edition.py` | Phase 0 step 1 (org edition check) |
233
+ | `scripts/check_license_provisioned.py` | Phase 0 step 3 (Education Cloud license check) |
234
+ | `scripts/check_permission_assigned.py` | Phase 0 step 4 (Education Cloud Full Access assignment check) |
@@ -0,0 +1,198 @@
1
+ # Set Up Dependent Features — Cross-Product Toggles
2
+
3
+ "Set Up Dependent Features" in Setup → Set Up Education Cloud enables and configures cross-product features that make the most of Education Cloud. These are **not owned by a single domain** — some overlap with sub-features referenced in the per-domain files under `domain-features/` (noted per feature below). Present these to the customer as their own group, separate from the 6 domains, but cross-reference domain overlap when relevant.
4
+
5
+ This is part of Setup's own "Setup Basics" grouping (Person Accounts → Dependent Features → Data Space Mapping) that sits before the domain sections. Configuring Dependent Features is **recommended, not required**, before enabling a domain — **always ask the user which of these they want enabled**, since most are optional and several only matter once a specific domain sub-feature needs them.
6
+
7
+ Same method as everywhere else in this skill: READ (tooling GET by `DurableId`) → WRITE (`PUT /services/data/v68.0/headless/metadata`, via the write-enabled `dispatch` tool) → cold-VERIFY (repeat GET — `success:true` alone is not proof).
8
+
9
+ ---
10
+
11
+ ## Clean wins — `IndustriesSettings`, first-try, no gotcha
12
+
13
+ Same object/DurableId as domain toggles (`IndustriesSettings`, DurableId `bWRjLzBIRS9JbmR1c3RyaWVzU2V0dGluZ3M=`, `fullName: Industries`). IRREVERSIBLE — warn before flipping.
14
+
15
+ | Feature | What it does | Metadata element | Flat read field | Notes |
16
+ |---------|---------------|-------------------|------------------|-------|
17
+ | Care Plans | Lets staff create structured plans (goals, tasks, barriers) to support a student's wellbeing or case, tracking progress over time | `enableCarePlansPreference` (NOT `enableCarePlans` → `FIELD_INTEGRITY_EXCEPTION`) | `IsCarePlansPreferenceEnabled` | Same toggle as Student Success Step 4 (`domain-features/student-success.md`) — run AFTER Success Teams, BEFORE Support Programs per executed order |
18
+ | Case Proceedings | Manages formal hearings/proceedings tied to a case (e.g., disciplinary hearings), tracking participants, decisions, and outcomes | `enableCaseProceedingsPref` | `IsCaseProceedingsPrefEnabled` | Overlaps Student Success case workflows |
19
+ | Case Referral | Lets staff refer a case/student to another team, department, or service provider for additional support | `enableCaseReferralPref` | `IsCaseReferralPrefEnabled` | Overlaps Student Success case workflows |
20
+ | Einstein Academic Insights | AI-driven insights (built on Data Cloud) highlighting academic risk factors or trends for students, helping advisors intervene early | `enableAcademicInsightsAI` | `IsAcademicInsightsAiEnabled` | License-gated (Einstein GenAI) — write succeeds regardless of license; feature itself won't function without the license |
21
+ | Einstein Advising Summary | Uses generative AI to summarize a student's advising history/interactions so advisors get up to speed quickly | `enableAdvisingSummaryAI` | `IsAdvisingSummaryAiEnabled` | Overlaps Student Success (Advisor Console); license-gated same as above |
22
+ | Turn On Record Alert Access | Displays contextual alerts/banners on records (e.g., "Student on academic probation") to flag important info to staff | `enableRecordAlertCustomSharingPref` | `IsRecordAlertCustomSharingPrefEnabled` | Overlaps Student Success Performance Alerts |
23
+ | Program and Benefit Management (4 toggles) | Manages enrollment in programs and benefits (e.g., financial aid, services), including eligibility and assignment | `enableBenefitManagementPreference`, `enableBenefitAndGoalSharingPref`, `allowBenefitAssignmentWithInactiveProgramEnrollment`, `enableProgramCohorts` | `IsBenefitManagementPreferenceEnabled`, `IsBenefitAndGoalSharingPrefEnabled`, `AllowBenefitAssignmentWithInactiveProgramEnrollment`, `IsProgramCohortsEnabled` | Same 4 toggles as Student Success "Support Programs" (`domain-features/student-success.md` Step 5) and Mentoring "Set Up Mentoring Programs" (`domain-features/mentoring.md` Step 2) — idempotent, cold-read first and skip any already `true` |
24
+ | Salesforce Scheduler for Education Cloud (org prefs only) | Lets students/staff book appointments (advising, tutoring) directly with the right staff member based on availability | `enableEventManagementOrgPref`, `enableShareSaWithArOrgPref` | `IsEventManagementOrgPrefEnabled`, `IsShareSaWithArOrgPrefEnabled` | **Partial** — same 2 API-writable prefs as Student Success Scheduler step (`domain-features/student-success.md` Step 6); the Scheduler master enable itself is license-gated (Field Service) and manual/UI only |
25
+
26
+ **API call** (one PUT can flip several at once):
27
+ ```http
28
+ PUT /services/data/v68.0/headless/metadata
29
+ ```
30
+ ```json
31
+ {
32
+ "type": "IndustriesSettings",
33
+ "fullName": "Industries",
34
+ "xmlRep": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><IndustriesSettings xmlns=\"http://soap.sforce.com/2006/04/metadata\"><enableCaseProceedingsPref>true</enableCaseProceedingsPref><enableCaseReferralPref>true</enableCaseReferralPref><enableAcademicInsightsAI>true</enableAcademicInsightsAI><enableAdvisingSummaryAI>true</enableAdvisingSummaryAI><enableRecordAlertCustomSharingPref>true</enableRecordAlertCustomSharingPref></IndustriesSettings>"
35
+ }
36
+ ```
37
+
38
+ **Verification** (cold read): `GET /services/data/v68.0/tooling/sobjects/IndustriesSettings/bWRjLzBIRS9JbmR1c3RyaWVzU2V0dGluZ3M=` — confirm each `.Metadata.<element>` and its flat `Is*Enabled` read `true`.
39
+
40
+ ---
41
+
42
+ ## Different sObject — own `DurableId`/`fullName`, not `IndustriesSettings`
43
+
44
+ These live on their own settings sObjects. Same PUT/GET shape, but different `type`, `fullName`, and `DurableId` — do not use the `IndustriesSettings` DurableId for these.
45
+
46
+ ### Checklist Items w/ Attachments — `DocumentChecklistSettings`
47
+
48
+ - **What it does**: lets staff define required documents/items for a process (e.g., admissions) and track submission status, including attachments per checklist item.
49
+ - **Setup label**: Checklist Items w/ Attachments
50
+ - **sObject / fullName**: `DocumentChecklistSettings`, `fullName: DocumentChecklist`
51
+ - **Metadata element**: `deleteDCIWithFiles` — exact case matters (two wrong-case guesses failed before this one landed)
52
+
53
+ ```http
54
+ PUT /services/data/v68.0/headless/metadata
55
+ ```
56
+ ```json
57
+ {
58
+ "type": "DocumentChecklistSettings",
59
+ "fullName": "DocumentChecklist",
60
+ "xmlRep": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><DocumentChecklistSettings xmlns=\"http://soap.sforce.com/2006/04/metadata\"><deleteDCIWithFiles>true</deleteDCIWithFiles></DocumentChecklistSettings>"
61
+ }
62
+ ```
63
+
64
+ **Verification** (cold read, own DurableId — resolve it first with a SOQL query via `queryParams`, no need to ask the user):
65
+ ```http
66
+ GET /services/data/v68.0/tooling/query
67
+ ```
68
+ `queryParams: {"q": "SELECT Id, DurableId FROM DocumentChecklistSettings"}`
69
+ ```http
70
+ GET /services/data/v68.0/tooling/sobjects/DocumentChecklistSettings/<DurableId>
71
+ ```
72
+
73
+ ### Interest Tagging — `InterestTaggingSettings`
74
+
75
+ - **What it does**: lets you tag records with interests (e.g., programs, majors) to support personalization and segmentation.
76
+ - **Setup label**: Interest Tagging
77
+ - **sObject / fullName**: `InterestTaggingSettings`, `fullName: InterestTagging`
78
+ - **Metadata element**: `enableInterestTagging`
79
+
80
+ ```http
81
+ PUT /services/data/v68.0/headless/metadata
82
+ ```
83
+ ```json
84
+ {
85
+ "type": "InterestTaggingSettings",
86
+ "fullName": "InterestTagging",
87
+ "xmlRep": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><InterestTaggingSettings xmlns=\"http://soap.sforce.com/2006/04/metadata\"><enableInterestTagging>true</enableInterestTagging></InterestTaggingSettings>"
88
+ }
89
+ ```
90
+
91
+ **Verification** (cold read, own DurableId — resolve via SOQL first):
92
+ ```http
93
+ GET /services/data/v68.0/tooling/query
94
+ ```
95
+ `queryParams: {"q": "SELECT Id, DurableId FROM InterestTaggingSettings"}`
96
+ ```http
97
+ GET /services/data/v68.0/tooling/sobjects/InterestTaggingSettings/<DurableId>
98
+ ```
99
+
100
+ ---
101
+
102
+ ## Not writable via this API surface at all — manual UI only
103
+
104
+ Feature confirmed to have no working API toggle (tested this session) — different from "not yet tested." Present these with a one-line "what it does" and the Setup path; do not attempt an API write for rows with no failure detail (Action Launcher through Accounting Subledger below) — go straight to manual UI.
105
+
106
+ | Feature | What it does | Setup label | What happens | Resolution |
107
+ |---------|---------------|-------------|--------------|------------|
108
+ | Industries Cloud Common Decision Tables Access | Business Rules Engine feature letting admins define decision logic in a spreadsheet-like table instead of code, used to drive automation (e.g., eligibility rules) | Decision Tables | `BREDecisionTableAccess` — backing call is an internal Aura action; no REST/Tooling/MDAPI route exists | Manual UI only — do not keep probing endpoints |
109
+ | Intelligent Question Generation | AI-generated follow-up questions within the Discovery Framework to dynamically tailor assessments/questionnaires | Intelligent Question Generation | `enableSmartAsmtQstnGeneration` — field exists, name correct, write returns `INSUFFICIENT_ACCESS_OR_READONLY: "cannot be accessed using the API."`. Setup surfaces this under Discovery Framework settings, but it is an independent `IndustriesSettings` field, not a sub-toggle of `enableIndustriesAssessment` | Manual UI only |
110
+ | Discovery Framework | Guided, dynamic questionnaires/assessments to gather structured information from students or applicants (e.g., needs assessments) | Discovery Framework | `enableIndustriesAssessment` — `true→false` returns HTTP 500 `UNKNOWN_EXCEPTION`. One-way confirmed; enable path (`false→true`) untested since it was already `true` in this org | Treat `true→false` as blocked; if enabling from `false`, try the standard write path first |
111
+ | Omnistudio Metadata | Low-code tools (OmniScripts, FlexCards, DataRaptors) for building guided processes and dynamic UI without heavy custom code | OmniStudio Settings | `OmniStudioSettings`, `fullName: OmniStudio` (name guessed by analogy to other settings types, confirmed working for write) — PUT succeeds, but no GET/verify path found via Tooling or EntityDefinition | Write succeeds; **parked** — confirm success via Setup UI only. Open item: find a GET/verify API for `OmniStudioSettings` — still unresolved |
112
+ | Timeline | Shows a chronological, unified view of all activities and interactions related to a record | Timeline | `TimelineSettings` — PUT returns HTTP 400 `UNSUPPORTED_OPERATION: "MetadataCrud does not support UPDATE on type: Timeline"`. Block is on the whole type — no `fullName` variant fixes it | Manual UI only |
113
+ | Video Calls | Enables built-in video calling directly from Salesforce records (e.g., for advising sessions) without leaving the platform | Video Calls | `VideoCallsSettings` — same HTTP 400 `UNSUPPORTED_OPERATION` type-level block as Timeline | Manual UI only |
114
+ | Action Launcher | Presents users with a guided list of contextual actions/tasks (e.g., macros, flows, quick actions) relevant to a record, so staff know what to do next | Action Launcher | No toggle found on `IndustriesSettings` or any tested settings sObject | Manual UI only — Setup → Quick Find → "Action Launcher" |
115
+ | Actionable Relationship Center | Visualizes relationships between records (e.g., student, household, program) as an interactive graph so users can navigate and act on related records | Actionable Relationship Center | No toggle found | Manual UI only — Setup → Quick Find → "Actionable Relationship Center" |
116
+ | Actionable Segmentation | Lets you build and act on dynamic segments of records (e.g., students meeting certain criteria) for targeted outreach or processes | Actionable Segmentation | No toggle found; enabled per linked-doc segment configuration, not a single flip | Manual UI only — see Setup Help doc for per-segment setup |
117
+ | Clause Management | Manages standardized legal/policy clause text (e.g., for contracts or agreements) so they can be reused and inserted consistently | Clause Management | No toggle found; configured via clause category setup | Manual UI only |
118
+ | Contacts to Multiple Accounts | Allows a single Contact (e.g., a student) to be associated with more than one Account (e.g., household + employer), reflecting real-world relationships | Contacts to Multiple Accounts | No toggle found; set up per linked Setup Help doc | Manual UI only |
119
+ | Disclosure and Compliance Hub | Centralizes compliance disclosures and regulatory documentation (e.g., consumer/financial disclosures) for tracking and audit | Disclosure and Compliance Hub | No toggle found; set up per linked Setup Help doc | Manual UI only |
120
+ | Group Membership | Tracks a person's membership in groups (e.g., clubs, cohorts, teams) and manages associated roles/status | Group Membership | No toggle found; set up per linked Setup Help doc | Manual UI only |
121
+ | Intelligent Document Reader | Uses AI/OCR to extract data from uploaded documents (e.g., transcripts, IDs) and populate Salesforce records automatically | Intelligent Document Reader | No toggle found | Manual UI only — flag the Government Cloud data-boundary caution from the Setup doc before enabling |
122
+ | Marketing Cloud for Education | Integrates Education Cloud data with Marketing Cloud for targeted recruitment/engagement campaigns | Marketing Cloud for Education | No toggle found; external product connection, not an org preference | Manual UI only — see Setup Help doc |
123
+ | Outcome Management | Tracks measurable outcomes/goals tied to programs or cases, letting staff manage and report on progress against defined outcomes | Outcome Management | No toggle found | Manual UI only. **Also requires a permission set** — create/assign one granting "Manage Outcomes" and "Run Flows" |
124
+ | Stage Management | Visualizes and automates a record's progress through defined stages/fulfillment plans (e.g., admissions pipeline), tracking steps and dependencies | Stage Management | No toggle found | Manual UI only. **Also requires a custom permission set** — Dynamic Common Orchestrator User plus object permissions on Fulfillment Plans, Fulfillment Steps, Fulfillment Dependencies, Fulfillment Sources, and Stage Transition Entries |
125
+ | Accounting Subledger | Tracks detailed financial transactions (tuition, fees, payments) tied to student accounts, giving institutions a sub-ledger view feeding into general accounting | Accounting Subledger | No toggle found | Manual UI only. **Also requires**: add users, set up data pipelines, create/assign permission sets — flag all three as separate manual follow-ups, not a single step |
126
+
127
+ ---
128
+
129
+ ## Confirmed — org preference API (different write mechanism, not `IndustriesSettings`)
130
+
131
+ Not every toggle lives on `IndustriesSettings`. This one is a **Setup-Connect org preference**, a different API surface entirely — no metadata `type`/`fullName`/`xmlRep`, just a named preference path.
132
+
133
+ ### Einstein Generative AI (master toggle) — `EinsteinGPTCopilotEnabled`
134
+
135
+ - **What it does**: enables generative AI features platform-wide (e.g., drafting emails, summarizing records) within Education Cloud.
136
+ - **Setup label**: Set Up Einstein for Education Cloud → Einstein Generative AI
137
+ - **Reversible — confirmed by live test.** `PATCH` with `{"desiredState": false}` succeeds and cold-verifies `false`. Unlike most `IndustriesSettings` toggles in this skill, this one is a genuine two-way org preference.
138
+
139
+ ```http
140
+ GET /services/data/v68.0/setup/org/preferences/EinsteinGPTCopilotEnabled
141
+ ```
142
+ Returns `{"isPreferenceEnabled": <bool>}`.
143
+
144
+ ```http
145
+ PATCH /services/data/v68.0/setup/org/preferences/EinsteinGPTCopilotEnabled
146
+ ```
147
+ ```json
148
+ { "desiredState": true }
149
+ ```
150
+ Response echoes the post-write state directly — `{"isPreferenceEnabled": true}`. Cold-verify with a repeat GET anyway (same discipline as everywhere else in this skill).
151
+
152
+ ---
153
+
154
+ ## Confirmed — Setup Operation Recipe (Aura-backed controller, not a simple metadata toggle)
155
+
156
+ ### Data Space Mapping — `DataSpaceFeatureMappings`
157
+
158
+ - **Setup label**: Setup Basics → Data Space Mapping
159
+ - Binds an Education Cloud feature (`Student Success` / `STUDENT_SUCCESS` or `Financial Aid` / `FINANCIAL_AID` — the only two valid for this workflow) to a Data Cloud Data Space. **Reversible** — delete is supported, unlike most toggles in this skill.
160
+ - Requires Data Cloud (CDP) provisioned + user has Data Cloud app access. Pre-flight check tells you which.
161
+
162
+ ```http
163
+ GET /headless/invoke/platform/data-space-feature-mappings
164
+ ```
165
+ Returns `true`/`false` (Data Cloud provisioned + accessible). `false` → stop, fall back to manual Setup UI.
166
+
167
+ ```http
168
+ GET /headless/invoke/platform/data-space-feature-mappings/get-data-spaces
169
+ GET /headless/invoke/platform/data-space-feature-mappings/get-data-space-features
170
+ ```
171
+ First returns candidate Data Spaces (`devName`); second returns the two EDU-scoped feature choices (`{label, value}`).
172
+
173
+ ```http
174
+ PATCH /headless/invoke/platform/data-space-feature-mappings/create-data-space-feature-mapping
175
+ ```
176
+ ```json
177
+ { "feature": "STUDENT_SUCCESS", "dataSpace": "<devName>" }
178
+ ```
179
+ HTTP is always 200 — check `body.status`: `'200'` success (includes `mappingId`), `'400'` duplicate (a mapping for that feature already exists — not an error), `'500'` other failure.
180
+
181
+ **Verification** (cold read):
182
+ ```http
183
+ GET /headless/invoke/platform/data-space-feature-mappings/get-data-space-features-mapping
184
+ ```
185
+ Confirm the new row; its `id` is the `mappingId` for delete.
186
+
187
+ **To undo** (this one supports it):
188
+ ```http
189
+ DELETE /headless/invoke/platform/data-space-feature-mappings/delete-data-space-feature-mapping
190
+ ```
191
+ `queryParams: {"mappingId": "<id>"}`. Not idempotent — re-deleting an already-gone `mappingId` returns `status:'500'` with a "doesn't exist" message; treat that as already-deleted, not a real error.
192
+
193
+ ---
194
+
195
+ ## Explicitly out of scope for this skill
196
+
197
+ - **Managed Package Runtime** — skipped at user's explicit request; do not attempt to enable.
198
+ - **Deploy Custom LWC in Standard Runtime** — skipped at user's explicit request; do not attempt to enable.