@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.
- package/package.json +2 -6
- package/skills/automation-sandbox-post-copy-config-generate/SKILL.md +3 -0
- package/skills/automation-sandbox-post-copy-configure/SKILL.md +4 -0
- package/skills/design-systems-slds-validate/SKILL.md +2 -2
- package/skills/dx-app-analytics-query/SKILL.md +1 -3
- package/skills/dx-devops-conflict-resolve/SKILL.md +205 -0
- package/skills/dx-devops-conflict-resolve/examples/conflict-workflows.md +165 -0
- package/skills/dx-devops-conflict-resolve/references/deploy-failure-resolution.md +75 -0
- package/skills/dx-devops-conflict-resolve/references/git-conflict-resolution.md +124 -0
- package/skills/dx-devops-conflict-resolve/scripts/detect-conflicts.sh +91 -0
- package/skills/dx-devops-conflict-resolve/scripts/diagnose-deploy-failure.sh +156 -0
- package/skills/dx-devops-request-status/SKILL.md +160 -0
- package/skills/dx-devops-request-status/examples/polling-workflows.md +101 -0
- package/skills/dx-devops-request-status/references/cli-commands.md +176 -0
- package/skills/dx-devops-request-status/scripts/poll-status.sh +134 -0
- package/skills/dx-devops-test-failures-analyze/SKILL.md +6 -6
- package/skills/dx-devops-test-pipeline-configure/SKILL.md +7 -7
- package/skills/dx-devops-test-suite-assignments-configure/SKILL.md +6 -6
- package/skills/dx-devops-test-suite-run/SKILL.md +6 -6
- package/skills/dx-devops-work-item-manage/SKILL.md +2 -0
- package/skills/dx-org-manage/references/creating-scratch-org.md +5 -2
- package/skills/dx-org-manage/references/creating-snapshot.md +1 -0
- package/skills/dx-org-shape-manage/SKILL.md +152 -0
- package/skills/dx-org-shape-manage/examples/create_error_output.json +9 -0
- package/skills/dx-org-shape-manage/examples/create_success_output.json +9 -0
- package/skills/dx-org-shape-manage/examples/delete_output.json +11 -0
- package/skills/dx-org-shape-manage/examples/list_inactive_output.json +32 -0
- package/skills/dx-org-shape-manage/examples/list_output.json +24 -0
- package/skills/dx-org-shape-manage/references/cli_flags.md +135 -0
- package/skills/dx-org-switch/SKILL.md +2 -2
- package/skills/dx-org-trial-expiration-check/SKILL.md +2 -0
- package/skills/dx-pkg-post-install-configure/SKILL.md +3 -0
- package/skills/education-cloud-multi-campus-configure/SKILL.md +211 -0
- package/skills/education-cloud-multi-campus-configure/examples/hierarchy_visualization.md +174 -0
- package/skills/education-cloud-multi-campus-configure/examples/output_examples.md +54 -0
- package/skills/education-cloud-multi-campus-configure/examples/sample_hierarchy_input.csv +29 -0
- package/skills/education-cloud-multi-campus-configure/examples/sample_hierarchy_input_edgecases.csv +16 -0
- package/skills/education-cloud-multi-campus-configure/references/account_recordtype_prerequisite.md +44 -0
- package/skills/education-cloud-multi-campus-configure/references/delta_computation.md +33 -0
- package/skills/education-cloud-multi-campus-configure/references/error_handling.md +198 -0
- package/skills/education-cloud-multi-campus-configure/references/foundation_prerequisites.md +54 -0
- package/skills/education-cloud-multi-campus-configure/references/gotchas.md +16 -0
- package/skills/education-cloud-multi-campus-configure/references/hierarchy_parsing_rules.md +133 -0
- package/skills/education-cloud-multi-campus-configure/references/mcp-invocation.md +75 -0
- package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/SKILL.md +1 -1
- package/skills/experience-cms-brand-apply/SKILL.md +4 -1
- package/skills/experience-cms-brand-create/SKILL.md +197 -0
- package/skills/experience-cms-brand-create/assets/brand-template.json +329 -0
- package/skills/experience-cms-brand-create/references/brand-anatomy.md +120 -0
- package/skills/experience-cms-brand-create/references/disk-contract.md +84 -0
- package/skills/experience-cms-content-generate/SKILL.md +190 -0
- package/skills/experience-cms-content-generate/assets/display-formats.md +84 -0
- package/skills/experience-cms-content-generate/assets/payloads/create-content-bulk.json +11 -0
- package/skills/experience-cms-content-generate/assets/payloads/create-content-single.json +11 -0
- package/skills/experience-cms-content-generate/assets/payloads/publish-content.json +4 -0
- package/skills/experience-cms-content-generate/assets/payloads/update-content.json +9 -0
- package/skills/experience-cms-content-generate/assets/questions.md +241 -0
- package/skills/experience-cms-content-generate/examples/create-content-call.md +81 -0
- package/skills/experience-cms-content-generate/references/bulk-batching.md +56 -0
- package/skills/experience-cms-content-generate/references/content-type-classification.md +88 -0
- package/skills/experience-cms-content-generate/references/content-write-tool.md +95 -0
- package/skills/experience-cms-content-generate/references/delegation-protocol.md +37 -0
- package/skills/experience-cms-content-generate/references/edit-publish-workflow.md +63 -0
- package/skills/experience-cms-content-generate/references/error-recovery.md +72 -0
- package/skills/experience-cms-content-generate/references/identifier-resolution.md +26 -0
- package/skills/experience-cms-content-generate/references/intent-routing.md +45 -0
- package/skills/experience-cms-content-generate/references/principles.md +19 -0
- package/skills/experience-cms-content-generate/references/ux-rules.md +68 -0
- package/skills/experience-cms-content-generate/references/workspace-resolution.md +33 -0
- package/skills/experience-cms-content-type-generate/SKILL.md +449 -0
- package/skills/experience-cms-content-type-generate/assets/discovery-prompts.md +79 -0
- package/skills/experience-cms-content-type-generate/assets/schema-example.json +70 -0
- package/skills/experience-cms-content-type-generate/references/agent-checklist.md +50 -0
- package/skills/experience-cms-content-type-generate/references/anti-patterns.md +39 -0
- package/skills/experience-cms-content-type-generate/references/deployment-errors.md +27 -0
- package/skills/experience-cms-content-type-generate/references/discovery-details.md +106 -0
- package/skills/experience-cms-content-type-generate/references/discovery-query-rules.md +85 -0
- package/skills/experience-cms-content-type-generate/references/edit-fields-loop.md +48 -0
- package/skills/experience-cms-content-type-generate/references/pre-deploy-checklist.md +21 -0
- package/skills/experience-cms-content-type-generate/references/retrieve-and-reconcile.md +105 -0
- package/skills/experience-cms-content-type-generate/references/schema-rules.md +51 -0
- package/skills/experience-cms-content-type-generate/references/schema-summary-format.md +60 -0
- package/skills/experience-lds-graphql-generate/SKILL.md +4 -0
- package/skills/experience-lwc-accessibility-jest-run/SKILL.md +79 -0
- package/skills/experience-lwc-accessibility-jest-run/references/running-sa11y-jest-tests.md +205 -0
- package/skills/experience-lwc-design-generate/SKILL.md +5 -4
- package/skills/experience-lwc-generate/SKILL.md +10 -9
- package/skills/experience-ui-bundle-deploy/references/dev-preview.md +21 -0
- package/skills/experience-ui-bundle-deploy/references/social-login.md +1 -0
- package/skills/experience-ui-bundle-file-upload-generate/SKILL.md +6 -6
- package/skills/experience-ui-bundle-localize/SKILL.md +30 -37
- package/skills/experience-ui-bundle-localize/references/gotchas.md +23 -7
- package/skills/experience-ui-bundle-localize/references/i18n-setup.md +48 -4
- package/skills/experience-ui-bundle-localize/references/label-xml.md +22 -8
- package/skills/experience-ui-bundle-localize/references/verifying.md +39 -11
- package/skills/experience-ui-bundle-localize/scripts/detect-bundle-type.sh +118 -15
- package/skills/experience-ui-bundle-localize/scripts/tests/test-detect-bundle-type.sh +187 -0
- package/skills/experience-ui-bundle-mfa-configure/SKILL.md +13 -2
- package/skills/experience-ui-bundle-mfa-configure/references/social-login.md +1 -0
- package/skills/experience-ui-bundle-project-generate/SKILL.md +2 -2
- package/skills/integration-connectivity-generate/SKILL.md +11 -10
- package/skills/integration-eventing-cdc-configure/SKILL.md +6 -6
- package/skills/integration-eventing-subscription-configure/SKILL.md +6 -5
- package/skills/mobile-platform-native-capabilities-integrate/SKILL.md +2 -2
- package/skills/mobile-platform-offline-validate/scripts/package.json +1 -1
- package/skills/platform-agentexchange-partner-offers-configure/SKILL.md +8 -8
- package/skills/platform-custom-application-generate/SKILL.md +2 -0
- package/skills/platform-custom-field-generate/SKILL.md +8 -6
- package/skills/platform-custom-metadata-type-generate/SKILL.md +460 -0
- package/skills/platform-custom-metadata-type-generate/references/cmdt-records.md +251 -0
- package/skills/platform-custom-metadata-type-generate/scripts/sanitize-developer-name.sh +46 -0
- package/skills/platform-custom-setting-generate/SKILL.md +419 -0
- package/skills/platform-dataspace-access-configure/SKILL.md +3 -3
- package/skills/platform-sharing-owd-configure/SKILL.md +3 -0
- package/skills/platform-value-set-generate/SKILL.md +2 -0
- package/skills/service-agentforce-channel-configure/SKILL.md +29 -20
- package/skills/service-agentforce-channel-configure/assets/BotEmailDefinition.botEmailDefinition-meta.xml +36 -0
- package/skills/service-agentforce-channel-configure/assets/email/unfiled$public/AgentforceForServiceEmailTemplate.email +17 -0
- package/skills/service-agentforce-channel-configure/assets/email/unfiled$public/AgentforceForServiceEmailTemplate.email-meta.xml +29 -0
- package/skills/service-agentforce-channel-configure/assets/mdapi-package.xml +25 -0
- package/skills/service-agentforce-channel-configure/assets/settings-mdapi-package.xml +30 -0
- package/skills/service-agentforce-channel-configure/references/agent-wiring.md +20 -0
- package/skills/service-agentforce-channel-configure/references/botemaildefinition.md +107 -0
- package/skills/service-agentforce-channel-configure/references/channel-branch-email.md +203 -50
- package/skills/service-agentforce-channel-configure/references/channel-types.md +30 -3
- package/skills/service-agentforce-channel-configure/references/queue-resolution.md +17 -8
- package/skills/service-agentforce-channel-configure/references/routing-flow.md +14 -3
- package/skills/service-agentforce-channel-configure/scripts/validate-botemaildefinition.py +126 -0
- package/skills/service-agentforce-channel-configure/scripts/validate-emailtemplate.py +133 -0
- package/skills/service-de-channel-activate/SKILL.md +271 -0
- package/skills/service-de-channel-activate/references/gotchas.md +31 -0
- package/skills/service-de-channel-activate/references/phone-verification.md +96 -0
- package/skills/service-de-channel-activate/references/worked-examples.md +14 -0
- package/skills/service-de-channel-consent-configure/SKILL.md +230 -0
- package/skills/service-de-channel-consent-configure/references/gotchas.md +41 -0
- package/skills/service-de-channel-consent-configure/references/language-keywords.md +84 -0
- package/skills/service-de-channel-consent-configure/references/worked-examples.md +134 -0
- package/skills/service-de-channel-create/SKILL.md +369 -0
- package/skills/service-de-channel-create/references/apple.md +59 -0
- package/skills/service-de-channel-create/references/connect-insert.md +84 -0
- package/skills/service-de-channel-create/references/facebook.md +154 -0
- package/skills/service-de-channel-create/references/line.md +66 -0
- package/skills/service-de-channel-create/references/sms.md +98 -0
- package/skills/service-de-channel-create/references/whatsapp.md +98 -0
- package/skills/service-de-channel-create/references/worked-examples.md +70 -0
- package/skills/service-de-channel-routing-configure/SKILL.md +345 -0
- package/skills/service-de-channel-routing-configure/references/asa-routing.md +90 -0
- package/skills/service-de-channel-routing-configure/references/gotchas.md +27 -0
- package/skills/service-de-channel-routing-configure/references/queue-creation.md +123 -0
- package/skills/service-de-channel-routing-configure/references/target-locate.md +98 -0
- package/skills/service-de-channel-routing-configure/references/worked-examples.md +174 -0
- package/skills/service-de-headless-channel-configure/SKILL.md +305 -0
- package/skills/service-de-headless-channel-configure/references/gotchas.md +27 -0
- package/skills/service-de-headless-channel-configure/references/inputs.md +49 -0
- package/skills/service-de-headless-channel-configure/references/output-envelopes.md +53 -0
- package/skills/service-de-headless-channel-configure/references/partial-success.md +24 -0
- package/skills/service-de-headless-channel-configure/references/terms-and-conditions.md +54 -0
- package/skills/service-de-headless-channel-configure/references/worked-examples.md +108 -0
- package/skills/service-de-waba-integrate/SKILL.md +227 -0
- package/skills/service-digital-engagement-channel-configure/scripts/check-api-version.sh +29 -0
- package/skills/service-digital-engagement-messaging-site-integrate/SKILL.md +10 -9
- package/skills/service-digital-engagement-messaging-site-integrate/references/lwr_patch.md +39 -21
- package/skills/service-digital-engagement-messaging-site-integrate/scripts/patch_lwr_bundle.sh +157 -96
- package/skills/service-email-to-case-configure/SKILL.md +190 -0
- package/skills/service-email-to-case-configure/assets/CaseSettings.settings-meta.xml +45 -0
- package/skills/service-email-to-case-configure/examples/CaseSettings-two-addresses.settings-meta.xml +36 -0
- package/skills/service-email-to-case-configure/references/apply-mechanics.md +73 -0
- package/skills/service-email-to-case-configure/references/routing_address_reference.md +73 -0
- package/skills/service-email-to-case-configure/references/troubleshooting.md +25 -0
- package/skills/service-email-to-case-configure/scripts/apply-casesettings.py +1315 -0
- package/skills/service-email-to-case-configure/scripts/check-agent-email-capability.sh +26 -0
- package/skills/service-email-to-case-configure/scripts/tests/__init__.py +0 -0
- package/skills/service-email-to-case-configure/scripts/tests/_bootstrap.py +45 -0
- package/skills/service-email-to-case-configure/scripts/tests/_fakeorg.py +366 -0
- package/skills/service-email-to-case-configure/scripts/tests/_run.py +84 -0
- package/skills/service-email-to-case-configure/scripts/tests/test_apply_org_scenarios.py +655 -0
- package/skills/service-email-to-case-configure/scripts/tests/test_get_session.py +134 -0
- package/skills/service-email-to-case-configure/scripts/tests/test_new_capabilities.py +193 -0
- package/skills/service-email-to-case-configure/scripts/tests/test_validate_casesettings.py +170 -0
- package/skills/service-email-to-case-configure/scripts/validate-casesettings.py +229 -0
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +33 -15
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/examples/output-templates.md +63 -47
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/SKILL.md +17 -12
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/references/cli-invocation.md +5 -3
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/scripts/classify-enable-plan.mjs +11 -3
- package/skills/service-itsm-agentic-setup-agentforce-studio-validate/SKILL.md +8 -6
- package/skills/service-itsm-agentic-setup-agentforce-studio-validate/references/cli-invocation.md +3 -3
- package/skills/service-itsm-agentic-setup-agentforce-studio-validate/scripts/classify-readiness.mjs +11 -3
- package/skills/service-itsm-agentic-setup-configure/SKILL.md +5 -5
- package/skills/service-itsm-agentic-setup-configure/examples/output-templates.md +5 -5
- package/skills/service-itsm-agentic-setup-employee-agent-configure/SKILL.md +2 -2
- package/skills/service-itsm-agentic-setup-employee-agent-configure/references/report-format.md +11 -7
- package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/render-report.mjs +20 -7
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/SKILL.md +10 -6
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/action-availability.md +7 -7
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/report-format.md +11 -7
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/build-create-body.mjs +24 -17
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-action-availability.mjs +98 -58
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/render-report.mjs +20 -7
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/strip-release-management.mjs +176 -0
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/SKILL.md +19 -19
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/cli-invocation.md +3 -4
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/helper-contracts.md +6 -6
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/permset-topology.md +3 -10
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/classify-permset-availability.mjs +7 -9
- package/skills/service-itsm-incident-mgmt-configure/SKILL.md +2 -0
- package/skills/service-itsm-incident-priority-configure/SKILL.md +15 -12
- package/skills/service-itsm-incident-priority-configure/examples/matrix-operations.md +27 -1
- package/skills/service-itsm-incident-priority-configure/references/sf-cli-invocation.md +37 -6
- package/skills/service-native-voice-recording-transcription-configure/SKILL.md +146 -0
- package/skills/service-native-voice-recording-transcription-configure/assets/confirmation-output.json +16 -0
- package/skills/service-native-voice-recording-transcription-configure/assets/package.xml +22 -0
- package/skills/service-native-voice-recording-transcription-configure/references/thunderbird-voice-settings.md +101 -0
- package/skills/service-native-voice-recording-transcription-configure/scripts/enable-recording-transcription.sh +181 -0
- package/skills/data360-activate/README.md +0 -38
- package/skills/data360-activate/SKILL.md +0 -127
- package/skills/data360-connect/README.md +0 -57
- package/skills/data360-connect/SKILL.md +0 -163
- package/skills/data360-connect/examples/connections/heroku-postgres.json +0 -15
- package/skills/data360-connect/examples/connections/ingest-api-connection.json +0 -5
- package/skills/data360-connect/examples/connections/ingest-api-schema.json +0 -31
- package/skills/data360-connect/examples/connections/redshift.json +0 -16
- package/skills/data360-connect/examples/connections/sharepoint-unstructured.json +0 -20
- package/skills/data360-connect/examples/connections/snowflake-connection.json +0 -42
- package/skills/data360-harmonize/README.md +0 -31
- package/skills/data360-harmonize/SKILL.md +0 -126
- package/skills/data360-orchestrate/README.md +0 -120
- package/skills/data360-orchestrate/SKILL.md +0 -263
- package/skills/data360-orchestrate/assets/definitions/activation-target.template.json +0 -5
- package/skills/data360-orchestrate/assets/definitions/activation.template.json +0 -7
- package/skills/data360-orchestrate/assets/definitions/calculated-insight.template.json +0 -7
- package/skills/data360-orchestrate/assets/definitions/data-action-target.template.json +0 -5
- package/skills/data360-orchestrate/assets/definitions/data-action.template.json +0 -5
- package/skills/data360-orchestrate/assets/definitions/data-graph.template.json +0 -21
- package/skills/data360-orchestrate/assets/definitions/data-stream.template.json +0 -55
- package/skills/data360-orchestrate/assets/definitions/dmo.template.json +0 -17
- package/skills/data360-orchestrate/assets/definitions/identity-resolution.template.json +0 -30
- package/skills/data360-orchestrate/assets/definitions/mapping.template.json +0 -14
- package/skills/data360-orchestrate/assets/definitions/relationship.template.json +0 -12
- package/skills/data360-orchestrate/assets/definitions/search-index.template.json +0 -9
- package/skills/data360-orchestrate/assets/definitions/segment.template.json +0 -16
- package/skills/data360-orchestrate/references/feature-readiness.md +0 -157
- package/skills/data360-orchestrate/references/plugin-setup.md +0 -138
- package/skills/data360-orchestrate/scripts/bootstrap-plugin.sh +0 -53
- package/skills/data360-orchestrate/scripts/diagnose-org.mjs +0 -511
- package/skills/data360-orchestrate/scripts/generate-manifest.mjs +0 -68
- package/skills/data360-orchestrate/scripts/verify-plugin.sh +0 -58
- package/skills/data360-prepare/README.md +0 -50
- package/skills/data360-prepare/SKILL.md +0 -203
- package/skills/data360-prepare/examples/ingestion-api/.env.example +0 -8
- package/skills/data360-prepare/examples/ingestion-api/README.md +0 -48
- package/skills/data360-prepare/examples/ingestion-api/send-data.py +0 -144
- package/skills/data360-query/README.md +0 -43
- package/skills/data360-query/SKILL.md +0 -128
- package/skills/data360-query/examples/search-indexes/hybrid-structured.json +0 -44
- package/skills/data360-query/examples/search-indexes/vector-knowledge.json +0 -43
- package/skills/data360-segment/README.md +0 -35
- package/skills/data360-segment/SKILL.md +0 -123
- package/skills/service-helpagent-coordinate/references/channel-help-portal.md +0 -22
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-1-1-non-text-content.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-i-lists.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-ii-tables.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-iii-form-labels.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-iv-regions.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-v-groups.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-5-identify-input.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-4-3-contrast.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-1-1-keyboard.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-4-4-link-purpose.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-4-6-headings-labels.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-1-pointer-gestures.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-2-pointer-cancellation.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-3-label-in-name.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-7-dragging-movement.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-2-1-on-focus.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-2-2-on-input.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-1-error-identification.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-2-labels-instructions.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-3-error-suggestion.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-i-name.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-ii-role.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-iii-value.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-1-1-non-text-content.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-1-use-of-color.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-10-resize-reflow.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-11-non-text-contrast.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-3-contrast.md +0 -0
- /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
|
package/skills/education-cloud-multi-campus-configure/examples/sample_hierarchy_input_edgecases.csv
ADDED
|
@@ -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
|
package/skills/education-cloud-multi-campus-configure/references/account_recordtype_prerequisite.md
ADDED
|
@@ -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
|
+
```
|