@salesforce/afv-skills 1.7.5 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (513) hide show
  1. package/package.json +1 -1
  2. package/skills/activating-datacloud/CREDITS.md +5 -0
  3. package/skills/activating-datacloud/README.md +39 -0
  4. package/skills/activating-datacloud/SKILL.md +118 -0
  5. package/skills/analyzing-omnistudio-dependencies/CREDITS.md +5 -0
  6. package/skills/analyzing-omnistudio-dependencies/SKILL.md +477 -0
  7. package/skills/analyzing-omnistudio-dependencies/references/dependency-patterns.md +508 -0
  8. package/skills/analyzing-omnistudio-dependencies/references/namespace-guide.md +300 -0
  9. package/skills/building-omnistudio-callable-apex/CREDITS.md +9 -0
  10. package/skills/building-omnistudio-callable-apex/README.md +80 -0
  11. package/skills/building-omnistudio-callable-apex/SKILL.md +276 -0
  12. package/skills/building-omnistudio-callable-apex/assets/pattern_callable_openinterface.cls +40 -0
  13. package/skills/building-omnistudio-callable-apex/assets/pattern_callable_vanilla.cls +32 -0
  14. package/skills/building-omnistudio-callable-apex/assets/pattern_migration.cls +54 -0
  15. package/skills/building-omnistudio-callable-apex/assets/pattern_openinterface.cls +45 -0
  16. package/skills/building-omnistudio-callable-apex/assets/pattern_test_class.cls +65 -0
  17. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/IndustriesCallableException.cls +7 -0
  18. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallable.cls +115 -0
  19. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallableTest.cls +189 -0
  20. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/TRANSCRIPT.md +115 -0
  21. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/IndustriesCallableException.cls +7 -0
  22. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallable.cls +74 -0
  23. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallableTest.cls +146 -0
  24. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomRemoteClass.cls +16 -0
  25. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/TRANSCRIPT.md +120 -0
  26. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/IndustriesCallableException.cls +7 -0
  27. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallable.cls +73 -0
  28. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallableTest.cls +128 -0
  29. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomVlocityOpenInterface2.cls +23 -0
  30. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/TRANSCRIPT.md +75 -0
  31. package/skills/building-omnistudio-datamapper/CREDITS.md +5 -0
  32. package/skills/building-omnistudio-datamapper/SKILL.md +270 -0
  33. package/skills/building-omnistudio-datamapper/assets/completion-summary-template.md +28 -0
  34. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-extract.json +6 -0
  35. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-item.json +12 -0
  36. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-load.json +6 -0
  37. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-transform.json +6 -0
  38. package/skills/building-omnistudio-datamapper/references/best-practices.md +277 -0
  39. package/skills/building-omnistudio-datamapper/references/naming-conventions.md +145 -0
  40. package/skills/building-omnistudio-flexcard/CREDITS.md +5 -0
  41. package/skills/building-omnistudio-flexcard/SKILL.md +325 -0
  42. package/skills/building-omnistudio-flexcard/assets/omni-ui-card.json +10 -0
  43. package/skills/building-omnistudio-flexcard/references/best-practices.md +291 -0
  44. package/skills/building-omnistudio-flexcard/references/data-binding-guide.md +311 -0
  45. package/skills/building-omnistudio-flexcard/references/scoring-rubric.md +66 -0
  46. package/skills/building-omnistudio-flexcard/scripts/flexcard-commands.sh +24 -0
  47. package/skills/building-omnistudio-integration-procedure/CREDITS.md +5 -0
  48. package/skills/building-omnistudio-integration-procedure/SKILL.md +275 -0
  49. package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-dr-extract.json +10 -0
  50. package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-set-values.json +10 -0
  51. package/skills/building-omnistudio-integration-procedure/assets/omni-process-ip.json +12 -0
  52. package/skills/building-omnistudio-integration-procedure/assets/scoring-report-format.txt +14 -0
  53. package/skills/building-omnistudio-integration-procedure/references/best-practices.md +388 -0
  54. package/skills/building-omnistudio-integration-procedure/references/element-types.md +588 -0
  55. package/skills/building-omnistudio-integration-procedure/scripts/cli-commands.sh +18 -0
  56. package/skills/building-omnistudio-omniscript/CREDITS.md +5 -0
  57. package/skills/building-omnistudio-omniscript/SKILL.md +367 -0
  58. package/skills/building-omnistudio-omniscript/assets/omni-process-element-step.json +10 -0
  59. package/skills/building-omnistudio-omniscript/assets/omni-process-element-text-block.json +11 -0
  60. package/skills/building-omnistudio-omniscript/assets/omni-process-omniscript.json +12 -0
  61. package/skills/building-omnistudio-omniscript/references/best-practices.md +480 -0
  62. package/skills/building-omnistudio-omniscript/references/element-types.md +1172 -0
  63. package/skills/building-omnistudio-omniscript/scripts/check-duplicate-omniscript.sh +13 -0
  64. package/skills/building-omnistudio-omniscript/scripts/cli-reference.sh +21 -0
  65. package/skills/building-omnistudio-omniscript/scripts/deploy-omniscript.sh +29 -0
  66. package/skills/building-sf-integrations/CREDITS.md +5 -0
  67. package/skills/building-sf-integrations/README.md +95 -0
  68. package/skills/building-sf-integrations/SKILL.md +192 -0
  69. package/skills/building-sf-integrations/assets/callouts/callout-retry-handler.cls +167 -0
  70. package/skills/building-sf-integrations/assets/callouts/http-response-handler.cls +257 -0
  71. package/skills/building-sf-integrations/assets/callouts/rest-queueable-callout.cls +262 -0
  72. package/skills/building-sf-integrations/assets/callouts/rest-sync-callout.cls +211 -0
  73. package/skills/building-sf-integrations/assets/cdc/cdc-handler.cls +246 -0
  74. package/skills/building-sf-integrations/assets/cdc/cdc-subscriber-trigger.trigger +139 -0
  75. package/skills/building-sf-integrations/assets/endpoint-security/example.cspTrustedSite-meta.xml +58 -0
  76. package/skills/building-sf-integrations/assets/endpoint-security/example.remoteSite-meta.xml +39 -0
  77. package/skills/building-sf-integrations/assets/external-credentials/jwt-external-credential.externalCredential-meta.xml +90 -0
  78. package/skills/building-sf-integrations/assets/external-credentials/oauth-external-credential.externalCredential-meta.xml +87 -0
  79. package/skills/building-sf-integrations/assets/external-services/external-service-operations.md +221 -0
  80. package/skills/building-sf-integrations/assets/external-services/openapi-registration.externalServiceRegistration-meta.xml +193 -0
  81. package/skills/building-sf-integrations/assets/named-credentials/certificate-auth.namedCredential-meta.xml +62 -0
  82. package/skills/building-sf-integrations/assets/named-credentials/custom-auth.namedCredential-meta.xml +71 -0
  83. package/skills/building-sf-integrations/assets/named-credentials/oauth-client-credentials.namedCredential-meta.xml +51 -0
  84. package/skills/building-sf-integrations/assets/named-credentials/oauth-jwt-bearer.namedCredential-meta.xml +67 -0
  85. package/skills/building-sf-integrations/assets/platform-events/event-publisher.cls +191 -0
  86. package/skills/building-sf-integrations/assets/platform-events/event-subscriber-action.cls +295 -0
  87. package/skills/building-sf-integrations/assets/platform-events/event-subscriber-trigger.trigger +108 -0
  88. package/skills/building-sf-integrations/assets/platform-events/platform-event-definition.object-meta.xml +124 -0
  89. package/skills/building-sf-integrations/assets/soap/soap-callout-service.cls +186 -0
  90. package/skills/building-sf-integrations/assets/soap/wsdl2apex-guide.md +213 -0
  91. package/skills/building-sf-integrations/hooks/scripts/suggest_credential_setup.py +271 -0
  92. package/skills/building-sf-integrations/hooks/scripts/validate_integration.py +363 -0
  93. package/skills/building-sf-integrations/references/callout-patterns.md +719 -0
  94. package/skills/building-sf-integrations/references/cdc-guide.md +288 -0
  95. package/skills/building-sf-integrations/references/cli-reference.md +94 -0
  96. package/skills/building-sf-integrations/references/event-driven-architecture-guide.md +266 -0
  97. package/skills/building-sf-integrations/references/event-patterns.md +838 -0
  98. package/skills/building-sf-integrations/references/external-services-guide.md +303 -0
  99. package/skills/building-sf-integrations/references/messaging-api-v2.md +609 -0
  100. package/skills/building-sf-integrations/references/named-credentials-automation.md +201 -0
  101. package/skills/building-sf-integrations/references/named-credentials-guide.md +173 -0
  102. package/skills/building-sf-integrations/references/platform-events-guide.md +288 -0
  103. package/skills/building-sf-integrations/references/rest-callout-patterns.md +288 -0
  104. package/skills/building-sf-integrations/references/scoring-rubric.md +59 -0
  105. package/skills/building-sf-integrations/references/security-best-practices.md +248 -0
  106. package/skills/building-sf-integrations/scripts/README.md +100 -0
  107. package/skills/building-sf-integrations/scripts/configure-named-credential.sh +236 -0
  108. package/skills/building-sf-integrations/scripts/set-api-credential.sh +146 -0
  109. package/skills/building-sf-integrations/scripts/templates/setup-credentials-with-csp.sh +158 -0
  110. package/skills/building-ui-bundle-frontend/SKILL.md +2 -0
  111. package/skills/configuring-connected-apps/CREDITS.md +3 -0
  112. package/skills/configuring-connected-apps/README.md +99 -0
  113. package/skills/configuring-connected-apps/SKILL.md +224 -0
  114. package/skills/configuring-connected-apps/assets/connected-app-basic.xml +29 -0
  115. package/skills/configuring-connected-apps/assets/connected-app-canvas.xml +62 -0
  116. package/skills/configuring-connected-apps/assets/connected-app-jwt.xml +49 -0
  117. package/skills/configuring-connected-apps/assets/connected-app-oauth.xml +65 -0
  118. package/skills/configuring-connected-apps/assets/eca-global-oauth.xml +36 -0
  119. package/skills/configuring-connected-apps/assets/eca-oauth-settings.xml +36 -0
  120. package/skills/configuring-connected-apps/assets/eca-policies.xml +36 -0
  121. package/skills/configuring-connected-apps/assets/external-client-app.xml +35 -0
  122. package/skills/configuring-connected-apps/references/example-usage.md +256 -0
  123. package/skills/configuring-connected-apps/references/migration-guide.md +328 -0
  124. package/skills/configuring-connected-apps/references/oauth-flows-reference.md +660 -0
  125. package/skills/configuring-connected-apps/references/security-checklist.md +209 -0
  126. package/skills/configuring-connected-apps/references/testing-validation-guide.md +275 -0
  127. package/skills/connecting-datacloud/CREDITS.md +5 -0
  128. package/skills/connecting-datacloud/README.md +59 -0
  129. package/skills/connecting-datacloud/SKILL.md +155 -0
  130. package/skills/connecting-datacloud/examples/connections/heroku-postgres.json +15 -0
  131. package/skills/connecting-datacloud/examples/connections/ingest-api-connection.json +5 -0
  132. package/skills/connecting-datacloud/examples/connections/ingest-api-schema.json +31 -0
  133. package/skills/connecting-datacloud/examples/connections/redshift.json +16 -0
  134. package/skills/connecting-datacloud/examples/connections/sharepoint-unstructured.json +20 -0
  135. package/skills/connecting-datacloud/examples/connections/snowflake-connection.json +42 -0
  136. package/skills/debugging-apex-logs/CREDITS.md +22 -0
  137. package/skills/debugging-apex-logs/README.md +74 -0
  138. package/skills/debugging-apex-logs/SKILL.md +172 -0
  139. package/skills/debugging-apex-logs/assets/benchmarking-template.cls +327 -0
  140. package/skills/debugging-apex-logs/assets/cpu-heap-optimization.cls +307 -0
  141. package/skills/debugging-apex-logs/assets/dml-in-loop-fix.cls +219 -0
  142. package/skills/debugging-apex-logs/assets/null-pointer-fix.cls +252 -0
  143. package/skills/debugging-apex-logs/assets/soql-in-loop-fix.cls +157 -0
  144. package/skills/debugging-apex-logs/references/analysis-playbook.md +53 -0
  145. package/skills/debugging-apex-logs/references/benchmarking-guide.md +287 -0
  146. package/skills/debugging-apex-logs/references/cli-commands.md +368 -0
  147. package/skills/debugging-apex-logs/references/common-issues.md +68 -0
  148. package/skills/debugging-apex-logs/references/debug-log-reference.md +328 -0
  149. package/skills/debugging-apex-logs/references/log-analysis-tools.md +248 -0
  150. package/skills/debugging-apex-logs/references/scoring-rubric.md +21 -0
  151. package/skills/deploying-metadata/CREDITS.md +25 -0
  152. package/skills/deploying-metadata/README.md +104 -0
  153. package/skills/deploying-metadata/SKILL.md +214 -0
  154. package/skills/deploying-metadata/assets/destructiveChanges.xml +143 -0
  155. package/skills/deploying-metadata/assets/package.xml +121 -0
  156. package/skills/deploying-metadata/references/agent-deployment-guide.md +628 -0
  157. package/skills/deploying-metadata/references/deploy.sh +73 -0
  158. package/skills/deploying-metadata/references/deployment-report-template.md +89 -0
  159. package/skills/deploying-metadata/references/deployment-workflows.md +395 -0
  160. package/skills/deploying-metadata/references/orchestration.md +183 -0
  161. package/skills/deploying-metadata/references/trigger-deployment-safety.md +376 -0
  162. package/skills/deploying-omnistudio-datapacks/CREDITS.md +5 -0
  163. package/skills/deploying-omnistudio-datapacks/README.md +88 -0
  164. package/skills/deploying-omnistudio-datapacks/SKILL.md +174 -0
  165. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/TRANSCRIPT.md +124 -0
  166. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/deploy-business-internet-plus-bundle.yaml +11 -0
  167. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/TRANSCRIPT.md +142 -0
  168. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/deploy-business-internet-plus-bundle.yaml +10 -0
  169. package/skills/deploying-omnistudio-datapacks/references/job-file-template.md +42 -0
  170. package/skills/deploying-omnistudio-datapacks/references/troubleshooting-matrix.md +24 -0
  171. package/skills/deploying-ui-bundle/SKILL.md +2 -0
  172. package/skills/developing-agentforce/SKILL.md +1 -1
  173. package/skills/developing-agentforce/assets/metadata/http-callout-flow.flow-meta.xml +1 -1
  174. package/skills/developing-agentforce/references/actions-reference.md +8 -8
  175. package/skills/fetching-salesforce-docs/README.md +66 -0
  176. package/skills/fetching-salesforce-docs/SKILL.md +209 -0
  177. package/skills/fetching-salesforce-docs/requirements.txt +2 -0
  178. package/skills/fetching-salesforce-docs/scripts/extract_help_salesforce.py +497 -0
  179. package/skills/fetching-salesforce-docs/scripts/extract_salesforce_doc.py +357 -0
  180. package/skills/fetching-salesforce-docs/scripts/runtime_bootstrap.py +58 -0
  181. package/skills/generating-apex/CREDITS.md +1 -26
  182. package/skills/generating-apex/SKILL.md +4 -2
  183. package/skills/generating-apex-test/CREDITS.md +2 -27
  184. package/skills/generating-apex-test/SKILL.md +3 -1
  185. package/skills/generating-custom-application/SKILL.md +2 -0
  186. package/skills/generating-custom-field/SKILL.md +3 -1
  187. package/skills/generating-custom-lightning-type/SKILL.md +2 -0
  188. package/skills/generating-custom-object/SKILL.md +3 -1
  189. package/skills/generating-custom-tab/SKILL.md +3 -1
  190. package/skills/generating-flexipage/SKILL.md +2 -0
  191. package/skills/generating-flow/SKILL.md +2 -0
  192. package/skills/generating-lightning-app/SKILL.md +1 -1
  193. package/skills/generating-list-view/SKILL.md +2 -0
  194. package/skills/generating-lwc-components/CREDITS.md +5 -0
  195. package/skills/generating-lwc-components/README.md +126 -0
  196. package/skills/generating-lwc-components/SKILL.md +191 -0
  197. package/skills/generating-lwc-components/assets/apex-controller/LwcController.cls +327 -0
  198. package/skills/generating-lwc-components/assets/basic-component/basicComponent.css +72 -0
  199. package/skills/generating-lwc-components/assets/basic-component/basicComponent.html +111 -0
  200. package/skills/generating-lwc-components/assets/basic-component/basicComponent.js +163 -0
  201. package/skills/generating-lwc-components/assets/basic-component/basicComponent.js-meta.xml +137 -0
  202. package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.html +111 -0
  203. package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.js +367 -0
  204. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.css +63 -0
  205. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.html +154 -0
  206. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js +348 -0
  207. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js-meta.xml +87 -0
  208. package/skills/generating-lwc-components/assets/form-component/formComponent.html +165 -0
  209. package/skills/generating-lwc-components/assets/form-component/formComponent.js +275 -0
  210. package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.html +100 -0
  211. package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.js +336 -0
  212. package/skills/generating-lwc-components/assets/jest-test/componentName.test.js.example +371 -0
  213. package/skills/generating-lwc-components/assets/message-channel/RecordSelected.messageChannel-meta.xml +71 -0
  214. package/skills/generating-lwc-components/assets/message-channel/lmsPublisher.js +103 -0
  215. package/skills/generating-lwc-components/assets/message-channel/lmsSubscriber.js +181 -0
  216. package/skills/generating-lwc-components/assets/modal-component/modalComponent.html +85 -0
  217. package/skills/generating-lwc-components/assets/modal-component/modalComponent.js +199 -0
  218. package/skills/generating-lwc-components/assets/record-picker/recordPicker.html +55 -0
  219. package/skills/generating-lwc-components/assets/record-picker/recordPicker.js +199 -0
  220. package/skills/generating-lwc-components/assets/state-store/store.js +282 -0
  221. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.css +65 -0
  222. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.html +95 -0
  223. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.js-meta.xml +75 -0
  224. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.test.ts.example +301 -0
  225. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.ts +295 -0
  226. package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.html +71 -0
  227. package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.js +316 -0
  228. package/skills/generating-lwc-components/hooks/scripts/lwc-lsp-validate.py +295 -0
  229. package/skills/generating-lwc-components/hooks/scripts/post-tool-validate.py +347 -0
  230. package/skills/generating-lwc-components/hooks/scripts/slds_data/deprecated_patterns.json +74 -0
  231. package/skills/generating-lwc-components/hooks/scripts/slds_data/styling_hooks.json +111 -0
  232. package/skills/generating-lwc-components/hooks/scripts/slds_data/valid_slds_classes.json +127 -0
  233. package/skills/generating-lwc-components/hooks/scripts/slds_linter_wrapper.py +294 -0
  234. package/skills/generating-lwc-components/hooks/scripts/slds_rules/__init__.py +22 -0
  235. package/skills/generating-lwc-components/hooks/scripts/template_validator.py +332 -0
  236. package/skills/generating-lwc-components/hooks/scripts/validate_slds.py +595 -0
  237. package/skills/generating-lwc-components/references/accessibility-guide.md +843 -0
  238. package/skills/generating-lwc-components/references/advanced-features.md +108 -0
  239. package/skills/generating-lwc-components/references/async-notification-patterns.md +661 -0
  240. package/skills/generating-lwc-components/references/cli-commands.md +545 -0
  241. package/skills/generating-lwc-components/references/component-patterns.md +1476 -0
  242. package/skills/generating-lwc-components/references/flow-integration-guide.md +675 -0
  243. package/skills/generating-lwc-components/references/jest-testing.md +1011 -0
  244. package/skills/generating-lwc-components/references/lms-guide.md +860 -0
  245. package/skills/generating-lwc-components/references/lwc-best-practices.md +1310 -0
  246. package/skills/generating-lwc-components/references/performance-guide.md +861 -0
  247. package/skills/generating-lwc-components/references/scoring-and-testing.md +116 -0
  248. package/skills/generating-lwc-components/references/slds-blueprints.json +14389 -0
  249. package/skills/generating-lwc-components/references/slds-design-guide.md +166 -0
  250. package/skills/generating-lwc-components/references/state-management.md +642 -0
  251. package/skills/generating-lwc-components/references/template-anti-patterns.md +948 -0
  252. package/skills/generating-lwc-components/references/triangle-pattern.md +365 -0
  253. package/skills/generating-lwc-components/scripts/local-dev-preview.sh +34 -0
  254. package/skills/generating-mermaid-diagrams/CREDITS.md +46 -0
  255. package/skills/generating-mermaid-diagrams/README.md +114 -0
  256. package/skills/generating-mermaid-diagrams/SKILL.md +218 -0
  257. package/skills/generating-mermaid-diagrams/assets/agentforce/agent-flow.md +313 -0
  258. package/skills/generating-mermaid-diagrams/assets/architecture/system-landscape.md +351 -0
  259. package/skills/generating-mermaid-diagrams/assets/datamodel/b2b-commerce-erd.md +317 -0
  260. package/skills/generating-mermaid-diagrams/assets/datamodel/campaigns-erd.md +195 -0
  261. package/skills/generating-mermaid-diagrams/assets/datamodel/consent-erd.md +262 -0
  262. package/skills/generating-mermaid-diagrams/assets/datamodel/files-erd.md +266 -0
  263. package/skills/generating-mermaid-diagrams/assets/datamodel/forecasting-erd.md +261 -0
  264. package/skills/generating-mermaid-diagrams/assets/datamodel/fsl-erd.md +332 -0
  265. package/skills/generating-mermaid-diagrams/assets/datamodel/party-model-erd.md +237 -0
  266. package/skills/generating-mermaid-diagrams/assets/datamodel/quote-order-erd.md +277 -0
  267. package/skills/generating-mermaid-diagrams/assets/datamodel/revenue-cloud-erd.md +343 -0
  268. package/skills/generating-mermaid-diagrams/assets/datamodel/sales-cloud-erd.md +192 -0
  269. package/skills/generating-mermaid-diagrams/assets/datamodel/salesforce-erd.md +209 -0
  270. package/skills/generating-mermaid-diagrams/assets/datamodel/scheduler-erd.md +276 -0
  271. package/skills/generating-mermaid-diagrams/assets/datamodel/service-cloud-erd.md +217 -0
  272. package/skills/generating-mermaid-diagrams/assets/datamodel/territory-management-erd.md +241 -0
  273. package/skills/generating-mermaid-diagrams/assets/integration/api-sequence.md +387 -0
  274. package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code-pkce.md +197 -0
  275. package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code.md +152 -0
  276. package/skills/generating-mermaid-diagrams/assets/oauth/client-credentials.md +233 -0
  277. package/skills/generating-mermaid-diagrams/assets/oauth/device-authorization.md +295 -0
  278. package/skills/generating-mermaid-diagrams/assets/oauth/jwt-bearer.md +256 -0
  279. package/skills/generating-mermaid-diagrams/assets/oauth/refresh-token.md +281 -0
  280. package/skills/generating-mermaid-diagrams/assets/oauth/user-agent-social-sign-on.md +281 -0
  281. package/skills/generating-mermaid-diagrams/assets/role-hierarchy/user-hierarchy.md +322 -0
  282. package/skills/generating-mermaid-diagrams/references/color-palette.md +464 -0
  283. package/skills/generating-mermaid-diagrams/references/diagram-conventions.md +313 -0
  284. package/skills/generating-mermaid-diagrams/references/erd-conventions.md +320 -0
  285. package/skills/generating-mermaid-diagrams/references/mermaid-reference.md +434 -0
  286. package/skills/generating-mermaid-diagrams/references/mermaid-styling.md +81 -0
  287. package/skills/generating-mermaid-diagrams/references/preview-guide.md +49 -0
  288. package/skills/generating-mermaid-diagrams/references/usage-examples.md +340 -0
  289. package/skills/generating-mermaid-diagrams/scripts/README.md +160 -0
  290. package/skills/generating-mermaid-diagrams/scripts/mermaid_preview.py +654 -0
  291. package/skills/generating-mermaid-diagrams/scripts/query-org-metadata.py +293 -0
  292. package/skills/generating-ui-bundle-features/SKILL.md +2 -0
  293. package/skills/generating-ui-bundle-metadata/SKILL.md +2 -0
  294. package/skills/generating-ui-bundle-site/SKILL.md +2 -0
  295. package/skills/generating-validation-rule/SKILL.md +2 -0
  296. package/skills/generating-visual-diagrams/CREDITS.md +80 -0
  297. package/skills/generating-visual-diagrams/README.md +83 -0
  298. package/skills/generating-visual-diagrams/SKILL.md +208 -0
  299. package/skills/generating-visual-diagrams/assets/architecture/integration-flow.md +55 -0
  300. package/skills/generating-visual-diagrams/assets/erd/core-objects.md +131 -0
  301. package/skills/generating-visual-diagrams/assets/erd/custom-objects.md +60 -0
  302. package/skills/generating-visual-diagrams/assets/lwc/dashboard-card.md +45 -0
  303. package/skills/generating-visual-diagrams/assets/lwc/data-table.md +57 -0
  304. package/skills/generating-visual-diagrams/assets/lwc/record-form.md +60 -0
  305. package/skills/generating-visual-diagrams/assets/review/apex-review.md +57 -0
  306. package/skills/generating-visual-diagrams/assets/review/lwc-review.md +48 -0
  307. package/skills/generating-visual-diagrams/references/architect-aesthetic-guide.md +257 -0
  308. package/skills/generating-visual-diagrams/references/examples-index.md +35 -0
  309. package/skills/generating-visual-diagrams/references/gemini-cli-setup.md +65 -0
  310. package/skills/generating-visual-diagrams/references/interview-questions.md +529 -0
  311. package/skills/generating-visual-diagrams/references/iteration-workflow.md +173 -0
  312. package/skills/generating-visual-diagrams/scripts/check-prerequisites.sh +101 -0
  313. package/skills/generating-visual-diagrams/scripts/generate_image.py +243 -0
  314. package/skills/handling-sf-data/CREDITS.md +5 -0
  315. package/skills/handling-sf-data/README.md +112 -0
  316. package/skills/handling-sf-data/SKILL.md +235 -0
  317. package/skills/handling-sf-data/assets/bulk/bulk-insert-10000.apex +293 -0
  318. package/skills/handling-sf-data/assets/bulk/bulk-insert-200.apex +208 -0
  319. package/skills/handling-sf-data/assets/bulk/bulk-insert-500.apex +219 -0
  320. package/skills/handling-sf-data/assets/bulk/bulk-upsert-external-id.apex +324 -0
  321. package/skills/handling-sf-data/assets/cleanup/delete-by-created-date.apex +319 -0
  322. package/skills/handling-sf-data/assets/cleanup/delete-by-name.apex +240 -0
  323. package/skills/handling-sf-data/assets/cleanup/delete-test-data.apex +311 -0
  324. package/skills/handling-sf-data/assets/cleanup/rollback-transaction.apex +266 -0
  325. package/skills/handling-sf-data/assets/csv/account-import.csv +11 -0
  326. package/skills/handling-sf-data/assets/csv/contact-import.csv +11 -0
  327. package/skills/handling-sf-data/assets/csv/custom-object-import.csv +11 -0
  328. package/skills/handling-sf-data/assets/csv/opportunity-import.csv +11 -0
  329. package/skills/handling-sf-data/assets/factories/account-factory.apex +165 -0
  330. package/skills/handling-sf-data/assets/factories/case-factory.apex +237 -0
  331. package/skills/handling-sf-data/assets/factories/contact-factory.apex +168 -0
  332. package/skills/handling-sf-data/assets/factories/custom-object-factory.apex +260 -0
  333. package/skills/handling-sf-data/assets/factories/event-factory.apex +275 -0
  334. package/skills/handling-sf-data/assets/factories/hierarchy-factory.apex +372 -0
  335. package/skills/handling-sf-data/assets/factories/lead-factory.apex +190 -0
  336. package/skills/handling-sf-data/assets/factories/opportunity-factory.apex +206 -0
  337. package/skills/handling-sf-data/assets/factories/task-factory.apex +246 -0
  338. package/skills/handling-sf-data/assets/factories/user-factory.apex +278 -0
  339. package/skills/handling-sf-data/assets/json/account-contact-tree.json +130 -0
  340. package/skills/handling-sf-data/assets/json/account-opportunity-tree.json +110 -0
  341. package/skills/handling-sf-data/assets/json/full-hierarchy-tree.json +188 -0
  342. package/skills/handling-sf-data/assets/soql/aggregate.soql +226 -0
  343. package/skills/handling-sf-data/assets/soql/child-to-parent.soql +162 -0
  344. package/skills/handling-sf-data/assets/soql/parent-to-child.soql +153 -0
  345. package/skills/handling-sf-data/assets/soql/polymorphic.soql +198 -0
  346. package/skills/handling-sf-data/assets/soql/subquery.soql +287 -0
  347. package/skills/handling-sf-data/references/anonymous-apex-guide.md +98 -0
  348. package/skills/handling-sf-data/references/bulk-operations-guide.md +94 -0
  349. package/skills/handling-sf-data/references/bulk-testing-example.md +194 -0
  350. package/skills/handling-sf-data/references/cleanup-rollback-example.md +322 -0
  351. package/skills/handling-sf-data/references/cleanup-rollback-guide.md +84 -0
  352. package/skills/handling-sf-data/references/crud-workflow-example.md +183 -0
  353. package/skills/handling-sf-data/references/governor-limits-reference.md +74 -0
  354. package/skills/handling-sf-data/references/orchestration.md +174 -0
  355. package/skills/handling-sf-data/references/relationship-query-examples.md +249 -0
  356. package/skills/handling-sf-data/references/sf-cli-data-commands.md +158 -0
  357. package/skills/handling-sf-data/references/soql-relationship-guide.md +84 -0
  358. package/skills/handling-sf-data/references/test-data-best-practices.md +104 -0
  359. package/skills/handling-sf-data/references/test-data-factory-usage.md +290 -0
  360. package/skills/handling-sf-data/references/test-data-patterns.md +98 -0
  361. package/skills/handling-sf-data/scripts/soql_validator.py +292 -0
  362. package/skills/handling-sf-data/scripts/validate_data_operation.py +379 -0
  363. package/skills/harmonizing-datacloud/CREDITS.md +3 -0
  364. package/skills/harmonizing-datacloud/README.md +31 -0
  365. package/skills/harmonizing-datacloud/SKILL.md +117 -0
  366. package/skills/implementing-ui-bundle-agentforce-conversation-client/SKILL.md +1 -1
  367. package/skills/implementing-ui-bundle-file-upload/SKILL.md +2 -0
  368. package/skills/modeling-omnistudio-epc-catalog/CREDITS.md +14 -0
  369. package/skills/modeling-omnistudio-epc-catalog/README.md +89 -0
  370. package/skills/modeling-omnistudio-epc-catalog/SKILL.md +395 -0
  371. package/skills/modeling-omnistudio-epc-catalog/assets/attribute-assignment-template.json +402 -0
  372. package/skills/modeling-omnistudio-epc-catalog/assets/compiled-attribute-overrides-template.json +43 -0
  373. package/skills/modeling-omnistudio-epc-catalog/assets/completion-block-template.txt +8 -0
  374. package/skills/modeling-omnistudio-epc-catalog/assets/decomposition-relationships-template.json +233 -0
  375. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_AttributeAssignments.json +514 -0
  376. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_CompiledAttributeOverrides.json +21 -0
  377. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DataPack.json +649 -0
  378. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DecompositionRelationships.json +200 -0
  379. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ObjectFieldAttributes.json +138 -0
  380. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OrchestrationScenarios.json +54 -0
  381. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OverrideDefinitions.json +266 -0
  382. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ParentKeys.json +23 -0
  383. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PriceListEntries.json +54 -0
  384. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PricebookEntries.json +35 -0
  385. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ProductChildItems.json +34 -0
  386. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_RuleAssignments.json +21 -0
  387. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_AttributeAssignments.json +410 -0
  388. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DataPack.json +535 -0
  389. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DecompositionRelationships.json +35 -0
  390. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ObjectFieldAttributes.json +138 -0
  391. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_OrchestrationScenarios.json +28 -0
  392. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ParentKeys.json +23 -0
  393. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PriceListEntries.json +220 -0
  394. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PricebookEntries.json +35 -0
  395. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ProductChildItems.json +414 -0
  396. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_AttributeAssignments.json +382 -0
  397. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DataPack.json +565 -0
  398. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DecompositionRelationships.json +35 -0
  399. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ObjectFieldAttributes.json +104 -0
  400. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_OrchestrationScenarios.json +28 -0
  401. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ParentKeys.json +13 -0
  402. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PriceListEntries.json +106 -0
  403. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PricebookEntries.json +35 -0
  404. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ProductChildItems.json +72 -0
  405. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_AttributeAssignments.json +142 -0
  406. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DataPack.json +377 -0
  407. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DecompositionRelationships.json +35 -0
  408. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ObjectFieldAttributes.json +36 -0
  409. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ParentKeys.json +8 -0
  410. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PriceListEntries.json +54 -0
  411. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PricebookEntries.json +35 -0
  412. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ProductChildItems.json +34 -0
  413. package/skills/modeling-omnistudio-epc-catalog/assets/object-field-attributes-template.json +138 -0
  414. package/skills/modeling-omnistudio-epc-catalog/assets/orchestration-scenarios-template.json +54 -0
  415. package/skills/modeling-omnistudio-epc-catalog/assets/override-definitions-template.json +134 -0
  416. package/skills/modeling-omnistudio-epc-catalog/assets/parent-keys-template.json +29 -0
  417. package/skills/modeling-omnistudio-epc-catalog/assets/price-list-entries-template.json +158 -0
  418. package/skills/modeling-omnistudio-epc-catalog/assets/pricebook-entries-template.json +35 -0
  419. package/skills/modeling-omnistudio-epc-catalog/assets/product-child-item-template.json +338 -0
  420. package/skills/modeling-omnistudio-epc-catalog/assets/product2-offer-template.json +527 -0
  421. package/skills/modeling-omnistudio-epc-catalog/examples/.gitkeep +1 -0
  422. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_AttributeAssignments.json +95 -0
  423. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_CompiledAttributeOverrides.json +1 -0
  424. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DataPack.json +214 -0
  425. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DecompositionRelationships.json +28 -0
  426. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ObjectFieldAttributes.json +98 -0
  427. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OrchestrationScenarios.json +22 -0
  428. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OverrideDefinitions.json +1 -0
  429. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ParentKeys.json +13 -0
  430. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PriceListEntries.json +35 -0
  431. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PricebookEntries.json +28 -0
  432. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ProductChildItems.json +110 -0
  433. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/TRANSCRIPT.md +58 -0
  434. package/skills/modeling-omnistudio-epc-catalog/references/epc-field-guide.md +90 -0
  435. package/skills/modeling-omnistudio-epc-catalog/references/naming-conventions.md +80 -0
  436. package/skills/modeling-omnistudio-epc-catalog/references/scoring-model.md +57 -0
  437. package/skills/modeling-omnistudio-epc-catalog/scripts/cli-validation-commands.sh +19 -0
  438. package/skills/modeling-omnistudio-epc-catalog/scripts/sample-invocations.sh +18 -0
  439. package/skills/observing-agentforce/SKILL.md +1 -1
  440. package/skills/orchestrating-datacloud/CREDITS.md +15 -0
  441. package/skills/orchestrating-datacloud/README.md +129 -0
  442. package/skills/orchestrating-datacloud/SKILL.md +236 -0
  443. package/skills/orchestrating-datacloud/UPSTREAM.md +45 -0
  444. package/skills/orchestrating-datacloud/assets/definitions/activation-target.template.json +5 -0
  445. package/skills/orchestrating-datacloud/assets/definitions/activation.template.json +7 -0
  446. package/skills/orchestrating-datacloud/assets/definitions/calculated-insight.template.json +7 -0
  447. package/skills/orchestrating-datacloud/assets/definitions/data-action-target.template.json +5 -0
  448. package/skills/orchestrating-datacloud/assets/definitions/data-action.template.json +5 -0
  449. package/skills/orchestrating-datacloud/assets/definitions/data-graph.template.json +21 -0
  450. package/skills/orchestrating-datacloud/assets/definitions/data-stream.template.json +55 -0
  451. package/skills/orchestrating-datacloud/assets/definitions/dmo.template.json +17 -0
  452. package/skills/orchestrating-datacloud/assets/definitions/identity-resolution.template.json +30 -0
  453. package/skills/orchestrating-datacloud/assets/definitions/mapping.template.json +14 -0
  454. package/skills/orchestrating-datacloud/assets/definitions/relationship.template.json +12 -0
  455. package/skills/orchestrating-datacloud/assets/definitions/search-index.template.json +9 -0
  456. package/skills/orchestrating-datacloud/assets/definitions/segment.template.json +16 -0
  457. package/skills/orchestrating-datacloud/references/feature-readiness.md +157 -0
  458. package/skills/orchestrating-datacloud/references/plugin-setup.md +140 -0
  459. package/skills/orchestrating-datacloud/scripts/bootstrap-plugin.sh +53 -0
  460. package/skills/orchestrating-datacloud/scripts/diagnose-org.mjs +511 -0
  461. package/skills/orchestrating-datacloud/scripts/generate-manifest.mjs +68 -0
  462. package/skills/orchestrating-datacloud/scripts/verify-plugin.sh +58 -0
  463. package/skills/preparing-datacloud/CREDITS.md +7 -0
  464. package/skills/preparing-datacloud/README.md +51 -0
  465. package/skills/preparing-datacloud/SKILL.md +191 -0
  466. package/skills/preparing-datacloud/examples/ingestion-api/.env.example +8 -0
  467. package/skills/preparing-datacloud/examples/ingestion-api/README.md +48 -0
  468. package/skills/preparing-datacloud/examples/ingestion-api/send-data.py +144 -0
  469. package/skills/querying-soql/CREDITS.md +21 -0
  470. package/skills/querying-soql/README.md +41 -0
  471. package/skills/querying-soql/SKILL.md +143 -0
  472. package/skills/querying-soql/assets/aggregate-queries.soql +242 -0
  473. package/skills/querying-soql/assets/basic-queries.soql +188 -0
  474. package/skills/querying-soql/assets/bulkified-query-pattern.cls +280 -0
  475. package/skills/querying-soql/assets/optimization-patterns.soql +259 -0
  476. package/skills/querying-soql/assets/relationship-queries.soql +203 -0
  477. package/skills/querying-soql/assets/selector-class.cls +219 -0
  478. package/skills/querying-soql/references/anti-patterns.md +348 -0
  479. package/skills/querying-soql/references/cli-commands.md +358 -0
  480. package/skills/querying-soql/references/field-coverage-rules.md +514 -0
  481. package/skills/querying-soql/references/query-optimization.md +142 -0
  482. package/skills/querying-soql/references/selector-patterns.md +479 -0
  483. package/skills/querying-soql/references/soql-reference.md +227 -0
  484. package/skills/querying-soql/references/soql-syntax-reference.md +208 -0
  485. package/skills/querying-soql/scripts/post-tool-validate.py +322 -0
  486. package/skills/retrieving-datacloud/CREDITS.md +7 -0
  487. package/skills/retrieving-datacloud/README.md +44 -0
  488. package/skills/retrieving-datacloud/SKILL.md +120 -0
  489. package/skills/retrieving-datacloud/examples/search-indexes/hybrid-structured.json +44 -0
  490. package/skills/retrieving-datacloud/examples/search-indexes/vector-knowledge.json +43 -0
  491. package/skills/running-apex-tests/CREDITS.md +22 -0
  492. package/skills/running-apex-tests/README.md +94 -0
  493. package/skills/running-apex-tests/SKILL.md +158 -0
  494. package/skills/running-apex-tests/assets/basic-test.cls +169 -0
  495. package/skills/running-apex-tests/assets/bulk-test.cls +255 -0
  496. package/skills/running-apex-tests/assets/dml-mock.cls +339 -0
  497. package/skills/running-apex-tests/assets/mock-callout-test.cls +353 -0
  498. package/skills/running-apex-tests/assets/stub-provider-example.cls +364 -0
  499. package/skills/running-apex-tests/assets/test-data-factory.cls +328 -0
  500. package/skills/running-apex-tests/hooks/scripts/parse-test-results.py +364 -0
  501. package/skills/running-apex-tests/references/cli-commands.md +289 -0
  502. package/skills/running-apex-tests/references/mocking-patterns.md +500 -0
  503. package/skills/running-apex-tests/references/performance-optimization.md +283 -0
  504. package/skills/running-apex-tests/references/test-fix-loop.md +49 -0
  505. package/skills/running-apex-tests/references/test-patterns.md +154 -0
  506. package/skills/running-apex-tests/references/testing-best-practices.md +509 -0
  507. package/skills/segmenting-datacloud/CREDITS.md +3 -0
  508. package/skills/segmenting-datacloud/README.md +36 -0
  509. package/skills/segmenting-datacloud/SKILL.md +115 -0
  510. package/skills/switching-org/SKILL.md +1 -1
  511. package/skills/testing-agentforce/SKILL.md +1 -1
  512. package/skills/uplifting-components-to-slds2/SKILL.md +3 -1
  513. package/skills/using-ui-bundle-salesforce-data/SKILL.md +2 -0
