@salesforce/afv-skills 1.63.0 → 1.65.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 (484) hide show
  1. package/package.json +1 -1
  2. package/skills/agentforce-gpt-email-generation-configure/SKILL.md +312 -0
  3. package/skills/agentforce-offline-experimentation-run/SKILL.md +253 -0
  4. package/skills/agentforce-offline-experimentation-run/scripts/build_report.py +796 -0
  5. package/skills/agentforce-offline-experimentation-run/scripts/resolve-token.sh +111 -0
  6. package/skills/agentforce-offline-experimentation-run/scripts/sfap_replay.py +1053 -0
  7. package/skills/agentforce-wizard-ui-forecasting-analytics-components-configure/SKILL.md +64 -0
  8. package/skills/agentforce-wizard-ui-sales-einstein-components-configure/SKILL.md +46 -0
  9. package/skills/automation-company-profile-info-query/SKILL.md +51 -0
  10. package/skills/automation-digital-wallet-configure/SKILL.md +689 -0
  11. package/skills/automation-flow-coordinate/SKILL.md +95 -0
  12. package/skills/automation-flow-coordinate/references/elements/action-call/action-call.md +1569 -0
  13. package/skills/automation-flow-coordinate/references/elements/action-call/conversation-messaging.md +96 -0
  14. package/skills/automation-flow-coordinate/references/elements/action-call/examples/send-sms-message.json +23 -0
  15. package/skills/automation-flow-coordinate/references/elements/action-call/examples/send-to-journey-no-fields.json +31 -0
  16. package/skills/automation-flow-coordinate/references/elements/action-call/send-to-journey.md +179 -0
  17. package/skills/automation-flow-coordinate/references/elements/exit-rule/examples/event-email-link-click.json +13 -0
  18. package/skills/automation-flow-coordinate/references/elements/exit-rule/exit-rule.md +83 -0
  19. package/skills/automation-flow-coordinate/references/elements/forward-to-bot-or-agent/examples/forward-to-bot-or-agent.json +69 -0
  20. package/skills/automation-flow-coordinate/references/elements/forward-to-bot-or-agent/forward-to-bot-or-agent.md +274 -0
  21. package/skills/automation-flow-coordinate/references/elements/start/audience-common.md +192 -0
  22. package/skills/automation-flow-coordinate/references/elements/start/automation-event-triggered.md +130 -0
  23. package/skills/automation-flow-coordinate/references/elements/start/data-cloud-data-change-triggered.md +92 -0
  24. package/skills/automation-flow-coordinate/references/elements/start/form-submission-triggered.md +88 -0
  25. package/skills/automation-flow-coordinate/references/elements/start/segment-triggered.md +152 -0
  26. package/skills/automation-flow-coordinate/references/elements/start/start.md +539 -0
  27. package/skills/automation-flow-coordinate/references/elements/subflow/subflow.md +152 -0
  28. package/skills/automation-flow-coordinate/references/elements/wait/wait.md +497 -0
  29. package/skills/automation-flow-coordinate/references/recipes/author/author.md +868 -0
  30. package/skills/automation-flow-coordinate/references/recipes/summarize/element-generic.md +300 -0
  31. package/skills/automation-flow-coordinate/references/recipes/summarize/reference-resolution.md +292 -0
  32. package/skills/automation-flow-coordinate/references/recipes/summarize/summarize.md +323 -0
  33. package/skills/automation-flow-coordinate/references/recipes/testing/examples/debug-output-template.md +109 -0
  34. package/skills/automation-flow-coordinate/references/recipes/testing/shape.md +219 -0
  35. package/skills/automation-flow-coordinate/references/recipes/testing/shared-stages/intent-analyzer.md +180 -0
  36. package/skills/automation-flow-coordinate/references/recipes/testing/workflows/debug.md +175 -0
  37. package/skills/automation-flow-coordinate/references/recipes/testing/workflows/promote.md +255 -0
  38. package/skills/automation-flow-coordinate/references/recipes/testing/workflows/save-debug.md +212 -0
  39. package/skills/automation-flow-coordinate/references/resources/variable/variable.md +171 -0
  40. package/skills/automation-flow-coordinate/references/shared/anti-patterns.md +786 -0
  41. package/skills/automation-flow-coordinate/references/shared/end/end.md +267 -0
  42. package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/README.md +69 -0
  43. package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/predictions.jsonl +80 -0
  44. package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/prompts.jsonl +116 -0
  45. package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/flow-type-resolver.md +321 -0
  46. package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/taxonomy.json +320 -0
  47. package/skills/automation-flow-coordinate/references/shared/server-functions.md +597 -0
  48. package/skills/automation-sandbox-post-copy-config-generate/SKILL.md +21 -11
  49. package/skills/automation-sandbox-post-copy-config-generate/assets/config_template.json +10 -0
  50. package/skills/automation-sandbox-post-copy-config-generate/assets/json_schema.json +33 -1
  51. package/skills/automation-sandbox-post-copy-config-generate/references/configuration_catalog.md +44 -1
  52. package/skills/automation-sandbox-post-copy-configure/SKILL.md +132 -124
  53. package/skills/automation-sandbox-post-copy-configure/references/flow_activation_path.md +151 -0
  54. package/skills/automation-sandbox-post-copy-configure/references/scheduled_apex_path.md +55 -9
  55. package/skills/automotive-cloud-appraisal-management-settings-configure/SKILL.md +69 -0
  56. package/skills/automotive-cloud-dealer-essentials-configure/SKILL.md +78 -0
  57. package/skills/automotive-cloud-ground-agent-data-pipelines-configure/SKILL.md +373 -0
  58. package/skills/automotive-cloud-ground-mfg-agent-data-pipelines-configure/SKILL.md +273 -0
  59. package/skills/automotive-cloud-mfg-agent-data-pipelines-configure/SKILL.md +259 -0
  60. package/skills/automotive-cloud-mfg-sales-concierge-agent-create/SKILL.md +369 -0
  61. package/skills/automotive-cloud-mfg-sales-concierge-foundation-configure/SKILL.md +542 -0
  62. package/skills/automotive-cloud-mfg-sales-concierge-foundation-coordinate/SKILL.md +159 -0
  63. package/skills/automotive-cloud-mfg-sales-concierge-orchestrator-agent-create/SKILL.md +349 -0
  64. package/skills/automotive-cloud-mfg-sales-concierge-orchestrator-configure/SKILL.md +505 -0
  65. package/skills/automotive-cloud-sales-concierge-agent-create/SKILL.md +380 -0
  66. package/skills/automotive-cloud-sales-concierge-foundation-configure/SKILL.md +567 -0
  67. package/skills/automotive-cloud-sales-concierge-foundation-coordinate/SKILL.md +159 -0
  68. package/skills/automotive-cloud-sales-concierge-orchestrator-agent-create/SKILL.md +360 -0
  69. package/skills/automotive-cloud-sales-concierge-orchestrator-configure/SKILL.md +539 -0
  70. package/skills/automotive-cloud-sales-concierge-search-grounding-configure/SKILL.md +358 -0
  71. package/skills/commerce-b2b-merchant-quote-configure/SKILL.md +602 -0
  72. package/skills/commerce-b2b-store-configure/SKILL.md +251 -0
  73. package/skills/commerce-credit-memo-create/SKILL.md +139 -0
  74. package/skills/commerce-delivery-business-hours-configure/SKILL.md +277 -0
  75. package/skills/commerce-delivery-estimation-apply/SKILL.md +155 -0
  76. package/skills/commerce-delivery-estimation-configure/SKILL.md +377 -0
  77. package/skills/commerce-delivery-routing-specs-integrate/SKILL.md +174 -0
  78. package/skills/commerce-estimate-bopis-query/SKILL.md +279 -0
  79. package/skills/commerce-estimate-delivery-date-query/SKILL.md +349 -0
  80. package/skills/commerce-fees-apply/SKILL.md +227 -0
  81. package/skills/commerce-fulfillment-routing-analyze/SKILL.md +200 -0
  82. package/skills/commerce-guest-buyer-create/SKILL.md +173 -0
  83. package/skills/commerce-location-bopis-configure/SKILL.md +378 -0
  84. package/skills/commerce-location-business-hours-configure/SKILL.md +235 -0
  85. package/skills/commerce-location-delivery-processing-time-configure/SKILL.md +309 -0
  86. package/skills/commerce-location-graph-integrate/SKILL.md +131 -0
  87. package/skills/commerce-location-shipping-carrier-method-configure/SKILL.md +755 -0
  88. package/skills/commerce-location-temporary-operating-hours-configure/SKILL.md +331 -0
  89. package/skills/commerce-merchant-buyer-groups-configure/SKILL.md +579 -0
  90. package/skills/commerce-merchant-buyer-user-onboarding-create/SKILL.md +626 -0
  91. package/skills/commerce-merchant-catalog-configure/SKILL.md +614 -0
  92. package/skills/commerce-merchant-extension-provider-configure/SKILL.md +368 -0
  93. package/skills/commerce-merchant-insights-account-health-churn-analyze/SKILL.md +118 -0
  94. package/skills/commerce-merchant-insights-inventory-returns-analyze/SKILL.md +65 -0
  95. package/skills/commerce-merchant-insights-order-shopper-get/SKILL.md +90 -0
  96. package/skills/commerce-merchant-insights-product-performance-analyze/SKILL.md +72 -0
  97. package/skills/commerce-merchant-insights-query/SKILL.md +279 -0
  98. package/skills/commerce-merchant-storefront-guest-access-configure/SKILL.md +656 -0
  99. package/skills/commerce-order-summary-change-apply/SKILL.md +375 -0
  100. package/skills/commerce-product-details-get/SKILL.md +363 -0
  101. package/skills/commerce-product-search/SKILL.md +563 -0
  102. package/skills/commerce-react-storefront-create/SKILL.md +350 -0
  103. package/skills/commerce-return-order-summary-create/SKILL.md +513 -0
  104. package/skills/commerce-search-relevance-analyze/SKILL.md +757 -0
  105. package/skills/commerce-temporary-processing-time-override-create/SKILL.md +274 -0
  106. package/skills/communications-initial-setup-configure/SKILL.md +630 -0
  107. package/skills/communications-multisite-configure/SKILL.md +571 -0
  108. package/skills/communications-revenue-cloud-settings-configure/SKILL.md +74 -0
  109. package/skills/communications-smb-fiber-catalog-create/SKILL.md +413 -0
  110. package/skills/communications-tmf-integrate/SKILL.md +1368 -0
  111. package/skills/consumer-goods-promotion-bo-api-deploy/SKILL.md +54 -107
  112. package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/payloads/copy.json +1 -1
  113. package/skills/consumer-goods-promotion-bo-api-deploy/references/conventions-and-payload-rules.md +82 -5
  114. package/skills/consumer-goods-promotion-bo-api-deploy/references/generate-and-wire.md +35 -2
  115. package/skills/consumer-goods-promotion-bo-api-deploy/references/preflight-and-seed-queries.md +149 -0
  116. package/skills/consumer-goods-promotion-bo-api-deploy/references/smoke-and-verify.md +17 -1
  117. package/skills/consumer-goods-visit-activity-act4-questions-assign/SKILL.md +448 -0
  118. package/skills/consumer-goods-visit-activity-act5-standard-create/SKILL.md +269 -0
  119. package/skills/consumer-goods-visit-activity-act6-assortment-configure/SKILL.md +271 -0
  120. package/skills/consumer-goods-visit-activity-act7-account-scoping-create/SKILL.md +382 -0
  121. package/skills/consumer-goods-visit-activity-act8-plan-attach-create/SKILL.md +373 -0
  122. package/skills/consumer-goods-visit-activity-act9-proof-validate/SKILL.md +389 -0
  123. package/skills/consumer-goods-visit-and-activity-act1-specification-create/SKILL.md +338 -0
  124. package/skills/consumer-goods-visit-and-activity-act2-template-create/SKILL.md +547 -0
  125. package/skills/consumer-goods-visit-and-activity-act3-definition-create/SKILL.md +346 -0
  126. package/skills/consumer-goods-visit-and-activity-configure/SKILL.md +1110 -0
  127. package/skills/crm-analytics-adoption-insights-configure/SKILL.md +224 -0
  128. package/skills/crm-analytics-custom-report-type-lightning-configure/SKILL.md +418 -0
  129. package/skills/crm-analytics-dashboards-configure/SKILL.md +731 -0
  130. package/skills/crm-analytics-operational-analytics-metadata-bridge-migrate/SKILL.md +233 -0
  131. package/skills/crm-analytics-report-notifications-ui-configure/SKILL.md +184 -0
  132. package/skills/crm-analytics-sharing-inheritance-coverage-analyze/SKILL.md +167 -0
  133. package/skills/crm-analytics-sonic-getting-started-configure/SKILL.md +55 -0
  134. package/skills/crm-analytics-tableau-next-app-deploy/SKILL.md +1350 -0
  135. package/skills/crm-analytics-tableau-next-c360-basemodel-validate/SKILL.md +1862 -0
  136. package/skills/crm-analytics-tableau-next-datacloud-validate/SKILL.md +83 -0
  137. package/skills/crm-analytics-tableau-next-provisioning-validate/SKILL.md +81 -0
  138. package/skills/data360-activation-create/SKILL.md +104 -0
  139. package/skills/data360-activation-external-platform-get/SKILL.md +49 -0
  140. package/skills/data360-activation-target-create/SKILL.md +93 -0
  141. package/skills/data360-activation-v2-create/SKILL.md +456 -0
  142. package/skills/data360-audience-dmo-get/SKILL.md +38 -0
  143. package/skills/data360-calculated-affinity-create/SKILL.md +82 -0
  144. package/skills/data360-calculated-insight-create/SKILL.md +148 -0
  145. package/skills/data360-catalog-metadata-create/SKILL.md +183 -0
  146. package/skills/data360-code-extension-create/SKILL.md +115 -0
  147. package/skills/data360-communication-capping-create/SKILL.md +227 -0
  148. package/skills/data360-connection-create/SKILL.md +491 -0
  149. package/skills/data360-content-lens-create/SKILL.md +181 -0
  150. package/skills/data360-data-action-create/SKILL.md +126 -0
  151. package/skills/data360-data-action-target-create/SKILL.md +181 -0
  152. package/skills/data360-data-clean-room-create/SKILL.md +238 -0
  153. package/skills/data360-data-governance-create/SKILL.md +746 -0
  154. package/skills/data360-data-graph-create/SKILL.md +82 -0
  155. package/skills/data360-data-harmonized-model-object-reference-create/SKILL.md +38 -0
  156. package/skills/data360-data-lake-object-create/SKILL.md +207 -0
  157. package/skills/data360-data-model-object-catalog-get/SKILL.md +49 -0
  158. package/skills/data360-data-model-object-create/SKILL.md +128 -0
  159. package/skills/data360-data-model-object-mapping-create/SKILL.md +106 -0
  160. package/skills/data360-data-space-create/SKILL.md +161 -0
  161. package/skills/data360-data-streams-create/SKILL.md +324 -0
  162. package/skills/data360-engagement-signal-get/SKILL.md +38 -0
  163. package/skills/data360-experiment-create/SKILL.md +82 -0
  164. package/skills/data360-goal-based-campaign-create/SKILL.md +192 -0
  165. package/skills/data360-harmonization-process-history-get/SKILL.md +38 -0
  166. package/skills/data360-harmonized-unstructured-dmo-create/SKILL.md +84 -0
  167. package/skills/data360-identity-resolution-create/SKILL.md +115 -0
  168. package/skills/data360-intelligent-document-processing-create/SKILL.md +148 -0
  169. package/skills/data360-knowledge-graph-construction-create/SKILL.md +93 -0
  170. package/skills/data360-knowledge-graph-create/SKILL.md +216 -0
  171. package/skills/data360-knowledge-space-mcp-configure/SKILL.md +475 -0
  172. package/skills/data360-machine-learning-mcp-configure/SKILL.md +697 -0
  173. package/skills/data360-multi-org-mcp-configure/SKILL.md +117 -0
  174. package/skills/data360-secondary-index-mcp-configure/SKILL.md +126 -0
  175. package/skills/data360-segment-mcp-configure/SKILL.md +159 -0
  176. package/skills/data360-semantic-calculated-dimension-mcp-configure/SKILL.md +93 -0
  177. package/skills/data360-semantic-calculated-measurement-mcp-configure/SKILL.md +93 -0
  178. package/skills/data360-semantic-data-object-mcp-configure/SKILL.md +93 -0
  179. package/skills/data360-semantic-dimension-mcp-configure/SKILL.md +38 -0
  180. package/skills/data360-semantic-engine-mcp-configure/SKILL.md +62 -0
  181. package/skills/data360-semantic-measurement-mcp-configure/SKILL.md +38 -0
  182. package/skills/data360-semantic-metric-mcp-configure/SKILL.md +93 -0
  183. package/skills/data360-semantic-model-mcp-configure/SKILL.md +115 -0
  184. package/skills/data360-standard-mapping-mcp-configure/SKILL.md +38 -0
  185. package/skills/data360-tenant-lifecycle-mcp-configure/SKILL.md +73 -0
  186. package/skills/dx-devops-conflict-resolve/SKILL.md +1 -5
  187. package/skills/dx-devops-pipeline-manage/SKILL.md +1 -5
  188. package/skills/dx-devops-project-manage/SKILL.md +1 -5
  189. package/skills/dx-devops-promote/SKILL.md +1 -5
  190. package/skills/dx-devops-request-status/SKILL.md +1 -5
  191. package/skills/dx-lifecycle-center/SKILL.md +120 -0
  192. package/skills/dx-lifecycle-center/examples/workflows.md +175 -0
  193. package/skills/dx-lifecycle-center/references/connect-api.md +123 -0
  194. package/skills/dx-lifecycle-center/references/connect-org.md +184 -0
  195. package/skills/dx-lifecycle-center/references/deploy.md +153 -0
  196. package/skills/dx-lifecycle-center/references/error-handling.md +21 -0
  197. package/skills/dx-lifecycle-center/references/hub-org.md +37 -0
  198. package/skills/dx-lifecycle-center/references/list-orgs.md +99 -0
  199. package/skills/dx-lifecycle-center/references/request-body.md +75 -0
  200. package/skills/dx-lifecycle-center/references/troubleshooting.md +31 -0
  201. package/skills/dx-lifecycle-center/scripts/poll-deploy-status.sh +200 -0
  202. package/skills/dx-lifecycle-center/scripts/resolve-environment.sh +120 -0
  203. package/skills/dx-org-devhub-configure/SKILL.md +1 -3
  204. package/skills/dx-org-shape-manage/SKILL.md +1 -5
  205. package/skills/dx-org-snapshot-manage/SKILL.md +1 -3
  206. package/skills/education-cloud-academic-calendar-generate/SKILL.md +1 -3
  207. package/skills/education-cloud-course-catalog-migrate/SKILL.md +1 -3
  208. package/skills/education-cloud-domain-configure/SKILL.md +1 -3
  209. package/skills/education-cloud-multi-campus-configure/SKILL.md +1 -3
  210. package/skills/education-cloud-student-recruitment-agent-configure/SKILL.md +1 -5
  211. package/skills/experience-afv-query/SKILL.md +234 -0
  212. package/skills/experience-agentforce-vibes-in-react-configure/SKILL.md +63 -0
  213. package/skills/experience-apex-components-configure/SKILL.md +69 -0
  214. package/skills/experience-apex-pages-configure/SKILL.md +107 -0
  215. package/skills/experience-app-home-configure/SKILL.md +76 -0
  216. package/skills/experience-aura-lightning-out-access-configure/SKILL.md +58 -0
  217. package/skills/experience-briefcase-configure/SKILL.md +287 -0
  218. package/skills/experience-community-flexi-page-list-create/SKILL.md +74 -0
  219. package/skills/experience-community-template-definition-list-query/SKILL.md +48 -0
  220. package/skills/experience-community-theme-definition-list-query/SKILL.md +38 -0
  221. package/skills/experience-content-assets-configure/SKILL.md +86 -0
  222. package/skills/experience-custom-domain-create/SKILL.md +727 -0
  223. package/skills/experience-defer-rendering-workspace-page-setup-configure/SKILL.md +41 -0
  224. package/skills/experience-field-service-app-builder-configure/SKILL.md +187 -0
  225. package/skills/experience-flow-category-configure/SKILL.md +117 -0
  226. package/skills/experience-formula-configure/SKILL.md +358 -0
  227. package/skills/experience-global-actions-configure/SKILL.md +69 -0
  228. package/skills/experience-global-publisher-layouts-configure/SKILL.md +79 -0
  229. package/skills/experience-instrumentation-configure/SKILL.md +64 -0
  230. package/skills/experience-lex-engagement-configure/SKILL.md +50 -0
  231. package/skills/experience-lightning-bolt-open/SKILL.md +12 -0
  232. package/skills/experience-lightning-out-configure/SKILL.md +129 -0
  233. package/skills/experience-lightning-preview-configure/SKILL.md +67 -0
  234. package/skills/experience-lightning-types-query/SKILL.md +98 -0
  235. package/skills/experience-malware-scan-configure/SKILL.md +71 -0
  236. package/skills/experience-my-salesforce-configure/SKILL.md +126 -0
  237. package/skills/experience-navigation-menus-configure/SKILL.md +235 -0
  238. package/skills/experience-notification-types-configure/SKILL.md +206 -0
  239. package/skills/experience-notifications-configure/SKILL.md +75 -0
  240. package/skills/experience-record-discovery-query/SKILL.md +227 -0
  241. package/skills/experience-regenerate-previews-open/SKILL.md +94 -0
  242. package/skills/experience-sales-cloud-mab-configure/SKILL.md +254 -0
  243. package/skills/experience-schema-builder-open/SKILL.md +38 -0
  244. package/skills/experience-simple-record-home-configure/SKILL.md +110 -0
  245. package/skills/experience-static-resources-configure/SKILL.md +74 -0
  246. package/skills/experience-ui-bundle-2gp-deploy/SKILL.md +1 -3
  247. package/skills/experience-ui-bundle-features-generate/SKILL.md +1 -5
  248. package/skills/experience-ui-bundle-mfa-configure/SKILL.md +1 -3
  249. package/skills/field-service-data-capture-form-deployer-configure/SKILL.md +23 -2
  250. package/skills/field-service-data-capture-form-designer-configure/SKILL.md +13 -3
  251. package/skills/field-service-data-capture-migrate/SKILL.md +1 -3
  252. package/skills/field-service-mobile-branding-configure/SKILL.md +17 -3
  253. package/skills/field-service-objective-designer-configure/SKILL.md +72 -379
  254. package/skills/field-service-prework-brief-deployer-configure/SKILL.md +10 -537
  255. package/skills/field-service-scheduling-policy-designer-query/SKILL.md +65 -1093
  256. package/skills/{field-service-setup-orchestrator-get → field-service-setup-coordinate}/SKILL.md +18 -3
  257. package/skills/field-service-sobject-create-configure/SKILL.md +13 -213
  258. package/skills/field-service-voice-to-form-configure/SKILL.md +40 -11
  259. package/skills/field-service-work-plan-configure/SKILL.md +253 -0
  260. package/skills/field-service-work-rule-designer-configure/SKILL.md +121 -95
  261. package/skills/fsc-actionable-segmentation-settings-configure/SKILL.md +180 -0
  262. package/skills/fsc-digital-origination-bre-decision-matrix-foundation-create/SKILL.md +196 -0
  263. package/skills/fsc-digital-origination-bre-disclosures-consent-configure/SKILL.md +106 -0
  264. package/skills/fsc-digital-origination-bre-document-upload-configure/SKILL.md +96 -0
  265. package/skills/fsc-digital-origination-bre-permissions-assign/SKILL.md +111 -0
  266. package/skills/fsc-digital-origination-bre-setup-coordinate/SKILL.md +250 -0
  267. package/skills/fsc-digital-origination-bre-stp-eligibility-configure/SKILL.md +122 -0
  268. package/skills/fsc-digital-origination-coordinate/SKILL.md +653 -0
  269. package/skills/fsc-digital-origination-demo-run/SKILL.md +225 -0
  270. package/skills/fsc-digital-origination-execution-guardrails-validate/SKILL.md +112 -0
  271. package/skills/fsc-digital-origination-initial-setup-configure/SKILL.md +396 -0
  272. package/skills/fsc-digital-origination-pricing-setup-coordinate/SKILL.md +336 -0
  273. package/skills/fsc-digital-origination-pricing-setup-data-foundation-create/SKILL.md +208 -0
  274. package/skills/fsc-digital-origination-pricing-setup-procedure-create/SKILL.md +375 -0
  275. package/skills/fsc-digital-origination-product-setup-act1-permissions-assign/SKILL.md +83 -0
  276. package/skills/fsc-digital-origination-product-setup-coordinate/SKILL.md +248 -0
  277. package/skills/fsc-digital-origination-sample-data-create/SKILL.md +206 -0
  278. package/skills/fsc-document-checklist-settings-configure/SKILL.md +57 -0
  279. package/skills/fsc-flexible-hierarchy-configure/SKILL.md +148 -0
  280. package/skills/fsc-flexible-hierarchy-foundation-configure/SKILL.md +1430 -0
  281. package/skills/fsc-flexible-hierarchy-graph-config-create/SKILL.md +471 -0
  282. package/skills/fsc-flexible-hierarchy-rule-based-graph-deploy/SKILL.md +429 -0
  283. package/skills/fsc-pricing-product-configurator-configure/SKILL.md +150 -0
  284. package/skills/fsc-pricing-salesforce-omnistudio-switch/SKILL.md +123 -0
  285. package/skills/fsc-product-act2-catalog-categories-create/SKILL.md +82 -0
  286. package/skills/fsc-product-act3-attributes-create/SKILL.md +249 -0
  287. package/skills/fsc-product-act4-classification-assignment-create/SKILL.md +196 -0
  288. package/skills/fsc-product-act5-considerations-get/SKILL.md +44 -0
  289. package/skills/fsc-stage-management-apex-flow-deploy/SKILL.md +384 -0
  290. package/skills/fsc-stage-management-compliant-data-sharing-configure/SKILL.md +144 -0
  291. package/skills/fsc-stage-management-decision-matrices-create/SKILL.md +107 -0
  292. package/skills/fsc-stage-management-definition-assignments-create/SKILL.md +189 -0
  293. package/skills/fsc-stage-management-definition-create/SKILL.md +108 -0
  294. package/skills/fsc-stage-management-permissions-assign/SKILL.md +143 -0
  295. package/skills/fsc-stage-management-transitions-configure/SKILL.md +139 -0
  296. package/skills/health-cloud-appt-booking-config-configure/SKILL.md +135 -0
  297. package/skills/health-cloud-appt-booking-url-config-configure/SKILL.md +134 -0
  298. package/skills/health-cloud-care-provider-affl-role-config-configure/SKILL.md +136 -0
  299. package/skills/health-cloud-care-provider-search-config-configure/SKILL.md +134 -0
  300. package/skills/health-cloud-care-requests-create/SKILL.md +178 -0
  301. package/skills/health-cloud-initial-configure/SKILL.md +511 -0
  302. package/skills/health-cloud-patient-appointment-scheduling-configure/SKILL.md +1374 -0
  303. package/skills/health-cloud-provider-search-settings-configure/SKILL.md +924 -0
  304. package/skills/health-cloud-referral-management-coordinate/SKILL.md +513 -0
  305. package/skills/health-cloud-timeline-configure/SKILL.md +622 -0
  306. package/skills/health-cloud-virtual-visit-config-configure/SKILL.md +135 -0
  307. package/skills/industries-account-score-settings-query/SKILL.md +78 -0
  308. package/skills/industries-actionable-list-data-sources-dmo-configure/SKILL.md +177 -0
  309. package/skills/industries-ad-product-availability-search/SKILL.md +399 -0
  310. package/skills/industries-advanced-account-forecast-settings-configure/SKILL.md +628 -0
  311. package/skills/industries-advanced-therapy-management-settings-configure/SKILL.md +73 -0
  312. package/skills/industries-atm-settings-starter-configure/SKILL.md +76 -0
  313. package/skills/industries-batch-document-ai-configure/SKILL.md +196 -0
  314. package/skills/industries-behavioral-health-app-settings-configure/SKILL.md +71 -0
  315. package/skills/industries-branch-management-settings-configure/SKILL.md +89 -0
  316. package/skills/industries-bre-decision-table-access-configure/SKILL.md +367 -0
  317. package/skills/industries-brokerage-settings-configure/SKILL.md +41 -0
  318. package/skills/industries-calendar-sync-settings-configure/SKILL.md +89 -0
  319. package/skills/industries-care-request-settings-configure/SKILL.md +218 -0
  320. package/skills/industries-case-management-intelligence-settings-configure/SKILL.md +54 -0
  321. package/skills/industries-catalog-process-attributes-products-configure/SKILL.md +380 -0
  322. package/skills/industries-catalog-process-fulfillment-configure/SKILL.md +216 -0
  323. package/skills/industries-catalog-process-intake-configure/SKILL.md +219 -0
  324. package/skills/industries-catalog-process-knowledge-configure/SKILL.md +153 -0
  325. package/skills/industries-catalog-process-preprocessor-configure/SKILL.md +168 -0
  326. package/skills/industries-cds-general-settings-configure/SKILL.md +69 -0
  327. package/skills/industries-claim-financial-settings-configure/SKILL.md +169 -0
  328. package/skills/industries-clinical-data-model-settings-configure/SKILL.md +136 -0
  329. package/skills/industries-clinical-data-model-settings-starter-configure/SKILL.md +105 -0
  330. package/skills/industries-collection-plan-settings-configure/SKILL.md +132 -0
  331. package/skills/industries-comms-service-console-settings-configure/SKILL.md +159 -0
  332. package/skills/industries-compliance-configure/SKILL.md +102 -0
  333. package/skills/industries-compliance-document-extraction-setup-configure/SKILL.md +76 -0
  334. package/skills/industries-contact-center-app-layout-configure/SKILL.md +88 -0
  335. package/skills/industries-contact-center-components-configure/SKILL.md +96 -0
  336. package/skills/industries-contact-center-path-knowledge-configure/SKILL.md +95 -0
  337. package/skills/industries-contact-center-user-access-assign/SKILL.md +96 -0
  338. package/skills/industries-course-waitlist-config-configure/SKILL.md +162 -0
  339. package/skills/industries-crisis-center-settings-configure/SKILL.md +84 -0
  340. package/skills/industries-custom-object-settings-configure/SKILL.md +94 -0
  341. package/skills/industries-data-cloud-integration-configure/SKILL.md +88 -0
  342. package/skills/industries-data-space-feature-mappings-configure/SKILL.md +245 -0
  343. package/skills/industries-decision-matrix-builder-configure/SKILL.md +78 -0
  344. package/skills/industries-decision-table-hbase-configure/SKILL.md +87 -0
  345. package/skills/industries-decision-table-version-configure/SKILL.md +74 -0
  346. package/skills/industries-decision-tables-builder-configure/SKILL.md +253 -0
  347. package/skills/industries-decision-tables-configure/SKILL.md +439 -0
  348. package/skills/industries-energy-utilities-configure/SKILL.md +251 -0
  349. package/skills/industries-eu-cloud-multisite-configure/SKILL.md +1008 -0
  350. package/skills/industries-eu-new-connections-configure/SKILL.md +30 -0
  351. package/skills/industries-explainability-msg-template-configure/SKILL.md +135 -0
  352. package/skills/industries-expression-set-message-token-configure/SKILL.md +135 -0
  353. package/skills/industries-field-service-settings-configure/SKILL.md +82 -0
  354. package/skills/industries-form-framework-settings-configure/SKILL.md +30 -0
  355. package/skills/industries-fsc-ai-settings-configure/SKILL.md +57 -0
  356. package/skills/industries-fsc-association-engine-settings-configure/SKILL.md +172 -0
  357. package/skills/industries-fsc-b2b-settings-configure/SKILL.md +61 -0
  358. package/skills/industries-fsc-insurance-settings-configure/SKILL.md +58 -0
  359. package/skills/industries-fsc-visa-fulfillment-setup-configure/SKILL.md +103 -0
  360. package/skills/industries-fsc-wealth-agent-settings-configure/SKILL.md +117 -0
  361. package/skills/industries-fsc-wealth-settings-configure/SKILL.md +99 -0
  362. package/skills/industries-fundraising-gift-entry-settings-configure/SKILL.md +120 -0
  363. package/skills/industries-fundraising-rfm-configure/SKILL.md +128 -0
  364. package/skills/industries-fundraising-settings-configure/SKILL.md +145 -0
  365. package/skills/industries-fundraising-source-code-gen-configure/SKILL.md +299 -0
  366. package/skills/industries-google-maps-api-key-settings-configure/SKILL.md +87 -0
  367. package/skills/industries-grantmaking-intelligence-settings-open/SKILL.md +58 -0
  368. package/skills/industries-hc-score-category-settings-configure/SKILL.md +167 -0
  369. package/skills/industries-health-engagement-settings-configure/SKILL.md +218 -0
  370. package/skills/industries-home-health-agentforce-setup-configure/SKILL.md +131 -0
  371. package/skills/industries-home-health-bundling-policy-create/SKILL.md +50 -0
  372. package/skills/industries-home-health-entity-labels-configure/SKILL.md +29 -0
  373. package/skills/industries-home-health-fsl-package-deploy/SKILL.md +71 -0
  374. package/skills/industries-home-health-fsl-settings-validate/SKILL.md +27 -0
  375. package/skills/industries-home-health-guided-setup-care-and-skill-get/SKILL.md +80 -0
  376. package/skills/industries-home-health-guided-setup-configure/SKILL.md +836 -0
  377. package/skills/industries-home-health-guided-setup-enable-org-fsl-get/SKILL.md +55 -0
  378. package/skills/industries-home-health-guided-setup-get-org-ready-get/SKILL.md +61 -0
  379. package/skills/industries-home-health-licenses-assign/SKILL.md +27 -0
  380. package/skills/industries-home-health-operating-hours-create/SKILL.md +40 -0
  381. package/skills/industries-home-health-scheduling-policy-create/SKILL.md +41 -0
  382. package/skills/industries-home-health-service-objective-create/SKILL.md +22 -0
  383. package/skills/industries-home-health-skills-create/SKILL.md +31 -0
  384. package/skills/industries-home-health-users-create/SKILL.md +29 -0
  385. package/skills/industries-icm-act3-toggles-configure/SKILL.md +198 -0
  386. package/skills/industries-icm-act5-genai-suggested-assessments-configure/SKILL.md +361 -0
  387. package/skills/industries-icm-act6-mcg-integration-configure/SKILL.md +550 -0
  388. package/skills/industries-integrated-care-management-configure/SKILL.md +168 -0
  389. package/skills/industries-object-enablement-configure/SKILL.md +86 -0
  390. package/skills/industries-tpm-system-processing-service-configure/SKILL.md +64 -0
  391. package/skills/insurance-brokerage-agency-billing-configure/SKILL.md +1 -3
  392. package/skills/integration-apex-settings-configure/SKILL.md +61 -0
  393. package/skills/marketing-e360-email-archiving-configure/SKILL.md +73 -0
  394. package/skills/marketing-message-test/SKILL.md +1 -3
  395. package/skills/nonprofit-fundraising-configure/SKILL.md +240 -0
  396. package/skills/nonprofit-fundraising-configure/references/gotchas.md +26 -0
  397. package/skills/nonprofit-fundraising-configure/references/mcp-invocation.md +678 -0
  398. package/skills/nonprofit-fundraising-configure/references/permission-targeting.md +35 -0
  399. package/skills/nonprofit-volunteer-management-model-get/SKILL.md +166 -0
  400. package/skills/nonprofit-volunteer-management-model-get/references/entities.md +315 -0
  401. package/skills/nonprofit-volunteer-management-model-get/references/relationships.md +175 -0
  402. package/skills/nonprofit-volunteer-management-model-get/references/themes.md +143 -0
  403. package/skills/nonprofit-volunteer-management-records-create/SKILL.md +121 -0
  404. package/skills/nonprofit-volunteer-management-records-create/references/field-guide.md +284 -0
  405. package/skills/nonprofit-volunteer-management-records-create/references/mcp-invocation.md +248 -0
  406. package/skills/nonprofit-volunteer-management-records-create/references/review-format.md +140 -0
  407. package/skills/nonprofit-volunteer-management-records-create/scripts/expand-series.py +632 -0
  408. package/skills/nonprofit-volunteer-management-records-create/scripts/render-review-table.py +419 -0
  409. package/skills/nonprofit-volunteer-management-records-create/scripts/tests/test_expand_series.py +690 -0
  410. package/skills/nonprofit-volunteer-management-records-create/scripts/tests/test_render_review_table.py +421 -0
  411. package/skills/nonprofit-volunteer-management-structure-generate/SKILL.md +119 -0
  412. package/skills/nonprofit-volunteer-management-structure-generate/references/configuration-decisions.md +159 -0
  413. package/skills/nonprofit-volunteer-management-structure-generate/references/discovery-interview.md +137 -0
  414. package/skills/nonprofit-volunteer-management-structure-generate/references/edge-cases.md +48 -0
  415. package/skills/nonprofit-volunteer-management-structure-generate/references/mcp-invocation.md +75 -0
  416. package/skills/nonprofit-volunteer-management-structure-generate/references/plan-output.md +141 -0
  417. package/skills/platform-custom-field-generate/SKILL.md +1 -0
  418. package/skills/platform-custom-field-generate/references/advanced-picklists.md +5 -5
  419. package/skills/platform-custom-metadata-type-generate/SKILL.md +3 -0
  420. package/skills/platform-custom-object-generate/SKILL.md +4 -0
  421. package/skills/platform-custom-permissions-configure/SKILL.md +687 -0
  422. package/skills/platform-custom-setting-generate/SKILL.md +3 -0
  423. package/skills/platform-datamask-run/SKILL.md +1 -5
  424. package/skills/platform-label-workbench-import-create/SKILL.md +67 -0
  425. package/skills/platform-permission-set-generate/SKILL.md +3 -0
  426. package/skills/platform-privacy-agent-settings-configure/SKILL.md +752 -0
  427. package/skills/platform-salesforce-connect-adapter-generate/SKILL.md +1 -3
  428. package/skills/platform-sandbox-configure/SKILL.md +1 -3
  429. package/skills/platform-value-set-generate/SKILL.md +3 -0
  430. package/skills/sales-call-scoring-configure/SKILL.md +1 -5
  431. package/skills/service-agentforce-channel-configure/SKILL.md +1 -3
  432. package/skills/service-agentforce-human-escalation-configure/SKILL.md +1 -3
  433. package/skills/service-catalog-template-coordinate/SKILL.md +1 -3
  434. package/skills/service-concierge-portal-generate/SKILL.md +1 -3
  435. package/skills/service-email-to-case-configure/SKILL.md +1 -5
  436. package/skills/service-itsm-agentic-setup-agent-runtime-access-assign/SKILL.md +1 -3
  437. package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +1 -3
  438. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/SKILL.md +1 -3
  439. package/skills/service-itsm-agentic-setup-agentforce-studio-validate/SKILL.md +1 -3
  440. package/skills/service-itsm-agentic-setup-cmdb-access-assign/SKILL.md +1 -3
  441. package/skills/service-itsm-agentic-setup-cmdb-bundle-deploy/SKILL.md +1 -5
  442. package/skills/service-itsm-agentic-setup-cmdb-configure/SKILL.md +1 -3
  443. package/skills/service-itsm-agentic-setup-cmdb-coordinate/SKILL.md +1 -3
  444. package/skills/service-itsm-agentic-setup-cmdb-discovery-configure/SKILL.md +1 -3
  445. package/skills/service-itsm-agentic-setup-employee-agent-configure/SKILL.md +1 -3
  446. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/SKILL.md +1 -3
  447. package/skills/service-itsm-agentic-setup-incident-sla-configure/SKILL.md +1 -0
  448. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/SKILL.md +1 -3
  449. package/skills/service-itsm-agentic-setup-uel-user-create/SKILL.md +1 -9
  450. package/skills/service-itsm-incident-mgmt-configure/SKILL.md +1 -5
  451. package/skills/service-itsm-incident-priority-configure/SKILL.md +1 -3
  452. package/skills/service-itsm-slack-itservice-configure/SKILL.md +1 -3
  453. package/skills/service-itsm-swarming-configure/SKILL.md +1 -3
  454. package/skills/service-itsm-teams-configure/SKILL.md +1 -3
  455. package/skills/service-itsm-teams-debug/SKILL.md +1 -3
  456. package/skills/service-itsm-teams-employee-agent-configure/SKILL.md +1 -3
  457. package/skills/service-itsm-teams-itdesk-configure/SKILL.md +1 -3
  458. package/skills/service-itsm-teams-itservice-configure/SKILL.md +1 -3
  459. package/skills/service-native-voice-recording-transcription-configure/SKILL.md +1 -3
  460. package/skills/service-omni-agent-users-create/SKILL.md +1 -3
  461. package/skills/service-omni-agent-work-sharing-configure/SKILL.md +1 -3
  462. package/skills/service-omni-attribute-routing-configure/SKILL.md +1 -3
  463. package/skills/service-omni-base-settings-configure/SKILL.md +1 -3
  464. package/skills/service-omni-channel-inventory-analyze/SKILL.md +1 -3
  465. package/skills/service-omni-channel-limits-analyze/SKILL.md +1 -3
  466. package/skills/service-omni-channel-setup-coordinate/SKILL.md +1 -3
  467. package/skills/service-omni-command-center-analyze/SKILL.md +1 -3
  468. package/skills/service-omni-command-center-configure/SKILL.md +1 -3
  469. package/skills/service-omni-permission-set-assign/SKILL.md +1 -3
  470. package/skills/service-omni-presence-status-deploy/SKILL.md +1 -3
  471. package/skills/service-omni-presence-user-config-deploy/SKILL.md +1 -3
  472. package/skills/service-omni-queue-deploy/SKILL.md +1 -3
  473. package/skills/service-omni-queue-members-assign/SKILL.md +1 -3
  474. package/skills/service-omni-queue-routing-config-deploy/SKILL.md +1 -3
  475. package/skills/service-omni-routing-flow-deploy/SKILL.md +1 -3
  476. package/skills/service-omni-service-channel-configure/SKILL.md +1 -3
  477. package/skills/service-omni-sidebar-configure/SKILL.md +1 -3
  478. package/skills/service-omni-skills-based-routing-configure/SKILL.md +1 -3
  479. package/skills/service-omni-supervisor-config-deploy/SKILL.md +1 -3
  480. package/skills/service-omni-supervisor-permset-assign/SKILL.md +1 -3
  481. package/skills/service-omni-supervisor-surface-deploy/SKILL.md +1 -3
  482. package/skills/service-omni-supervisor-users-create/SKILL.md +1 -3
  483. package/skills/service-omni-work-skill-routing-configure/SKILL.md +1 -3
  484. package/skills/tableau-next-asset-create/README.md +0 -65
