@salesforce/afv-skills 1.45.0 → 1.47.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 (171) hide show
  1. package/package.json +1 -1
  2. package/skills/agentforce-observe/SKILL.md +32 -4
  3. package/skills/agentforce-observe/references/ahm-alerts.md +719 -0
  4. package/skills/automation-flow-generate/SKILL.md +11 -5
  5. package/skills/consumer-goods-promotion-bo-api-deploy/SKILL.md +275 -0
  6. package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/README.md +32 -0
  7. package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/SetCommentValue.cls +75 -0
  8. package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/SetCommentValue.cls-meta.xml +5 -0
  9. package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/interview-answers.json +13 -0
  10. package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/payloads/copy.json +10 -0
  11. package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/payloads/create.json +20 -0
  12. package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/payloads/update.json +16 -0
  13. package/skills/consumer-goods-promotion-bo-api-deploy/references/conventions-and-payload-rules.md +273 -0
  14. package/skills/consumer-goods-promotion-bo-api-deploy/references/generate-and-wire.md +236 -0
  15. package/skills/consumer-goods-promotion-bo-api-deploy/references/reference-example-set-comment-value.md +132 -0
  16. package/skills/consumer-goods-promotion-bo-api-deploy/references/smoke-and-verify.md +211 -0
  17. package/skills/dx-code-analyzer-configure/scripts/validate-config.sh +14 -10
  18. package/skills/dx-code-analyzer-run/scripts/apply-fixes.js +45 -4
  19. package/skills/dx-code-analyzer-run/scripts/describe-rule.js +52 -32
  20. package/skills/dx-devops-project-manage/SKILL.md +197 -0
  21. package/skills/dx-devops-project-manage/examples/common-workflows.md +197 -0
  22. package/skills/dx-devops-project-manage/references/cli-commands.md +295 -0
  23. package/skills/dx-devops-project-manage/scripts/create-project.sh +48 -0
  24. package/skills/dx-devops-project-manage/scripts/list-projects.sh +51 -0
  25. package/skills/dx-devops-project-manage/scripts/update-project.sh +96 -0
  26. package/skills/education-cloud-academic-calendar-generate/SKILL.md +225 -0
  27. package/skills/education-cloud-academic-calendar-generate/examples/quarter-calendar.json +47 -0
  28. package/skills/education-cloud-academic-calendar-generate/examples/sample-output.md +57 -0
  29. package/skills/education-cloud-academic-calendar-generate/examples/semester-calendar.json +54 -0
  30. package/skills/education-cloud-academic-calendar-generate/references/calendar-systems.md +127 -0
  31. package/skills/education-cloud-academic-calendar-generate/references/date-validation.md +222 -0
  32. package/skills/education-cloud-academic-calendar-generate/references/foundation_prerequisites.md +40 -0
  33. package/skills/education-cloud-academic-calendar-generate/scripts/validate_calendar_dates.py +143 -0
  34. package/skills/education-cloud-course-catalog-migrate/SKILL.md +321 -0
  35. package/skills/education-cloud-course-catalog-migrate/references/gotchas-detail.md +16 -0
  36. package/skills/education-cloud-course-catalog-migrate/references/gotchas.md +16 -0
  37. package/skills/education-cloud-course-catalog-migrate/references/large-catalog-handling.md +42 -0
  38. package/skills/education-cloud-course-catalog-migrate/scripts/batch_courses.py +36 -0
  39. package/skills/education-cloud-course-catalog-migrate/scripts/detect_linked_courses.py +51 -0
  40. package/skills/education-cloud-course-catalog-migrate/scripts/detect_modality_variants.py +48 -0
  41. package/skills/education-cloud-course-catalog-migrate/scripts/resolve_api_version.py +43 -0
  42. package/skills/education-cloud-course-catalog-migrate/scripts/split_course_code.py +39 -0
  43. package/skills/education-cloud-course-catalog-migrate/scripts/validate_completeness.py +54 -0
  44. package/skills/education-cloud-multi-campus-configure/references/foundation_prerequisites.md +3 -5
  45. package/skills/education-cloud-student-recruitment-agent-configure/SKILL.md +177 -0
  46. package/skills/education-cloud-student-recruitment-agent-configure/references/agent-and-subagents.md +151 -0
  47. package/skills/education-cloud-student-recruitment-agent-configure/references/customer-narration.md +34 -0
  48. package/skills/education-cloud-student-recruitment-agent-configure/references/execution-model.md +54 -0
  49. package/skills/education-cloud-student-recruitment-agent-configure/references/flows.md +82 -0
  50. package/skills/education-cloud-student-recruitment-agent-configure/references/grounding.md +199 -0
  51. package/skills/education-cloud-student-recruitment-agent-configure/references/permissions.md +183 -0
  52. package/skills/education-cloud-student-recruitment-agent-configure/references/platform-enablement.md +82 -0
  53. package/skills/education-cloud-student-recruitment-agent-configure/references/prerequisites.md +158 -0
  54. package/skills/education-cloud-student-recruitment-agent-configure/references/routing.md +141 -0
  55. package/skills/experience-cms-brand-apply/SKILL.md +5 -5
  56. package/skills/experience-cms-brand-create/SKILL.md +2 -2
  57. package/skills/experience-cms-content-generate/SKILL.md +1 -0
  58. package/skills/experience-cms-content-render/SKILL.md +173 -0
  59. package/skills/experience-cms-content-render/assets/angular/DetailPage.component.ts +25 -0
  60. package/skills/experience-cms-content-render/assets/angular/MediaRenderer.component.ts +133 -0
  61. package/skills/experience-cms-content-render/assets/angular/TypeList.component.ts +38 -0
  62. package/skills/experience-cms-content-render/assets/angular/TypeRenderer.component.ts +90 -0
  63. package/skills/experience-cms-content-render/assets/angular/cms-content.component.ts +248 -0
  64. package/skills/experience-cms-content-render/assets/angular/cms-item.service.ts +100 -0
  65. package/skills/experience-cms-content-render/assets/react/DetailPage.tsx +20 -0
  66. package/skills/experience-cms-content-render/assets/react/MediaRenderer.tsx +129 -0
  67. package/skills/experience-cms-content-render/assets/react/TypeList.tsx +40 -0
  68. package/skills/experience-cms-content-render/assets/react/TypeRenderer.tsx +64 -0
  69. package/skills/experience-cms-content-render/assets/react/heuristicRenderer.tsx +310 -0
  70. package/skills/experience-cms-content-render/assets/react/useCmsItem.ts +129 -0
  71. package/skills/experience-cms-content-render/assets/shared/cmsContentType.ts +49 -0
  72. package/skills/experience-cms-content-render/assets/shared/cmsCore.types.ts +96 -0
  73. package/skills/experience-cms-content-render/assets/shared/externalRefs.ts +55 -0
  74. package/skills/experience-cms-content-render/references/bulk-loading.md +60 -0
  75. package/skills/experience-cms-content-render/references/codegen-guardrails.md +111 -0
  76. package/skills/experience-cms-content-render/references/detail-pages.md +87 -0
  77. package/skills/experience-cms-content-render/references/embed-recipes.md +127 -0
  78. package/skills/experience-cms-content-render/references/failure-modes.md +96 -0
  79. package/skills/experience-cms-content-render/references/heuristic-render-rules.md +131 -0
  80. package/skills/experience-cms-content-render/references/init-scaffold.md +122 -0
  81. package/skills/experience-cms-content-render/references/interaction-model.md +173 -0
  82. package/skills/experience-cms-content-render/references/package-api.md +106 -0
  83. package/skills/experience-cms-content-render/references/schema-sync.md +114 -0
  84. package/skills/experience-cms-content-render/references/styling-scopes.md +65 -0
  85. package/skills/experience-cms-content-render/references/verify.md +49 -0
  86. package/skills/experience-cms-content-type-generate/SKILL.md +2 -2
  87. package/skills/experience-content-media-stock-image-search/SKILL.md +5 -4
  88. package/skills/experience-search-coordinate/SKILL.md +198 -0
  89. package/skills/experience-search-coordinate/assets/search-payload-template.json +25 -0
  90. package/skills/experience-search-coordinate/references/content-route.md +313 -0
  91. package/skills/experience-search-coordinate/references/content-type-discovery.md +57 -0
  92. package/skills/experience-search-coordinate/references/media-route.md +172 -0
  93. package/skills/experience-search-coordinate/references/scope-resolution.md +14 -0
  94. package/skills/experience-ui-bundle-localize/SKILL.md +1 -1
  95. package/skills/experience-ui-bundle-localize/references/i18n-setup.md +5 -3
  96. package/skills/experience-ui-bundle-project-generate/SKILL.md +18 -14
  97. package/skills/experience-ui-bundle-project-generate/references/angular-project-generate.md +22 -0
  98. package/skills/experience-ui-bundle-project-generate/references/react-project-generate.md +20 -0
  99. package/skills/experience-ui-bundle-salesforce-data-access/SKILL.md +58 -54
  100. package/skills/experience-ui-bundle-salesforce-data-access/references/caching.md +6 -0
  101. package/skills/experience-ui-bundle-salesforce-data-access/references/graphiti-cli.md +2 -2
  102. package/skills/experience-ui-bundle-salesforce-data-access/references/migration.md +6 -0
  103. package/skills/experience-ui-bundle-salesforce-data-access/references/rest-and-integration.md +2 -1
  104. package/skills/experience-ui-bundle-salesforce-data-access/references/sdk-api.md +6 -0
  105. package/skills/experience-ui-bundle-site-generate/SKILL.md +59 -8
  106. package/skills/experience-ui-bundle-site-generate/references/configure-metadata-digital-experience.md +8 -3
  107. package/skills/experience-ui-bundle-site-generate/references/configure-metadata-language-settings.md +120 -0
  108. package/skills/life-sciences-fieldsalesrep-coordinate/SKILL.md +336 -0
  109. package/skills/life-sciences-fieldsalesrep-coordinate/references/orchestration-flow.md +143 -0
  110. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-application-flexipage-mapping.md +127 -0
  111. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-deploy-commands.md +116 -0
  112. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-lifesci-metadata-deploy.md +111 -0
  113. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-overview.md +312 -0
  114. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-profile-layout-assignments.md +171 -0
  115. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-state-tracking.md +64 -0
  116. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-trigger-handlers.md +122 -0
  117. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-4-user-provisioning-overview.md +335 -0
  118. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-4-user-provisioning-user-provisioning-details.md +140 -0
  119. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-execution-state-and-recovery.md +196 -0
  120. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-metadata-cache-generation.md +155 -0
  121. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-overview.md +307 -0
  122. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-visit-creation-data.md +211 -0
  123. package/skills/life-sciences-fieldsalesrep-coordinate/references/state-machine-and-changes.md +108 -0
  124. package/skills/life-sciences-kam-coordinate/SKILL.md +241 -0
  125. package/skills/life-sciences-kam-coordinate/references/orchestration-flow.md +152 -0
  126. package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-application-flexipage-mapping.md +79 -0
  127. package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-deploy-commands.md +131 -0
  128. package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-kam-config-records.md +85 -0
  129. package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-lifesci-metadata-deploy.md +112 -0
  130. package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-overview.md +202 -0
  131. package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-profile-layout-assignments.md +67 -0
  132. package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-state-tracking.md +65 -0
  133. package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-trigger-handlers.md +123 -0
  134. package/skills/life-sciences-kam-coordinate/references/stage-4-participant-role-and-sprint.md +89 -0
  135. package/skills/life-sciences-kam-coordinate/references/stage-5-data-and-plan-templates-overview.md +337 -0
  136. package/skills/life-sciences-kam-coordinate/references/stage-5-data-creation-data.md +248 -0
  137. package/skills/life-sciences-kam-coordinate/references/stage-6-ipad-validation-script.md +35 -0
  138. package/skills/life-sciences-kam-coordinate/references/stage-6-metadata-cache-generation.md +155 -0
  139. package/skills/life-sciences-kam-coordinate/references/stage-6-user-provisioning-details.md +146 -0
  140. package/skills/life-sciences-kam-coordinate/references/stage-6-user-provisioning-overview.md +89 -0
  141. package/skills/life-sciences-kam-coordinate/references/state-machine-and-changes.md +114 -0
  142. package/skills/life-sciences-prerequisites-validate/SKILL.md +138 -0
  143. package/skills/life-sciences-prerequisites-validate/references/checks-org-settings.md +190 -0
  144. package/skills/life-sciences-prerequisites-validate/references/checks-user-and-package.md +211 -0
  145. package/skills/life-sciences-territory-configure/SKILL.md +217 -0
  146. package/skills/life-sciences-territory-configure/references/territory-metadata.md +262 -0
  147. package/skills/platform-apex-logs-debug/SKILL.md +7 -7
  148. package/skills/platform-custom-application-generate/SKILL.md +4 -4
  149. package/skills/platform-custom-object-generate/SKILL.md +7 -7
  150. package/skills/platform-custom-tab-generate/SKILL.md +1 -1
  151. package/skills/platform-dsar-policy-manage/SKILL.md +272 -0
  152. package/skills/platform-dsar-policy-manage/references/configure.md +106 -0
  153. package/skills/platform-dsar-policy-manage/references/export-and-history.md +123 -0
  154. package/skills/platform-dsar-policy-manage/references/gap-analysis-guide.md +150 -0
  155. package/skills/platform-dsar-policy-manage/references/gap-scan.md +129 -0
  156. package/skills/platform-dsar-policy-manage/references/headless-sor.md +59 -0
  157. package/skills/platform-dsar-policy-manage/references/report-format.md +59 -0
  158. package/skills/platform-dsar-policy-manage/scripts/tests/__init__.py +0 -0
  159. package/skills/platform-dsar-policy-manage/scripts/tests/test_validate_policy_tree.py +76 -0
  160. package/skills/platform-dsar-policy-manage/scripts/validate-policy-tree.py +130 -0
  161. package/skills/platform-flexipage-generate/SKILL.md +4 -0
  162. package/skills/platform-list-view-generate/SKILL.md +1 -0
  163. package/skills/platform-salesforce-connect-adapter-generate/SKILL.md +359 -0
  164. package/skills/platform-salesforce-connect-adapter-generate/references/official-examples.md +69 -0
  165. package/skills/platform-salesforce-connect-adapter-generate/references/scenarios.md +187 -0
  166. package/skills/platform-soql-query/SKILL.md +8 -8
  167. package/skills/platform-value-set-generate/SKILL.md +2 -2
  168. package/skills/service-itsm-agentic-setup-cmdb-coordinate/SKILL.md +20 -27
  169. package/skills/service-native-voice-recording-transcription-configure/SKILL.md +47 -27
  170. package/skills/service-native-voice-recording-transcription-configure/references/thunderbird-voice-settings.md +13 -9
  171. package/skills/service-native-voice-recording-transcription-configure/scripts/enable-recording-transcription.sh +104 -45