@@ -0,0 +1,514 @@
1
+ <!-- Parent: querying-soql/SKILL.md -->
2
+ # SOQL Field Coverage Rules
3
+
4
+ This guide documents field coverage validation rules for SOQL queries — ensuring that all fields accessed in Apex code are actually queried. This is a common source of runtime errors, especially in AI-assisted code generation.
5
+
6
+ ---
7
+
8
+ ## Table of Contents
9
+
10
+ 1. [The Field Coverage Problem](#the-field-coverage-problem)
11
+ 2. [Direct Field Access](#direct-field-access)
12
+ 3. [Relationship Field Access](#relationship-field-access)
13
+ 4. [Dynamic Field Access](#dynamic-field-access)
14
+ 5. [Aggregate Queries](#aggregate-queries)
15
+ 6. [Subquery Fields](#subquery-fields)
16
+ 7. [Validation Patterns](#validation-patterns)
17
+
18
+ ---
19
+
20
+ ## The Field Coverage Problem
21
+
22
+ When you query an sObject, only the fields in the SELECT clause are populated. Accessing any other field results in a runtime error:
23
+
24
+ ```
25
+ System.SObjectException: SObject row was retrieved via SOQL without querying the requested field: Account.Industry
26
+ ```
27
+
28
+ This error is particularly common in LLM-generated code because the LLM may:
29
+ 1. Query some fields but access others in subsequent code
30
+ 2. Forget to include relationship fields (e.g., `Account.Name` on Contact)
31
+ 3. Access fields in conditional logic that weren't anticipated in the query
32
+
33
+ ---
34
+
35
+ ## Direct Field Access
36
+
37
+ ### Rule: Every field accessed must be in the SELECT clause
38
+
39
+ ### ❌ BAD: Accessing Unqueried Fields
40
+
41
+ ```apex
42
+ // Query only includes Id and Name
43
+ List<Account> accounts = [SELECT Id, Name FROM Account];
44
+
45
+ for (Account acc : accounts) {
46
+ // RUNTIME ERROR: Industry was not queried
47
+ if (acc.Industry == 'Technology') {
48
+ // RUNTIME ERROR: Description was not queried
49
+ acc.Description = 'Tech company';
50
+ }
51
+
52
+ // RUNTIME ERROR: AnnualRevenue was not queried
53
+ Decimal revenue = acc.AnnualRevenue;
54
+ }
55
+ ```
56
+
57
+ ### ✅ GOOD: Query All Accessed Fields
58
+
59
+ ```apex
60
+ // Query ALL fields that will be accessed
61
+ List<Account> accounts = [
62
+ SELECT Id, Name, Industry, Description, AnnualRevenue
63
+ FROM Account
64
+ ];
65
+
66
+ for (Account acc : accounts) {
67
+ if (acc.Industry == 'Technology') {
68
+ acc.Description = 'Tech company'; // OK - queried
69
+ }
70
+ Decimal revenue = acc.AnnualRevenue; // OK - queried
71
+ }
72
+ ```
73
+
74
+ ### Field Access Locations to Check
75
+
76
+ Fields can be accessed in many places—ensure coverage for all:
77
+
78
+ | Access Location | Example | Must Query |
79
+ |-----------------|---------|------------|
80
+ | Conditional (`if`) | `if (acc.Industry == 'Tech')` | `Industry` |
81
+ | Assignment | `acc.Description = 'Text'` | `Description` |
82
+ | Variable assignment | `String name = acc.Name` | `Name` |
83
+ | Method argument | `sendEmail(acc.Email__c)` | `Email__c` |
84
+ | Collection key | `map.put(acc.Name, acc)` | `Name` |
85
+ | String interpolation | `'Hello ' + acc.Name` | `Name` |
86
+ | SOQL bind | `[SELECT Id FROM Contact WHERE AccountId = :acc.Id]` | `Id` (usually included) |
87
+
88
+ ---
89
+
90
+ ## Relationship Field Access
91
+
92
+ ### Rule: Parent relationship fields require dot notation in SELECT
93
+
94
+ ### ❌ BAD: Missing Relationship Fields
95
+
96
+ ```apex
97
+ // Contact query without Account relationship fields
98
+ List<Contact> contacts = [SELECT Id, Name, AccountId FROM Contact];
99
+
100
+ for (Contact c : contacts) {
101
+ // RUNTIME ERROR: Account.Name was not queried
102
+ String accountName = c.Account.Name;
103
+
104
+ // RUNTIME ERROR: Account.Industry was not queried
105
+ if (c.Account.Industry == 'Technology') {
106
+ // ...
107
+ }
108
+ }
109
+ ```
110
+
111
+ ### ✅ GOOD: Include Relationship Fields
112
+
113
+ ```apex
114
+ // Use dot notation to include parent fields
115
+ List<Contact> contacts = [
116
+ SELECT Id, Name, AccountId,
117
+ Account.Name, // Parent field
118
+ Account.Industry, // Parent field
119
+ Account.Owner.Name // Grandparent field (up to 5 levels)
120
+ FROM Contact
121
+ ];
122
+
123
+ for (Contact c : contacts) {
124
+ String accountName = c.Account.Name; // OK - queried
125
+
126
+ if (c.Account.Industry == 'Technology') { // OK - queried
127
+ String ownerName = c.Account.Owner.Name; // OK - queried
128
+ }
129
+ }
130
+ ```
131
+
132
+ ### Relationship Traversal Limits
133
+
134
+ | Direction | Limit | Example |
135
+ |-----------|-------|---------|
136
+ | Parent (lookup/master-detail) | 5 levels | `Contact.Account.Owner.Manager.Name` |
137
+ | Child (subquery) | 1 level | `Account -> Contacts` (cannot nest subqueries) |
138
+
139
+ ### ❌ BAD: Assuming Relationship is Populated
140
+
141
+ ```apex
142
+ List<Contact> contacts = [SELECT Id, AccountId FROM Contact];
143
+
144
+ for (Contact c : contacts) {
145
+ // AccountId is queried, but Account object is NOT populated
146
+ // This will throw: Account.Name not queried
147
+ if (c.Account != null) {
148
+ String name = c.Account.Name; // ERROR!
149
+ }
150
+ }
151
+ ```
152
+
153
+ ### ✅ GOOD: Query Relationship or Use Separate Query
154
+
155
+ ```apex
156
+ // Option 1: Include relationship field
157
+ List<Contact> contacts = [SELECT Id, AccountId, Account.Name FROM Contact];
158
+
159
+ for (Contact c : contacts) {
160
+ if (c.Account != null) {
161
+ String name = c.Account.Name; // OK
162
+ }
163
+ }
164
+
165
+ // Option 2: Separate query using collected IDs
166
+ List<Contact> contacts = [SELECT Id, AccountId FROM Contact];
167
+ Set<Id> accountIds = new Set<Id>();
168
+ for (Contact c : contacts) {
169
+ if (c.AccountId != null) {
170
+ accountIds.add(c.AccountId);
171
+ }
172
+ }
173
+
174
+ Map<Id, Account> accountMap = new Map<Id, Account>(
175
+ [SELECT Id, Name FROM Account WHERE Id IN :accountIds]
176
+ );
177
+
178
+ for (Contact c : contacts) {
179
+ Account acc = accountMap.get(c.AccountId);
180
+ if (acc != null) {
181
+ String name = acc.Name; // OK
182
+ }
183
+ }
184
+ ```
185
+
186
+ ---
187
+
188
+ ## Dynamic Field Access
189
+
190
+ ### Rule: Dynamic field access (using `get()`) also requires queried fields
191
+
192
+ ### ❌ BAD: Dynamic Access to Unqueried Field
193
+
194
+ ```apex
195
+ List<Account> accounts = [SELECT Id, Name FROM Account];
196
+ String fieldName = 'Industry'; // Dynamic field name
197
+
198
+ for (Account acc : accounts) {
199
+ // RUNTIME ERROR: Industry was not queried
200
+ Object value = acc.get(fieldName);
201
+ }
202
+ ```
203
+
204
+ ### ✅ GOOD: Query Fields Used Dynamically
205
+
206
+ ```apex
207
+ // If you know which fields will be accessed dynamically, query them
208
+ List<Account> accounts = [SELECT Id, Name, Industry FROM Account];
209
+ String fieldName = 'Industry';
210
+
211
+ for (Account acc : accounts) {
212
+ Object value = acc.get(fieldName); // OK - Industry is queried
213
+ }
214
+ ```
215
+
216
+ ### ✅ GOOD: Build Dynamic Query
217
+
218
+ ```apex
219
+ // For truly dynamic scenarios, build the query dynamically
220
+ Set<String> fieldsToQuery = new Set<String>{'Id', 'Name'};
221
+ fieldsToQuery.addAll(dynamicFieldList); // Add dynamic fields
222
+
223
+ String query = 'SELECT ' + String.join(new List<String>(fieldsToQuery), ', ') +
224
+ ' FROM Account WHERE Id IN :accountIds';
225
+
226
+ List<Account> accounts = Database.query(query);
227
+ ```
228
+
229
+ ---
230
+
231
+ ## Aggregate Queries
232
+
233
+ ### Rule: Aggregate queries return `AggregateResult`, not sObjects
234
+
235
+ ### ❌ BAD: Treating Aggregate as sObject
236
+
237
+ ```apex
238
+ // This returns AggregateResult, not Account
239
+ List<Account> accounts = [
240
+ SELECT Industry, COUNT(Id) cnt
241
+ FROM Account
242
+ GROUP BY Industry
243
+ ]; // COMPILE ERROR - wrong type
244
+
245
+ // Even with correct type, can't access normal fields
246
+ AggregateResult[] results = [
247
+ SELECT Industry, COUNT(Id) cnt
248
+ FROM Account
249
+ GROUP BY Industry
250
+ ];
251
+
252
+ for (AggregateResult ar : results) {
253
+ // Cannot access like sObject fields
254
+ String industry = ar.Industry; // COMPILE ERROR
255
+ }
256
+ ```
257
+
258
+ ### ✅ GOOD: Use get() for Aggregate Results
259
+
260
+ ```apex
261
+ AggregateResult[] results = [
262
+ SELECT Industry, COUNT(Id) cnt, SUM(AnnualRevenue) totalRevenue
263
+ FROM Account
264
+ GROUP BY Industry
265
+ ];
266
+
267
+ for (AggregateResult ar : results) {
268
+ // Use get() with field alias
269
+ String industry = (String) ar.get('Industry');
270
+ Integer count = (Integer) ar.get('cnt');
271
+ Decimal totalRevenue = (Decimal) ar.get('totalRevenue');
272
+
273
+ System.debug(industry + ': ' + count + ' accounts, $' + totalRevenue);
274
+ }
275
+ ```
276
+
277
+ ### Aggregate Field Aliases
278
+
279
+ | Function | Default Alias | Example |
280
+ |----------|---------------|---------|
281
+ | `COUNT(Field)` | `expr0`, `expr1`, etc. | Use explicit alias: `COUNT(Id) cnt` |
282
+ | `SUM(Field)` | `expr0`, `expr1`, etc. | Use explicit alias: `SUM(Amount) total` |
283
+ | `AVG(Field)` | `expr0`, `expr1`, etc. | Use explicit alias: `AVG(Age) avgAge` |
284
+ | `MIN(Field)` | `expr0`, `expr1`, etc. | Use explicit alias: `MIN(CreatedDate) earliest` |
285
+ | `MAX(Field)` | `expr0`, `expr1`, etc. | Use explicit alias: `MAX(Amount) largest` |
286
+ | `GROUP BY Field` | Field API name | Access with field name: `ar.get('Industry')` |
287
+
288
+ ---
289
+
290
+ ## Subquery Fields
291
+
292
+ ### Rule: Child relationship subqueries create nested lists
293
+
294
+ ### ❌ BAD: Accessing Subquery Fields Incorrectly
295
+
296
+ ```apex
297
+ // Query with contact subquery
298
+ List<Account> accounts = [
299
+ SELECT Id, Name,
300
+ (SELECT Id, Name FROM Contacts)
301
+ FROM Account
302
+ ];
303
+
304
+ for (Account acc : accounts) {
305
+ // ERROR: Contacts is a List, not a single Contact
306
+ String contactName = acc.Contacts.Name;
307
+
308
+ // ERROR: Cannot access unqueried field from subquery
309
+ for (Contact c : acc.Contacts) {
310
+ String email = c.Email; // Email not in subquery SELECT!
311
+ }
312
+ }
313
+ ```
314
+
315
+ ### ✅ GOOD: Proper Subquery Field Access
316
+
317
+ ```apex
318
+ // Query all needed fields in subquery
319
+ List<Account> accounts = [
320
+ SELECT Id, Name,
321
+ (SELECT Id, Name, Email, Phone FROM Contacts)
322
+ FROM Account
323
+ ];
324
+
325
+ for (Account acc : accounts) {
326
+ // Contacts is a List<Contact>
327
+ List<Contact> contacts = acc.Contacts;
328
+
329
+ if (contacts != null && !contacts.isEmpty()) {
330
+ for (Contact c : contacts) {
331
+ String name = c.Name; // OK - in subquery SELECT
332
+ String email = c.Email; // OK - in subquery SELECT
333
+ String phone = c.Phone; // OK - in subquery SELECT
334
+ }
335
+ }
336
+ }
337
+ ```
338
+
339
+ ### Subquery Null Safety
340
+
341
+ ```apex
342
+ List<Account> accounts = [
343
+ SELECT Id, (SELECT Id FROM Contacts)
344
+ FROM Account
345
+ ];
346
+
347
+ for (Account acc : accounts) {
348
+ // Subquery result can be null if no child records
349
+ if (acc.Contacts != null) {
350
+ for (Contact c : acc.Contacts) {
351
+ // Process contact
352
+ }
353
+ }
354
+
355
+ // Or use null-safe size check
356
+ Integer contactCount = acc.Contacts?.size() ?? 0;
357
+ }
358
+ ```
359
+
360
+ ---
361
+
362
+ ## Validation Patterns
363
+
364
+ ### Pattern 1: Field-to-Query Mapping
365
+
366
+ Create a systematic approach to track field usage:
367
+
368
+ ```apex
369
+ public class AccountProcessor {
370
+ // Document required fields at the top
371
+ private static final Set<String> REQUIRED_FIELDS = new Set<String>{
372
+ 'Id', 'Name', 'Industry', 'Description', 'AnnualRevenue',
373
+ 'OwnerId', 'Owner.Name', 'Owner.Email'
374
+ };
375
+
376
+ // Single method for consistent querying
377
+ public static List<Account> queryAccounts(Set<Id> accountIds) {
378
+ return [
379
+ SELECT Id, Name, Industry, Description, AnnualRevenue,
380
+ OwnerId, Owner.Name, Owner.Email
381
+ FROM Account
382
+ WHERE Id IN :accountIds
383
+ ];
384
+ }
385
+
386
+ public static void processAccounts(List<Account> accounts) {
387
+ for (Account acc : accounts) {
388
+ // All fields in REQUIRED_FIELDS are safe to access
389
+ if (acc.Industry == 'Technology') {
390
+ acc.Description = 'Tech: ' + acc.Name;
391
+ }
392
+ }
393
+ }
394
+ }
395
+ ```
396
+
397
+ ### Pattern 2: Selector Layer
398
+
399
+ Use a selector pattern to centralize query field management:
400
+
401
+ ```apex
402
+ public class AccountSelector {
403
+
404
+ // Default fields for most operations
405
+ private static final List<String> DEFAULT_FIELDS = new List<String>{
406
+ 'Id', 'Name', 'Industry', 'Type', 'OwnerId'
407
+ };
408
+
409
+ // Extended fields for detailed views
410
+ private static final List<String> DETAIL_FIELDS = new List<String>{
411
+ 'Id', 'Name', 'Industry', 'Type', 'OwnerId',
412
+ 'Description', 'AnnualRevenue', 'NumberOfEmployees',
413
+ 'BillingCity', 'BillingState', 'BillingCountry',
414
+ 'Owner.Name', 'Owner.Email'
415
+ };
416
+
417
+ public List<Account> selectById(Set<Id> ids) {
418
+ return selectByIdWithFields(ids, DEFAULT_FIELDS);
419
+ }
420
+
421
+ public List<Account> selectByIdDetailed(Set<Id> ids) {
422
+ return selectByIdWithFields(ids, DETAIL_FIELDS);
423
+ }
424
+
425
+ private List<Account> selectByIdWithFields(Set<Id> ids, List<String> fields) {
426
+ String query = 'SELECT ' + String.join(fields, ', ') +
427
+ ' FROM Account WHERE Id IN :ids';
428
+ return Database.query(query);
429
+ }
430
+ }
431
+ ```
432
+
433
+ ### Pattern 3: Field Validation Helper
434
+
435
+ ```apex
436
+ public class SObjectFieldValidator {
437
+
438
+ /**
439
+ * Check if a field was queried on an sObject
440
+ * @param obj The sObject to check
441
+ * @param fieldName The API name of the field
442
+ * @return true if the field is populated (was queried)
443
+ */
444
+ public static Boolean isFieldPopulated(SObject obj, String fieldName) {
445
+ try {
446
+ obj.get(fieldName);
447
+ return true;
448
+ } catch (SObjectException e) {
449
+ return false;
450
+ }
451
+ }
452
+
453
+ /**
454
+ * Get field value with default if not queried
455
+ * @param obj The sObject
456
+ * @param fieldName The field API name
457
+ * @param defaultValue Value to return if field not queried
458
+ * @return The field value or default
459
+ */
460
+ public static Object getFieldOrDefault(SObject obj, String fieldName, Object defaultValue) {
461
+ try {
462
+ Object value = obj.get(fieldName);
463
+ return value != null ? value : defaultValue;
464
+ } catch (SObjectException e) {
465
+ return defaultValue;
466
+ }
467
+ }
468
+ }
469
+ ```
470
+
471
+ ---
472
+
473
+ ## Quick Reference: Field Coverage Checklist
474
+
475
+ Before running code that processes SOQL results:
476
+
477
+ ### Direct Fields
478
+ - [ ] All fields in `if` conditions are queried
479
+ - [ ] All fields on left side of assignments are queried
480
+ - [ ] All fields passed to methods are queried
481
+ - [ ] All fields used in map keys/values are queried
482
+
483
+ ### Relationship Fields
484
+ - [ ] Parent fields use dot notation (e.g., `Account.Name`)
485
+ - [ ] Parent object null checks before field access
486
+ - [ ] Relationship traversal doesn't exceed 5 levels
487
+
488
+ ### Subqueries
489
+ - [ ] Child records accessed as List, not single record
490
+ - [ ] Subquery SELECT includes all accessed child fields
491
+ - [ ] Null check before iterating subquery results
492
+
493
+ ### Dynamic Access
494
+ - [ ] Fields accessed via `get(fieldName)` are queried
495
+ - [ ] Dynamic queries include all needed fields
496
+
497
+ ---
498
+
499
+ ## Common LLM Mistakes Summary
500
+
501
+ | Mistake | Example | Fix |
502
+ |---------|---------|-----|
503
+ | Query subset, use superset | Query `Id, Name`, use `Industry` | Add `Industry` to SELECT |
504
+ | Forget relationship field | Use `c.Account.Name` without querying | Add `Account.Name` to SELECT |
505
+ | Assume AccountId = Account | Query `AccountId`, access `Account.Name` | Query `Account.Name` explicitly |
506
+ | Wrong subquery access | `acc.Contacts.Email` | `for (Contact c : acc.Contacts) { c.Email }` |
507
+ | Missing subquery field | Subquery `SELECT Id`, use `Email` | Add `Email` to subquery SELECT |
508
+
509
+ ---
510
+
511
+ ## Reference
512
+
513
+ - **SOQL Anti-Patterns**: See `references/anti-patterns.md` for general SOQL mistakes
514
+ - **Selector Patterns**: See `references/selector-patterns.md` for query organization
@@ -0,0 +1,142 @@
1
+ <!-- Parent: querying-soql/SKILL.md -->
2
+
3
+ # Query Optimization & Governor Limits
4
+
5
+ ## Indexing Strategy
6
+
7
+ **Indexed Fields** (Always Selective):
8
+ - Id, Name, OwnerId, CreatedDate, LastModifiedDate, RecordTypeId
9
+ - External ID fields, Master-Detail relationship fields
10
+ - Lookup fields (when unique)
11
+
12
+ **Standard Indexed Fields by Object**:
13
+ - Account: AccountNumber, Site
14
+ - Contact: Email
15
+ - Lead: Email
16
+ - Case: CaseNumber
17
+
18
+ ## Selectivity Rules
19
+
20
+ ```
21
+ A filter is selective when it returns:
22
+ - < 10% of total records for first 1 million
23
+ - < 5% of total records for additional records
24
+ - OR uses an indexed field
25
+ ```
26
+
27
+ ## Optimization Patterns
28
+
29
+ ```sql
30
+ -- ❌ NON-SELECTIVE (scans all records)
31
+ SELECT Id FROM Lead WHERE Status = 'Open'
32
+
33
+ -- ✅ SELECTIVE (uses index + selective filter)
34
+ SELECT Id FROM Lead
35
+ WHERE Status = 'Open'
36
+ AND CreatedDate = LAST_N_DAYS:30
37
+ LIMIT 10000
38
+
39
+ -- ❌ LEADING WILDCARD (can't use index)
40
+ SELECT Id FROM Account WHERE Name LIKE '%corp'
41
+
42
+ -- ✅ TRAILING WILDCARD (uses index)
43
+ SELECT Id FROM Account WHERE Name LIKE 'Acme%'
44
+ ```
45
+
46
+ ## Query Plan Analysis
47
+
48
+ ```bash
49
+ # Get query plan
50
+ sf data query \
51
+ --query "SELECT Id FROM Account WHERE Name = 'Test'" \
52
+ --target-org my-org \
53
+ --use-tooling-api \
54
+ --plan
55
+ ```
56
+
57
+ **Plan Output Interpretation**:
58
+ - `Cardinality`: Estimated rows returned
59
+ - `Cost`: Relative query cost (lower is better)
60
+ - `Fields`: Index fields used
61
+ - `LeadingOperationType`: How the query starts (Index vs TableScan)
62
+
63
+ ---
64
+
65
+ ## Governor Limits
66
+
67
+ | Limit | Synchronous | Asynchronous |
68
+ |-------|-------------|--------------|
69
+ | Total SOQL Queries | 100 | 200 |
70
+ | Records Retrieved | 50,000 | 50,000 |
71
+ | Query Rows (queryMore) | 2,000 | 2,000 |
72
+ | Query Locator Rows | 10 million | 10 million |
73
+
74
+ ### Efficient Patterns
75
+
76
+ ```sql
77
+ -- ❌ Query all, filter in Apex
78
+ SELECT Id, Name FROM Account
79
+ -- Then filter 50,000 records in Apex
80
+
81
+ -- ✅ Filter in SOQL
82
+ SELECT Id, Name FROM Account
83
+ WHERE Industry = 'Technology' AND IsActive__c = true
84
+ LIMIT 1000
85
+
86
+ -- ❌ Multiple queries in loop
87
+ for (Contact c : contacts) {
88
+ Account a = [SELECT Name FROM Account WHERE Id = :c.AccountId];
89
+ }
90
+
91
+ -- ✅ Single query with Map
92
+ Map<Id, Account> accounts = new Map<Id, Account>(
93
+ [SELECT Id, Name FROM Account WHERE Id IN :accountIds]
94
+ );
95
+ ```
96
+
97
+ ## SOQL FOR Loops
98
+
99
+ ```apex
100
+ // For large datasets - doesn't load all into heap
101
+ for (Account acc : [SELECT Id, Name FROM Account WHERE Industry = 'Technology']) {
102
+ // Process one record at a time
103
+ // Governor: Uses queryMore internally (200 at a time)
104
+ }
105
+
106
+ // With explicit batch size
107
+ for (List<Account> accs : [SELECT Id, Name FROM Account]) {
108
+ // Process 200 records at a time
109
+ }
110
+ ```
111
+
112
+ ## Security Patterns
113
+
114
+ ### WITH SECURITY_ENFORCED
115
+
116
+ ```sql
117
+ -- Throws exception if user lacks FLS
118
+ SELECT Id, Name, Phone
119
+ FROM Account
120
+ WITH SECURITY_ENFORCED
121
+ ```
122
+
123
+ ### WITH USER_MODE / SYSTEM_MODE
124
+
125
+ ```sql
126
+ -- Respects sharing rules (default in Apex)
127
+ SELECT Id, Name FROM Account WITH USER_MODE
128
+
129
+ -- Bypasses sharing rules (use with caution)
130
+ SELECT Id, Name FROM Account WITH SYSTEM_MODE
131
+ ```
132
+
133
+ ### In Apex: stripInaccessible
134
+
135
+ ```apex
136
+ // Strip inaccessible fields instead of throwing
137
+ SObjectAccessDecision decision = Security.stripInaccessible(
138
+ AccessType.READABLE,
139
+ [SELECT Id, Name, SecretField__c FROM Account]
140
+ );
141
+ List<Account> safeAccounts = decision.getRecords();
142
+ ```