@@ -0,0 +1,175 @@
1
+ # Relationship & Feature Map — Volunteer Management
2
+
3
+ How the entities connect and combine into features. When a user expresses intent, find the feature
4
+ here first, then drill into `entities.md`. Theme references (`Tn`) point at `themes.md`.
5
+
6
+ ## The backbone (structural spine)
7
+
8
+ ```text
9
+ VolunteerInitiative (optional top-level anchor; self-referential tree)
10
+ │ (optional links from JobPosition / Shift / Assignment)
11
+ ▼
12
+ Position (reusable TEMPLATE; carries PositionQualification)
13
+ │ JobPosition.Position (lookup; JobPosition links UP — never the reverse; quals NOT copied)
14
+ ▼
15
+ JobPosition (concrete POSTING; optional Location; carries JobPositionQualification)
16
+ │ JobPositionShift.JobPosition (required; deleting the JobPosition deletes its shifts)
17
+ ▼
18
+ JobPositionShift (concrete DATED occurrence; capacity; optional RecurrenceSchedule)
19
+ │ JobPositionAssignment.AssignedPositionShift (optional)
20
+ ▼
21
+ JobPositionAssignment (a person doing it on a day; SOURCE OF TRUTH for hours)
22
+ ```
23
+
24
+ **Rules that matter:**
25
+ - **Shift and Assignment attach ONLY to JobPosition, never Position** (T15). Position alone cannot
26
+ be scheduled or assigned against. A JobPosition is required for scheduling/matching.
27
+ - **Parentage is optional and mix-and-match** (T7, T21). A JPA may link to a Shift, a JobPosition,
28
+ a VolunteerInitiative, any mix, or none (standalone ad-hoc). VI may be absent entirely.
29
+ - Position → JobPosition is **template → concrete posting** (T15): one template, many localized
30
+ postings, each able to add its own JobPositionQualifications.
31
+
32
+ ## Delete behaviour (informational — these skills never delete)
33
+
34
+ | Deleting… | Effect |
35
+ |---|---|
36
+ | a Location | deletes its Addresses; blocked while a JobPosition uses it |
37
+ | a Position | deletes its PositionQualifications; blocked while a JobPosition uses it |
38
+ | a JobPosition | deletes its JobPositionShifts and JobPositionQualifications |
39
+ | an OperatingHours | deletes its TimeSlots |
40
+ | a Competency | blocked while a qualification uses it |
41
+
42
+ ## The authenticated boundary (who links to Account vs Contact)
43
+
44
+ The single most important cross-cutting relationship rule (T2, T10, T16):
45
+
46
+ | Entity | Account | Contact | Meaning |
47
+ |---|---|---|---|
48
+ | JobPositionAssignment | `AssignedAccount` (opt) | `AssignedContact` (opt) | guest creates Contact-only; Account attached on conversion. **Per-person (DGS) rollups require Account; VI rollups don't.** |
49
+ | PersonLocationAvailability | required | optional | availability is authenticated-only (anti-bloat) |
50
+ | PersonExamination | VM-added (opt) | required | credentials via portal want authenticated Account |
51
+ | PersonCompetency | via polymorphic `Person` | via polymorphic `Person` | `Person` = {Account, Contact}; already had Account |
52
+ | DonorGiftSummary | `Donor` (master-detail) | — | engagement history is Account-only |
53
+
54
+ **Takeaway:** anything that persists a volunteer's own data trends toward requiring an authenticated
55
+ Account. Guest (Contact-only) records are tolerated at signup but don't feed the per-person (DGS)
56
+ rollups until an Account exists (VI rollups aggregate by initiative regardless).
57
+
58
+ ## Feature: Volunteer Matching (T9)
59
+
60
+ Matches volunteers to opportunities on two axes — **held competency** and **availability**:
61
+
62
+ ```text
63
+ HELD (supply) REQUIRED (demand) WHERE/WHEN
64
+ PersonCompetency ── vs ── PositionQualification ──┐ PersonLocationAvailability
65
+ → Competency JobPositionQualification ├─ → Location ⇄ JobPosition.Location
66
+ → Competency-only ──────┘ → OperatingHours → TimeSlot
67
+ ```
68
+
69
+ - **Supply side:** **PersonCompetency only** — declared by the volunteer via Experience Cloud or set
70
+ by an internal user. The `Verification*` fields (`VerificationStatus`/`Date`/`Summary`) are
71
+ informational and **NOT used in matching** (verified vs merely claimed is not weighed).
72
+ - **Demand side:** PositionQualification (template) + JobPositionQualification (extra, per posting).
73
+ Matching uses QualificationLevel on Competency qualifications. A Job Position's own qualifications
74
+ and its Position's qualifications are checked together, keeping the higher level per Competency.
75
+ Nothing is copied from the Position to the Job Position. `QualificationReferenceRecordId` can point
76
+ at a Competency or an Examination (T17); Examination qualifications are ignored, and a
77
+ qualification with no QualificationLevel is skipped.
78
+ - **Examination is NOT a matching factor:** automated matching reads neither `PersonExamination` nor
79
+ Examination-typed requirements. Examination is for **manual/internal qualification** — a manager
80
+ reviews held credentials to qualify a volunteer (see `entities.md`).
81
+ - **Where/when:** PLA matched via **JobPosition.Location** + **time-window containment** (a TimeSlot
82
+ must contain the shift window); with no time filter, matching falls back to Location-only.
83
+ - **Level-aware:** the volunteer's `PersonCompetency.QualificationLevel` must be at or above the
84
+ required level. `ProficiencyLevel` is never read.
85
+
86
+ ## Feature: Shift capacity (T22) — counted, never enforced
87
+
88
+ ```text
89
+ JobPositionAssignment.DoesCountTowardShiftCapacity = true (default true; any status)
90
+ │ recounted on every JPA save and delete (NOT a rollup)
91
+ ▼
92
+ JobPositionShift.PositionAssignmentCount ──► RemainingCapacity [formula]
93
+ ```
94
+
95
+ - `RemainingCapacity` = MAX(0, MaximumAttendeesCount − PositionAssignmentCount) when both are set and
96
+ MaximumAttendeesCount is above 0; otherwise blank.
97
+ - Per-assignment boolean so waitlisted/observer assignments needn't be counted.
98
+ - **Nothing blocks a signup when a shift is full.** A customer who wants a hard limit adds their own
99
+ validation rule.
100
+
101
+ ## Feature: Engagement rollups (T12, T13, T14)
102
+
103
+ **Source of truth = JobPositionAssignment** (`ActualDuration` for hours).
104
+ Two rollup targets, **both shipped empty — the customer builds and schedules a Data Processing Engine job**:
105
+
106
+ - **Person-level → DonorGiftSummary** (4 VM fields): any JPA on the Person Account (NOT filtered by
107
+ VolunteerInitiative — the XML description saying otherwise is wrong, T13). Volunteer ≈ donor is why
108
+ it lives on the Fundraising entity (T14).
109
+ - **Initiative-level → VolunteerInitiative** (6 fields): rolls up assignments for the initiative and
110
+ **up its self-referential tree** to parent initiatives. `TotalActiveVolunteerCount`/`AttendanceRate`
111
+ depend on customer-configured eligibility (which JPA `Status` values count).
112
+
113
+ **ConstituentRole** is the companion flag: it marks *who is a volunteer* (`RoleType` = "Volunteer",
114
+ a value that ships out of the box, T6) so the rollups are meaningful. ConstituentRole =
115
+ the flag; the rollup fields = the totals.
116
+
117
+ ## Feature: Recurrence (T23)
118
+
119
+ VM **decouples** RecurrenceSchedule from the shared recurrence engine other clouds use. In VM it is
120
+ **purely informational** — viewing a JobPositionShift, you can see it's part of a series and what the
121
+ series looks like. VM ships a feature that, on creating a recurring schedule, generates the
122
+ RecurrenceSchedule record AND **materializes every JobPositionShift upfront** (time-bounded, capped).
123
+ All shift rows exist in the DB immediately; nothing appears dynamically later.
124
+
125
+ ## Feature: Approval + Stage Management (T18, T24, T25, T26)
126
+
127
+ ```text
128
+ Position.IsInternalApprovalRequired = true (inert flag on the template)
129
+ │ customer wires Salesforce Approvals to it
130
+ ▼
131
+ Salesforce Approvals runs on a JobPositionAssignment
132
+ │ on approval, Stage Management advances…
133
+ ▼
134
+ JobPositionAssignment.Status (e.g. "Awaiting Approval" → "Upcoming")
135
+ ```
136
+
137
+ - VI, Position, JobPosition, JobPositionShift and JobPositionAssignment each have their own `Status`
138
+ picklist with values that ship out of the box (see the picklist table in `entities.md`) —
139
+ **independent lifecycles** (T24). No cross-entity status propagation (closing a JobPosition does not auto-close its Shifts; a JPA
140
+ "Complete" doesn't auto-feed VI — that's the Data Processing Engine job's work).
141
+ - **Stage Management** (a built-in platform feature) drives automations as an enum progresses
142
+ through stages (T25). The Status field alone is just a picklist; registering it with Stage
143
+ Management makes it a governed lifecycle.
144
+ - The Position approval flag ultimately resolves on **JPA.Status** (T26).
145
+ - **No Status is "primary."** structure-generate and records-create treat each lifecycle separately.
146
+
147
+ ## Feature: Benefit bridge (T19, T20)
148
+
149
+ ```text
150
+ PositionBenefit (requires VM && Benefit Management — compound AND gating)
151
+ Position (master-detail) ──► Benefit (OUT OF SCOPE — external dependency)
152
+ ```
153
+
154
+ Volunteers provide a service that beneficiaries receive **as a Benefit**. Attached at the Position
155
+ (template) level since all its JobPositions provide the same service. Benefit itself is Program
156
+ Management — treat as an external dependency, never model it.
157
+
158
+ ## Quick intent → entity lookup
159
+
160
+ | User intent | Entities / fields |
161
+ |---|---|
162
+ | "Mark someone as a volunteer" | ConstituentRole (`RoleType`="Volunteer", ships out of the box) |
163
+ | "Track completed volunteer hours" | JobPositionAssignment.`ActualDuration` → DonorGiftSummary/`VolunteerInitiative` rollups (build a Data Processing Engine job) |
164
+ | "Let volunteers say when/where they're free" | PersonLocationAvailability (+ Location, OperatingHours, TimeSlot) |
165
+ | "Record a volunteer's skills / credentials" | PersonCompetency (matched vs Competency qualifications) / PersonExamination (credentials; manual qualification only, not matched) |
166
+ | "Record a cause or interest a volunteer cares about" | Not PersonCompetency (it feeds matching). Use a customer-defined interest or preference field on a related record |
167
+ | "Define a reusable job" | Position (+ PositionQualification) |
168
+ | "Post that job (optionally at a location)" | JobPosition (+ JobPositionQualification for extra local reqs) |
169
+ | "Schedule a specific dated slot" | JobPositionShift (+ capacity fields) |
170
+ | "Sign someone up" | JobPositionAssignment (link to Shift/JobPosition/VI as desired) |
171
+ | "Cap a shift at N people" | JobPositionShift.`MaximumAttendeesCount` + JPA.`DoesCountTowardShiftCapacity` — counted, never enforced; a hard limit needs a customer validation rule |
172
+ | "Require approval before signup" | Position.`IsInternalApprovalRequired` + Salesforce Approvals + JPA.`Status`/Stage Management |
173
+ | "Organize activities under a campaign/initiative" | VolunteerInitiative (self-referential tree) |
174
+ | "Volunteers deliver a benefit to those we serve" | PositionBenefit (needs VM && Benefit Management) |
175
+ | "Recurring shifts" | RecurrenceSchedule (informational) + a shipped feature pre-generates all Shifts |
@@ -0,0 +1,143 @@
1
+ # Design Principles (Themes) — Volunteer Management
2
+
3
+ The recurring principles that explain *why* the model is shaped the way it is. `entities.md` and
4
+ `relationships.md` cite these by number. Read these to reason about parts of the model this skill
5
+ doesn't spell out explicitly — the principles generalize.
6
+
7
+ ## Identity & the authenticated boundary
8
+
9
+ **T1 — The volunteer is a Person Account.** Person Accounts must be enabled (hard prerequisite).
10
+ The "Business Account" box in the diagram is just how Salesforce renders Person Accounts — ignore
11
+ that variant.
12
+
13
+ **T2 — The authenticated boundary drives the Contact-vs-Account split.** Contact-only = guest /
14
+ pre-account (public Experience Cloud signup). Person Account = authenticated volunteer after
15
+ creation/conversion. Entities choose Contact vs Account by whether the flow can be unauthenticated.
16
+ Assignment supports both (guest → convert); history/rollup entities require Account.
17
+
18
+ **T3 — Permission tiers mirror the boundary.** `userHasVolunteerManagement` = internal staff;
19
+ `userHasVolunteerManagementCmtyAccess` = authenticated community volunteer;
20
+ `userHasGuestVolunteerManagementCmtyAccess` = unauthenticated guest; `orgHasVolunteerManagement` =
21
+ org-level enablement (API access, related lists). Map any gate to these actor types.
22
+
23
+ **T10 — Guest Contact bloat is *why* the boundary exists.** Guest forms can create the same person's
24
+ Contact repeatedly with no dedup. To avoid record bloat, entities that persist a volunteer's own
25
+ data (availability, credentials, history) require an authenticated Account. This is the mechanical
26
+ reason behind T2.
27
+
28
+ **T16 — VM insists on Person Account at the portal boundary.** Where VM persists volunteer-owned
29
+ records via Experience Cloud (PersonExamination, PLA), it requires an authenticated Account — even
30
+ adding an Account link to a borrowed entity that only had Contact (PersonExamination). PersonCompetency
31
+ needed nothing because its polymorphic `Person` already included Account.
32
+
33
+ ## Reuse philosophy
34
+
35
+ **T4 — Account is a "hero" entity.** Deliberately hard to extend with fields, so product data hangs
36
+ off related/extension entities rather than new Account/Contact fields. This explains the whole
37
+ "borrowed entity + related entity" shape of the model. VM adds zero fields to Account/Contact.
38
+
39
+ **T14 — Volunteer ≈ Donor.** VM assumes a volunteer is likely also a donor, so volunteer engagement
40
+ data is co-located on the Fundraising DonorGiftSummary rather than a new entity. Reinforces T4.
41
+
42
+ **T11 — "Generic entity, single current customer."** Some native-looking entities (PLA) were built
43
+ generic so any product could adopt them; VM is the only current customer. A UsageType/discriminator
44
+ field keeps products' records from colliding — set it to the VM value.
45
+
46
+ **T17 — Polymorphic scopes are deliberately narrow.** QualificationReferenceRecord supports
47
+ {Competency, Examination} only — the polymorphic lookup permits exactly those two targets. Reference
48
+ only the domains actually in a polymorphic set; do not assume other qualification types are targetable.
49
+
50
+ **T20 — Compound (AND) gating signals a cross-product bridge.** Most entities use OR gating (any of
51
+ several clouds can access — plain reuse). PositionBenefit uses AND (`VM && BenefitManagement`) — a
52
+ deliberate bridge requiring both products. When you see `&&` across clouds, it's a cross-product
53
+ feature, not reuse.
54
+
55
+ ## Structural patterns
56
+
57
+ **T5 — Standing/informational vs operational/per-occurrence.** The model separates "who someone IS"
58
+ (ConstituentRole — is-a-volunteer, active/inactive, dates) from "what someone DID"
59
+ (JobPositionAssignment — a specific job, place, date; one record per occurrence).
60
+
61
+ **T7 — Optional / flexible parentage.** Many links are intentionally optional and mix-and-match
62
+ rather than an enforced hierarchy (e.g. JPA → Shift / JobPosition / VolunteerInitiative, any mix or
63
+ none). The model favors flexibility; structure-generate helps the user decide the shape.
64
+
65
+ **T15 — Position → JobPosition template model is the backbone.** Position = reusable template
66
+ (+ PositionQualifications); JobPosition = concrete posting (optionally at a Location) that
67
+ **references** the template via a lookup and can add JobPositionQualifications. A Job Position's own
68
+ qualifications and its Position's qualifications are checked together, keeping the higher level per
69
+ Competency. Nothing is copied from the Position to the Job Position (see `entities.md` → JobPosition). Shift &
70
+ Assignment attach ONLY to JobPosition. One template → many localized postings with location-specific
71
+ extra requirements.
72
+
73
+ **T21 — VolunteerInitiative = optional top-level parent.** VI is the intended parent of
74
+ JobPosition/Shift/Assignment and is self-referential (a hierarchical tree), but linkage is
75
+ deliberately optional — ad-hoc work with no VI is allowed. VI is the organizing anchor when you want
76
+ one, not a required root.
77
+
78
+ ## "Mechanism shipped, enforcement/config is the customer's"
79
+
80
+ **T6 — Most picklists ship with values.** Most of VM's picklists have values out of the box —
81
+ including `ConstituentRole.RoleType = "Volunteer"` (see the picklist table in `entities.md`).
82
+ Position Type, Sensitivity and Schedule Type and Competency Category ship empty. When a needed
83
+ value already ships, tell the user it's there; otherwise an admin can add it. Only the platform
84
+ picklists (TimeZone, TimeSlot DayOfWeek and Type) can't take a new value.
85
+
86
+ **T12 — Some rollups/features are NOT shipped populated.** DonorGiftSummary's 4 fields and
87
+ VolunteerInitiative's 6 fields have no Data Processing Engine definition out of the box — the
88
+ customer creates and schedules one. Fields exist empty until then. Real-time isn't feasible at this volume.
89
+
90
+ **T18 — Fields as hooks into other platform features.** Some VM fields are inert flags meant to be
91
+ wired into existing features. `Position.IsInternalApprovalRequired` → Salesforce Approvals. The
92
+ `Status` picklists → Stage Management. These need configuration to do anything.
93
+
94
+ **T22 — Capacity is counted, never enforced.** A hook recounts `JobPositionShift.PositionAssignmentCount`
95
+ on every JPA save and delete (JPAs with `DoesCountTowardShiftCapacity = true`); `RemainingCapacity` is
96
+ a formula. Nothing blocks a signup when a shift is full — a customer who wants a hard limit adds a
97
+ validation rule.
98
+
99
+ **T23 — VM decouples RecurrenceSchedule and pre-generates all shifts.** Unlike other products that
100
+ use the shared recurrence engine for dynamic generation, VM treats RecurrenceSchedule as purely
101
+ informational and ships a feature that materializes every JobPositionShift upfront (time-bounded,
102
+ capped). Recurrence is a generation-time convenience, not runtime behavior.
103
+
104
+ **T24 — The Status lifecycles are independent.** VI / Position / JobPosition / JobPositionShift /
105
+ JobPositionAssignment each have their own Status picklist with values that ship out of the box (see
106
+ the picklist table in `entities.md`). There is **no cross-entity propagation** (closing a JobPosition
107
+ does not auto-close its Shifts; a JPA "Complete" doesn't auto-feed VI — that's the Data Processing
108
+ Engine job's work). No Status is "primary" — treat each as separate.
109
+
110
+ **T25 — Stage Management is the platform feature the Status picklists plug into.** It enables
111
+ automations as a Status progresses through stages. A Status field alone is just a picklist; registering it with
112
+ Stage Management makes it a governed lifecycle. VM ships the field as the hook.
113
+
114
+ **T26 — The approval flag ultimately plays out on JPA.Status.** `Position.IsInternalApprovalRequired`
115
+ (flag on the template) → Salesforce Approvals (customer-wired) → JPA.Status advanced by Stage
116
+ Management (e.g. "Awaiting Approval" → "Upcoming"). VM ships the flag and the Status values; the
117
+ customer still wires the Approvals process and any Stage Management automation.
118
+
119
+ ## Trust intent over doc text
120
+
121
+ **T13 — Field description text can be misleading.** Capture intended behavior, and note corrections
122
+ where shipped text misleads. Known case: DonorGiftSummary rollup fields say "related to a volunteer
123
+ initiative" — the real intent is "any JPA related to the Person Account" (VolunteerInitiative is NOT
124
+ a filter).
125
+
126
+ ## Features (composite themes)
127
+
128
+ **T8 — Deprecated (was: Corporate / group volunteering).** Removed — VM has no supported solution
129
+ for corporate/group volunteering yet. Number retained to keep existing theme references stable; do
130
+ not reuse it. Do not advise agents to model corporate/group volunteering (e.g. via
131
+ `ConstituentRole.Institution`).
132
+
133
+ **T9 — Volunteer Matching.** Matches volunteers to opportunities on two axes: **held competency**
134
+ (PersonCompetency vs Position/JobPosition Qualification requirements) and **availability**
135
+ (PersonLocationAvailability ↔ JobPosition.Location + TimeSlot time-window containment). Matching
136
+ uses QualificationLevel on Competency qualifications; ProficiencyLevel is never read. A Job
137
+ Position's own qualifications and its Position's qualifications are checked together, keeping the
138
+ higher level per Competency. **Competency-only:** matching reads neither PersonExamination nor
139
+ Examination qualifications. Examination is for manual/internal qualification.
140
+
141
+ **T19 — Volunteering ↔ Benefit Management bridge.** Volunteers provide a service beneficiaries
142
+ receive as a Benefit. PositionBenefit is the bridge (Position → Benefit), requiring both clouds.
143
+ Benefit itself is out-of-scope (Program Management) — external dependency.
@@ -0,0 +1,121 @@
1
+ ---
2
+ name: nonprofit-volunteer-management-records-create
3
+ description: "Use this skill to write Salesforce Nonprofit Cloud Volunteer Management (VM) records to an org once the user knows what to create, from a confirmed plan or a list of records: it reuses existing records by their Ids instead of duplicating them, asks for any missing required values, shows each object's records table for approval, inserts the records in dependency order, reads each write back, recovers from write errors, and reports every created Id. TRIGGER when a user wants to create, insert, import, or write VM records. DO NOT TRIGGER to decide what a program needs (use nonprofit-volunteer-management-structure-generate), to explain what a VM object or field is for (use nonprofit-volunteer-management-model-get), to enable Volunteer Management in an org, for per-person records (JobPositionAssignment, PersonLocationAvailability, PersonCompetency / PersonExamination, ConstituentRole), or for NPSP / Volunteers for Salesforce (V4S), which is unsupported."
4
+ metadata:
5
+ version: "1.2"
6
+ domains: ["Nonprofit"]
7
+ relatedSkills:
8
+ - "nonprofit-volunteer-management-model-get"
9
+ - "nonprofit-volunteer-management-structure-generate"
10
+ cliTools:
11
+ - tool: ["python3"]
12
+ semver: ">=3.8"
13
+ - tool: ["sf"]
14
+ semver: ">=2.0.0"
15
+ accessCheck: "(OrgPermissions.VolunteerManagement) && (OrgPreferences.VolunteerManagementEnabled)"
16
+ ---
17
+
18
+ # Nonprofit Cloud Volunteer Management — Record Creation
19
+
20
+ This skill writes Volunteer Management records to an org: a Volunteer Initiative and the Locations, Positions, Job Positions, qualifications and Job Position Shifts under it. It checks the org for records it can reuse, fills each field from `references/field-guide.md`, shows the user one records table per object, and writes that object only after the user confirms its table. **Open every run by telling the user that this skill reads and writes their org, and that nothing is read or written without their yes.**
21
+
22
+ ## Hard rules
23
+
24
+ - **Never delete records.** No delete, rollback or cleanup of any kind. If a write fails part-way, report what was created and what wasn't; never undo it.
25
+ - **Never act on NPSP or Volunteers for Salesforce (V4S).** That legacy package is unsupported here. Say so and stop.
26
+ - **No acronyms or internal labels in what the user sees.** Write out Volunteer Initiative, Job Position, Job Position Shift, Job Position Assignment, Position Qualification, Job Position Qualification, Data Processing Engine, and "out of the box". Never show internal step or section labels.
27
+ - **Writes need a yes per object.** Nothing is written until the user confirms that object's records table.
28
+
29
+ ## Mechanism
30
+
31
+ Org calls go through the connection the session has: the headless-360 tools (`dispatch_readonly` for reads, `dispatch` for writes) or an authenticated Salesforce CLI. Both return the same results at API v67.0. Tell the user which one is in use. If neither is connected, stop and ask the user to connect one; never guess an org result. The exact call for each step, in both forms, is in `references/mcp-invocation.md`.
32
+
33
+ ## Scope
34
+
35
+ - **In scope:** Volunteer Initiative (including child initiatives), Location and its Address, Competency, Examination, Position, Position Qualification, Job Position, Job Position Qualification, Job Position Shift; Operating Hours and Time Slots only when the user asks for them. Reusing existing records, filling fields, detecting required custom fields, writing in dependency order, and recovering from write errors.
36
+ - **Out of scope:** deciding what to build (`nonprofit-volunteer-management-structure-generate`); explaining what an object or field means (`nonprofit-volunteer-management-model-get`); turning Volunteer Management on; any per-person record — volunteer sign-ups and assignments, a volunteer's availability, a person's qualifications, marking a person as a volunteer, the person or household itself. The full list is in `references/field-guide.md` "Out of scope".
37
+
38
+ ## Required inputs
39
+
40
+ - **The records to create.** Chained: the plan from structure-generate — its summary table, the Id of each reused record, the schedule details, the outstanding inputs and the `Reuse-check:` line. Standalone: ask the user what to create.
41
+ - **Field values.** `references/field-guide.md` is the authority for every standard field: API name, required flag, tier, default and must-ask rules. Ask for each outstanding input from the plan when its object comes up.
42
+ - **Defaults:** propose Status `Upcoming` on a new Volunteer Initiative, Position, Job Position and Job Position Shift — offer Status's live values, and if none fits, offer to add one (step 6). Every other default is in the field guide. Location Type has no default and is always asked.
43
+
44
+ ## Workflow
45
+
46
+ 1. **Open and pick the mode.** Give the opening notice above. Chained: work from the handed-off plan and don't re-interview. Standalone: gather the records from the user.
47
+ 2. **Ask for the read consent, once.** Say what you'll read and why: the Volunteer Management check, the reuse checks, the existing-shift check, and the object descriptions used for required custom fields and live picklist values. Declining means existing records can't be checked, so duplicates may be created, and required custom fields surface only as write errors. If declined, proceed from the plan without reading: every record not already marked Reuse is New, and picklist values are the user's; one the org doesn't accept surfaces as a write error.
48
+ 3. **Check that Volunteer Management is on**, once, after the user agrees to the org read (calls in `references/mcp-invocation.md`):
49
+ 1. Read the org preference `VolunteerManagementEnabled`. `true` → on. `false` or 404 → off: stop and tell the user an admin turns it on in Setup → Volunteer Management Settings. 403 → the user has no access to org settings: stop and say so.
50
+ 2. Describe `VolunteerInitiative`. 200 → the user can see the Volunteer Management objects. Any error → stop and tell the user they need the Manage Volunteer Data permission set. Don't look up permission-set assignments beforehand.
51
+ 4. **Reuse checks, by the plan's `Reuse-check:` line.**
52
+ - `RESOLVED` → the plan's Reuse/New mapping is authoritative. Use its reused Ids as-is and don't re-run the reuse checks.
53
+ - `DECLINED` → run the reuse checks for every record the plan marks New.
54
+ - Missing or unrecognized line, or standalone → run the reuse checks for every planned record.
55
+
56
+ One bounded query per object, filtered to the planned names (never the whole object). Match a Job Position on Name + Volunteer Initiative, Operating Hours on Time Zone + its set of Time Slot windows (never the name), everything else on Name. Escape an apostrophe in a name with a backslash (`O\'Brien`); doubling it fails. Query only fields the field guide documents. For a reused Location, read its Visitor Address: if it has one, don't create another.
57
+ 5. **Existing-shift check — on every plan, including `RESOLVED`.** For each Job Position that is reused, query its shifts by that Job Position's Id and the series' date range; never by name or Position. If N of the M planned shifts already exist, stop and ask: "N of M shifts already exist (dates X–Y). Create only the missing ones, create all M (duplicates), or cancel?" On "only the missing ones", pass the existing shifts to `scripts/expand-series.py` as `excludeExisting`. A new Job Position has no shifts to check.
58
+ 6. **Read the object descriptions** for each object you'll write: find required custom fields (custom, createable, not nillable, not defaulted on create) and the live picklist values. Never describe an object to learn its standard fields — the field guide is the source for those — but when a description is in hand and differs from the field guide (a renamed label, a picklist value), the description wins. A required custom field becomes a `needs-input` column on that object's table.
59
+ - **Platform picklists** (Time Zone, Time Slot Day of Week and Type): offer only the live values. A value outside them is rejected before the write, never sent.
60
+ - **Every other picklist:** offer the live values. If none fits, ask whether to add one; on a separate yes, get it added before the write. On headless-360 the user adds it in Setup and you give them the exact path; on the Salesforce CLI you add it for them (`references/mcp-invocation.md`). Use it only once a fresh describe lists it; a value that isn't in the list yet is rejected on write.
61
+ 7. **Summarize, then review one object at a time.** Lead with the insert summary in `references/review-format.md`: what will be written, Reuse ("Name · object") and New counts per object, how the records fit together, and the write order. Ask the fill mode: prefill everything, or generate together. Then, for each object in write order, show its field guide and its records table. **Render every records table with `scripts/render-review-table.py`, never by hand** — it keeps every value under its own column. Invite edits and re-render. Confirming an object's table is the yes to write it; there is no second confirm.
62
+ 8. **Write each confirmed object, parents first.** Order: Volunteer Initiative (parents, then child initiatives) → Location → its Address → back-fill the Location's Visitor Address → Competency / Examination → Position → Position Qualification → Job Position → Job Position Qualification → Operating Hours → Time Slot (only on request) → Job Position Shift. Skip objects the plan doesn't use.
63
+ - Several records of one object go in one tree call (all-or-nothing, up to 200 records). Over 200, split into batches.
64
+ - A parent written in an earlier call is referenced by its literal Id. A `@refId` reference works only inside the same call.
65
+ - A child Volunteer Initiative goes in a second call after its parent, with the parent's literal Id.
66
+ - A new onsite Location gets its Address (street, city, state, postal code and country from the user; Location Type and Time Zone copied from the Location), then the Location's Visitor Address is set to the new Address. A virtual Location, or a reused one that already has an Address, gets none.
67
+ - Feed returned Ids forward to children; don't re-query records you just created.
68
+ - Read each write back to confirm it.
69
+ - **Shift series:** build the `scripts/expand-series.py` spec from the plan's schedule details — days and windows (`windowsByDay` when windows differ by day), start date, end date or `count`, time zone, volunteers per shift, the confirmed Status, and `excludeExisting` from step 5. A monthly or irregular schedule goes in as `oneOffDates` with the dates the user confirms. Tell the user the series ends there; later shifts are added in a later run.
70
+ 9. **Recover from errors.** Show the error, propose a fix grounded in the error message and the object description, and re-send only the records that weren't created. If a write fails part-way, say which records exist and which don't; never undo.
71
+ 10. **Final report.** One table of every record this run wrote or reused (object, name, Id, Reuse or New) and the planned-versus-written count, in the layout in `references/review-format.md`. For a shift series, state the dates it covers.
72
+
73
+ ## Rules
74
+
75
+ | Constraint | Rationale |
76
+ |-----------|-----------|
77
+ | One read consent; one write consent per object, given on that object's records table | Approving a read is not approval to write. A partial decline is treated as declined. |
78
+ | Reuse existing records; never duplicate | Every planned record gets a reuse decision before it's written; shifts of a reused Job Position are checked on every run. |
79
+ | Every org query is bounded to the plan | Filter on the planned names; never read a whole object. The query is a duplicate check, not a listing. |
80
+ | Never write tier 4 or 5 fields | They are system-managed, auto-numbered, formulas or owned by another feature; writing them errors or is overwritten. |
81
+ | Never create a Recurrence Schedule | Volunteer Management's own recurrence feature owns it; this skill writes one Job Position Shift per occurrence. |
82
+ | Every shift series has an end date or a count | Each shift is its own record; an open-ended series would never stop. |
83
+ | Operating Hours and Time Slots only when the user asks | Nothing links them to a Location or Job Position; they are used only for volunteer availability matching. |
84
+ | Never build a series or a records table by hand | `scripts/expand-series.py` and `scripts/render-review-table.py` are reviewed and tested; hand-built dates and tables shift values. |
85
+ | Show names, not Ids or API names, before the final report | The user reviews records in plain language; Ids appear only in the final report. |
86
+
87
+ ## Gotchas
88
+
89
+ | Issue | What to do |
90
+ |-------|------------|
91
+ | Location and Address point at each other | Write the Location, then the Address with its Parent set to the Location, then update the Location's Visitor Address. |
92
+ | Operating Hours and Time Slots | Write the Operating Hours first, then its Time Slots in a second call with the literal Id. |
93
+ | Child Volunteer Initiative in the same call as its parent | A self-reference fails with `MALFORMED_ID`; write parents first, then children with the literal parent Id. |
94
+ | Job Position Shift dates and times | Separate StartDate, EndDate, StartTime, EndTime and TimeZone fields; there is no combined date-time field. |
95
+ | Qualifications | Matching uses QualificationLevel on Competency qualifications. A Job Position's own qualifications and its Position's qualifications are checked together, keeping the higher level per Competency. Nothing is copied from the Position to the Job Position. |
96
+ | Shift capacity | Counted, never enforced: nothing blocks a signup when a shift is full. |
97
+ | A required field the description didn't show (a validation rule) | It surfaces as a write error; handle it in step 9. |
98
+
99
+ ## Output expectations
100
+
101
+ - The confirmed Volunteer Management records written to the org in dependency order, or reused.
102
+ - A final report of every record written or reused, with its Id, and the planned-versus-written count.
103
+ - Keep every message compact, in the layout in `references/review-format.md`: one field guide and one records table per object, one row per record (a shift series is one row; past 10 series, one row per shared schedule), and say each point once. Don't restate a table in prose, add sections the layout doesn't have, or show a write payload per record; if the user asks to see the payload, show one representative example per object.
104
+
105
+ ## Cross-skill integration
106
+
107
+ | When | Do |
108
+ |------|----|
109
+ | The user doesn't know what to build | Defer to `nonprofit-volunteer-management-structure-generate`; it produces the plan this skill writes. |
110
+ | The user asks what an object or field means | Defer to `nonprofit-volunteer-management-model-get`. |
111
+ | Chained from structure-generate | Work from the handed-off plan. Handle its `Reuse-check:` line as in step 4, and run the existing-shift check in step 5 regardless. |
112
+
113
+ ## Reference file index
114
+
115
+ | File | When to read |
116
+ |------|-------------|
117
+ | `references/mcp-invocation.md` | Steps 3–6, 8 — the exact read and write calls for headless-360 and the Salesforce CLI, the Volunteer Management check, apostrophe escaping, adding a picklist value. |
118
+ | `references/field-guide.md` | Steps 4, 6–8 — every object's fields, API names, tiers, defaults, must-ask rules and limits. |
119
+ | `references/review-format.md` | Steps 7 and 10 — the insert summary, the per-object review, the origin tags and the final report. |
120
+ | `scripts/render-review-table.py` | Step 7 — renders each records table from JSON (field → value + origin tag). Spec in its docstring. Tests: `scripts/tests/test_render_review_table.py`. |
121
+ | `scripts/expand-series.py` | Step 8 — expands a shift or time-slot series into tree-call records: weekly windows or per-day windows, date ranges, one-off dates, `excludeDates`, `count`, `excludeExisting`. Spec in its docstring. Tests: `scripts/tests/test_expand_series.py`. |