@salesforce/afv-skills 1.41.0 → 1.43.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 (288) hide show
  1. package/package.json +2 -6
  2. package/skills/automation-sandbox-post-copy-config-generate/SKILL.md +3 -0
  3. package/skills/automation-sandbox-post-copy-configure/SKILL.md +4 -0
  4. package/skills/design-systems-slds-validate/SKILL.md +2 -2
  5. package/skills/dx-app-analytics-query/SKILL.md +1 -3
  6. package/skills/dx-devops-conflict-resolve/SKILL.md +205 -0
  7. package/skills/dx-devops-conflict-resolve/examples/conflict-workflows.md +165 -0
  8. package/skills/dx-devops-conflict-resolve/references/deploy-failure-resolution.md +75 -0
  9. package/skills/dx-devops-conflict-resolve/references/git-conflict-resolution.md +124 -0
  10. package/skills/dx-devops-conflict-resolve/scripts/detect-conflicts.sh +91 -0
  11. package/skills/dx-devops-conflict-resolve/scripts/diagnose-deploy-failure.sh +156 -0
  12. package/skills/dx-devops-request-status/SKILL.md +160 -0
  13. package/skills/dx-devops-request-status/examples/polling-workflows.md +101 -0
  14. package/skills/dx-devops-request-status/references/cli-commands.md +176 -0
  15. package/skills/dx-devops-request-status/scripts/poll-status.sh +134 -0
  16. package/skills/dx-devops-test-failures-analyze/SKILL.md +6 -6
  17. package/skills/dx-devops-test-pipeline-configure/SKILL.md +7 -7
  18. package/skills/dx-devops-test-suite-assignments-configure/SKILL.md +6 -6
  19. package/skills/dx-devops-test-suite-run/SKILL.md +6 -6
  20. package/skills/dx-devops-work-item-manage/SKILL.md +2 -0
  21. package/skills/dx-org-manage/references/creating-scratch-org.md +5 -2
  22. package/skills/dx-org-manage/references/creating-snapshot.md +1 -0
  23. package/skills/dx-org-shape-manage/SKILL.md +152 -0
  24. package/skills/dx-org-shape-manage/examples/create_error_output.json +9 -0
  25. package/skills/dx-org-shape-manage/examples/create_success_output.json +9 -0
  26. package/skills/dx-org-shape-manage/examples/delete_output.json +11 -0
  27. package/skills/dx-org-shape-manage/examples/list_inactive_output.json +32 -0
  28. package/skills/dx-org-shape-manage/examples/list_output.json +24 -0
  29. package/skills/dx-org-shape-manage/references/cli_flags.md +135 -0
  30. package/skills/dx-org-switch/SKILL.md +2 -2
  31. package/skills/dx-org-trial-expiration-check/SKILL.md +2 -0
  32. package/skills/dx-pkg-post-install-configure/SKILL.md +3 -0
  33. package/skills/education-cloud-multi-campus-configure/SKILL.md +211 -0
  34. package/skills/education-cloud-multi-campus-configure/examples/hierarchy_visualization.md +174 -0
  35. package/skills/education-cloud-multi-campus-configure/examples/output_examples.md +54 -0
  36. package/skills/education-cloud-multi-campus-configure/examples/sample_hierarchy_input.csv +29 -0
  37. package/skills/education-cloud-multi-campus-configure/examples/sample_hierarchy_input_edgecases.csv +16 -0
  38. package/skills/education-cloud-multi-campus-configure/references/account_recordtype_prerequisite.md +44 -0
  39. package/skills/education-cloud-multi-campus-configure/references/delta_computation.md +33 -0
  40. package/skills/education-cloud-multi-campus-configure/references/error_handling.md +198 -0
  41. package/skills/education-cloud-multi-campus-configure/references/foundation_prerequisites.md +54 -0
  42. package/skills/education-cloud-multi-campus-configure/references/gotchas.md +16 -0
  43. package/skills/education-cloud-multi-campus-configure/references/hierarchy_parsing_rules.md +133 -0
  44. package/skills/education-cloud-multi-campus-configure/references/mcp-invocation.md +75 -0
  45. package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/SKILL.md +1 -1
  46. package/skills/experience-cms-brand-apply/SKILL.md +4 -1
  47. package/skills/experience-cms-brand-create/SKILL.md +197 -0
  48. package/skills/experience-cms-brand-create/assets/brand-template.json +329 -0
  49. package/skills/experience-cms-brand-create/references/brand-anatomy.md +120 -0
  50. package/skills/experience-cms-brand-create/references/disk-contract.md +84 -0
  51. package/skills/experience-cms-content-generate/SKILL.md +190 -0
  52. package/skills/experience-cms-content-generate/assets/display-formats.md +84 -0
  53. package/skills/experience-cms-content-generate/assets/payloads/create-content-bulk.json +11 -0
  54. package/skills/experience-cms-content-generate/assets/payloads/create-content-single.json +11 -0
  55. package/skills/experience-cms-content-generate/assets/payloads/publish-content.json +4 -0
  56. package/skills/experience-cms-content-generate/assets/payloads/update-content.json +9 -0
  57. package/skills/experience-cms-content-generate/assets/questions.md +241 -0
  58. package/skills/experience-cms-content-generate/examples/create-content-call.md +81 -0
  59. package/skills/experience-cms-content-generate/references/bulk-batching.md +56 -0
  60. package/skills/experience-cms-content-generate/references/content-type-classification.md +88 -0
  61. package/skills/experience-cms-content-generate/references/content-write-tool.md +95 -0
  62. package/skills/experience-cms-content-generate/references/delegation-protocol.md +37 -0
  63. package/skills/experience-cms-content-generate/references/edit-publish-workflow.md +63 -0
  64. package/skills/experience-cms-content-generate/references/error-recovery.md +72 -0
  65. package/skills/experience-cms-content-generate/references/identifier-resolution.md +26 -0
  66. package/skills/experience-cms-content-generate/references/intent-routing.md +45 -0
  67. package/skills/experience-cms-content-generate/references/principles.md +19 -0
  68. package/skills/experience-cms-content-generate/references/ux-rules.md +68 -0
  69. package/skills/experience-cms-content-generate/references/workspace-resolution.md +33 -0
  70. package/skills/experience-cms-content-type-generate/SKILL.md +449 -0
  71. package/skills/experience-cms-content-type-generate/assets/discovery-prompts.md +79 -0
  72. package/skills/experience-cms-content-type-generate/assets/schema-example.json +70 -0
  73. package/skills/experience-cms-content-type-generate/references/agent-checklist.md +50 -0
  74. package/skills/experience-cms-content-type-generate/references/anti-patterns.md +39 -0
  75. package/skills/experience-cms-content-type-generate/references/deployment-errors.md +27 -0
  76. package/skills/experience-cms-content-type-generate/references/discovery-details.md +106 -0
  77. package/skills/experience-cms-content-type-generate/references/discovery-query-rules.md +85 -0
  78. package/skills/experience-cms-content-type-generate/references/edit-fields-loop.md +48 -0
  79. package/skills/experience-cms-content-type-generate/references/pre-deploy-checklist.md +21 -0
  80. package/skills/experience-cms-content-type-generate/references/retrieve-and-reconcile.md +105 -0
  81. package/skills/experience-cms-content-type-generate/references/schema-rules.md +51 -0
  82. package/skills/experience-cms-content-type-generate/references/schema-summary-format.md +60 -0
  83. package/skills/experience-lds-graphql-generate/SKILL.md +4 -0
  84. package/skills/experience-lwc-accessibility-jest-run/SKILL.md +79 -0
  85. package/skills/experience-lwc-accessibility-jest-run/references/running-sa11y-jest-tests.md +205 -0
  86. package/skills/experience-lwc-design-generate/SKILL.md +5 -4
  87. package/skills/experience-lwc-generate/SKILL.md +10 -9
  88. package/skills/experience-ui-bundle-deploy/references/dev-preview.md +21 -0
  89. package/skills/experience-ui-bundle-deploy/references/social-login.md +1 -0
  90. package/skills/experience-ui-bundle-file-upload-generate/SKILL.md +6 -6
  91. package/skills/experience-ui-bundle-localize/SKILL.md +30 -37
  92. package/skills/experience-ui-bundle-localize/references/gotchas.md +23 -7
  93. package/skills/experience-ui-bundle-localize/references/i18n-setup.md +48 -4
  94. package/skills/experience-ui-bundle-localize/references/label-xml.md +22 -8
  95. package/skills/experience-ui-bundle-localize/references/verifying.md +39 -11
  96. package/skills/experience-ui-bundle-localize/scripts/detect-bundle-type.sh +118 -15
  97. package/skills/experience-ui-bundle-localize/scripts/tests/test-detect-bundle-type.sh +187 -0
  98. package/skills/experience-ui-bundle-mfa-configure/SKILL.md +13 -2
  99. package/skills/experience-ui-bundle-mfa-configure/references/social-login.md +1 -0
  100. package/skills/experience-ui-bundle-project-generate/SKILL.md +2 -2
  101. package/skills/integration-connectivity-generate/SKILL.md +11 -10
  102. package/skills/integration-eventing-cdc-configure/SKILL.md +6 -6
  103. package/skills/integration-eventing-subscription-configure/SKILL.md +6 -5
  104. package/skills/mobile-platform-native-capabilities-integrate/SKILL.md +2 -2
  105. package/skills/mobile-platform-offline-validate/scripts/package.json +1 -1
  106. package/skills/platform-agentexchange-partner-offers-configure/SKILL.md +8 -8
  107. package/skills/platform-custom-application-generate/SKILL.md +2 -0
  108. package/skills/platform-custom-field-generate/SKILL.md +8 -6
  109. package/skills/platform-custom-metadata-type-generate/SKILL.md +460 -0
  110. package/skills/platform-custom-metadata-type-generate/references/cmdt-records.md +251 -0
  111. package/skills/platform-custom-metadata-type-generate/scripts/sanitize-developer-name.sh +46 -0
  112. package/skills/platform-custom-setting-generate/SKILL.md +419 -0
  113. package/skills/platform-dataspace-access-configure/SKILL.md +3 -3
  114. package/skills/platform-sharing-owd-configure/SKILL.md +3 -0
  115. package/skills/platform-value-set-generate/SKILL.md +2 -0
  116. package/skills/service-agentforce-channel-configure/SKILL.md +29 -20
  117. package/skills/service-agentforce-channel-configure/assets/BotEmailDefinition.botEmailDefinition-meta.xml +36 -0
  118. package/skills/service-agentforce-channel-configure/assets/email/unfiled$public/AgentforceForServiceEmailTemplate.email +17 -0
  119. package/skills/service-agentforce-channel-configure/assets/email/unfiled$public/AgentforceForServiceEmailTemplate.email-meta.xml +29 -0
  120. package/skills/service-agentforce-channel-configure/assets/mdapi-package.xml +25 -0
  121. package/skills/service-agentforce-channel-configure/assets/settings-mdapi-package.xml +30 -0
  122. package/skills/service-agentforce-channel-configure/references/agent-wiring.md +20 -0
  123. package/skills/service-agentforce-channel-configure/references/botemaildefinition.md +107 -0
  124. package/skills/service-agentforce-channel-configure/references/channel-branch-email.md +203 -50
  125. package/skills/service-agentforce-channel-configure/references/channel-types.md +30 -3
  126. package/skills/service-agentforce-channel-configure/references/queue-resolution.md +17 -8
  127. package/skills/service-agentforce-channel-configure/references/routing-flow.md +14 -3
  128. package/skills/service-agentforce-channel-configure/scripts/validate-botemaildefinition.py +126 -0
  129. package/skills/service-agentforce-channel-configure/scripts/validate-emailtemplate.py +133 -0
  130. package/skills/service-de-channel-activate/SKILL.md +271 -0
  131. package/skills/service-de-channel-activate/references/gotchas.md +31 -0
  132. package/skills/service-de-channel-activate/references/phone-verification.md +96 -0
  133. package/skills/service-de-channel-activate/references/worked-examples.md +14 -0
  134. package/skills/service-de-channel-consent-configure/SKILL.md +230 -0
  135. package/skills/service-de-channel-consent-configure/references/gotchas.md +41 -0
  136. package/skills/service-de-channel-consent-configure/references/language-keywords.md +84 -0
  137. package/skills/service-de-channel-consent-configure/references/worked-examples.md +134 -0
  138. package/skills/service-de-channel-create/SKILL.md +369 -0
  139. package/skills/service-de-channel-create/references/apple.md +59 -0
  140. package/skills/service-de-channel-create/references/connect-insert.md +84 -0
  141. package/skills/service-de-channel-create/references/facebook.md +154 -0
  142. package/skills/service-de-channel-create/references/line.md +66 -0
  143. package/skills/service-de-channel-create/references/sms.md +98 -0
  144. package/skills/service-de-channel-create/references/whatsapp.md +98 -0
  145. package/skills/service-de-channel-create/references/worked-examples.md +70 -0
  146. package/skills/service-de-channel-routing-configure/SKILL.md +345 -0
  147. package/skills/service-de-channel-routing-configure/references/asa-routing.md +90 -0
  148. package/skills/service-de-channel-routing-configure/references/gotchas.md +27 -0
  149. package/skills/service-de-channel-routing-configure/references/queue-creation.md +123 -0
  150. package/skills/service-de-channel-routing-configure/references/target-locate.md +98 -0
  151. package/skills/service-de-channel-routing-configure/references/worked-examples.md +174 -0
  152. package/skills/service-de-headless-channel-configure/SKILL.md +305 -0
  153. package/skills/service-de-headless-channel-configure/references/gotchas.md +27 -0
  154. package/skills/service-de-headless-channel-configure/references/inputs.md +49 -0
  155. package/skills/service-de-headless-channel-configure/references/output-envelopes.md +53 -0
  156. package/skills/service-de-headless-channel-configure/references/partial-success.md +24 -0
  157. package/skills/service-de-headless-channel-configure/references/terms-and-conditions.md +54 -0
  158. package/skills/service-de-headless-channel-configure/references/worked-examples.md +108 -0
  159. package/skills/service-de-waba-integrate/SKILL.md +227 -0
  160. package/skills/service-digital-engagement-channel-configure/scripts/check-api-version.sh +29 -0
  161. package/skills/service-digital-engagement-messaging-site-integrate/SKILL.md +10 -9
  162. package/skills/service-digital-engagement-messaging-site-integrate/references/lwr_patch.md +39 -21
  163. package/skills/service-digital-engagement-messaging-site-integrate/scripts/patch_lwr_bundle.sh +157 -96
  164. package/skills/service-email-to-case-configure/SKILL.md +190 -0
  165. package/skills/service-email-to-case-configure/assets/CaseSettings.settings-meta.xml +45 -0
  166. package/skills/service-email-to-case-configure/examples/CaseSettings-two-addresses.settings-meta.xml +36 -0
  167. package/skills/service-email-to-case-configure/references/apply-mechanics.md +73 -0
  168. package/skills/service-email-to-case-configure/references/routing_address_reference.md +73 -0
  169. package/skills/service-email-to-case-configure/references/troubleshooting.md +25 -0
  170. package/skills/service-email-to-case-configure/scripts/apply-casesettings.py +1315 -0
  171. package/skills/service-email-to-case-configure/scripts/check-agent-email-capability.sh +26 -0
  172. package/skills/service-email-to-case-configure/scripts/tests/__init__.py +0 -0
  173. package/skills/service-email-to-case-configure/scripts/tests/_bootstrap.py +45 -0
  174. package/skills/service-email-to-case-configure/scripts/tests/_fakeorg.py +366 -0
  175. package/skills/service-email-to-case-configure/scripts/tests/_run.py +84 -0
  176. package/skills/service-email-to-case-configure/scripts/tests/test_apply_org_scenarios.py +655 -0
  177. package/skills/service-email-to-case-configure/scripts/tests/test_get_session.py +134 -0
  178. package/skills/service-email-to-case-configure/scripts/tests/test_new_capabilities.py +193 -0
  179. package/skills/service-email-to-case-configure/scripts/tests/test_validate_casesettings.py +170 -0
  180. package/skills/service-email-to-case-configure/scripts/validate-casesettings.py +229 -0
  181. package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +33 -15
  182. package/skills/service-itsm-agentic-setup-agentforce-coordinate/examples/output-templates.md +63 -47
  183. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/SKILL.md +17 -12
  184. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/references/cli-invocation.md +5 -3
  185. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/scripts/classify-enable-plan.mjs +11 -3
  186. package/skills/service-itsm-agentic-setup-agentforce-studio-validate/SKILL.md +8 -6
  187. package/skills/service-itsm-agentic-setup-agentforce-studio-validate/references/cli-invocation.md +3 -3
  188. package/skills/service-itsm-agentic-setup-agentforce-studio-validate/scripts/classify-readiness.mjs +11 -3
  189. package/skills/service-itsm-agentic-setup-configure/SKILL.md +5 -5
  190. package/skills/service-itsm-agentic-setup-configure/examples/output-templates.md +5 -5
  191. package/skills/service-itsm-agentic-setup-employee-agent-configure/SKILL.md +2 -2
  192. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/report-format.md +11 -7
  193. package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/render-report.mjs +20 -7
  194. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/SKILL.md +10 -6
  195. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/action-availability.md +7 -7
  196. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/report-format.md +11 -7
  197. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/build-create-body.mjs +24 -17
  198. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-action-availability.mjs +98 -58
  199. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/render-report.mjs +20 -7
  200. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/strip-release-management.mjs +176 -0
  201. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/SKILL.md +19 -19
  202. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/cli-invocation.md +3 -4
  203. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/helper-contracts.md +6 -6
  204. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/permset-topology.md +3 -10
  205. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/classify-permset-availability.mjs +7 -9
  206. package/skills/service-itsm-incident-mgmt-configure/SKILL.md +2 -0
  207. package/skills/service-itsm-incident-priority-configure/SKILL.md +15 -12
  208. package/skills/service-itsm-incident-priority-configure/examples/matrix-operations.md +27 -1
  209. package/skills/service-itsm-incident-priority-configure/references/sf-cli-invocation.md +37 -6
  210. package/skills/service-native-voice-recording-transcription-configure/SKILL.md +146 -0
  211. package/skills/service-native-voice-recording-transcription-configure/assets/confirmation-output.json +16 -0
  212. package/skills/service-native-voice-recording-transcription-configure/assets/package.xml +22 -0
  213. package/skills/service-native-voice-recording-transcription-configure/references/thunderbird-voice-settings.md +101 -0
  214. package/skills/service-native-voice-recording-transcription-configure/scripts/enable-recording-transcription.sh +181 -0
  215. package/skills/data360-activate/README.md +0 -38
  216. package/skills/data360-activate/SKILL.md +0 -127
  217. package/skills/data360-connect/README.md +0 -57
  218. package/skills/data360-connect/SKILL.md +0 -163
  219. package/skills/data360-connect/examples/connections/heroku-postgres.json +0 -15
  220. package/skills/data360-connect/examples/connections/ingest-api-connection.json +0 -5
  221. package/skills/data360-connect/examples/connections/ingest-api-schema.json +0 -31
  222. package/skills/data360-connect/examples/connections/redshift.json +0 -16
  223. package/skills/data360-connect/examples/connections/sharepoint-unstructured.json +0 -20
  224. package/skills/data360-connect/examples/connections/snowflake-connection.json +0 -42
  225. package/skills/data360-harmonize/README.md +0 -31
  226. package/skills/data360-harmonize/SKILL.md +0 -126
  227. package/skills/data360-orchestrate/README.md +0 -120
  228. package/skills/data360-orchestrate/SKILL.md +0 -263
  229. package/skills/data360-orchestrate/assets/definitions/activation-target.template.json +0 -5
  230. package/skills/data360-orchestrate/assets/definitions/activation.template.json +0 -7
  231. package/skills/data360-orchestrate/assets/definitions/calculated-insight.template.json +0 -7
  232. package/skills/data360-orchestrate/assets/definitions/data-action-target.template.json +0 -5
  233. package/skills/data360-orchestrate/assets/definitions/data-action.template.json +0 -5
  234. package/skills/data360-orchestrate/assets/definitions/data-graph.template.json +0 -21
  235. package/skills/data360-orchestrate/assets/definitions/data-stream.template.json +0 -55
  236. package/skills/data360-orchestrate/assets/definitions/dmo.template.json +0 -17
  237. package/skills/data360-orchestrate/assets/definitions/identity-resolution.template.json +0 -30
  238. package/skills/data360-orchestrate/assets/definitions/mapping.template.json +0 -14
  239. package/skills/data360-orchestrate/assets/definitions/relationship.template.json +0 -12
  240. package/skills/data360-orchestrate/assets/definitions/search-index.template.json +0 -9
  241. package/skills/data360-orchestrate/assets/definitions/segment.template.json +0 -16
  242. package/skills/data360-orchestrate/references/feature-readiness.md +0 -157
  243. package/skills/data360-orchestrate/references/plugin-setup.md +0 -138
  244. package/skills/data360-orchestrate/scripts/bootstrap-plugin.sh +0 -53
  245. package/skills/data360-orchestrate/scripts/diagnose-org.mjs +0 -511
  246. package/skills/data360-orchestrate/scripts/generate-manifest.mjs +0 -68
  247. package/skills/data360-orchestrate/scripts/verify-plugin.sh +0 -58
  248. package/skills/data360-prepare/README.md +0 -50
  249. package/skills/data360-prepare/SKILL.md +0 -203
  250. package/skills/data360-prepare/examples/ingestion-api/.env.example +0 -8
  251. package/skills/data360-prepare/examples/ingestion-api/README.md +0 -48
  252. package/skills/data360-prepare/examples/ingestion-api/send-data.py +0 -144
  253. package/skills/data360-query/README.md +0 -43
  254. package/skills/data360-query/SKILL.md +0 -128
  255. package/skills/data360-query/examples/search-indexes/hybrid-structured.json +0 -44
  256. package/skills/data360-query/examples/search-indexes/vector-knowledge.json +0 -43
  257. package/skills/data360-segment/README.md +0 -35
  258. package/skills/data360-segment/SKILL.md +0 -123
  259. package/skills/service-helpagent-coordinate/references/channel-help-portal.md +0 -22
  260. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-1-1-non-text-content.md +0 -0
  261. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-i-lists.md +0 -0
  262. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-ii-tables.md +0 -0
  263. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-iii-form-labels.md +0 -0
  264. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-iv-regions.md +0 -0
  265. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-v-groups.md +0 -0
  266. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-5-identify-input.md +0 -0
  267. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-4-3-contrast.md +0 -0
  268. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-1-1-keyboard.md +0 -0
  269. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-4-4-link-purpose.md +0 -0
  270. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-4-6-headings-labels.md +0 -0
  271. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-1-pointer-gestures.md +0 -0
  272. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-2-pointer-cancellation.md +0 -0
  273. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-3-label-in-name.md +0 -0
  274. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-7-dragging-movement.md +0 -0
  275. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-2-1-on-focus.md +0 -0
  276. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-2-2-on-input.md +0 -0
  277. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-1-error-identification.md +0 -0
  278. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-2-labels-instructions.md +0 -0
  279. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-3-error-suggestion.md +0 -0
  280. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-i-name.md +0 -0
  281. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-ii-role.md +0 -0
  282. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-iii-value.md +0 -0
  283. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-1-1-non-text-content.md +0 -0
  284. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-1-use-of-color.md +0 -0
  285. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-10-resize-reflow.md +0 -0
  286. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-11-non-text-contrast.md +0 -0
  287. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-3-contrast.md +0 -0
  288. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/scripts/contrast-ratio.py +0 -0