@@ -0,0 +1,171 @@
1
+ # Profile Layout Assignments Reference
2
+
3
+ ## Overview
4
+
5
+ After page layouts are deployed (Step 10), the skeleton profile files must be updated with `<layoutAssignments>` entries that map each layout to its object and optionally a record type.
6
+
7
+ Both profile files under `.lsc-starter-config/LSStarterConfig/PackageComponents/profiles/SkeletonProfile/` must be updated:
8
+ - `LSC Custom Profile.profile-meta.xml`
9
+ - `Admin.profile-meta.xml`
10
+
11
+ ## Layout-to-Object/RecordType Mapping
12
+
13
+ | Layout File | Object | Record Type (if applicable) |
14
+ |-------------|--------|---------------------------|
15
+ | Account-HCO Account Layout | Account | Health_Care_Organization |
16
+ | ActivityPlanTerritory-Activity Plan Territory Layout | ActivityPlanTerritory | — |
17
+ | Case-LSC Case Layout | Case | Medical_Info_Request, Medical_Inquiry, Question |
18
+ | CommSubscription-Communication Subscription Layout | CommSubscription | — |
19
+ | CommSubscriptionChannelType-Communication Subscription Channel Type Layout | CommSubscriptionChannelType | — |
20
+ | CommSubscriptionConsent-Communication Subscription Consent Layout | CommSubscriptionConsent | — |
21
+ | HealthcareProvider-Healthcare Provider Layout | HealthcareProvider | Health_Care_Organization, Health_Care_Provider |
22
+ | Inquiry-LSC Inquiry Layout | Inquiry | Adverse_Event, LSC_General, Medical_Inquiry |
23
+ | InquiryQuestion-LSC Inquiry Question Layout | InquiryQuestion | — |
24
+ | InquiryQuestionAnswer-LSC Inquiry Question Answer Layout | InquiryQuestionAnswer | — |
25
+ | PersonAccount-Person Account HCP Layout | PersonAccount | Health_Care_Provider, PersonAccount |
26
+ | ProviderVisit-LSC Provider Visit Layout | ProviderVisit | — |
27
+ | ProviderVisitProdDiscussion-Product Feedback | ProviderVisitProdDiscussion | Patient_Tracking, Product_Feedback |
28
+ | Visit-LSC Visit Layout | Visit | — |
29
+
30
+ ## XML Format for layoutAssignments
31
+
32
+ Insert these entries directly, right before the closing `</Profile>` tag in each file. This is a mechanical edit driven by the Step 10 layout selection — do not show the block for review or ask the user to confirm the profile edit (see the Step 11 note in `overview.md`). Placement inside `<Profile>` is not order-sensitive; before `</Profile>` is always valid.
33
+
34
+ ### Without Record Type
35
+
36
+ ```xml
37
+ <layoutAssignments>
38
+ <layout>Account-HCO Account Layout</layout>
39
+ </layoutAssignments>
40
+ ```
41
+
42
+ ### With Record Type
43
+
44
+ When a layout is assigned to specific record types, add one entry per record type:
45
+
46
+ ```xml
47
+ <layoutAssignments>
48
+ <layout>Case-LSC Case Layout</layout>
49
+ <recordType>Case.Medical_Info_Request</recordType>
50
+ </layoutAssignments>
51
+ <layoutAssignments>
52
+ <layout>Case-LSC Case Layout</layout>
53
+ <recordType>Case.Medical_Inquiry</recordType>
54
+ </layoutAssignments>
55
+ <layoutAssignments>
56
+ <layout>Case-LSC Case Layout</layout>
57
+ <recordType>Case.Question</recordType>
58
+ </layoutAssignments>
59
+ ```
60
+
61
+ ## Full layoutAssignments Block (All Layouts)
62
+
63
+ If all layouts are selected, add these entries to both profiles:
64
+
65
+ ```xml
66
+ <layoutAssignments>
67
+ <layout>Account-HCO Account Layout</layout>
68
+ <recordType>Account.Health_Care_Organization</recordType>
69
+ </layoutAssignments>
70
+ <layoutAssignments>
71
+ <layout>ActivityPlanTerritory-Activity Plan Territory Layout</layout>
72
+ </layoutAssignments>
73
+ <layoutAssignments>
74
+ <layout>Case-LSC Case Layout</layout>
75
+ <recordType>Case.Medical_Info_Request</recordType>
76
+ </layoutAssignments>
77
+ <layoutAssignments>
78
+ <layout>Case-LSC Case Layout</layout>
79
+ <recordType>Case.Medical_Inquiry</recordType>
80
+ </layoutAssignments>
81
+ <layoutAssignments>
82
+ <layout>Case-LSC Case Layout</layout>
83
+ <recordType>Case.Question</recordType>
84
+ </layoutAssignments>
85
+ <layoutAssignments>
86
+ <layout>CommSubscription-Communication Subscription Layout</layout>
87
+ </layoutAssignments>
88
+ <layoutAssignments>
89
+ <layout>CommSubscriptionChannelType-Communication Subscription Channel Type Layout</layout>
90
+ </layoutAssignments>
91
+ <layoutAssignments>
92
+ <layout>CommSubscriptionConsent-Communication Subscription Consent Layout</layout>
93
+ </layoutAssignments>
94
+ <layoutAssignments>
95
+ <layout>HealthcareProvider-Healthcare Provider Layout</layout>
96
+ <recordType>HealthcareProvider.Health_Care_Organization</recordType>
97
+ </layoutAssignments>
98
+ <layoutAssignments>
99
+ <layout>HealthcareProvider-Healthcare Provider Layout</layout>
100
+ <recordType>HealthcareProvider.Health_Care_Provider</recordType>
101
+ </layoutAssignments>
102
+ <layoutAssignments>
103
+ <layout>Inquiry-LSC Inquiry Layout</layout>
104
+ <recordType>Inquiry.Adverse_Event</recordType>
105
+ </layoutAssignments>
106
+ <layoutAssignments>
107
+ <layout>Inquiry-LSC Inquiry Layout</layout>
108
+ <recordType>Inquiry.LSC_General</recordType>
109
+ </layoutAssignments>
110
+ <layoutAssignments>
111
+ <layout>Inquiry-LSC Inquiry Layout</layout>
112
+ <recordType>Inquiry.Medical_Inquiry</recordType>
113
+ </layoutAssignments>
114
+ <layoutAssignments>
115
+ <layout>InquiryQuestion-LSC Inquiry Question Layout</layout>
116
+ </layoutAssignments>
117
+ <layoutAssignments>
118
+ <layout>InquiryQuestionAnswer-LSC Inquiry Question Answer Layout</layout>
119
+ </layoutAssignments>
120
+ <layoutAssignments>
121
+ <layout>PersonAccount-Person Account HCP Layout</layout>
122
+ <recordType>PersonAccount.Health_Care_Provider</recordType>
123
+ </layoutAssignments>
124
+ <layoutAssignments>
125
+ <layout>PersonAccount-Person Account HCP Layout</layout>
126
+ <recordType>PersonAccount.PersonAccount</recordType>
127
+ </layoutAssignments>
128
+ <layoutAssignments>
129
+ <layout>ProviderVisit-LSC Provider Visit Layout</layout>
130
+ </layoutAssignments>
131
+ <layoutAssignments>
132
+ <layout>ProviderVisitProdDiscussion-Product Feedback</layout>
133
+ <recordType>ProviderVisitProdDiscussion.Patient_Tracking</recordType>
134
+ </layoutAssignments>
135
+ <layoutAssignments>
136
+ <layout>ProviderVisitProdDiscussion-Product Feedback</layout>
137
+ <recordType>ProviderVisitProdDiscussion.Product_Feedback</recordType>
138
+ </layoutAssignments>
139
+ <layoutAssignments>
140
+ <layout>Visit-LSC Visit Layout</layout>
141
+ </layoutAssignments>
142
+ ```
143
+
144
+ ## Selective Assignment
145
+
146
+ If the user selected only specific layouts, include only the `<layoutAssignments>` entries for those layouts. For example, if only "Inquiry-LSC Inquiry Layout" and "Visit-LSC Visit Layout" were selected:
147
+
148
+ ```xml
149
+ <layoutAssignments>
150
+ <layout>Inquiry-LSC Inquiry Layout</layout>
151
+ <recordType>Inquiry.Adverse_Event</recordType>
152
+ </layoutAssignments>
153
+ <layoutAssignments>
154
+ <layout>Inquiry-LSC Inquiry Layout</layout>
155
+ <recordType>Inquiry.LSC_General</recordType>
156
+ </layoutAssignments>
157
+ <layoutAssignments>
158
+ <layout>Inquiry-LSC Inquiry Layout</layout>
159
+ <recordType>Inquiry.Medical_Inquiry</recordType>
160
+ </layoutAssignments>
161
+ <layoutAssignments>
162
+ <layout>Visit-LSC Visit Layout</layout>
163
+ </layoutAssignments>
164
+ ```
165
+
166
+ ## Deploy Updated Profiles
167
+
168
+ After adding layout assignments, deploy both profiles:
169
+ ```bash
170
+ sf project deploy start --source-dir .lsc-starter-config/LSStarterConfig/PackageComponents/profiles/SkeletonProfile --target-org <org>
171
+ ```
@@ -0,0 +1,64 @@
1
+ # Deployment State Tracking
2
+
3
+ Maintain a deployment state object throughout the workflow. This enables pause/resume and partial-deploy recovery.
4
+
5
+ ```text
6
+ State = {
7
+ targetOrg: string,
8
+ steps: [
9
+ { name: "StandardValueSets", status: "pending|in-progress|done|failed", detail?: string },
10
+ { name: "Objects", status: "pending|in-progress|done|failed", detail?: string },
11
+ { name: "ProductSpecificationTypes", status: "pending|in-progress|done|failed", detail?: string },
12
+ { name: "ProductSpecificationRecTypes", status: "pending|in-progress|done|failed", detail?: string },
13
+ { name: "QuickActions", status: "pending|in-progress|done|failed", detail?: string },
14
+ { name: "SkeletonProfile", status: "pending|in-progress|done|failed", detail?: string },
15
+ { name: "LifeSciConfigRecords", status: "pending|in-progress|done|failed", detail?: string },
16
+ { name: "LifeSciMetadataRecords", status: "pending|in-progress|done|failed", detail?: string },
17
+ { name: "TriggerHandlers", status: "pending|in-progress|done|failed", detail?: string },
18
+ { name: "PageLayouts", status: "pending|in-progress|done|failed", selected?: [], deployed?: [], detail?: string },
19
+ { name: "ProfileLayoutAssignments", status: "pending|in-progress|done|failed", detail?: string },
20
+ { name: "FlexiPages", status: "pending|in-progress|done|failed", selected?: [], deployed?: [], detail?: string },
21
+ { name: "ApplicationUpdate", status: "pending|in-progress|done|failed", detail?: string }
22
+ ]
23
+ }
24
+ ```
25
+
26
+ On failure at any step, show:
27
+
28
+ ```text
29
+ Deployment paused at step: <StepName>
30
+ Completed: <N>/<Total> steps
31
+ Failed component: <component-name>
32
+ Error: <error-message>
33
+
34
+ Options:
35
+ 1. Retry failed step
36
+ 2. Skip and continue
37
+ 3. Roll back (where applicable)
38
+ ```
39
+
40
+ Wait for user choice before continuing.
41
+
42
+ ## Progress Display
43
+
44
+ After each step completes, display progress:
45
+
46
+ ```text
47
+ [done] Step 1/13: StandardValueSets — deployed
48
+ [done] Step 2/13: Objects — deployed
49
+ [done] Step 3/13: ProductSpecificationTypes — deployed
50
+ [current] Step 4/13: ProductSpecificationRecTypes — in progress...
51
+ [pending] Step 5/13: QuickActions — pending
52
+ ```
53
+
54
+ At the end, show final summary:
55
+
56
+ ```text
57
+ LSC Starter Config Deployment Complete
58
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
59
+ 13/13 steps completed successfully
60
+ - 14 layouts deployed (user selected: all)
61
+ - 8 flexipages deployed (user selected: all)
62
+ - 28 trigger handlers activated
63
+ - Application file updated for selected flexipages
64
+ ```
@@ -0,0 +1,122 @@
1
+ # Trigger Handlers Reference
2
+
3
+ ## Handler List
4
+
5
+ The following trigger handlers must be activated:
6
+
7
+ 1. AffiliationUniquenessGenericHandler
8
+ 2. AffiliationUniquenessHandler
9
+ 3. HardAffiliationHandler
10
+ 4. AffiliationReciprocalHandler
11
+ 5. HealthcareProviderAffiliationHandler
12
+ 6. AffiliationPrimaryChangeHandler
13
+ 7. AffiliationAccountUpdateHandler
14
+ 8. TerrAcctRcmdActionSharingHandler
15
+ 9. TerrAccRcmActStatusUpdateHandler
16
+ 10. CaseMSLQueueHandler
17
+ 11. CaseChangeOwnershipHandler
18
+ 12. CaseShareToCreatorHandler
19
+ 13. StagePathPermissionsHandler
20
+ 14. AccountPlanDeleteChildrenHandler
21
+ 15. AccountPlanChangeStatusHandler
22
+ 16. SetAccPlanPercentCompleteHandler
23
+ 17. AcctPlanObjDeleteChildrenHandler
24
+ 18. SetAccObjectPercentCompleteHandler
25
+ 19. ActionPlanDeleteChildrenHandler
26
+ 20. SetSprintPercentCompleteHandler
27
+ 21. SetGoalAsgmtPercentCompleteHandler
28
+ 22. SetActionPlanPercentCompleteHandler
29
+ 23. AssessmentTaskDeleteAPItemHandler
30
+ 24. AssessmentTaskSharingHandler
31
+ 25. TerritoryBusinessPlanDeleteHandler
32
+ 26. GoalAssignmentDeleteHandler
33
+ 27. TerritoryBusPlanChangeStatusHandler
34
+ 28. SetTerrBusPlanPrcntCompleteHandler
35
+
36
+ ## Activation Method
37
+
38
+ Trigger handlers in Life Sciences Cloud are **`LifeScienceTriggerHandler`** records — a standard Tooling API entity (NOT a managed `lsc4ce__TriggerHandler__c` custom object). All queries and updates MUST use `--use-tooling-api`. Relevant fields:
39
+
40
+ - `DeveloperName` — the handler name (e.g. `AffiliationUniquenessGenericHandler`)
41
+ - `IsActive` — the active flag (Boolean)
42
+ - `ObjectApiName` — the object the handler runs on
43
+
44
+ > **Verified behavior:** the standard-API sobject name `lsc4ce__TriggerHandler__c` does NOT exist and returns `sObject type '...' is not supported`. `LifeScienceTriggerHandler` is only accessible via the Tooling API. A freshly-deployed org typically has ~185 handlers, all `IsActive=false` initially; the 28 below are the subset the starter config activates.
45
+
46
+ ### Preferred: Query then Update (Tooling API)
47
+
48
+ First, get the handler's Id and current state:
49
+ ```bash
50
+ sf data query --query "SELECT Id, DeveloperName, IsActive FROM LifeScienceTriggerHandler WHERE DeveloperName = '<HandlerName>'" --target-org <org> --use-tooling-api --json
51
+ ```
52
+
53
+ Then activate by Id:
54
+ ```bash
55
+ sf data update record --sobject LifeScienceTriggerHandler --record-id <Id> --values "IsActive=true" --target-org <org> --use-tooling-api
56
+ ```
57
+
58
+ ### Batch: query all inactive IDs in one call, then update each
59
+
60
+ Individual query-then-update per handler is slow (each `sf` invocation has startup overhead; 28 sequential handlers can exceed 2 minutes). Fetch all still-inactive IDs in ONE query, then loop the updates.
61
+
62
+ > **STOP-GATE (do not drop the last handler).** Build the update loop so it processes **every** returned ID. Two failure modes to avoid: **(1)** a naive `while read` over a *captured* ID list drops the final ID when that list has no trailing newline (the classic "27 of 28" bug); **(2)** an unquoted `for id in $IDS` loop relies on **bash word-splitting**, which **zsh does NOT do by default** — under zsh the whole multiline blob stays a single `$id`, every update fails on an invalid record-id, and you get **"0 of 28"**. Do NOT use either. The portable, shell-agnostic, drop-safe pattern is to pipe `jq` (which newline-terminates every record, including the last) into `while IFS= read -r id` via **process substitution** `< <(...)`: it behaves identically in bash and zsh and keeps the loop in the current shell so the counter survives. After the loop, always re-run the Verification query below and confirm the active count equals the full handler count (28) before proceeding — if it is short, identify the straggler(s) by name and activate each individually.
63
+
64
+ Use a single query filtered to `IsActive = false` (already-active handlers are skipped automatically — re-running is safe but wasteful), then loop with one of the safe patterns:
65
+
66
+ ```bash
67
+ ORG=<org>
68
+ n=0; total=0
69
+ # Pipe jq (newline-terminates EVERY record, incl. the last) into `while read` via
70
+ # process substitution `< <(...)`. Portable across bash AND zsh; the loop stays in the
71
+ # current shell so $n/$total survive. Never `for id in $IDS` (zsh won't word-split it).
72
+ while IFS= read -r id; do
73
+ total=$((total+1))
74
+ sf data update record --sobject LifeScienceTriggerHandler --record-id "$id" \
75
+ --values "IsActive=true" --target-org "$ORG" --use-tooling-api >/dev/null && n=$((n+1))
76
+ echo " ...$n activated"
77
+ done < <(sf data query \
78
+ --query "SELECT Id FROM LifeScienceTriggerHandler WHERE IsActive = false AND DeveloperName IN ('AffiliationUniquenessGenericHandler','AffiliationUniquenessHandler','HardAffiliationHandler','AffiliationReciprocalHandler','HealthcareProviderAffiliationHandler','AffiliationPrimaryChangeHandler','AffiliationAccountUpdateHandler','TerrAcctRcmdActionSharingHandler','TerrAccRcmActStatusUpdateHandler','CaseMSLQueueHandler','CaseChangeOwnershipHandler','CaseShareToCreatorHandler','StagePathPermissionsHandler','AccountPlanDeleteChildrenHandler','AccountPlanChangeStatusHandler','SetAccPlanPercentCompleteHandler','AcctPlanObjDeleteChildrenHandler','SetAccObjectPercentCompleteHandler','ActionPlanDeleteChildrenHandler','SetSprintPercentCompleteHandler','SetGoalAsgmtPercentCompleteHandler','SetActionPlanPercentCompleteHandler','AssessmentTaskDeleteAPItemHandler','AssessmentTaskSharingHandler','TerritoryBusinessPlanDeleteHandler','GoalAssignmentDeleteHandler','TerritoryBusPlanChangeStatusHandler','SetTerrBusPlanPrcntCompleteHandler')" \
79
+ --target-org "$ORG" --use-tooling-api --json | jq -r '.result.records[].Id')
80
+ echo "Activated $n of $total inactive handler(s)."
81
+ ```
82
+
83
+ If every one of the 28 was already active, the query returns zero rows and the loop is a no-op — that is a valid PASS, not a failure.
84
+
85
+ ### Verification
86
+
87
+ After activation, confirm the active count equals the full handler count (28) — count directly rather than eyeballing rows:
88
+ ```bash
89
+ sf data query --query "SELECT COUNT(Id) active FROM LifeScienceTriggerHandler WHERE IsActive = true AND DeveloperName IN ('AffiliationUniquenessGenericHandler','AffiliationUniquenessHandler','HardAffiliationHandler','AffiliationReciprocalHandler','HealthcareProviderAffiliationHandler','AffiliationPrimaryChangeHandler','AffiliationAccountUpdateHandler','TerrAcctRcmdActionSharingHandler','TerrAccRcmActStatusUpdateHandler','CaseMSLQueueHandler','CaseChangeOwnershipHandler','CaseShareToCreatorHandler','StagePathPermissionsHandler','AccountPlanDeleteChildrenHandler','AccountPlanChangeStatusHandler','SetAccPlanPercentCompleteHandler','AcctPlanObjDeleteChildrenHandler','SetAccObjectPercentCompleteHandler','ActionPlanDeleteChildrenHandler','SetSprintPercentCompleteHandler','SetGoalAsgmtPercentCompleteHandler','SetActionPlanPercentCompleteHandler','AssessmentTaskDeleteAPItemHandler','AssessmentTaskSharingHandler','TerritoryBusinessPlanDeleteHandler','GoalAssignmentDeleteHandler','TerritoryBusPlanChangeStatusHandler','SetTerrBusPlanPrcntCompleteHandler')" --target-org <org> --use-tooling-api --json
90
+ ```
91
+ The returned `active` count MUST be **28**. If it is fewer, list the still-inactive names (query the same set with `IsActive = false`), activate each straggler individually, and re-run this count until it reads 28. Do NOT proceed to the next step while any handler is inactive.
92
+
93
+ ### Error Handling
94
+
95
+ | Error | Cause | Resolution |
96
+ |-------|-------|------------|
97
+ | `sObject type 'lsc4ce__TriggerHandler__c' is not supported` | Wrong object name / missing tooling flag | Use `LifeScienceTriggerHandler` with `--use-tooling-api` |
98
+ | "No records found" | Handler `DeveloperName` doesn't exist in the org | The managed package may not have created it yet; skip and note |
99
+ | Command times out activating all 28 | Sequential per-handler `sf` calls are slow | Fetch all inactive IDs in one query, then loop updates (see the safe-loop patterns above); skip already-active ones |
100
+ | "27 of 28 activated" / last handler skipped | A `while read` over a *captured* list dropped the final unterminated line | Use the jq-piped `while IFS= read -r` via process substitution shown above; re-run the count check and activate any straggler individually |
101
+ | "0 of 28 activated" (loop ran once, all IDs mashed into one value) | An unquoted `for id in $IDS` loop under **zsh**, which does not word-split unquoted params — `$IDS` stayed one multiline string | Use the jq-piped `while IFS= read -r` via process substitution shown above (portable across bash/zsh); never rely on `for` word-splitting |
102
+ | "Insufficient access" | User lacks edit permission on the tooling entity | User needs appropriate permission set |
103
+
104
+ ### Progress Reporting
105
+
106
+ Report activation progress:
107
+ ```text
108
+ Activating trigger handlers: 15/28 complete...
109
+ ```
110
+
111
+ If any handler fails, collect all failures and report at the end:
112
+ ```text
113
+ 3 handlers could not be activated:
114
+ - CaseMSLQueueHandler: No record found
115
+ - StagePathPermissionsHandler: Field not found
116
+ - AssessmentTaskSharingHandler: Insufficient access
117
+
118
+ 25/28 handlers activated successfully.
119
+ Options:
120
+ 1. Retry failed handlers
121
+ 2. Skip and continue to next step
122
+ ```