@salesforce/afv-skills 1.8.0 → 1.9.1
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 +1 -1
- package/skills/activating-datacloud/CREDITS.md +5 -0
- package/skills/activating-datacloud/README.md +39 -0
- package/skills/activating-datacloud/SKILL.md +118 -0
- package/skills/analyzing-omnistudio-dependencies/CREDITS.md +5 -0
- package/skills/analyzing-omnistudio-dependencies/SKILL.md +477 -0
- package/skills/analyzing-omnistudio-dependencies/references/dependency-patterns.md +508 -0
- package/skills/analyzing-omnistudio-dependencies/references/namespace-guide.md +300 -0
- package/skills/building-omnistudio-callable-apex/CREDITS.md +9 -0
- package/skills/building-omnistudio-callable-apex/README.md +80 -0
- package/skills/building-omnistudio-callable-apex/SKILL.md +276 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_callable_openinterface.cls +40 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_callable_vanilla.cls +32 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_migration.cls +54 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_openinterface.cls +45 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_test_class.cls +65 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/IndustriesCallableException.cls +7 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallable.cls +115 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallableTest.cls +189 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/TRANSCRIPT.md +115 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/IndustriesCallableException.cls +7 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallable.cls +74 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallableTest.cls +146 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomRemoteClass.cls +16 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/TRANSCRIPT.md +120 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/IndustriesCallableException.cls +7 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallable.cls +73 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallableTest.cls +128 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomVlocityOpenInterface2.cls +23 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/TRANSCRIPT.md +75 -0
- package/skills/building-omnistudio-datamapper/CREDITS.md +5 -0
- package/skills/building-omnistudio-datamapper/SKILL.md +270 -0
- package/skills/building-omnistudio-datamapper/assets/completion-summary-template.md +28 -0
- package/skills/building-omnistudio-datamapper/assets/omni-data-transform-extract.json +6 -0
- package/skills/building-omnistudio-datamapper/assets/omni-data-transform-item.json +12 -0
- package/skills/building-omnistudio-datamapper/assets/omni-data-transform-load.json +6 -0
- package/skills/building-omnistudio-datamapper/assets/omni-data-transform-transform.json +6 -0
- package/skills/building-omnistudio-datamapper/references/best-practices.md +277 -0
- package/skills/building-omnistudio-datamapper/references/naming-conventions.md +145 -0
- package/skills/building-omnistudio-flexcard/CREDITS.md +5 -0
- package/skills/building-omnistudio-flexcard/SKILL.md +325 -0
- package/skills/building-omnistudio-flexcard/assets/omni-ui-card.json +10 -0
- package/skills/building-omnistudio-flexcard/references/best-practices.md +291 -0
- package/skills/building-omnistudio-flexcard/references/data-binding-guide.md +311 -0
- package/skills/building-omnistudio-flexcard/references/scoring-rubric.md +66 -0
- package/skills/building-omnistudio-flexcard/scripts/flexcard-commands.sh +24 -0
- package/skills/building-omnistudio-integration-procedure/CREDITS.md +5 -0
- package/skills/building-omnistudio-integration-procedure/SKILL.md +275 -0
- package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-dr-extract.json +10 -0
- package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-set-values.json +10 -0
- package/skills/building-omnistudio-integration-procedure/assets/omni-process-ip.json +12 -0
- package/skills/building-omnistudio-integration-procedure/assets/scoring-report-format.txt +14 -0
- package/skills/building-omnistudio-integration-procedure/references/best-practices.md +388 -0
- package/skills/building-omnistudio-integration-procedure/references/element-types.md +588 -0
- package/skills/building-omnistudio-integration-procedure/scripts/cli-commands.sh +18 -0
- package/skills/building-omnistudio-omniscript/CREDITS.md +5 -0
- package/skills/building-omnistudio-omniscript/SKILL.md +367 -0
- package/skills/building-omnistudio-omniscript/assets/omni-process-element-step.json +10 -0
- package/skills/building-omnistudio-omniscript/assets/omni-process-element-text-block.json +11 -0
- package/skills/building-omnistudio-omniscript/assets/omni-process-omniscript.json +12 -0
- package/skills/building-omnistudio-omniscript/references/best-practices.md +480 -0
- package/skills/building-omnistudio-omniscript/references/element-types.md +1172 -0
- package/skills/building-omnistudio-omniscript/scripts/check-duplicate-omniscript.sh +13 -0
- package/skills/building-omnistudio-omniscript/scripts/cli-reference.sh +21 -0
- package/skills/building-omnistudio-omniscript/scripts/deploy-omniscript.sh +29 -0
- package/skills/building-sf-integrations/CREDITS.md +5 -0
- package/skills/building-sf-integrations/README.md +95 -0
- package/skills/building-sf-integrations/SKILL.md +192 -0
- package/skills/building-sf-integrations/assets/callouts/callout-retry-handler.cls +167 -0
- package/skills/building-sf-integrations/assets/callouts/http-response-handler.cls +257 -0
- package/skills/building-sf-integrations/assets/callouts/rest-queueable-callout.cls +262 -0
- package/skills/building-sf-integrations/assets/callouts/rest-sync-callout.cls +211 -0
- package/skills/building-sf-integrations/assets/cdc/cdc-handler.cls +246 -0
- package/skills/building-sf-integrations/assets/cdc/cdc-subscriber-trigger.trigger +139 -0
- package/skills/building-sf-integrations/assets/endpoint-security/example.cspTrustedSite-meta.xml +58 -0
- package/skills/building-sf-integrations/assets/endpoint-security/example.remoteSite-meta.xml +39 -0
- package/skills/building-sf-integrations/assets/external-credentials/jwt-external-credential.externalCredential-meta.xml +90 -0
- package/skills/building-sf-integrations/assets/external-credentials/oauth-external-credential.externalCredential-meta.xml +87 -0
- package/skills/building-sf-integrations/assets/external-services/external-service-operations.md +221 -0
- package/skills/building-sf-integrations/assets/external-services/openapi-registration.externalServiceRegistration-meta.xml +193 -0
- package/skills/building-sf-integrations/assets/named-credentials/certificate-auth.namedCredential-meta.xml +62 -0
- package/skills/building-sf-integrations/assets/named-credentials/custom-auth.namedCredential-meta.xml +71 -0
- package/skills/building-sf-integrations/assets/named-credentials/oauth-client-credentials.namedCredential-meta.xml +51 -0
- package/skills/building-sf-integrations/assets/named-credentials/oauth-jwt-bearer.namedCredential-meta.xml +67 -0
- package/skills/building-sf-integrations/assets/platform-events/event-publisher.cls +191 -0
- package/skills/building-sf-integrations/assets/platform-events/event-subscriber-action.cls +295 -0
- package/skills/building-sf-integrations/assets/platform-events/event-subscriber-trigger.trigger +108 -0
- package/skills/building-sf-integrations/assets/platform-events/platform-event-definition.object-meta.xml +124 -0
- package/skills/building-sf-integrations/assets/soap/soap-callout-service.cls +186 -0
- package/skills/building-sf-integrations/assets/soap/wsdl2apex-guide.md +213 -0
- package/skills/building-sf-integrations/hooks/scripts/suggest_credential_setup.py +271 -0
- package/skills/building-sf-integrations/hooks/scripts/validate_integration.py +363 -0
- package/skills/building-sf-integrations/references/callout-patterns.md +719 -0
- package/skills/building-sf-integrations/references/cdc-guide.md +288 -0
- package/skills/building-sf-integrations/references/cli-reference.md +94 -0
- package/skills/building-sf-integrations/references/event-driven-architecture-guide.md +266 -0
- package/skills/building-sf-integrations/references/event-patterns.md +838 -0
- package/skills/building-sf-integrations/references/external-services-guide.md +303 -0
- package/skills/building-sf-integrations/references/messaging-api-v2.md +609 -0
- package/skills/building-sf-integrations/references/named-credentials-automation.md +201 -0
- package/skills/building-sf-integrations/references/named-credentials-guide.md +173 -0
- package/skills/building-sf-integrations/references/platform-events-guide.md +288 -0
- package/skills/building-sf-integrations/references/rest-callout-patterns.md +288 -0
- package/skills/building-sf-integrations/references/scoring-rubric.md +59 -0
- package/skills/building-sf-integrations/references/security-best-practices.md +248 -0
- package/skills/building-sf-integrations/scripts/README.md +100 -0
- package/skills/building-sf-integrations/scripts/configure-named-credential.sh +236 -0
- package/skills/building-sf-integrations/scripts/set-api-credential.sh +146 -0
- package/skills/building-sf-integrations/scripts/templates/setup-credentials-with-csp.sh +158 -0
- package/skills/configuring-connected-apps/CREDITS.md +3 -0
- package/skills/configuring-connected-apps/README.md +99 -0
- package/skills/configuring-connected-apps/SKILL.md +224 -0
- package/skills/configuring-connected-apps/assets/connected-app-basic.xml +29 -0
- package/skills/configuring-connected-apps/assets/connected-app-canvas.xml +62 -0
- package/skills/configuring-connected-apps/assets/connected-app-jwt.xml +49 -0
- package/skills/configuring-connected-apps/assets/connected-app-oauth.xml +65 -0
- package/skills/configuring-connected-apps/assets/eca-global-oauth.xml +36 -0
- package/skills/configuring-connected-apps/assets/eca-oauth-settings.xml +36 -0
- package/skills/configuring-connected-apps/assets/eca-policies.xml +36 -0
- package/skills/configuring-connected-apps/assets/external-client-app.xml +35 -0
- package/skills/configuring-connected-apps/references/example-usage.md +256 -0
- package/skills/configuring-connected-apps/references/migration-guide.md +328 -0
- package/skills/configuring-connected-apps/references/oauth-flows-reference.md +660 -0
- package/skills/configuring-connected-apps/references/security-checklist.md +209 -0
- package/skills/configuring-connected-apps/references/testing-validation-guide.md +275 -0
- package/skills/connecting-datacloud/CREDITS.md +5 -0
- package/skills/connecting-datacloud/README.md +59 -0
- package/skills/connecting-datacloud/SKILL.md +155 -0
- package/skills/connecting-datacloud/examples/connections/heroku-postgres.json +15 -0
- package/skills/connecting-datacloud/examples/connections/ingest-api-connection.json +5 -0
- package/skills/connecting-datacloud/examples/connections/ingest-api-schema.json +31 -0
- package/skills/connecting-datacloud/examples/connections/redshift.json +16 -0
- package/skills/connecting-datacloud/examples/connections/sharepoint-unstructured.json +20 -0
- package/skills/connecting-datacloud/examples/connections/snowflake-connection.json +42 -0
- package/skills/debugging-apex-logs/CREDITS.md +22 -0
- package/skills/debugging-apex-logs/README.md +74 -0
- package/skills/debugging-apex-logs/SKILL.md +172 -0
- package/skills/debugging-apex-logs/assets/benchmarking-template.cls +327 -0
- package/skills/debugging-apex-logs/assets/cpu-heap-optimization.cls +307 -0
- package/skills/debugging-apex-logs/assets/dml-in-loop-fix.cls +219 -0
- package/skills/debugging-apex-logs/assets/null-pointer-fix.cls +252 -0
- package/skills/debugging-apex-logs/assets/soql-in-loop-fix.cls +157 -0
- package/skills/debugging-apex-logs/references/analysis-playbook.md +53 -0
- package/skills/debugging-apex-logs/references/benchmarking-guide.md +287 -0
- package/skills/debugging-apex-logs/references/cli-commands.md +368 -0
- package/skills/debugging-apex-logs/references/common-issues.md +68 -0
- package/skills/debugging-apex-logs/references/debug-log-reference.md +328 -0
- package/skills/debugging-apex-logs/references/log-analysis-tools.md +248 -0
- package/skills/debugging-apex-logs/references/scoring-rubric.md +21 -0
- package/skills/deploying-metadata/CREDITS.md +25 -0
- package/skills/deploying-metadata/README.md +104 -0
- package/skills/deploying-metadata/SKILL.md +214 -0
- package/skills/deploying-metadata/assets/destructiveChanges.xml +143 -0
- package/skills/deploying-metadata/assets/package.xml +121 -0
- package/skills/deploying-metadata/references/agent-deployment-guide.md +628 -0
- package/skills/deploying-metadata/references/deploy.sh +73 -0
- package/skills/deploying-metadata/references/deployment-report-template.md +89 -0
- package/skills/deploying-metadata/references/deployment-workflows.md +395 -0
- package/skills/deploying-metadata/references/orchestration.md +183 -0
- package/skills/deploying-metadata/references/trigger-deployment-safety.md +376 -0
- package/skills/deploying-omnistudio-datapacks/CREDITS.md +5 -0
- package/skills/deploying-omnistudio-datapacks/README.md +88 -0
- package/skills/deploying-omnistudio-datapacks/SKILL.md +174 -0
- package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/TRANSCRIPT.md +124 -0
- package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/deploy-business-internet-plus-bundle.yaml +11 -0
- package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/TRANSCRIPT.md +142 -0
- package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/deploy-business-internet-plus-bundle.yaml +10 -0
- package/skills/deploying-omnistudio-datapacks/references/job-file-template.md +42 -0
- package/skills/deploying-omnistudio-datapacks/references/troubleshooting-matrix.md +24 -0
- package/skills/developing-agentforce/assets/metadata/http-callout-flow.flow-meta.xml +1 -1
- package/skills/developing-agentforce/references/actions-reference.md +8 -8
- package/skills/fetching-salesforce-docs/README.md +66 -0
- package/skills/fetching-salesforce-docs/SKILL.md +209 -0
- package/skills/fetching-salesforce-docs/requirements.txt +2 -0
- package/skills/fetching-salesforce-docs/scripts/extract_help_salesforce.py +497 -0
- package/skills/fetching-salesforce-docs/scripts/extract_salesforce_doc.py +357 -0
- package/skills/fetching-salesforce-docs/scripts/runtime_bootstrap.py +58 -0
- package/skills/generating-apex/CREDITS.md +1 -26
- package/skills/generating-apex-test/CREDITS.md +2 -27
- package/skills/generating-lwc-components/CREDITS.md +5 -0
- package/skills/generating-lwc-components/README.md +126 -0
- package/skills/generating-lwc-components/SKILL.md +191 -0
- package/skills/generating-lwc-components/assets/apex-controller/LwcController.cls +327 -0
- package/skills/generating-lwc-components/assets/basic-component/basicComponent.css +72 -0
- package/skills/generating-lwc-components/assets/basic-component/basicComponent.html +111 -0
- package/skills/generating-lwc-components/assets/basic-component/basicComponent.js +163 -0
- package/skills/generating-lwc-components/assets/basic-component/basicComponent.js-meta.xml +137 -0
- package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.html +111 -0
- package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.js +367 -0
- package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.css +63 -0
- package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.html +154 -0
- package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js +348 -0
- package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js-meta.xml +87 -0
- package/skills/generating-lwc-components/assets/form-component/formComponent.html +165 -0
- package/skills/generating-lwc-components/assets/form-component/formComponent.js +275 -0
- package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.html +100 -0
- package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.js +336 -0
- package/skills/generating-lwc-components/assets/jest-test/componentName.test.js.example +371 -0
- package/skills/generating-lwc-components/assets/message-channel/RecordSelected.messageChannel-meta.xml +71 -0
- package/skills/generating-lwc-components/assets/message-channel/lmsPublisher.js +103 -0
- package/skills/generating-lwc-components/assets/message-channel/lmsSubscriber.js +181 -0
- package/skills/generating-lwc-components/assets/modal-component/modalComponent.html +85 -0
- package/skills/generating-lwc-components/assets/modal-component/modalComponent.js +199 -0
- package/skills/generating-lwc-components/assets/record-picker/recordPicker.html +55 -0
- package/skills/generating-lwc-components/assets/record-picker/recordPicker.js +199 -0
- package/skills/generating-lwc-components/assets/state-store/store.js +282 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.css +65 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.html +95 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.js-meta.xml +75 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.test.ts.example +301 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.ts +295 -0
- package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.html +71 -0
- package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.js +316 -0
- package/skills/generating-lwc-components/hooks/scripts/lwc-lsp-validate.py +295 -0
- package/skills/generating-lwc-components/hooks/scripts/post-tool-validate.py +347 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_data/deprecated_patterns.json +74 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_data/styling_hooks.json +111 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_data/valid_slds_classes.json +127 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_linter_wrapper.py +294 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_rules/__init__.py +22 -0
- package/skills/generating-lwc-components/hooks/scripts/template_validator.py +332 -0
- package/skills/generating-lwc-components/hooks/scripts/validate_slds.py +595 -0
- package/skills/generating-lwc-components/references/accessibility-guide.md +843 -0
- package/skills/generating-lwc-components/references/advanced-features.md +108 -0
- package/skills/generating-lwc-components/references/async-notification-patterns.md +661 -0
- package/skills/generating-lwc-components/references/cli-commands.md +545 -0
- package/skills/generating-lwc-components/references/component-patterns.md +1476 -0
- package/skills/generating-lwc-components/references/flow-integration-guide.md +675 -0
- package/skills/generating-lwc-components/references/jest-testing.md +1011 -0
- package/skills/generating-lwc-components/references/lms-guide.md +860 -0
- package/skills/generating-lwc-components/references/lwc-best-practices.md +1310 -0
- package/skills/generating-lwc-components/references/performance-guide.md +861 -0
- package/skills/generating-lwc-components/references/scoring-and-testing.md +116 -0
- package/skills/generating-lwc-components/references/slds-blueprints.json +14389 -0
- package/skills/generating-lwc-components/references/slds-design-guide.md +166 -0
- package/skills/generating-lwc-components/references/state-management.md +642 -0
- package/skills/generating-lwc-components/references/template-anti-patterns.md +948 -0
- package/skills/generating-lwc-components/references/triangle-pattern.md +365 -0
- package/skills/generating-lwc-components/scripts/local-dev-preview.sh +34 -0
- package/skills/generating-mermaid-diagrams/CREDITS.md +46 -0
- package/skills/generating-mermaid-diagrams/README.md +114 -0
- package/skills/generating-mermaid-diagrams/SKILL.md +218 -0
- package/skills/generating-mermaid-diagrams/assets/agentforce/agent-flow.md +313 -0
- package/skills/generating-mermaid-diagrams/assets/architecture/system-landscape.md +351 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/b2b-commerce-erd.md +317 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/campaigns-erd.md +195 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/consent-erd.md +262 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/files-erd.md +266 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/forecasting-erd.md +261 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/fsl-erd.md +332 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/party-model-erd.md +237 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/quote-order-erd.md +277 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/revenue-cloud-erd.md +343 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/sales-cloud-erd.md +192 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/salesforce-erd.md +209 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/scheduler-erd.md +276 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/service-cloud-erd.md +217 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/territory-management-erd.md +241 -0
- package/skills/generating-mermaid-diagrams/assets/integration/api-sequence.md +387 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code-pkce.md +197 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code.md +152 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/client-credentials.md +233 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/device-authorization.md +295 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/jwt-bearer.md +256 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/refresh-token.md +281 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/user-agent-social-sign-on.md +281 -0
- package/skills/generating-mermaid-diagrams/assets/role-hierarchy/user-hierarchy.md +322 -0
- package/skills/generating-mermaid-diagrams/references/color-palette.md +464 -0
- package/skills/generating-mermaid-diagrams/references/diagram-conventions.md +313 -0
- package/skills/generating-mermaid-diagrams/references/erd-conventions.md +320 -0
- package/skills/generating-mermaid-diagrams/references/mermaid-reference.md +434 -0
- package/skills/generating-mermaid-diagrams/references/mermaid-styling.md +81 -0
- package/skills/generating-mermaid-diagrams/references/preview-guide.md +49 -0
- package/skills/generating-mermaid-diagrams/references/usage-examples.md +340 -0
- package/skills/generating-mermaid-diagrams/scripts/README.md +160 -0
- package/skills/generating-mermaid-diagrams/scripts/mermaid_preview.py +654 -0
- package/skills/generating-mermaid-diagrams/scripts/query-org-metadata.py +293 -0
- package/skills/generating-visual-diagrams/CREDITS.md +80 -0
- package/skills/generating-visual-diagrams/README.md +83 -0
- package/skills/generating-visual-diagrams/SKILL.md +208 -0
- package/skills/generating-visual-diagrams/assets/architecture/integration-flow.md +55 -0
- package/skills/generating-visual-diagrams/assets/erd/core-objects.md +131 -0
- package/skills/generating-visual-diagrams/assets/erd/custom-objects.md +60 -0
- package/skills/generating-visual-diagrams/assets/lwc/dashboard-card.md +45 -0
- package/skills/generating-visual-diagrams/assets/lwc/data-table.md +57 -0
- package/skills/generating-visual-diagrams/assets/lwc/record-form.md +60 -0
- package/skills/generating-visual-diagrams/assets/review/apex-review.md +57 -0
- package/skills/generating-visual-diagrams/assets/review/lwc-review.md +48 -0
- package/skills/generating-visual-diagrams/references/architect-aesthetic-guide.md +257 -0
- package/skills/generating-visual-diagrams/references/examples-index.md +35 -0
- package/skills/generating-visual-diagrams/references/gemini-cli-setup.md +65 -0
- package/skills/generating-visual-diagrams/references/interview-questions.md +529 -0
- package/skills/generating-visual-diagrams/references/iteration-workflow.md +173 -0
- package/skills/generating-visual-diagrams/scripts/check-prerequisites.sh +101 -0
- package/skills/generating-visual-diagrams/scripts/generate_image.py +243 -0
- package/skills/handling-sf-data/CREDITS.md +5 -0
- package/skills/handling-sf-data/README.md +112 -0
- package/skills/handling-sf-data/SKILL.md +235 -0
- package/skills/handling-sf-data/assets/bulk/bulk-insert-10000.apex +293 -0
- package/skills/handling-sf-data/assets/bulk/bulk-insert-200.apex +208 -0
- package/skills/handling-sf-data/assets/bulk/bulk-insert-500.apex +219 -0
- package/skills/handling-sf-data/assets/bulk/bulk-upsert-external-id.apex +324 -0
- package/skills/handling-sf-data/assets/cleanup/delete-by-created-date.apex +319 -0
- package/skills/handling-sf-data/assets/cleanup/delete-by-name.apex +240 -0
- package/skills/handling-sf-data/assets/cleanup/delete-test-data.apex +311 -0
- package/skills/handling-sf-data/assets/cleanup/rollback-transaction.apex +266 -0
- package/skills/handling-sf-data/assets/csv/account-import.csv +11 -0
- package/skills/handling-sf-data/assets/csv/contact-import.csv +11 -0
- package/skills/handling-sf-data/assets/csv/custom-object-import.csv +11 -0
- package/skills/handling-sf-data/assets/csv/opportunity-import.csv +11 -0
- package/skills/handling-sf-data/assets/factories/account-factory.apex +165 -0
- package/skills/handling-sf-data/assets/factories/case-factory.apex +237 -0
- package/skills/handling-sf-data/assets/factories/contact-factory.apex +168 -0
- package/skills/handling-sf-data/assets/factories/custom-object-factory.apex +260 -0
- package/skills/handling-sf-data/assets/factories/event-factory.apex +275 -0
- package/skills/handling-sf-data/assets/factories/hierarchy-factory.apex +372 -0
- package/skills/handling-sf-data/assets/factories/lead-factory.apex +190 -0
- package/skills/handling-sf-data/assets/factories/opportunity-factory.apex +206 -0
- package/skills/handling-sf-data/assets/factories/task-factory.apex +246 -0
- package/skills/handling-sf-data/assets/factories/user-factory.apex +278 -0
- package/skills/handling-sf-data/assets/json/account-contact-tree.json +130 -0
- package/skills/handling-sf-data/assets/json/account-opportunity-tree.json +110 -0
- package/skills/handling-sf-data/assets/json/full-hierarchy-tree.json +188 -0
- package/skills/handling-sf-data/assets/soql/aggregate.soql +226 -0
- package/skills/handling-sf-data/assets/soql/child-to-parent.soql +162 -0
- package/skills/handling-sf-data/assets/soql/parent-to-child.soql +153 -0
- package/skills/handling-sf-data/assets/soql/polymorphic.soql +198 -0
- package/skills/handling-sf-data/assets/soql/subquery.soql +287 -0
- package/skills/handling-sf-data/references/anonymous-apex-guide.md +98 -0
- package/skills/handling-sf-data/references/bulk-operations-guide.md +94 -0
- package/skills/handling-sf-data/references/bulk-testing-example.md +194 -0
- package/skills/handling-sf-data/references/cleanup-rollback-example.md +322 -0
- package/skills/handling-sf-data/references/cleanup-rollback-guide.md +84 -0
- package/skills/handling-sf-data/references/crud-workflow-example.md +183 -0
- package/skills/handling-sf-data/references/governor-limits-reference.md +74 -0
- package/skills/handling-sf-data/references/orchestration.md +174 -0
- package/skills/handling-sf-data/references/relationship-query-examples.md +249 -0
- package/skills/handling-sf-data/references/sf-cli-data-commands.md +158 -0
- package/skills/handling-sf-data/references/soql-relationship-guide.md +84 -0
- package/skills/handling-sf-data/references/test-data-best-practices.md +104 -0
- package/skills/handling-sf-data/references/test-data-factory-usage.md +290 -0
- package/skills/handling-sf-data/references/test-data-patterns.md +98 -0
- package/skills/handling-sf-data/scripts/soql_validator.py +292 -0
- package/skills/handling-sf-data/scripts/validate_data_operation.py +379 -0
- package/skills/harmonizing-datacloud/CREDITS.md +3 -0
- package/skills/harmonizing-datacloud/README.md +31 -0
- package/skills/harmonizing-datacloud/SKILL.md +117 -0
- package/skills/modeling-omnistudio-epc-catalog/CREDITS.md +14 -0
- package/skills/modeling-omnistudio-epc-catalog/README.md +89 -0
- package/skills/modeling-omnistudio-epc-catalog/SKILL.md +395 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/attribute-assignment-template.json +402 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/compiled-attribute-overrides-template.json +43 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/completion-block-template.txt +8 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/decomposition-relationships-template.json +233 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_AttributeAssignments.json +514 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_CompiledAttributeOverrides.json +21 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DataPack.json +649 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DecompositionRelationships.json +200 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ObjectFieldAttributes.json +138 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OrchestrationScenarios.json +54 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OverrideDefinitions.json +266 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ParentKeys.json +23 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PriceListEntries.json +54 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PricebookEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ProductChildItems.json +34 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_RuleAssignments.json +21 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_AttributeAssignments.json +410 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DataPack.json +535 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DecompositionRelationships.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ObjectFieldAttributes.json +138 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_OrchestrationScenarios.json +28 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ParentKeys.json +23 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PriceListEntries.json +220 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PricebookEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ProductChildItems.json +414 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_AttributeAssignments.json +382 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DataPack.json +565 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DecompositionRelationships.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ObjectFieldAttributes.json +104 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_OrchestrationScenarios.json +28 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ParentKeys.json +13 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PriceListEntries.json +106 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PricebookEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ProductChildItems.json +72 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_AttributeAssignments.json +142 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DataPack.json +377 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DecompositionRelationships.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ObjectFieldAttributes.json +36 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ParentKeys.json +8 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PriceListEntries.json +54 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PricebookEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ProductChildItems.json +34 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/object-field-attributes-template.json +138 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/orchestration-scenarios-template.json +54 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/override-definitions-template.json +134 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/parent-keys-template.json +29 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/price-list-entries-template.json +158 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/pricebook-entries-template.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/product-child-item-template.json +338 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/product2-offer-template.json +527 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/.gitkeep +1 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_AttributeAssignments.json +95 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_CompiledAttributeOverrides.json +1 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DataPack.json +214 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DecompositionRelationships.json +28 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ObjectFieldAttributes.json +98 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OrchestrationScenarios.json +22 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OverrideDefinitions.json +1 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ParentKeys.json +13 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PriceListEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PricebookEntries.json +28 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ProductChildItems.json +110 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/TRANSCRIPT.md +58 -0
- package/skills/modeling-omnistudio-epc-catalog/references/epc-field-guide.md +90 -0
- package/skills/modeling-omnistudio-epc-catalog/references/naming-conventions.md +80 -0
- package/skills/modeling-omnistudio-epc-catalog/references/scoring-model.md +57 -0
- package/skills/modeling-omnistudio-epc-catalog/scripts/cli-validation-commands.sh +19 -0
- package/skills/modeling-omnistudio-epc-catalog/scripts/sample-invocations.sh +18 -0
- package/skills/orchestrating-datacloud/CREDITS.md +15 -0
- package/skills/orchestrating-datacloud/README.md +129 -0
- package/skills/orchestrating-datacloud/SKILL.md +236 -0
- package/skills/orchestrating-datacloud/UPSTREAM.md +45 -0
- package/skills/orchestrating-datacloud/assets/definitions/activation-target.template.json +5 -0
- package/skills/orchestrating-datacloud/assets/definitions/activation.template.json +7 -0
- package/skills/orchestrating-datacloud/assets/definitions/calculated-insight.template.json +7 -0
- package/skills/orchestrating-datacloud/assets/definitions/data-action-target.template.json +5 -0
- package/skills/orchestrating-datacloud/assets/definitions/data-action.template.json +5 -0
- package/skills/orchestrating-datacloud/assets/definitions/data-graph.template.json +21 -0
- package/skills/orchestrating-datacloud/assets/definitions/data-stream.template.json +55 -0
- package/skills/orchestrating-datacloud/assets/definitions/dmo.template.json +17 -0
- package/skills/orchestrating-datacloud/assets/definitions/identity-resolution.template.json +30 -0
- package/skills/orchestrating-datacloud/assets/definitions/mapping.template.json +14 -0
- package/skills/orchestrating-datacloud/assets/definitions/relationship.template.json +12 -0
- package/skills/orchestrating-datacloud/assets/definitions/search-index.template.json +9 -0
- package/skills/orchestrating-datacloud/assets/definitions/segment.template.json +16 -0
- package/skills/orchestrating-datacloud/references/feature-readiness.md +157 -0
- package/skills/orchestrating-datacloud/references/plugin-setup.md +140 -0
- package/skills/orchestrating-datacloud/scripts/bootstrap-plugin.sh +53 -0
- package/skills/orchestrating-datacloud/scripts/diagnose-org.mjs +511 -0
- package/skills/orchestrating-datacloud/scripts/generate-manifest.mjs +68 -0
- package/skills/orchestrating-datacloud/scripts/verify-plugin.sh +58 -0
- package/skills/preparing-datacloud/CREDITS.md +7 -0
- package/skills/preparing-datacloud/README.md +51 -0
- package/skills/preparing-datacloud/SKILL.md +191 -0
- package/skills/preparing-datacloud/examples/ingestion-api/.env.example +8 -0
- package/skills/preparing-datacloud/examples/ingestion-api/README.md +48 -0
- package/skills/preparing-datacloud/examples/ingestion-api/send-data.py +144 -0
- package/skills/querying-soql/CREDITS.md +21 -0
- package/skills/querying-soql/README.md +41 -0
- package/skills/querying-soql/SKILL.md +143 -0
- package/skills/querying-soql/assets/aggregate-queries.soql +242 -0
- package/skills/querying-soql/assets/basic-queries.soql +188 -0
- package/skills/querying-soql/assets/bulkified-query-pattern.cls +280 -0
- package/skills/querying-soql/assets/optimization-patterns.soql +259 -0
- package/skills/querying-soql/assets/relationship-queries.soql +203 -0
- package/skills/querying-soql/assets/selector-class.cls +219 -0
- package/skills/querying-soql/references/anti-patterns.md +348 -0
- package/skills/querying-soql/references/cli-commands.md +358 -0
- package/skills/querying-soql/references/field-coverage-rules.md +514 -0
- package/skills/querying-soql/references/query-optimization.md +142 -0
- package/skills/querying-soql/references/selector-patterns.md +479 -0
- package/skills/querying-soql/references/soql-reference.md +227 -0
- package/skills/querying-soql/references/soql-syntax-reference.md +208 -0
- package/skills/querying-soql/scripts/post-tool-validate.py +322 -0
- package/skills/retrieving-datacloud/CREDITS.md +7 -0
- package/skills/retrieving-datacloud/README.md +44 -0
- package/skills/retrieving-datacloud/SKILL.md +120 -0
- package/skills/retrieving-datacloud/examples/search-indexes/hybrid-structured.json +44 -0
- package/skills/retrieving-datacloud/examples/search-indexes/vector-knowledge.json +43 -0
- package/skills/running-apex-tests/CREDITS.md +22 -0
- package/skills/running-apex-tests/README.md +94 -0
- package/skills/running-apex-tests/SKILL.md +158 -0
- package/skills/running-apex-tests/assets/basic-test.cls +169 -0
- package/skills/running-apex-tests/assets/bulk-test.cls +255 -0
- package/skills/running-apex-tests/assets/dml-mock.cls +339 -0
- package/skills/running-apex-tests/assets/mock-callout-test.cls +353 -0
- package/skills/running-apex-tests/assets/stub-provider-example.cls +364 -0
- package/skills/running-apex-tests/assets/test-data-factory.cls +328 -0
- package/skills/running-apex-tests/hooks/scripts/parse-test-results.py +364 -0
- package/skills/running-apex-tests/references/cli-commands.md +289 -0
- package/skills/running-apex-tests/references/mocking-patterns.md +500 -0
- package/skills/running-apex-tests/references/performance-optimization.md +283 -0
- package/skills/running-apex-tests/references/test-fix-loop.md +49 -0
- package/skills/running-apex-tests/references/test-patterns.md +154 -0
- package/skills/running-apex-tests/references/testing-best-practices.md +509 -0
- package/skills/segmenting-datacloud/CREDITS.md +3 -0
- package/skills/segmenting-datacloud/README.md +36 -0
- package/skills/segmenting-datacloud/SKILL.md +115 -0
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
sf-data Validation Module
|
|
4
|
+
=========================
|
|
5
|
+
|
|
6
|
+
Validates data operation files against the 130-point scoring system:
|
|
7
|
+
- Query Efficiency (25 points)
|
|
8
|
+
- Bulk Safety (25 points)
|
|
9
|
+
- Data Integrity (20 points)
|
|
10
|
+
- Security & FLS (20 points)
|
|
11
|
+
- Test Patterns (15 points)
|
|
12
|
+
- Cleanup & Isolation (15 points)
|
|
13
|
+
- Documentation (10 points)
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
import re
|
|
17
|
+
from pathlib import Path
|
|
18
|
+
from typing import Dict, List, Any, Optional
|
|
19
|
+
|
|
20
|
+
class DataOperationValidator:
|
|
21
|
+
"""Validates data operation files."""
|
|
22
|
+
|
|
23
|
+
# Scoring categories
|
|
24
|
+
CATEGORIES = {
|
|
25
|
+
'query_efficiency': {
|
|
26
|
+
'name': 'Query Efficiency',
|
|
27
|
+
'max': 25,
|
|
28
|
+
'score': 25,
|
|
29
|
+
'issues': []
|
|
30
|
+
},
|
|
31
|
+
'bulk_safety': {
|
|
32
|
+
'name': 'Bulk Safety',
|
|
33
|
+
'max': 25,
|
|
34
|
+
'score': 25,
|
|
35
|
+
'issues': []
|
|
36
|
+
},
|
|
37
|
+
'data_integrity': {
|
|
38
|
+
'name': 'Data Integrity',
|
|
39
|
+
'max': 20,
|
|
40
|
+
'score': 20,
|
|
41
|
+
'issues': []
|
|
42
|
+
},
|
|
43
|
+
'security_fls': {
|
|
44
|
+
'name': 'Security & FLS',
|
|
45
|
+
'max': 20,
|
|
46
|
+
'score': 20,
|
|
47
|
+
'issues': []
|
|
48
|
+
},
|
|
49
|
+
'test_patterns': {
|
|
50
|
+
'name': 'Test Patterns',
|
|
51
|
+
'max': 15,
|
|
52
|
+
'score': 15,
|
|
53
|
+
'issues': []
|
|
54
|
+
},
|
|
55
|
+
'cleanup_isolation': {
|
|
56
|
+
'name': 'Cleanup & Isolation',
|
|
57
|
+
'max': 15,
|
|
58
|
+
'score': 15,
|
|
59
|
+
'issues': []
|
|
60
|
+
},
|
|
61
|
+
'documentation': {
|
|
62
|
+
'name': 'Documentation',
|
|
63
|
+
'max': 10,
|
|
64
|
+
'score': 10,
|
|
65
|
+
'issues': []
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
def __init__(self, file_path: str):
|
|
70
|
+
self.file_path = Path(file_path)
|
|
71
|
+
self.content = ''
|
|
72
|
+
self.file_type = ''
|
|
73
|
+
self.issues: List[Dict[str, Any]] = []
|
|
74
|
+
self.recommendations: List[str] = []
|
|
75
|
+
self.categories = self._init_categories()
|
|
76
|
+
|
|
77
|
+
def _init_categories(self) -> Dict[str, Dict[str, Any]]:
|
|
78
|
+
"""Initialize fresh category scores."""
|
|
79
|
+
import copy
|
|
80
|
+
return copy.deepcopy(self.CATEGORIES)
|
|
81
|
+
|
|
82
|
+
def validate(self) -> Optional[Dict[str, Any]]:
|
|
83
|
+
"""Run validation and return results."""
|
|
84
|
+
if not self.file_path.exists():
|
|
85
|
+
return None
|
|
86
|
+
|
|
87
|
+
try:
|
|
88
|
+
with open(self.file_path, 'r', encoding='utf-8') as f:
|
|
89
|
+
self.content = f.read()
|
|
90
|
+
except Exception:
|
|
91
|
+
return None
|
|
92
|
+
|
|
93
|
+
# Determine file type
|
|
94
|
+
self.file_type = self.file_path.suffix.lower()
|
|
95
|
+
|
|
96
|
+
# Run type-specific validation
|
|
97
|
+
if self.file_type == '.apex':
|
|
98
|
+
self._validate_apex()
|
|
99
|
+
elif self.file_type == '.soql':
|
|
100
|
+
self._validate_soql()
|
|
101
|
+
elif self.file_type == '.csv':
|
|
102
|
+
self._validate_csv()
|
|
103
|
+
elif self.file_type == '.json':
|
|
104
|
+
self._validate_json()
|
|
105
|
+
else:
|
|
106
|
+
return None
|
|
107
|
+
|
|
108
|
+
# Calculate total score
|
|
109
|
+
total_score = sum(cat['score'] for cat in self.categories.values())
|
|
110
|
+
max_score = sum(cat['max'] for cat in self.categories.values())
|
|
111
|
+
|
|
112
|
+
return {
|
|
113
|
+
'score': total_score,
|
|
114
|
+
'max_score': max_score,
|
|
115
|
+
'categories': {cat['name']: {'score': cat['score'], 'max': cat['max']}
|
|
116
|
+
for cat in self.categories.values()},
|
|
117
|
+
'issues': self.issues,
|
|
118
|
+
'recommendations': self.recommendations
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
def _validate_apex(self):
|
|
122
|
+
"""Validate Apex data operation file."""
|
|
123
|
+
content = self.content
|
|
124
|
+
|
|
125
|
+
# Query Efficiency (25 points)
|
|
126
|
+
self._check_query_efficiency(content)
|
|
127
|
+
|
|
128
|
+
# Bulk Safety (25 points)
|
|
129
|
+
self._check_bulk_safety(content)
|
|
130
|
+
|
|
131
|
+
# Data Integrity (20 points)
|
|
132
|
+
self._check_data_integrity(content)
|
|
133
|
+
|
|
134
|
+
# Security & FLS (20 points)
|
|
135
|
+
self._check_security(content)
|
|
136
|
+
|
|
137
|
+
# Test Patterns (15 points)
|
|
138
|
+
self._check_test_patterns(content)
|
|
139
|
+
|
|
140
|
+
# Cleanup & Isolation (15 points)
|
|
141
|
+
self._check_cleanup(content)
|
|
142
|
+
|
|
143
|
+
# Documentation (10 points)
|
|
144
|
+
self._check_documentation(content)
|
|
145
|
+
|
|
146
|
+
def _validate_soql(self):
|
|
147
|
+
"""Validate SOQL query file."""
|
|
148
|
+
content = self.content
|
|
149
|
+
|
|
150
|
+
# Import SOQL validator
|
|
151
|
+
try:
|
|
152
|
+
from soql_validator import SOQLValidator
|
|
153
|
+
soql_validator = SOQLValidator(content)
|
|
154
|
+
soql_result = soql_validator.validate()
|
|
155
|
+
|
|
156
|
+
# Apply SOQL-specific scoring
|
|
157
|
+
if soql_result.get('has_where_clause', False):
|
|
158
|
+
pass # Good
|
|
159
|
+
else:
|
|
160
|
+
self._deduct('query_efficiency', 5, 'Missing WHERE clause')
|
|
161
|
+
|
|
162
|
+
if soql_result.get('has_limit', False):
|
|
163
|
+
pass # Good
|
|
164
|
+
else:
|
|
165
|
+
self._deduct('query_efficiency', 3, 'Missing LIMIT clause')
|
|
166
|
+
|
|
167
|
+
if soql_result.get('has_hardcoded_ids', False):
|
|
168
|
+
self._deduct('query_efficiency', 5, 'Hardcoded record IDs found')
|
|
169
|
+
|
|
170
|
+
except ImportError:
|
|
171
|
+
# Basic SOQL validation
|
|
172
|
+
if 'WHERE' not in content.upper():
|
|
173
|
+
self._deduct('query_efficiency', 5, 'Missing WHERE clause')
|
|
174
|
+
if 'LIMIT' not in content.upper():
|
|
175
|
+
self._deduct('query_efficiency', 3, 'Missing LIMIT clause')
|
|
176
|
+
|
|
177
|
+
# Documentation check for SOQL
|
|
178
|
+
if not content.strip().startswith('--'):
|
|
179
|
+
self._deduct('documentation', 5, 'Missing SOQL documentation/comments')
|
|
180
|
+
|
|
181
|
+
def _validate_csv(self):
|
|
182
|
+
"""Validate CSV import file."""
|
|
183
|
+
lines = self.content.strip().split('\n')
|
|
184
|
+
|
|
185
|
+
if len(lines) < 2:
|
|
186
|
+
self._deduct('data_integrity', 10, 'CSV file has no data rows')
|
|
187
|
+
return
|
|
188
|
+
|
|
189
|
+
# Check for header row
|
|
190
|
+
header = lines[0]
|
|
191
|
+
if not header or ',' not in header:
|
|
192
|
+
self._deduct('data_integrity', 5, 'CSV missing proper header row')
|
|
193
|
+
|
|
194
|
+
# Check for consistent column count
|
|
195
|
+
expected_cols = len(header.split(','))
|
|
196
|
+
for i, line in enumerate(lines[1:], 2):
|
|
197
|
+
if line.strip() and len(line.split(',')) != expected_cols:
|
|
198
|
+
self._deduct('data_integrity', 2, f'Inconsistent column count on line {i}')
|
|
199
|
+
break
|
|
200
|
+
|
|
201
|
+
# Check for potential PII patterns
|
|
202
|
+
self._check_csv_security(self.content)
|
|
203
|
+
|
|
204
|
+
def _validate_json(self):
|
|
205
|
+
"""Validate JSON tree import file."""
|
|
206
|
+
import json as json_lib
|
|
207
|
+
|
|
208
|
+
try:
|
|
209
|
+
data = json_lib.loads(self.content)
|
|
210
|
+
except json_lib.JSONDecodeError as e:
|
|
211
|
+
self._deduct('data_integrity', 20, f'Invalid JSON: {str(e)}')
|
|
212
|
+
return
|
|
213
|
+
|
|
214
|
+
# Check for proper sObject tree format
|
|
215
|
+
if 'records' not in data:
|
|
216
|
+
self._deduct('data_integrity', 10, 'Missing "records" array')
|
|
217
|
+
return
|
|
218
|
+
|
|
219
|
+
records = data.get('records', [])
|
|
220
|
+
|
|
221
|
+
for i, record in enumerate(records):
|
|
222
|
+
if 'attributes' not in record:
|
|
223
|
+
self._deduct('data_integrity', 5, f'Record {i+1} missing "attributes"')
|
|
224
|
+
else:
|
|
225
|
+
attrs = record['attributes']
|
|
226
|
+
if 'type' not in attrs:
|
|
227
|
+
self._deduct('data_integrity', 3, f'Record {i+1} missing object type')
|
|
228
|
+
if 'referenceId' not in attrs:
|
|
229
|
+
self._deduct('data_integrity', 2, f'Record {i+1} missing referenceId')
|
|
230
|
+
|
|
231
|
+
def _check_query_efficiency(self, content: str):
|
|
232
|
+
"""Check for query efficiency issues."""
|
|
233
|
+
# Check for queries in loops
|
|
234
|
+
if re.search(r'for\s*\([^)]*\)\s*\{[^}]*\[SELECT', content, re.IGNORECASE | re.DOTALL):
|
|
235
|
+
self._deduct('query_efficiency', 10, 'SOQL query inside for loop (N+1 pattern)')
|
|
236
|
+
|
|
237
|
+
# Check for hardcoded IDs
|
|
238
|
+
if re.search(r"'[a-zA-Z0-9]{15,18}'", content):
|
|
239
|
+
self._deduct('query_efficiency', 5, 'Hardcoded Salesforce ID found')
|
|
240
|
+
|
|
241
|
+
# Check for SELECT * equivalent (all fields)
|
|
242
|
+
if re.search(r'SELECT\s+\*', content, re.IGNORECASE):
|
|
243
|
+
self._deduct('query_efficiency', 5, 'SELECT * is not valid in SOQL')
|
|
244
|
+
|
|
245
|
+
def _check_bulk_safety(self, content: str):
|
|
246
|
+
"""Check for bulk safety issues."""
|
|
247
|
+
# Check for DML in loops
|
|
248
|
+
dml_in_loop = re.search(
|
|
249
|
+
r'for\s*\([^)]*\)\s*\{[^}]*(insert|update|delete|upsert)\s+',
|
|
250
|
+
content, re.IGNORECASE | re.DOTALL
|
|
251
|
+
)
|
|
252
|
+
if dml_in_loop:
|
|
253
|
+
self._deduct('bulk_safety', 10, 'DML operation inside for loop')
|
|
254
|
+
|
|
255
|
+
# Check for single-record operations when bulk would be better
|
|
256
|
+
single_record_pattern = re.search(
|
|
257
|
+
r'(insert|update|delete)\s+\w+\s*;(?!\s*//\s*single)',
|
|
258
|
+
content, re.IGNORECASE
|
|
259
|
+
)
|
|
260
|
+
# This is a soft check - single records are sometimes intentional
|
|
261
|
+
|
|
262
|
+
# Check for list-based DML (good pattern)
|
|
263
|
+
if re.search(r'(insert|update|delete)\s+\w+List', content, re.IGNORECASE):
|
|
264
|
+
pass # Good - using list-based DML
|
|
265
|
+
elif re.search(r'(insert|update|delete)\s+new\s+List<', content, re.IGNORECASE):
|
|
266
|
+
pass # Good - using list
|
|
267
|
+
|
|
268
|
+
def _check_data_integrity(self, content: str):
|
|
269
|
+
"""Check for data integrity issues."""
|
|
270
|
+
# Check for required field handling
|
|
271
|
+
if 'required' in content.lower() or 'mandatory' in content.lower():
|
|
272
|
+
pass # Awareness of required fields
|
|
273
|
+
|
|
274
|
+
# Check for null checks
|
|
275
|
+
if re.search(r'!=\s*null|!= null', content):
|
|
276
|
+
pass # Good - null checking
|
|
277
|
+
|
|
278
|
+
def _check_security(self, content: str):
|
|
279
|
+
"""Check for security issues."""
|
|
280
|
+
# Check for PII patterns
|
|
281
|
+
pii_patterns = [
|
|
282
|
+
(r'\b\d{3}-\d{2}-\d{4}\b', 'SSN pattern detected'),
|
|
283
|
+
(r'\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}\b', 'Credit card pattern detected'),
|
|
284
|
+
(r'\b[A-Za-z0-9._%+-]+@(gmail|yahoo|hotmail|outlook)\.(com|net|org)\b',
|
|
285
|
+
'Personal email domain in test data')
|
|
286
|
+
]
|
|
287
|
+
|
|
288
|
+
for pattern, message in pii_patterns:
|
|
289
|
+
if re.search(pattern, content):
|
|
290
|
+
self._deduct('security_fls', 10, message)
|
|
291
|
+
|
|
292
|
+
# Check for WITH USER_MODE usage (good practice)
|
|
293
|
+
if 'WITH USER_MODE' in content.upper():
|
|
294
|
+
pass # Good - respecting FLS
|
|
295
|
+
|
|
296
|
+
def _check_test_patterns(self, content: str):
|
|
297
|
+
"""Check for good test data patterns."""
|
|
298
|
+
# Check for bulk record creation (200+)
|
|
299
|
+
bulk_patterns = [
|
|
300
|
+
r'(\d{3,})\s*[;,)]', # Numbers 100+
|
|
301
|
+
r'count\s*[=:]\s*(\d{3,})',
|
|
302
|
+
r'recordCount\s*[=:]\s*(\d{3,})'
|
|
303
|
+
]
|
|
304
|
+
|
|
305
|
+
has_bulk = False
|
|
306
|
+
for pattern in bulk_patterns:
|
|
307
|
+
match = re.search(pattern, content)
|
|
308
|
+
if match:
|
|
309
|
+
try:
|
|
310
|
+
num = int(match.group(1))
|
|
311
|
+
if num >= 200:
|
|
312
|
+
has_bulk = True
|
|
313
|
+
except ValueError:
|
|
314
|
+
pass
|
|
315
|
+
|
|
316
|
+
# Check for edge case handling
|
|
317
|
+
edge_cases = ['null', 'empty', 'boundary', 'special character', 'unicode']
|
|
318
|
+
has_edge_cases = any(ec in content.lower() for ec in edge_cases)
|
|
319
|
+
|
|
320
|
+
if not has_bulk and 'bulk' not in self.file_path.stem.lower():
|
|
321
|
+
self._deduct('test_patterns', 5, 'Consider testing with 200+ records for bulkification')
|
|
322
|
+
|
|
323
|
+
def _check_cleanup(self, content: str):
|
|
324
|
+
"""Check for cleanup and isolation patterns."""
|
|
325
|
+
# Check for cleanup provisions
|
|
326
|
+
cleanup_patterns = ['cleanup', 'delete', 'rollback', 'Savepoint', 'Database.rollback']
|
|
327
|
+
has_cleanup = any(pattern.lower() in content.lower() for pattern in cleanup_patterns)
|
|
328
|
+
|
|
329
|
+
if not has_cleanup:
|
|
330
|
+
self._deduct('cleanup_isolation', 5, 'No cleanup mechanism found')
|
|
331
|
+
self.recommendations.append('Add cleanup script or savepoint for test isolation')
|
|
332
|
+
|
|
333
|
+
# Check for ID tracking
|
|
334
|
+
if re.search(r'Set<Id>|List<Id>|createdIds|recordIds', content):
|
|
335
|
+
pass # Good - tracking created IDs
|
|
336
|
+
|
|
337
|
+
def _check_documentation(self, content: str):
|
|
338
|
+
"""Check for documentation."""
|
|
339
|
+
# Check for file header comment
|
|
340
|
+
if not (content.strip().startswith('/*') or
|
|
341
|
+
content.strip().startswith('//') or
|
|
342
|
+
content.strip().startswith('/**')):
|
|
343
|
+
self._deduct('documentation', 3, 'Missing file header documentation')
|
|
344
|
+
|
|
345
|
+
# Check for method documentation
|
|
346
|
+
if re.search(r'/\*\*[\s\S]*?\*/', content):
|
|
347
|
+
pass # Has JSDoc-style comments
|
|
348
|
+
elif re.search(r'//.*description|//.*purpose|//.*usage', content, re.IGNORECASE):
|
|
349
|
+
pass # Has inline documentation
|
|
350
|
+
else:
|
|
351
|
+
self._deduct('documentation', 2, 'Consider adding method/section documentation')
|
|
352
|
+
|
|
353
|
+
def _check_csv_security(self, content: str):
|
|
354
|
+
"""Check CSV content for security issues."""
|
|
355
|
+
# Check for PII patterns in CSV
|
|
356
|
+
lines = content.split('\n')
|
|
357
|
+
for i, line in enumerate(lines, 1):
|
|
358
|
+
# SSN pattern
|
|
359
|
+
if re.search(r'\b\d{3}-\d{2}-\d{4}\b', line):
|
|
360
|
+
self._deduct('security_fls', 10, f'SSN pattern on line {i}')
|
|
361
|
+
break
|
|
362
|
+
# Credit card pattern
|
|
363
|
+
if re.search(r'\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}\b', line):
|
|
364
|
+
self._deduct('security_fls', 10, f'Credit card pattern on line {i}')
|
|
365
|
+
break
|
|
366
|
+
|
|
367
|
+
def _deduct(self, category: str, points: int, message: str):
|
|
368
|
+
"""Deduct points from a category and record the issue."""
|
|
369
|
+
if category in self.categories:
|
|
370
|
+
current = self.categories[category]['score']
|
|
371
|
+
self.categories[category]['score'] = max(0, current - points)
|
|
372
|
+
self.categories[category]['issues'].append(message)
|
|
373
|
+
|
|
374
|
+
self.issues.append({
|
|
375
|
+
'category': self.categories.get(category, {}).get('name', category),
|
|
376
|
+
'severity': 'error' if points >= 10 else 'warning',
|
|
377
|
+
'message': message,
|
|
378
|
+
'points': points
|
|
379
|
+
})
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# harmonizing-datacloud
|
|
2
|
+
|
|
3
|
+
Schema harmonization and unification workflows for Salesforce Data Cloud.
|
|
4
|
+
|
|
5
|
+
## Use this skill for
|
|
6
|
+
|
|
7
|
+
- DMOs (Data Model Objects)
|
|
8
|
+
- Field mappings
|
|
9
|
+
- Relationships
|
|
10
|
+
- Identity resolution
|
|
11
|
+
- Unified profiles
|
|
12
|
+
- Data graphs
|
|
13
|
+
- Universal ID lookup
|
|
14
|
+
|
|
15
|
+
## Example requests
|
|
16
|
+
|
|
17
|
+
```text
|
|
18
|
+
"Map this DLO to ssot__Individual__dlm"
|
|
19
|
+
"Help me create an identity resolution ruleset"
|
|
20
|
+
"Why are unified profiles not appearing?"
|
|
21
|
+
"Show me the DMO fields before I create mappings"
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Common commands
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
sf data360 dmo list --all -o myorg 2>/dev/null
|
|
28
|
+
sf data360 query describe -o myorg --table ssot__Individual__dlm 2>/dev/null
|
|
29
|
+
sf data360 dmo mapping-list -o myorg --source Contact_Home__dll --target ssot__Individual__dlm 2>/dev/null
|
|
30
|
+
sf data360 identity-resolution list -o myorg 2>/dev/null
|
|
31
|
+
```
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: harmonizing-datacloud
|
|
3
|
+
description: "Salesforce Data Cloud Harmonize phase. Use this skill when the user works with DMOs, mappings, relationships, identity resolution, unified profiles, data graphs, or universal IDs. TRIGGER when: user works with DMOs, mappings, relationships, identity resolution, unified profiles, data graphs, or universal IDs. DO NOT TRIGGER when: the task is only about streams/DLOs (use preparing-datacloud), segments/insights (use segmenting-datacloud), retrieval/search (use retrieving-datacloud), or STDM/session tracing (use observing-agentforce)."
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: "Requires an external community sf data360 CLI plugin and a Data Cloud-enabled org"
|
|
6
|
+
metadata:
|
|
7
|
+
version: "1.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# harmonizing-datacloud: Data Cloud Harmonize Phase
|
|
11
|
+
|
|
12
|
+
Use this skill when the user needs **schema harmonization and unification work**: DMOs, field mappings, relationships, identity resolution, unified profiles, data graphs, or universal ID lookup.
|
|
13
|
+
|
|
14
|
+
## When This Skill Owns the Task
|
|
15
|
+
|
|
16
|
+
Use `harmonizing-datacloud` when the work involves:
|
|
17
|
+
- `sf data360 dmo *`
|
|
18
|
+
- `sf data360 identity-resolution *`
|
|
19
|
+
- `sf data360 data-graph *`
|
|
20
|
+
- `sf data360 profile *`
|
|
21
|
+
- `sf data360 universal-id lookup`
|
|
22
|
+
|
|
23
|
+
Delegate elsewhere when the user is:
|
|
24
|
+
- still ingesting streams or building DLOs → [preparing-datacloud](../preparing-datacloud/SKILL.md)
|
|
25
|
+
- working on segment logic or calculated insights → [segmenting-datacloud](../segmenting-datacloud/SKILL.md)
|
|
26
|
+
- running SQL, describe, or search-index workflows → [retrieving-datacloud](../retrieving-datacloud/SKILL.md)
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Required Context to Gather First
|
|
31
|
+
|
|
32
|
+
Ask for or infer:
|
|
33
|
+
- source DLO and target DMO names
|
|
34
|
+
- whether the task is schema creation, mapping, IR, or graph-related
|
|
35
|
+
- target org alias
|
|
36
|
+
- whether a ruleset already exists
|
|
37
|
+
- the user’s desired unified entity model
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Core Operating Rules
|
|
42
|
+
|
|
43
|
+
- Inspect DMO schema before creating mappings.
|
|
44
|
+
- Run the shared readiness classifier before mutating harmonization assets: `node ~/.claude/skills/orchestrating-datacloud/scripts/diagnose-org.mjs -o <org> --phase harmonize --json`.
|
|
45
|
+
- Prefer `dmo list --all` when browsing the catalog, but use first-page `dmo list` for fast readiness checks.
|
|
46
|
+
- Use `query describe` or `dmo get --json` instead of inventing unsupported describe flows.
|
|
47
|
+
- Treat identity resolution runs as asynchronous and verify results after execution.
|
|
48
|
+
- Keep unified-profile work separate from STDM/session tracing work.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Recommended Workflow
|
|
53
|
+
|
|
54
|
+
### 1. Classify readiness for harmonize work
|
|
55
|
+
```bash
|
|
56
|
+
node ~/.claude/skills/orchestrating-datacloud/scripts/diagnose-org.mjs -o <org> --phase harmonize --json
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 2. Inspect the catalog
|
|
60
|
+
```bash
|
|
61
|
+
sf data360 dmo list --all -o <org> 2>/dev/null
|
|
62
|
+
sf data360 identity-resolution list -o <org> 2>/dev/null
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 3. Inspect schema before mapping
|
|
66
|
+
```bash
|
|
67
|
+
sf data360 query describe -o <org> --table ssot__Individual__dlm 2>/dev/null
|
|
68
|
+
sf data360 dmo get -o <org> --name ssot__Individual__dlm --json 2>/dev/null
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### 4. Create or review mappings intentionally
|
|
72
|
+
```bash
|
|
73
|
+
sf data360 dmo mapping-list -o <org> --source Contact_Home__dll --target ssot__Individual__dlm 2>/dev/null
|
|
74
|
+
sf data360 dmo map-to-canonical -o <org> --dlo Contact_Home__dll --dmo ssot__Individual__dlm --dry-run 2>/dev/null
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 5. Run IR only after mappings are trustworthy
|
|
78
|
+
```bash
|
|
79
|
+
sf data360 identity-resolution create -o <org> -f ir-ruleset.json 2>/dev/null
|
|
80
|
+
sf data360 identity-resolution run -o <org> --name Main 2>/dev/null
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## High-Signal Gotchas
|
|
86
|
+
|
|
87
|
+
- `dmo list` should usually use `--all`.
|
|
88
|
+
- Use `query describe` or `dmo get --json`; there is no `dmo describe` command.
|
|
89
|
+
- Mapping and related commands can be sensitive to API-version differences.
|
|
90
|
+
- Unified DMO names are ruleset-specific rather than generic.
|
|
91
|
+
- Data graph definitions are sensitive to field selection and relationship shape.
|
|
92
|
+
- If `dmo list` works but `identity-resolution list` is gated, treat that as a phase-specific gap rather than a full Data Cloud outage.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Output Format
|
|
97
|
+
|
|
98
|
+
```text
|
|
99
|
+
Harmonize task: <dmo / mapping / relationship / ir / data-graph>
|
|
100
|
+
Source/target: <dlo → dmo or ruleset/graph names>
|
|
101
|
+
Target org: <alias>
|
|
102
|
+
Artifacts: <json files / commands>
|
|
103
|
+
Verification: <passed / partial / blocked>
|
|
104
|
+
Next step: <segment / retrieve / follow-up>
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## References
|
|
110
|
+
|
|
111
|
+
- [README.md](README.md)
|
|
112
|
+
- [../orchestrating-datacloud/assets/definitions/dmo.template.json](../orchestrating-datacloud/assets/definitions/dmo.template.json)
|
|
113
|
+
- [../orchestrating-datacloud/assets/definitions/mapping.template.json](../orchestrating-datacloud/assets/definitions/mapping.template.json)
|
|
114
|
+
- [../orchestrating-datacloud/assets/definitions/relationship.template.json](../orchestrating-datacloud/assets/definitions/relationship.template.json)
|
|
115
|
+
- [../orchestrating-datacloud/assets/definitions/identity-resolution.template.json](../orchestrating-datacloud/assets/definitions/identity-resolution.template.json)
|
|
116
|
+
- [../orchestrating-datacloud/assets/definitions/data-graph.template.json](../orchestrating-datacloud/assets/definitions/data-graph.template.json)
|
|
117
|
+
- [../orchestrating-datacloud/references/feature-readiness.md](../orchestrating-datacloud/references/feature-readiness.md)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Credits & Acknowledgments
|
|
2
|
+
|
|
3
|
+
This skill was created from practical Salesforce Industries CME EPC implementation patterns and DataPack examples in this repository.
|
|
4
|
+
|
|
5
|
+
## Repository Example Sources
|
|
6
|
+
|
|
7
|
+
The example packs in this skill are curated, reusable sample payloads for documentation and template authoring.
|
|
8
|
+
|
|
9
|
+
- `assets/` (canonical EPC bundle template set)
|
|
10
|
+
- `assets/examples/samsung-galaxy-s22-bundle/` (bundle offer example)
|
|
11
|
+
- `assets/examples/business-internet-premium-fttc-simple-offer/` (simple offer example)
|
|
12
|
+
- `assets/examples/business-internet-pro-vpl-simple-offer/` (simple offer example)
|
|
13
|
+
- `assets/examples/static-ip-simple-offer/` (simple offer example)
|
|
14
|
+
- `examples/business-internet-plus-bundle/` (generated example with transcript)
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# modeling-omnistudio-epc-catalog
|
|
2
|
+
|
|
3
|
+
Salesforce Industries CME EPC product-modeling skill for Product2-based catalog design. Build offer bundles, attributes, Product Child Items, and companion DataPack JSON artifacts with a 120-point quality rubric.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Offer Bundle Modeling**: Create `Product2` offers with `SpecificationType=Offer` and `SpecificationSubType=Bundle`
|
|
8
|
+
- **Attribute Modeling**: Define attribute metadata, defaults, valid values, and assignment payloads
|
|
9
|
+
- **Bundle Composition**: Build root and child `%vlocity_namespace%__ProductChildItem__c` rows with quantity semantics
|
|
10
|
+
- **Companion DataPack Generation**: Produce pricing, orchestration, decomposition, override, and parent-key files
|
|
11
|
+
- **DataPack Integrity Controls**: Keep global keys, source keys, and lookup references consistent
|
|
12
|
+
- **120-Point Scoring**: Validate bundle quality across 6 EPC-focused categories
|
|
13
|
+
|
|
14
|
+
## Quick Start
|
|
15
|
+
|
|
16
|
+
### 1. Invoke the skill
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
Skill: modeling-omnistudio-epc-catalog
|
|
20
|
+
Request: "Create a Product2 offer bundle named Business Internet Plus with ProductCode BIZ-INT-PLUS-01, 3 child products, and generate all companion DataPack JSON files from the assets templates."
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### 2. Typical operations
|
|
24
|
+
|
|
25
|
+
| Operation | Example Request |
|
|
26
|
+
|-----------|-----------------|
|
|
27
|
+
| Create bundle | "Create a Product2 offer bundle for Business Fiber Pro with 3 child products and full companion metadata." |
|
|
28
|
+
| Add attributes | "Add Contract Term and Download Speed attributes with defaults and valid values." |
|
|
29
|
+
| Build child items | "Create root and child ProductChildItem records with min/max/default quantity rules." |
|
|
30
|
+
| Generate companions | "Generate pricebook, price list, object field attribute, orchestration, decomposition, override, and parent key files." |
|
|
31
|
+
| Review and score | "Review this bundle DataPack and score it with the 120-point rubric." |
|
|
32
|
+
|
|
33
|
+
## Companion Files for Full Bundle Payload
|
|
34
|
+
|
|
35
|
+
When generating a complete bundle, include:
|
|
36
|
+
|
|
37
|
+
- `*_DataPack.json`
|
|
38
|
+
- `*_AttributeAssignments.json`
|
|
39
|
+
- `*_ProductChildItems.json`
|
|
40
|
+
- `*_PricebookEntries.json`
|
|
41
|
+
- `*_PriceListEntries.json`
|
|
42
|
+
- `*_ObjectFieldAttributes.json`
|
|
43
|
+
- `*_OrchestrationScenarios.json`
|
|
44
|
+
- `*_DecompositionRelationships.json`
|
|
45
|
+
- `*_CompiledAttributeOverrides.json`
|
|
46
|
+
- `*_OverrideDefinitions.json`
|
|
47
|
+
- `*_ParentKeys.json`
|
|
48
|
+
|
|
49
|
+
## Bundled Examples
|
|
50
|
+
|
|
51
|
+
- [assets/](assets/) - canonical EPC bundle template set for DataPack authoring
|
|
52
|
+
- [assets/examples/](assets/examples/) - additional bundle and simple-offer sample packs
|
|
53
|
+
- [examples/business-internet-plus-bundle/](examples/business-internet-plus-bundle/) - generated Business Internet Plus example with transcript
|
|
54
|
+
|
|
55
|
+
## Scoring System (120 Points)
|
|
56
|
+
|
|
57
|
+
| Category | Points | Focus |
|
|
58
|
+
|----------|--------|-------|
|
|
59
|
+
| Catalog Identity and Naming | 20 | Product naming, ProductCode quality, stable key strategy |
|
|
60
|
+
| EPC Product Structure | 20 | Required Product2/EPC fields, lifecycle and activation coherence |
|
|
61
|
+
| Attribute Modeling | 25 | Category quality, valid values/defaults, required/display behavior |
|
|
62
|
+
| Offer Bundle Composition | 25 | Root PCI, child integrity, quantity semantics |
|
|
63
|
+
| DataPack Integrity | 15 | Namespace placeholder usage, lookup portability, key consistency |
|
|
64
|
+
| Documentation and Handoff | 15 | Intent clarity, risks, verification guidance |
|
|
65
|
+
|
|
66
|
+
**Thresholds**: `>=95` Deploy-ready | `70-94` Needs review | `<70` Block and fix
|
|
67
|
+
|
|
68
|
+
## Cross-Skill Integration
|
|
69
|
+
|
|
70
|
+
| Related Skill | When to Use |
|
|
71
|
+
|---------------|-------------|
|
|
72
|
+
| analyzing-omnistudio-dependencies | Inventory namespace and dependencies before modeling |
|
|
73
|
+
| building-omnistudio-omniscript | Build guided selling UX on top of modeled catalog |
|
|
74
|
+
| building-omnistudio-integration-procedure | Orchestrate product and pricing interactions server-side |
|
|
75
|
+
| building-omnistudio-callable-apex | Implement callable Apex actions used by OmniStudio/IP flows over EPC selections |
|
|
76
|
+
| deploying-metadata | Validate and deploy generated metadata artifacts |
|
|
77
|
+
|
|
78
|
+
## Documentation
|
|
79
|
+
|
|
80
|
+
- [SKILL.md](SKILL.md) - Full EPC workflow, guardrails, and scoring
|
|
81
|
+
- [references/epc-field-guide.md](references/epc-field-guide.md) - EPC field-level guidance
|
|
82
|
+
- [references/naming-conventions.md](references/naming-conventions.md) - Naming and keying conventions
|
|
83
|
+
- [../building-omnistudio-callable-apex/README.md](../building-omnistudio-callable-apex/README.md) - Companion callable Apex patterns
|
|
84
|
+
|
|
85
|
+
## Requirements
|
|
86
|
+
|
|
87
|
+
- Salesforce Industries org with EPC enabled
|
|
88
|
+
- sf CLI v2 (for validation/deploy workflows)
|
|
89
|
+
- Compatible namespace model (`%vlocity_namespace%`, `vlocity_cmt`, or Core)
|