@@ -0,0 +1,54 @@
1
+ # Example Output Structures
2
+
3
+ ## Step 6 — pre-write preview templates
4
+
5
+ New setup:
6
+ ```text
7
+ About to create:
8
+ • [N] Account records across [M] levels
9
+ - System: 1
10
+ - [Level 1 name]: [count]
11
+ ...
12
+ • [N] BusinessProfile records (1 per new Account)
13
+ • RecordType: [recordTypeDeveloperName]
14
+ ```
15
+
16
+ Update/reconcile — show the delta explicitly:
17
+ ```text
18
+ Reconcile plan (update mode):
19
+ • Create: [C] new Accounts ([list level: count])
20
+ • Rename: [R] Accounts ([old → new])
21
+ • Move: [V] Accounts ([node → new parent])
22
+ • Unchanged (reused): [U] Accounts
23
+ • Extra in org, NOT touched: [E] ([list])
24
+ • BusinessProfiles to create: [only for new Accounts missing one]
25
+ ```
26
+
27
+ ## Step 10 — completion report
28
+
29
+ Example output structure (new setup):
30
+ ```text
31
+ Institutional hierarchy created successfully.
32
+
33
+ Created:
34
+ - 1 System Account (Riverside Community College System)
35
+ - 3 Campus Accounts (Main, North, South)
36
+ - 7 College Accounts (across all campuses)
37
+ - 12 Department Accounts (across all colleges)
38
+ - 23 Business Profiles (linked to all accounts)
39
+
40
+ Total: 23 Account records with proper parent-child relationships
41
+ System (root) Account Id: 001XXXXXXXXXXXXXXX (use this to update later)
42
+ ```
43
+
44
+ Example output structure (update/reconcile):
45
+ ```text
46
+ Hierarchy reconciled.
47
+
48
+ - Created: 2 Accounts (Department: Data Science, Department: Robotics)
49
+ - Renamed: 1 Account (English Dept renamed to Department of English)
50
+ - Moved: 1 Account (School of Business moved to North Campus)
51
+ - Unchanged: 19 Accounts (reused, no write)
52
+ - Extra in org (left untouched): 1 (Legacy Extension Center)
53
+ - Business Profiles created: 2 (for the new Departments)
54
+ ```
@@ -0,0 +1,29 @@
1
+ Name,LevelType,Level,ParentName
2
+ Pacifica State University System,System,1,
3
+ Pacifica State University System - Northern Region,Region,2,Pacifica State University System
4
+ Pacifica State University System - Southern Region,Region,2,Pacifica State University System
5
+ Redwood Campus,Campus,3,Pacifica State University System - Northern Region
6
+ Bayview Campus,Campus,3,Pacifica State University System - Northern Region
7
+ Harbor Campus,Campus,3,Pacifica State University System - Southern Region
8
+ College of Engineering,College,4,Redwood Campus
9
+ College of Arts & Sciences,College,4,Redwood Campus
10
+ College of Business,College,4,Bayview Campus
11
+ College of Health Sciences,College,4,Harbor Campus
12
+ Department of Computer Science,Department,5,College of Engineering
13
+ Department of Mechanical Engineering,Department,5,College of Engineering
14
+ Department of Biology,Department,5,College of Arts & Sciences
15
+ Department of English,Department,5,College of Arts & Sciences
16
+ Department of Finance,Department,5,College of Business
17
+ Department of Marketing,Department,5,College of Business
18
+ Department of Nursing,Department,5,College of Health Sciences
19
+ Department of Public Health,Department,5,College of Health Sciences
20
+ BS in Computer Science,Program,6,Department of Computer Science
21
+ MS in Artificial Intelligence,Program,6,Department of Computer Science
22
+ BS in Mechanical Engineering,Program,6,Department of Mechanical Engineering
23
+ BS in Biology,Program,6,Department of Biology
24
+ BA in English Literature,Program,6,Department of English
25
+ BS in Finance,Program,6,Department of Finance
26
+ MBA in Finance,Program,6,Department of Finance
27
+ BS in Marketing,Program,6,Department of Marketing
28
+ BS in Nursing,Program,6,Department of Nursing
29
+ MS in Public Health,Program,6,Department of Public Health
@@ -0,0 +1,16 @@
1
+ Name,LevelType,Level,ParentName
2
+ Pacifica State University System,System,1,
3
+ Pacifica State University System - Northern Region,Region,2,Pacifica State University System
4
+ Pacifica State University System - Southern Region,Region,2,Pacifica State University System
5
+ Redwood Campus,Campus,3,Pacifica State University System - Northern Region
6
+ Bayview Campus,Campus,3,Pacifica State University System - Northern Region
7
+ Harbor Campus,Campus,3,Pacifica State University System - Southern Region
8
+ School of Arts & Sciences,College,4,Redwood Campus
9
+ School of Arts & Sciences,College,4,Bayview Campus
10
+ College of Engineering,College,4,Redwood Campus
11
+ College of Nursing,College,4,Harbor Campus
12
+ Department of Biology,Department,5,School of Arts & Sciences
13
+ CS Dept,Department,5,College of Engineering
14
+ Department of Orphaned Studies,Department,5,College of Nonexistent
15
+ BS in Biology,Program,6,Department of Biology
16
+ BS in Computer Science,Program,6,CS Dept
@@ -0,0 +1,44 @@
1
+ # Missing Account RecordType — Prerequisite Handling (Step 3.5)
2
+
3
+ This skill can be run standalone, without any prior org-setup skill having run first. A common gap on a
4
+ fresh org: `Account/describe` returns only the `Master` RecordType — no institutional/business
5
+ RecordType exists yet to select in Step 3.5. Treat this as a missing prerequisite to resolve, not a
6
+ dead end.
7
+
8
+ ## Procedure
9
+
10
+ 1. **Tell the user** the org has no non-Master Account RecordType, and this skill needs one to
11
+ distinguish institution Accounts (System/Campus/College/Department) from other Account records.
12
+ 2. **Ask for a Label** if the user hasn't already stated one (e.g. "Institution", "Educational
13
+ Institution", "Business Account") — offer "Institution" as the default suggestion. Derive the
14
+ `DeveloperName` from the label (strip spaces/special chars, e.g. `Institution`).
15
+ 3. **Confirm before creating** — same create/update/delete confirmation convention as every other
16
+ write in this skill: "Create Account RecordType '[Label]' (API name `Account.[DeveloperName]`)?
17
+ (Yes/No)". If "No": stop the workflow — the hierarchy cannot be created without a RecordType.
18
+ 4. **Create via Tooling API** (write-enabled `dispatch`, not `dispatch_readonly`):
19
+ ```json
20
+ {
21
+ "url": "/services/data/v68.0/tooling/sobjects/RecordType",
22
+ "method": "POST",
23
+ "body": {
24
+ "FullName": "Account.[DeveloperName]",
25
+ "Metadata": {
26
+ "label": "[Label]",
27
+ "active": true,
28
+ "description": "Institutional hierarchy Account (System/Campus/College/Department)"
29
+ }
30
+ }
31
+ }
32
+ ```
33
+ 5. **Cold-verify** — re-run the Step 3.5 describe call. Confirm the new entry appears in
34
+ `recordTypeInfos`.
35
+ - **If `available: true` for the running user** — capture `recordTypeId`, proceed with Step 3.5's
36
+ normal selection logic.
37
+ - **If `available: false`** — RecordType creation does not automatically grant profile/permission-set
38
+ visibility (there is no supported API for Record Type Visibility assignment). Tell the user to
39
+ assign it manually: Setup → Profiles (or Permission Sets) → Record Type Visibilities → assign the
40
+ new RecordType to their own profile/permission set → Save. Wait for their confirmation, then
41
+ repeat the describe call to cold-verify `available: true` before proceeding.
42
+ 6. **If Tooling API creation fails** (e.g. no Tooling API access): fall back to manual creation —
43
+ instruct the user via Setup → Object Manager → Account → Record Types → New, then repeat the
44
+ describe call to cold-verify.
@@ -0,0 +1,33 @@
1
+ # Delta Computation Reference — Update Mode (Step 5)
2
+
3
+ Full matching and cycle-rejection algorithm for reconciling the desired hierarchy against the org's current one.
4
+
5
+ ## Traverse the current tree from the root
6
+
7
+ Starting at the supplied System Account Id, read children level-by-level via the SObject child-relationship resource:
8
+
9
+ - `GET /services/data/v68.0/sobjects/Account/[Account Id]/ChildAccounts` via `dispatch_readonly` (see `references/mcp-invocation.md`)
10
+ - This returns the direct child Accounts (`body.records[]`, each with `Id`, `Name`, `ParentId`). Recurse into each child's Id to build the full `existingTree`.
11
+ - If `ChildAccounts` is unavailable in the org, fall back to a SOQL `/query` with the query text passed as `queryParams.q` (never appended inline to the URL as `?q=` — that has 404'd on some orgs). If both fail, ask the user to paste the current structure (Name + Account Id per node) instead.
12
+
13
+ ## Match desired vs. current
14
+
15
+ By Name within the same sibling group (names are unique per sibling group — see Rules). For each desired node, walking from the root down:
16
+
17
+ - **Match found** (same Name under the matched parent) → reuse its Account Id; recurse into its children. No write.
18
+ - **No match** (desired node absent under that parent) → mark **CREATE**; every desired descendant beneath it is also CREATE (parent Id resolves once the parent is created).
19
+
20
+ ## Extra nodes
21
+
22
+ Present in the org but absent from the desired structure → mark **EXTRA**. Do NOT delete. List them for the user in the preview.
23
+
24
+ ## Explicit renames / moves
25
+
26
+ Only when the user asks for them by name — a bare desired tree cannot distinguish a rename from a delete-plus-add:
27
+
28
+ - **Rename**: resolve the target node's Account Id from `existingTree` by its current name/path → mark **RENAME** (new Name).
29
+ - **Move**: resolve both the node's Id and the new parent's Id → mark **MOVE** (new ParentId). Reject a move that would place a node under its own descendant (cycle) — stop with an error before writing.
30
+
31
+ ## Result
32
+
33
+ A delta list of CREATE / RENAME / MOVE actions plus an EXTRA report. If the delta is empty and no renames/moves were requested, tell the user the org already matches the desired structure and skip to Step 9 (verify).
@@ -0,0 +1,198 @@
1
+ # Error Handling — API and Data Issues
2
+
3
+ Recovery strategies for common errors during hierarchy creation.
4
+
5
+ ## API Rate Limit Errors
6
+
7
+ **Error**: `API rate limit exceeded` or HTTP 429
8
+
9
+ **When it occurs**: During bulk BusinessProfile creation (Step 8) or when creating/patching many Accounts in rapid succession (Step 7)
10
+
11
+ **Resolution**:
12
+
13
+ 1. **Track what succeeded**: Parse API response to identify which records were created successfully
14
+ 2. **Retry failed records only**: Wait 2 seconds, then retry only the records that failed
15
+ 3. **Exponential backoff**: If retry fails, wait 4 seconds, then 8 seconds (max 3 retries)
16
+ 4. **Report status**: Print which records succeeded vs. failed after each attempt
17
+
18
+ **Example**:
19
+ ```text
20
+ ⚠️ API rate limit hit during BusinessProfile creation
21
+
22
+ Status: 21 of 23 BusinessProfiles created
23
+ Failed: 2 department-level profiles
24
+ - Nursing Department (under School of Health Sciences, Main Campus)
25
+ - Allied Health Department (under School of Health Sciences, Main Campus)
26
+
27
+ Retrying in 2 seconds...
28
+ ```text
29
+
30
+ After retry:
31
+ ```text
32
+ Retry successful — all 23 BusinessProfiles created
33
+ ```text
34
+
35
+ **Implementation**: Retry with exponential backoff (sleep 2s, 4s, 8s between attempts). For each retry:
36
+ - `mcp__headless-360__dispatch({"url": "/services/data/v68.0/sobjects/BusinessProfile", "method": "POST", "body": {"AccountId": "[Account ID]"}})`
37
+
38
+ ---
39
+
40
+ ## Duplicate Record Errors
41
+
42
+ **Error**: `DUPLICATE_VALUE: duplicate value found`
43
+
44
+ **When it occurs**: Creating Account with name that already exists at the same hierarchy level
45
+
46
+ **Resolution**:
47
+
48
+ 1. **Check if existing record is part of this hierarchy**: Look it up in `existingTree` (loaded in Step 5 via the `ChildAccounts` GET, or a SOQL `/query` — both are routable) — match on name under the intended parent.
49
+ 2. **If yes (reused / leftover from previous run)**: Reuse the existing Account ID instead of creating new — this is the normal update-mode path
50
+ 3. **If no (different hierarchy)**: Append disambiguating suffix to name (e.g., campus name in parentheses)
51
+
52
+ **Example**:
53
+ ```text
54
+ ⚠️ Account "School of Arts & Sciences" already exists
55
+
56
+ Found existing record under: North Campus
57
+ Creating under: Main Campus
58
+
59
+ Resolution: Renaming to "School of Arts & Sciences (Main Campus)"
60
+ ```text
61
+
62
+ ---
63
+
64
+ ## Parent Record Not Found
65
+
66
+ **Error**: `INVALID_FIELD: ParentId — invalid cross-reference key`
67
+
68
+ **When it occurs**: Attempting to create child record before parent exists
69
+
70
+ **Root cause**: Workflow steps executed out of order, or API creation for parent failed silently
71
+
72
+ **Resolution**:
73
+
74
+ 1. **Verify parent was created**: Check that the parent Account ID exists in `accountMap` (created this run) or in `existingTree` (reused in update mode)
75
+ 2. **If missing**: Re-run creation for that parent level, then retry child creation
76
+ 3. **If parent ID present but reference fails**: Query Salesforce to confirm parent record exists: `mcp__headless-360__dispatch_readonly({"url": "/services/data/v68.0/sobjects/Account/$PARENT_ID", "method": "GET"})`
77
+
78
+ **Prevention**: Follow workflow step order strictly — create parents before children.
79
+
80
+ ---
81
+
82
+ ## BusinessProfile Field Not Found
83
+
84
+ **Error**: `INVALID_FIELD: No such column 'AccountId' on sobject of type BusinessProfile`
85
+
86
+ **When it occurs**: User's org does not have Education Cloud provisioned, or BusinessProfile object not available
87
+
88
+ **Resolution**:
89
+
90
+ 1. **Stop workflow**: Cannot proceed without Education Cloud
91
+ 2. **Report to user**:
92
+ ```text
93
+ ⚠️ BusinessProfile creation failed — Education Cloud may not be provisioned
94
+
95
+ Error: AccountId field not found on BusinessProfile object
96
+
97
+ This usually means:
98
+ • Education Cloud managed package not installed
99
+ • User lacks Education Cloud license
100
+ • Org does not have Education Cloud feature enabled
101
+
102
+ Check prerequisites: IndustriesEducation.userHasEducationCloudAccess
103
+
104
+ Would you like to proceed with Account creation only (no BusinessProfiles)?
105
+ ```
106
+
107
+ 3. **Fallback**: Offer to create Account hierarchy without BusinessProfiles
108
+
109
+ ---
110
+
111
+ ## Missing Fields in API Response
112
+
113
+ **Error**: sObject API POST returns success but does not include `id` field in response
114
+
115
+ **When it occurs**: Rare API issue or malformed response
116
+
117
+ **Resolution**:
118
+
119
+ 1. **Prefer capturing `body.id` from the create response** — it is present on normal `201` responses. A SOQL `/query` lookup by Name under the intended parent also works as a fallback if the create response was lost.
120
+ 2. **If `body.id` truly missing on a `201`**: do NOT blindly re-POST (risks a duplicate Account). Report to user with the node Name + intended parent Id and ask how to proceed (re-create vs. locate manually in the org).
121
+ 3. **Log issue**: Print warning that the API response was incomplete, including the node Name and parent Id.
122
+
123
+ ---
124
+
125
+ ## Timeout Errors
126
+
127
+ **Error**: `ERROR: Request timeout` or `ETIMEDOUT`
128
+
129
+ **When it occurs**: Creating many records in quick succession, or org has slow custom triggers
130
+
131
+ **Resolution**:
132
+
133
+ 1. **Batch size**: Create records in smaller batches (max 10 per batch) with 1-second pause between batches
134
+ 2. **Retry failed records**: Use same retry logic as rate limit errors (exponential backoff)
135
+ 3. **Identify slow triggers**: If timeout persists, check if Account or BusinessProfile has custom Apex triggers — these can slow creation
136
+
137
+ **Batching**: Split into batches of max 10 records, 1-second pause between batches. For each record in a batch:
138
+ - `mcp__headless-360__dispatch({"url": "/services/data/v68.0/sobjects/Account", "method": "POST", "body": {"Name": "[Node name]", "RecordTypeId": "[recordTypeId resolved in Step 3.5]", "ParentId": "[Parent node's Account ID]"}})`
139
+ (Use `RecordTypeId` with the runtime-resolved value — never a hardcoded Id. Omit `ParentId` for the System node.)
140
+
141
+ ---
142
+
143
+ ## Incomplete Parsing (Zero Records at Level)
144
+
145
+ **Issue**: Parser extracts zero colleges or zero departments for a campus
146
+
147
+ **When it occurs**: PDF/HTML parsing misses section, or input format is non-standard
148
+
149
+ **Resolution**:
150
+
151
+ 1. **Confirm with user before creating**: Show parsed structure and ask if zero records at that level is correct
152
+ 2. **Offer to continue anyway**: User may add colleges/departments manually later
153
+ 3. **Suggest simplified input**: If parsing quality is poor, ask user to provide plain text description instead
154
+
155
+ **Example confirmation**:
156
+ ```text
157
+ I extracted this structure:
158
+
159
+ System: Riverside Community College System
160
+ ├─ Campus: Main Campus
161
+ │ └─ (No colleges found)
162
+ └─ Campus: North Campus
163
+ ├─ College: Technical Education
164
+ └─ College: School of Arts & Sciences
165
+
166
+ Main Campus has no colleges — is this correct, or should I look for college info elsewhere?
167
+
168
+ [1] Correct — proceed
169
+ [2] Missing data — I'll provide college list
170
+ ```text
171
+
172
+ ---
173
+
174
+ ## General Error Handling Pattern
175
+
176
+ For any unexpected API error:
177
+
178
+ 1. **Capture full error message**: Log complete error text from API response
179
+ 2. **Identify which record failed**: Include record Name and hierarchy level in error report
180
+ 3. **Report status to user**: Show what succeeded so far vs. what failed
181
+ 4. **Offer retry or manual fix**: Ask user if they want to retry, skip failed record, or provide corrected info
182
+ 5. **Do not fail silently**: Every error must be reported to user with context
183
+
184
+ **Example error report**:
185
+ ```text
186
+ ⚠️ Error creating Department Account
187
+
188
+ Record: Computer Science Department
189
+ Parent: Technical Education (College)
190
+ Error: FIELD_CUSTOM_VALIDATION_EXCEPTION: Name must be unique within College
191
+
192
+ Status: 11 of 12 Department Accounts created successfully
193
+
194
+ Resolution options:
195
+ [1] Rename to "Computer Science Department (Tech Ed)" and retry
196
+ [2] Skip this department
197
+ [3] I'll provide a different name
198
+ ```text
@@ -0,0 +1,54 @@
1
+ # Step 0 — Foundation Prerequisites
2
+
3
+ This skill can run standalone, without any other Education Cloud setup skill running first. Verify
4
+ these before Step 1 — they are shared across the EDU skill family (also required by
5
+ `education-cloud-domain-configure`, `education-cloud-academic-calendar-generate`,
6
+ `education-cloud-course-catalog-migrate`). A gap here is a missing prerequisite to resolve, not a
7
+ dead end — self-heal what's API-writable, ask/confirm before any write, otherwise instruct manual
8
+ Setup and wait for confirmation.
9
+
10
+ ## Checks (in order — each can stop the workflow if unresolved)
11
+
12
+ 1. **Org edition** — `GET /services/data/v68.0/query`, `queryParams: {"q": "SELECT OrganizationType FROM Organization"}`
13
+ (singleton, no Id). Must be Enterprise, Performance, Unlimited, or Developer Edition. Cannot be
14
+ fixed via API or Setup — if wrong edition, tell the user Education Cloud requires Enterprise+ and
15
+ stop.
16
+
17
+ 2. **Lightning Experience enabled** — no supported read API; if BusinessProfile/Account describe
18
+ calls below succeed the org is on Lightning (Classic-only orgs can't run this skill). If any call
19
+ in this section fails with an org-mode-related error, instruct: Setup → User Interface → Enable
20
+ Lightning Experience. Wait for confirmation, retry.
21
+
22
+ 3. **Education Cloud license provisioned** — permission set names for this vary by org/release
23
+ (confirmed live: one org shipped `EducationCloudAccess`, `AgentforceForEducationCloudAccess`, and
24
+ `EinsteinForEducationCloudAccess` — never `EducationCloudUser`). Do not match on a single exact
25
+ name. `GET /services/data/v68.0/query`, `queryParams: {"q": "SELECT Id, Name FROM PermissionSet
26
+ WHERE Name LIKE '%EducationCloud%'"}`. Rows found → provisioned, proceed. Zero rows → cross-check
27
+ before concluding anything: `GET /services/data/v68.0/sobjects/BusinessProfile/describe` — if it
28
+ 404s or returns `createable:false`, license is genuinely not provisioned; tell the user and stop
29
+ (cannot be fixed via API, they need to provision the license). If it 200s with `createable:true`
30
+ despite the zero-row permission-set query, treat the license as provisioned and note the mismatch
31
+ rather than trusting the permission-set name search alone.
32
+
33
+ 4. **Running user has Education Cloud access** — `GET /services/data/v68.0/query`,
34
+ `queryParams: {"q": "SELECT Id, PermissionSet.Name FROM PermissionSetAssignment WHERE
35
+ AssigneeId='<running user Id>' AND PermissionSet.Name LIKE '%EducationCloud%'"}` (resolve the
36
+ running user's Id first — ask for their username if unknown). No rows → no API route to
37
+ self-assign. Instruct: Setup → Permission Sets → find the org's actual Education Cloud permission
38
+ set (from Check 3's query results) → Manage Assignments → add the running user. Wait for
39
+ confirmation, then re-run this check before proceeding.
40
+
41
+ 5. **Education Cloud Foundation enabled** — `GET /headless/invoke/platform/education-cloud-settings`
42
+ via `dispatch_readonly`, inspect `educationCloudEnabled`.
43
+ - `true` → proceed to Step 1.
44
+ - `false` → ⚠️ **IRREVERSIBLE — one-way by design.** Warn the user explicitly; do NOT promise a
45
+ revert. Ask for confirmation: "Education Cloud Foundation isn't enabled on this org. Enable it
46
+ now? This cannot be turned off afterward." On "No": stop — the hierarchy cannot be created
47
+ without it. On "Yes": `PATCH /headless/invoke/platform/education-cloud-settings/enable-education-cloud`
48
+ (empty body, write-enabled `dispatch`). Cold-verify by repeating the GET — confirm
49
+ `educationCloudEnabled: true` on a fresh read.
50
+ - **If the invoke endpoint errors, or cold-verify still shows `false`**: fall back to manual UI —
51
+ Setup → Quick Find → "Set Up Education Cloud" → Select Set Up Education Cloud → Toggle "Enable
52
+ Education Cloud" → Save. Wait for user confirmation, then cold-verify again before proceeding.
53
+
54
+ Do not proceed to Step 1 until all five checks pass.
@@ -0,0 +1,16 @@
1
+ # Gotchas
2
+
3
+ | Issue | Resolution |
4
+ |-------|------------|
5
+ | Rename vs. delete-plus-add is indistinguishable from a bare desired tree | Only treat a change as RENAME/MOVE when the user names it explicitly; otherwise an absent node is CREATE and an extra node is EXTRA (report, don't delete) |
6
+ | Update run recreates everything (duplicates) | Ensure Step 4 detected update mode and Step 5 loaded `existingTree`; a missing root Id defaults to new setup — confirm mode with the user |
7
+ | `ChildAccounts` relationship returns partial/paged results | Follow `nextRecordsUrl`/paging if present; if the relationship is unavailable, fall back to a SOQL `/query` with `WHERE ParentId = ...` (confirmed routable), or ask the user to paste current node Ids |
8
+ | API rate limit during Business Profile creation | Retry failed records after 2-second delay; print which records succeeded vs. failed |
9
+ | Ambiguous college-to-campus mapping in parsed text | Ask user: "Which campus does [College name] belong to?" before creating College Account |
10
+ | Duplicate names across campuses (e.g., "School of Arts & Sciences" on multiple campuses) | Append campus name to college name: "School of Arts & Sciences (Main Campus)" |
11
+ | PDF parsing extracts noise (headers, footers, page numbers) | Filter lines matching common noise patterns before parsing hierarchy; see `references/hierarchy_parsing_rules.md` |
12
+ | User uploads flattened list without parent relationships stated | Ask user to clarify structure: "I see these names — please describe which items are campuses, colleges, and departments" |
13
+ | BusinessProfile creation fails with "AccountId field not found" | User's org may not have Education Cloud provisioned; check access prerequisites returned error |
14
+ | User expects a stored materialized-path field to read back | There is none — build the path on demand by GET-ing the Account and walking its ParentId chain to the System root, joining Names with ` / ` |
15
+ | Requested URL is blocked/unreachable during Step 1 | Do not silently substitute another source (e.g. a research agent pulling from Wikipedia) — stop and ask the user for a PDF, CSV, or pasted text from the institution's own site |
16
+ | User wants `InstitutionType` set on a Business Profile for a non-K-12/higher-ed institution (vocational, allied health, satellite/extension) | `InstitutionType` is a managed, restricted picklist (typically `Public`/`Private`/`Charter` only) — cannot be extended; tell the user upfront and offer `Description` as the only workaround field |
@@ -0,0 +1,133 @@
1
+ # Hierarchy Parsing Rules
2
+
3
+ Decision logic for resolving ambiguous institutional structures during parsing.
4
+
5
+ **Key principle**: Support any number of hierarchy levels (2+). Do not assume fixed level names or depth. Infer structure from source content (nesting, indentation, headings, list structure).
6
+
7
+ ## Parsing PDF Documents
8
+
9
+ ### Noise Filtering
10
+
11
+ Before parsing hierarchy content, drop lines matching common noise patterns (case-insensitive):
12
+
13
+ Common noise indicators:
14
+ - Page numbers: `Page 1`, `1`, `- 2 -`
15
+ - Copyright symbols: `© 2025`, `® Company Name`
16
+ - URLs and email addresses
17
+ - Single-word lines at top/bottom of pages (likely headers/footers)
18
+
19
+ ### Hierarchy Level Detection
20
+
21
+ **Approach**: Use indentation, list nesting, and keyword patterns to infer levels. Do not map to fixed level names (Campus/College/Department) — use whatever names appear in source.
22
+
23
+ | Pattern | Likely Level Type | Example |
24
+ |---------|------------------|---------|
25
+ | Contains "System", "District", all caps, or ends in "System" | Top level (System) | `RIVERSIDE COMMUNITY COLLEGE SYSTEM`, `State University System` |
26
+ | Contains "Campus", "Location", "Site", geographic qualifier | Geographic level | `Main Campus`, `North Location`, `Downtown Campus`, `Regional Center` |
27
+ | Contains "School of", "College of", "Faculty of" | Academic division | `School of Arts & Sciences`, `College of Engineering`, `Faculty of Medicine` |
28
+ | Contains "Department", "Dept", "Division", "Program" | Sub-division | `Computer Science Department`, `Accounting Dept`, `Marketing Division` |
29
+ | Contains "Unit", "Team", "Section", "Lab" | Lowest level | `Research Unit`, `Clinical Lab`, `Admissions Team` |
30
+
31
+ **If source has >4 levels**: Parse all levels. Store each node's level name exactly as it appears (e.g., "Region", "District", "Branch", "Unit").
32
+
33
+ ### Ambiguous Cases
34
+
35
+ **Problem**: Child node appears without explicit parent.
36
+
37
+ **Example input**:
38
+ ```text
39
+ Main Campus
40
+ North Campus
41
+ School of Business
42
+ School of Arts & Sciences
43
+ ```text
44
+
45
+ **Resolution**:
46
+ 1. If children appear immediately after a parent name without intervening parents → assign to that parent
47
+ 2. If children appear in a separate section → ask user: "I found these nodes: [list]. Which parent does each belong to?"
48
+
49
+ **Problem**: Duplicate names across branches (e.g., "School of Arts & Sciences" under multiple parents).
50
+
51
+ **Example**:
52
+ ```text
53
+ Main Campus
54
+ - School of Arts & Sciences
55
+ North Campus
56
+ - School of Arts & Sciences
57
+ ```text
58
+
59
+ **Resolution**:
60
+ Append parent name in parentheses:
61
+ - `School of Arts & Sciences (Main Campus)`
62
+ - `School of Arts & Sciences (North Campus)`
63
+
64
+ ## Parsing Website HTML
65
+
66
+ ### Content Extraction Priority
67
+
68
+ 1. **Navigation menus**: Look for `<nav>` elements with class names like `campus-nav`, `org-structure`, `hierarchy`
69
+ 2. **Unordered lists**: Parse `<ul>` with nested `<li>` elements as hierarchy levels — each nesting level = one hierarchy level
70
+ 3. **Headings**: Use heading levels to infer hierarchy depth: `<h1>` → Level 0, `<h2>` → Level 1, `<h3>` → Level 2, etc.
71
+ 4. **Breadcrumbs**: Extract hierarchy from breadcrumb navigation (`<nav aria-label="breadcrumb">`)
72
+
73
+ **Do not assume fixed mapping** (h2=Campus, h3=College). Just track relative depth: h1 is top, h2 is one level down, etc. Fetch the page, then read off the heading tags (`<h2>`, `<h3>`, `<h4>`, …) at each nesting depth. If HTML structure is non-standard, fall back to asking user for clarification.
74
+
75
+ ## Parsing Plain Text Description
76
+
77
+ ### Expected Format
78
+
79
+ Users may describe hierarchy in natural language:
80
+
81
+ > "We have Riverside Community College System with three campuses: Main Campus, North Campus, and South Campus. Main Campus has School of Business and School of Health Sciences. North Campus has Technical Education. Each school has departments."
82
+
83
+ ### Extraction Strategy
84
+
85
+ 1. **System**: First sentence often contains system name (top level)
86
+ 2. **Level 1**: Look for keywords indicating first subdivision (campuses, regions, locations, branches)
87
+ 3. **Level 2**: Look for "has", "includes", "contains" followed by organizational unit names (schools, colleges, divisions)
88
+ 4. **Level 3+**: Look for nested indicators ("each X has Y", "programs:", "departments:"), or recursive "contains"/"includes" patterns
89
+
90
+ **Parse based on nesting depth, not fixed level names.** If text says "Region → District → Campus → College → Department", parse all 6 levels (including System).
91
+
92
+ ### Validation Questions
93
+
94
+ Ask user to confirm when:
95
+ - Zero children found for a parent node
96
+ - Ambiguous parent-child relationship (e.g., "Computer Science" — is it at level 2 or level 3?)
97
+ - Unusual depth (1 level only, or >6 levels)
98
+
99
+ **Validation prompt template**:
100
+ ```text
101
+ I extracted this structure:
102
+
103
+ System: [Name]
104
+ ├─ Level 1: [Name]
105
+ │ └─ (No children found)
106
+ └─ Level 1: [Name]
107
+
108
+ Is this correct, or should I look for child nodes elsewhere?
109
+ ```text
110
+
111
+ ## Edge Cases
112
+
113
+ | Scenario | How to Handle |
114
+ |----------|---------------|
115
+ | Only 1 level below System (flat structure) | Ask user: "I found a flat structure — should I create this as-is, or do you have additional sub-levels?" |
116
+ | Multiple system-level entities | Clarify: "I found multiple top-level names — which one is the System?" |
117
+ | Children listed without parent | Ask: "Which parent do these nodes belong to: [list]" |
118
+ | Abbreviations in source (e.g., "CS Dept") | Expand to full name: "Computer Science Department" (ask user if unclear) |
119
+ | >6 hierarchy levels | Confirm: "I found [N] levels — is this correct, or should some levels be combined?" |
120
+
121
+ ## Confidence Scoring
122
+
123
+ Before confirming structure with user, assess parsing confidence:
124
+
125
+ | Confidence | Criteria | Action |
126
+ |-----------|----------|--------|
127
+ | High | 2+ levels present, clear parent-child relationships, no duplicates | Proceed to confirmation |
128
+ | Medium | Ambiguity (duplicate names resolved, or single missing level) | Show structure and ask for confirmation |
129
+ | Low | Missing levels, unclear parent relationships, or extensive noise | Ask user for clarification before showing structure |
130
+
131
+ High/Medium confidence: show parsed structure and ask "Should I proceed?"
132
+
133
+ Low confidence: show what was extracted and ask "I had trouble parsing — can you clarify the structure?"
@@ -0,0 +1,75 @@
1
+ # MCP Invocation Reference — Multi-Campus Hierarchy
2
+
3
+ `headless-360` is the default transport (see Mechanism in `SKILL.md` for the health-probe and fallback
4
+ sequence). When it's healthy, every operation below dispatches through it via four meta-tools:
5
+
6
+ - `mcp__headless-360__discover(query)` — semantic search over the indexed operation catalog
7
+ - `mcp__headless-360__describe(id)` — pull the schema and canonical route for one operation
8
+ - `mcp__headless-360__dispatch_readonly({url, method, queryParams?, body?})` — GET / read-only HTTP
9
+ - `mcp__headless-360__dispatch({url, method, body?, queryParams?})` — POST / PATCH / DELETE HTTP
10
+
11
+ **Dispatch takes raw HTTP**, not `{operation_id, arguments}`. Give it the full `url`
12
+ (`/services/data/v68.0/...`), `method`, optional `body`, and optional `queryParams` (camelCase — the
13
+ tool rejects `query_params`, and a SOQL string must go in `queryParams.q`, never appended inline to
14
+ the URL as `?q=`). The server signs the request with the JWT bound to the current MCP session and
15
+ forwards it to the org — the skill never handles a credential, org id, or alias.
16
+
17
+ **A `discover` miss does NOT mean the route is absent.** The standard `/sobjects/...` and `/query`
18
+ REST routes this skill uses are not always ranked first (or indexed) in the discovery corpus —
19
+ `describe` on the canonical operation still returns the schema, and `dispatch*` on the exact path
20
+ still works. Only if the GET/POST/PATCH/DELETE itself returns 404 should you treat the route as
21
+ unavailable on this org.
22
+
23
+ ## Response envelope
24
+
25
+ `dispatch*` returns the REST response singly wrapped:
26
+
27
+ ```json
28
+ { "status_code": 200, "body": { "totalSize": 1, "records": [ { "Id": "001..." } ] } }
29
+ ```
30
+
31
+ Read the relevant field from `body`. Status codes: `200` read success; `201` record created; `400`
32
+ bad body or a business-rule rejection — read `body[0].errorCode`; `403` access/feature gap; `404` the
33
+ endpoint/impl is not present on this org.
34
+
35
+ ## Calls used by this skill
36
+
37
+ **Step 3.5 — resolve Account RecordType**
38
+ ```text
39
+ mcp__headless-360__dispatch_readonly({"url": "/services/data/v68.0/sobjects/Account/describe", "method": "GET"})
40
+ ```
41
+
42
+ **Step 5 — load current hierarchy**
43
+ ```text
44
+ mcp__headless-360__dispatch_readonly({"url": "/services/data/v68.0/sobjects/Account/[Account Id]/ChildAccounts", "method": "GET"})
45
+ ```
46
+ Fallback if `ChildAccounts` is unavailable:
47
+ ```text
48
+ mcp__headless-360__dispatch_readonly({
49
+ "url": "/services/data/v68.0/query",
50
+ "method": "GET",
51
+ "queryParams": { "q": "SELECT Id, Name, ParentId FROM Account WHERE ParentId = '[Account Id]'" }
52
+ })
53
+ ```
54
+
55
+ **Step 7 — create / rename / move / delete Account**
56
+ ```text
57
+ mcp__headless-360__dispatch({
58
+ "url": "/services/data/v68.0/sobjects/Account",
59
+ "method": "POST",
60
+ "body": { "Name": "[Node name]", "RecordTypeId": "[recordTypeId]", "ParentId": "[Parent Account Id]" }
61
+ })
62
+ mcp__headless-360__dispatch({"url": "/services/data/v68.0/sobjects/Account/[Account Id]", "method": "PATCH", "body": {"Name": "[new name]"}})
63
+ mcp__headless-360__dispatch({"url": "/services/data/v68.0/sobjects/Account/[Account Id]", "method": "PATCH", "body": {"ParentId": "[new parent Account Id]"}})
64
+ mcp__headless-360__dispatch({"url": "/services/data/v68.0/sobjects/Account/[Account Id]", "method": "DELETE"})
65
+ ```
66
+
67
+ **Step 8 — create BusinessProfile**
68
+ ```text
69
+ mcp__headless-360__dispatch({"url": "/services/data/v68.0/sobjects/BusinessProfile", "method": "POST", "body": {"AccountId": "[Account ID]"}})
70
+ ```
71
+
72
+ **Step 9 — cold verification**
73
+ ```text
74
+ mcp__headless-360__dispatch_readonly({"url": "/services/data/v68.0/sobjects/Account/[Account Id]", "method": "GET"})
75
+ ```