@salesforce/afv-skills 1.29.0 → 1.31.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 (234) hide show
  1. package/README.md +2 -0
  2. package/package.json +1 -1
  3. package/skills/agentforce-architecture-analyze/README.md +2 -8
  4. package/skills/agentforce-architecture-analyze/SKILL.md +2 -2
  5. package/skills/agentforce-architecture-analyze/references/contract.json +4 -4
  6. package/skills/agentforce-architecture-analyze/references/soql_fields.md +1 -1
  7. package/skills/data360-activate/README.md +0 -1
  8. package/skills/data360-activate/SKILL.md +0 -2
  9. package/skills/data360-code-extension-generate/SKILL.md +15 -2
  10. package/skills/data360-connect/README.md +0 -2
  11. package/skills/data360-connect/SKILL.md +0 -2
  12. package/skills/data360-harmonize/SKILL.md +0 -1
  13. package/skills/data360-orchestrate/README.md +0 -7
  14. package/skills/data360-orchestrate/SKILL.md +0 -2
  15. package/skills/data360-prepare/README.md +0 -1
  16. package/skills/data360-prepare/SKILL.md +0 -1
  17. package/skills/data360-query/README.md +0 -1
  18. package/skills/data360-query/SKILL.md +0 -1
  19. package/skills/data360-segment/README.md +0 -1
  20. package/skills/data360-segment/SKILL.md +0 -2
  21. package/skills/dx-pkg-post-install-configure/SKILL.md +184 -0
  22. package/skills/experience-cms-brand-apply/SKILL.md +47 -16
  23. package/skills/experience-lwc-generate/README.md +3 -2
  24. package/skills/experience-lwc-generate/references/async-notification-patterns.md +1 -1
  25. package/skills/experience-lwc-generate/references/component-patterns.md +3 -3
  26. package/skills/experience-lwc-generate/references/flow-integration-guide.md +1 -1
  27. package/skills/experience-lwc-generate/references/lwc-best-practices.md +4 -4
  28. package/skills/experience-lwc-generate/references/scoring-and-testing.md +1 -1
  29. package/skills/experience-lwc-generate/references/state-management.md +2 -2
  30. package/skills/experience-lwc-generate/references/triangle-pattern.md +3 -3
  31. package/skills/experience-lwc-generate/scripts/post-tool-validate.py +2 -2
  32. package/skills/experience-lwc-generate/scripts/template_validator.py +1 -1
  33. package/skills/experience-ui-bundle-app-coordinate/SKILL.md +198 -34
  34. package/skills/experience-ui-bundle-app-coordinate/scripts/check-hosting-target.sh +26 -0
  35. package/skills/experience-ui-bundle-app-coordinate/scripts/check-sfdx-project.sh +15 -0
  36. package/skills/experience-ui-bundle-metadata-generate/SKILL.md +19 -8
  37. package/skills/experience-ui-bundle-metadata-generate/references/csp-metadata-format.md +2 -2
  38. package/skills/experience-ui-bundle-metadata-generate/scripts/check-api-version.sh +30 -0
  39. package/skills/external-diagram-mermaid-generate/README.md +2 -2
  40. package/skills/external-diagram-mermaid-generate/SKILL.md +1 -3
  41. package/skills/external-diagram-mermaid-generate/assets/agentforce/agent-flow.md +4 -4
  42. package/skills/external-diagram-mermaid-generate/assets/architecture/system-landscape.md +1 -1
  43. package/skills/external-diagram-mermaid-generate/assets/datamodel/b2b-commerce-erd.md +3 -3
  44. package/skills/external-diagram-mermaid-generate/assets/datamodel/campaigns-erd.md +1 -1
  45. package/skills/external-diagram-mermaid-generate/assets/datamodel/consent-erd.md +2 -2
  46. package/skills/external-diagram-mermaid-generate/assets/datamodel/files-erd.md +2 -2
  47. package/skills/external-diagram-mermaid-generate/assets/datamodel/forecasting-erd.md +2 -2
  48. package/skills/external-diagram-mermaid-generate/assets/datamodel/fsl-erd.md +2 -2
  49. package/skills/external-diagram-mermaid-generate/assets/datamodel/party-model-erd.md +1 -1
  50. package/skills/external-diagram-mermaid-generate/assets/datamodel/quote-order-erd.md +3 -3
  51. package/skills/external-diagram-mermaid-generate/assets/datamodel/revenue-cloud-erd.md +2 -2
  52. package/skills/external-diagram-mermaid-generate/assets/datamodel/sales-cloud-erd.md +1 -1
  53. package/skills/external-diagram-mermaid-generate/assets/datamodel/salesforce-erd.md +1 -1
  54. package/skills/external-diagram-mermaid-generate/assets/datamodel/scheduler-erd.md +2 -2
  55. package/skills/external-diagram-mermaid-generate/assets/datamodel/service-cloud-erd.md +3 -3
  56. package/skills/external-diagram-mermaid-generate/assets/datamodel/territory-management-erd.md +1 -1
  57. package/skills/external-diagram-mermaid-generate/assets/integration/api-sequence.md +1 -1
  58. package/skills/external-diagram-mermaid-generate/assets/oauth/authorization-code-pkce.md +1 -1
  59. package/skills/external-diagram-mermaid-generate/assets/oauth/authorization-code.md +1 -1
  60. package/skills/external-diagram-mermaid-generate/assets/oauth/client-credentials.md +1 -1
  61. package/skills/external-diagram-mermaid-generate/assets/oauth/device-authorization.md +2 -2
  62. package/skills/external-diagram-mermaid-generate/assets/oauth/jwt-bearer.md +2 -2
  63. package/skills/external-diagram-mermaid-generate/assets/oauth/refresh-token.md +1 -1
  64. package/skills/external-diagram-mermaid-generate/assets/oauth/user-agent-social-sign-on.md +2 -2
  65. package/skills/external-diagram-mermaid-generate/assets/role-hierarchy/user-hierarchy.md +1 -1
  66. package/skills/external-diagram-mermaid-generate/references/color-palette.md +13 -13
  67. package/skills/external-diagram-mermaid-generate/references/diagram-conventions.md +5 -5
  68. package/skills/external-diagram-mermaid-generate/references/erd-conventions.md +1 -1
  69. package/skills/external-diagram-mermaid-generate/references/mermaid-styling.md +2 -2
  70. package/skills/external-diagram-mermaid-generate/references/preview-guide.md +1 -1
  71. package/skills/external-diagram-mermaid-generate/references/usage-examples.md +9 -9
  72. package/skills/external-diagram-mermaid-generate/scripts/README.md +1 -1
  73. package/skills/integration-connectivity-connected-app-configure/README.md +4 -5
  74. package/skills/integration-connectivity-connected-app-configure/SKILL.md +2 -2
  75. package/skills/integration-connectivity-connected-app-configure/references/example-usage.md +7 -7
  76. package/skills/integration-connectivity-connected-app-configure/references/migration-guide.md +1 -1
  77. package/skills/integration-connectivity-connected-app-configure/references/oauth-flows-reference.md +1 -1
  78. package/skills/integration-connectivity-connected-app-configure/references/testing-validation-guide.md +3 -3
  79. package/skills/integration-connectivity-generate/README.md +1 -1
  80. package/skills/integration-connectivity-generate/SKILL.md +6 -0
  81. package/skills/integration-connectivity-generate/assets/callouts/rest-queueable-callout.cls +1 -1
  82. package/skills/integration-connectivity-generate/assets/external-services/external-service-operations.md +1 -1
  83. package/skills/integration-connectivity-generate/assets/soap/wsdl2apex-guide.md +1 -1
  84. package/skills/integration-connectivity-generate/references/callout-patterns.md +4 -0
  85. package/skills/integration-connectivity-generate/references/cdc-guide.md +2 -2
  86. package/skills/integration-connectivity-generate/references/event-driven-architecture-guide.md +5 -5
  87. package/skills/integration-connectivity-generate/references/event-patterns.md +3 -2
  88. package/skills/integration-connectivity-generate/references/external-services-guide.md +4 -1
  89. package/skills/integration-connectivity-generate/references/messaging-api-v2.md +2 -2
  90. package/skills/integration-connectivity-generate/references/named-credentials-automation.md +1 -1
  91. package/skills/integration-connectivity-generate/references/named-credentials-guide.md +12 -2
  92. package/skills/integration-connectivity-generate/references/platform-events-guide.md +3 -3
  93. package/skills/integration-connectivity-generate/references/rest-callout-patterns.md +1 -1
  94. package/skills/integration-connectivity-generate/references/scoring-rubric.md +1 -1
  95. package/skills/integration-connectivity-generate/references/security-best-practices.md +5 -2
  96. package/skills/integration-connectivity-generate/scripts/configure-named-credential.sh +16 -5
  97. package/skills/integration-connectivity-generate/scripts/set-api-credential.sh +11 -2
  98. package/skills/integration-connectivity-generate/scripts/suggest_credential_setup.py +4 -3
  99. package/skills/integration-connectivity-generate/scripts/validate_integration.py +1 -1
  100. package/skills/omnistudio-callable-apex-generate/README.md +1 -5
  101. package/skills/omnistudio-callable-apex-generate/SKILL.md +14 -4
  102. package/skills/omnistudio-callable-apex-generate/assets/pattern_callable_vanilla.cls +8 -1
  103. package/skills/omnistudio-callable-apex-generate/examples/Test_VlocityOpenInterface2Conversion/TRANSCRIPT.md +1 -1
  104. package/skills/omnistudio-callable-apex-generate/examples/Test_VlocityOpenInterfaceConversion/TRANSCRIPT.md +1 -1
  105. package/skills/omnistudio-datamapper-generate/SKILL.md +1 -1
  106. package/skills/omnistudio-datamapper-generate/assets/completion-summary-template.md +2 -2
  107. package/skills/omnistudio-datamapper-generate/references/best-practices.md +9 -9
  108. package/skills/omnistudio-datamapper-generate/references/naming-conventions.md +6 -6
  109. package/skills/omnistudio-datapacks-deploy/README.md +1 -1
  110. package/skills/omnistudio-datapacks-deploy/examples/business-internet-plus-bundle/deploy-business-internet-plus-bundle.yaml +1 -1
  111. package/skills/omnistudio-dependencies-analyze/SKILL.md +12 -5
  112. package/skills/omnistudio-dependencies-analyze/references/dependency-patterns.md +9 -9
  113. package/skills/omnistudio-dependencies-analyze/references/namespace-guide.md +1 -1
  114. package/skills/omnistudio-epc-catalog-generate/README.md +1 -1
  115. package/skills/omnistudio-flexcard-generate/SKILL.md +11 -4
  116. package/skills/omnistudio-flexcard-generate/references/best-practices.md +6 -6
  117. package/skills/omnistudio-flexcard-generate/references/data-binding-guide.md +9 -9
  118. package/skills/omnistudio-integration-procedure-generate/SKILL.md +9 -1
  119. package/skills/omnistudio-integration-procedure-generate/references/element-types.md +3 -3
  120. package/skills/omnistudio-omniscript-generate/SKILL.md +2 -2
  121. package/skills/omnistudio-omniscript-generate/references/best-practices.md +1 -1
  122. package/skills/omnistudio-omniscript-generate/scripts/check-duplicate-omniscript.sh +8 -0
  123. package/skills/omnistudio-omniscript-generate/scripts/deploy-omniscript.sh +8 -0
  124. package/skills/platform-apex-logs-debug/README.md +2 -2
  125. package/skills/platform-apex-logs-debug/references/cli-commands.md +2 -2
  126. package/skills/platform-apex-logs-debug/references/debug-log-reference.md +16 -16
  127. package/skills/platform-apex-logs-debug/references/log-analysis-tools.md +2 -2
  128. package/skills/platform-apex-test-run/README.md +1 -1
  129. package/skills/platform-apex-test-run/references/test-fix-loop.md +2 -2
  130. package/skills/platform-apex-test-run/references/testing-best-practices.md +3 -3
  131. package/skills/platform-custom-field-generate/SKILL.md +12 -11
  132. package/skills/platform-custom-field-generate/references/advanced-picklists.md +17 -17
  133. package/skills/platform-custom-report-type-generate/SKILL.md +259 -0
  134. package/skills/platform-custom-report-type-generate/examples/AccountProjectsWithTasks.reportType-meta.xml +51 -0
  135. package/skills/platform-custom-report-type-generate/examples/AccountsWithIndustry.reportType-meta.xml +27 -0
  136. package/skills/platform-custom-report-type-generate/examples/AccountsWithProjects.reportType-meta.xml +44 -0
  137. package/skills/platform-custom-report-type-generate/references/category-values.md +32 -0
  138. package/skills/platform-custom-report-type-generate/references/errors-and-troubleshooting.md +24 -0
  139. package/skills/platform-data-manage/README.md +4 -4
  140. package/skills/platform-data-manage/references/bulk-testing-example.md +1 -1
  141. package/skills/platform-data-manage/references/crud-workflow-example.md +2 -2
  142. package/skills/platform-data-manage/references/orchestration.md +6 -6
  143. package/skills/platform-dataspace-access-configure/SKILL.md +318 -0
  144. package/skills/platform-docs-get/SKILL.md +4 -0
  145. package/skills/platform-docs-get/scripts/extract_salesforce_doc.py +78 -13
  146. package/skills/platform-encryption-configure/SKILL.md +122 -0
  147. package/skills/platform-encryption-configure/assets/EncryptionKey.settings-meta.xml +17 -0
  148. package/skills/platform-encryption-configure/assets/PlatformEncryption.settings-meta.xml +15 -0
  149. package/skills/platform-encryption-configure/assets/encrypted-field.field-meta.xml +22 -0
  150. package/skills/platform-encryption-configure/examples/cache-only-keys.settings-meta.xml +11 -0
  151. package/skills/platform-encryption-configure/references/encryption-schemes.md +34 -0
  152. package/skills/platform-encryption-configure/references/key-models.md +34 -0
  153. package/skills/platform-encryption-configure/references/tenant-secret-lifecycle.md +23 -0
  154. package/skills/platform-encryption-configure/scripts/validate-encryption-metadata.sh +54 -0
  155. package/skills/platform-flexipage-generate/SKILL.md +281 -346
  156. package/skills/platform-flexipage-generate/references/cli_commands.md +39 -0
  157. package/skills/platform-flexipage-generate/references/flexipage_fieldSection.md +162 -0
  158. package/skills/platform-flexipage-generate/references/flexipage_richText.md +84 -0
  159. package/skills/platform-flexipage-generate/references/identifiers_and_regions.md +167 -0
  160. package/skills/platform-flexipage-generate/references/mcp_action_examples.md +104 -0
  161. package/skills/platform-flexipage-generate/references/record_flexipage_dynamicHighlights.md +119 -0
  162. package/skills/platform-flexipage-generate/references/xml_rules.md +335 -0
  163. package/skills/platform-flexipage-generate/scripts/resolve-component-instructions.sh +42 -0
  164. package/skills/platform-flexipage-generate/scripts/scan-lwc-components.sh +113 -0
  165. package/skills/platform-metadata-api-context-get/SKILL.md +13 -10
  166. package/skills/platform-metadata-deploy/README.md +2 -2
  167. package/skills/platform-metadata-deploy/references/agent-deployment-guide.md +2 -2
  168. package/skills/platform-metadata-deploy/references/deployment-workflows.md +16 -16
  169. package/skills/platform-metadata-deploy/references/orchestration.md +3 -3
  170. package/skills/platform-metadata-deploy/references/trigger-deployment-safety.md +2 -2
  171. package/skills/platform-models-api-configure/SKILL.md +140 -0
  172. package/skills/platform-models-api-configure/scripts/get-orgjwt.sh +48 -0
  173. package/skills/platform-policy-rule-generate/SKILL.md +260 -0
  174. package/skills/platform-policy-rule-generate/references/deploy-errors.md +54 -0
  175. package/skills/platform-policy-rule-generate/references/fixtures-index.md +29 -0
  176. package/skills/platform-policy-rule-generate/references/policy-schema-full.md +250 -0
  177. package/skills/platform-policy-rule-generate/references/templates-access.md +132 -0
  178. package/skills/platform-policy-rule-generate/references/templates-advanced.md +58 -0
  179. package/skills/platform-policy-rule-generate/references/templates-record.md +75 -0
  180. package/skills/platform-policy-rule-generate/references/templates-transform.md +70 -0
  181. package/skills/platform-policy-rule-generate/references/templates.md +10 -0
  182. package/skills/platform-policy-rule-generate/references/ui-compatibility.md +142 -0
  183. package/skills/platform-soql-query/README.md +1 -1
  184. package/skills/platform-soql-query/SKILL.md +1 -1
  185. package/skills/platform-soql-query/references/anti-patterns.md +1 -1
  186. package/skills/platform-soql-query/references/field-coverage-rules.md +1 -1
  187. package/skills/platform-soql-query/references/query-optimization.md +1 -1
  188. package/skills/platform-soql-query/scripts/post-tool-validate.py +3 -3
  189. package/skills/data360-activate/CREDITS.md +0 -5
  190. package/skills/data360-connect/CREDITS.md +0 -5
  191. package/skills/data360-harmonize/CREDITS.md +0 -3
  192. package/skills/data360-orchestrate/CREDITS.md +0 -15
  193. package/skills/data360-orchestrate/UPSTREAM.md +0 -45
  194. package/skills/data360-prepare/CREDITS.md +0 -7
  195. package/skills/data360-query/CREDITS.md +0 -7
  196. package/skills/data360-segment/CREDITS.md +0 -3
  197. package/skills/experience-lwc-generate/CREDITS.md +0 -5
  198. package/skills/external-diagram-mermaid-generate/CREDITS.md +0 -46
  199. package/skills/external-diagram-visual-generate/CREDITS.md +0 -80
  200. package/skills/external-diagram-visual-generate/README.md +0 -83
  201. package/skills/external-diagram-visual-generate/SKILL.md +0 -207
  202. package/skills/external-diagram-visual-generate/assets/architecture/integration-flow.md +0 -55
  203. package/skills/external-diagram-visual-generate/assets/erd/core-objects.md +0 -131
  204. package/skills/external-diagram-visual-generate/assets/erd/custom-objects.md +0 -60
  205. package/skills/external-diagram-visual-generate/assets/lwc/dashboard-card.md +0 -45
  206. package/skills/external-diagram-visual-generate/assets/lwc/data-table.md +0 -57
  207. package/skills/external-diagram-visual-generate/assets/lwc/record-form.md +0 -60
  208. package/skills/external-diagram-visual-generate/assets/review/apex-review.md +0 -57
  209. package/skills/external-diagram-visual-generate/assets/review/lwc-review.md +0 -48
  210. package/skills/external-diagram-visual-generate/references/architect-aesthetic-guide.md +0 -257
  211. package/skills/external-diagram-visual-generate/references/examples-index.md +0 -35
  212. package/skills/external-diagram-visual-generate/references/gemini-cli-setup.md +0 -65
  213. package/skills/external-diagram-visual-generate/references/interview-questions.md +0 -529
  214. package/skills/external-diagram-visual-generate/references/iteration-workflow.md +0 -173
  215. package/skills/external-diagram-visual-generate/scripts/check-prerequisites.sh +0 -101
  216. package/skills/external-diagram-visual-generate/scripts/generate_image.py +0 -243
  217. package/skills/integration-connectivity-connected-app-configure/CREDITS.md +0 -3
  218. package/skills/integration-connectivity-generate/CREDITS.md +0 -5
  219. package/skills/omnistudio-callable-apex-generate/CREDITS.md +0 -9
  220. package/skills/omnistudio-datamapper-generate/CREDITS.md +0 -5
  221. package/skills/omnistudio-datapacks-deploy/CREDITS.md +0 -5
  222. package/skills/omnistudio-dependencies-analyze/CREDITS.md +0 -5
  223. package/skills/omnistudio-epc-catalog-generate/CREDITS.md +0 -14
  224. package/skills/omnistudio-flexcard-generate/CREDITS.md +0 -5
  225. package/skills/omnistudio-integration-procedure-generate/CREDITS.md +0 -5
  226. package/skills/omnistudio-omniscript-generate/CREDITS.md +0 -5
  227. package/skills/platform-apex-generate/CREDITS.md +0 -5
  228. package/skills/platform-apex-logs-debug/CREDITS.md +0 -22
  229. package/skills/platform-apex-test-generate/CREDITS.md +0 -5
  230. package/skills/platform-apex-test-run/CREDITS.md +0 -22
  231. package/skills/platform-data-manage/CREDITS.md +0 -5
  232. package/skills/platform-metadata-deploy/CREDITS.md +0 -25
  233. package/skills/platform-soql-query/CREDITS.md +0 -21
  234. /package/skills/omnistudio-callable-apex-generate/examples/Test_VlocityOpenInterfaceConversion/{MyCustomVlocityOpenInterface2.cls → MyCustomClass.cls} +0 -0
@@ -21,7 +21,7 @@ A picklist field can either define its values **inline** or **reference an exist
21
21
  value set** (a Global Value Set or a Standard Value Set). The shared set is defined
22
22
  once and reused across many fields.
23
23
 
24
- ### HARD RULE: `<valueSet>` is EITHER a reference OR inline — never both
24
+ ### HARD RULE: `<valueSet>` is EITHER a reference OR inline — never both
25
25
 
26
26
  A `<valueSet>` element must contain **exactly one** of:
27
27
 
@@ -30,7 +30,7 @@ A `<valueSet>` element must contain **exactly one** of:
30
30
 
31
31
  Including both in the same `<valueSet>` is a deployment error.
32
32
 
33
- #### INCORRECT — both reference and inline definition:
33
+ #### INCORRECT — both reference and inline definition:
34
34
 
35
35
  ```xml
36
36
  <CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
@@ -54,7 +54,7 @@ Including both in the same `<valueSet>` is a deployment error.
54
54
 
55
55
  **Error:** `Value set must reference a value set name or define a value set, but not both.`
56
56
 
57
- #### CORRECT — reference a Global Value Set:
57
+ #### CORRECT — reference a Global Value Set:
58
58
 
59
59
  ```xml
60
60
  <CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
@@ -88,7 +88,7 @@ the name you put inside it differs.
88
88
  > local project" warning) is expected org-storage display — keep local metadata on the bare name.
89
89
  > Never append `__c` to a value-set name either.
90
90
 
91
- #### CORRECT — reference a Standard Value Set (bare name, no suffix):
91
+ #### CORRECT — reference a Standard Value Set (bare name, no suffix):
92
92
 
93
93
  ```xml
94
94
  <CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
@@ -126,7 +126,7 @@ A **dependent** picklist filters its available values based on the selected valu
126
126
  **dependent** field via a `<controllingField>` element plus one `<valueSettings>` block
127
127
  per (controlling value → dependent value) pair.
128
128
 
129
- ### Use the MODERN API 38.0+ form ONLY
129
+ ### Use the MODERN API 38.0+ form ONLY
130
130
 
131
131
  | Form | Elements | Status |
132
132
  |------|----------|--------|
@@ -136,7 +136,7 @@ per (controlling value → dependent value) pair.
136
136
  Never emit the legacy `<picklist>`, `<picklistValues>`, or `<controllingFieldValues>`
137
137
  tags. They are not valid against the modern Metadata API and will fail deployment.
138
138
 
139
- ### HARD RULE: both the controlling and dependent field must be `<restricted>true</restricted>`
139
+ ### HARD RULE: both the controlling and dependent field must be `<restricted>true</restricted>`
140
140
 
141
141
  A field dependency requires a fixed, admin-defined value set on **both** ends. **Always emit
142
142
  `<restricted>true</restricted>` inside the `<valueSet>` of the controlling field AND the
@@ -186,7 +186,7 @@ Inside the dependent field's `<valueSet>`, in this order:
186
186
  > EMEA→UK,Germany) you emit **one block for each (controllingValue, dependentValue) pair** — four
187
187
  > pairs = four `<valueSettings>` blocks. And remember: both fields carry `<restricted>true</restricted>`.
188
188
 
189
- ### CORRECT — State dependent on Country (USA → California, Texas)
189
+ ### CORRECT — State dependent on Country (USA → California, Texas)
190
190
 
191
191
  **Controlling field — `Country__c` (a plain restricted picklist):**
192
192
 
@@ -258,7 +258,7 @@ Inside the dependent field's `<valueSet>`, in this order:
258
258
  > `<valueSettings>` block with that country's `<controllingFieldValue>` and
259
259
  > `<valueName>California</valueName>`.
260
260
 
261
- ### INCORRECT — deprecated legacy form:
261
+ ### INCORRECT — deprecated legacy form:
262
262
 
263
263
  ```xml
264
264
  <CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
@@ -282,7 +282,7 @@ legacy dependency elements are not valid in the modern `<valueSet>` structure.
282
282
 
283
283
  ## 3. Enhanced Value Attributes
284
284
 
285
- ### Value-name fidelity — do NOT underscore picklist value names
285
+ ### Value-name fidelity — do NOT underscore picklist value names
286
286
 
287
287
  A **picklist value's `<fullName>` is NOT a field API name** and must NOT be transformed.
288
288
  Use the value text **exactly as the user spelled it**, spaces and all. A value the user
@@ -315,7 +315,7 @@ Inline `<value>` entries (CustomValue subfields) support more than `<fullName>`,
315
315
 
316
316
  These are independent of `<default>` and `<label>` and may be combined freely.
317
317
 
318
- ### CORRECT — Status picklist with colors and an inactive value
318
+ ### CORRECT — Status picklist with colors and an inactive value
319
319
 
320
320
  ```xml
321
321
  <CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
@@ -367,7 +367,7 @@ The Metadata API rejects malformed picklist values at deploy time. Two common fa
367
367
  Two `<value>` entries with the same `<fullName>` inside one `<valueSetDefinition>` are
368
368
  rejected.
369
369
 
370
- #### INCORRECT — duplicate value:
370
+ #### INCORRECT — duplicate value:
371
371
 
372
372
  ```xml
373
373
  <valueSetDefinition>
@@ -398,7 +398,7 @@ The stricter "only alphanumerics and single underscores, no leading digit, no do
398
398
  or trailing underscore" rule applies to the *field* `<fullName>` (the `__c`-suffixed
399
399
  API name), not to picklist value fullNames.
400
400
 
401
- #### INCORRECT — invalid value API name:
401
+ #### INCORRECT — invalid value API name:
402
402
 
403
403
  ```xml
404
404
  <value>
@@ -410,7 +410,7 @@ API name), not to picklist value fullNames.
410
410
 
411
411
  **Error:** `Invalid fullName: must begin with a letter and use only alphanumeric characters and underscores`
412
412
 
413
- #### CORRECT:
413
+ #### CORRECT:
414
414
 
415
415
  ```xml
416
416
  <value>
@@ -454,7 +454,7 @@ include a `<fullName>`** element — the record type's developer name (e.g. `<fu
454
454
  matching the filename `Internal.recordType-meta.xml`. It's bare (no object prefix); the object
455
455
  comes from the `objects/<Object>/` folder path.
456
456
 
457
- ### STEP 1 — Decide if this object needs a BusinessProcess (do this BEFORE writing files)
457
+ ### STEP 1 — Decide if this object needs a BusinessProcess (do this BEFORE writing files)
458
458
 
459
459
  A record type on a **BusinessProcess-gated object — Opportunity, Lead, Case, or Solution —
460
460
  will NOT deploy without a `<businessProcess>` reference**, even when it only filters a *custom*
@@ -472,7 +472,7 @@ developer name instead of generating a new one (confirm via the grounding MCP's
472
472
  if available; otherwise generate a minimal one). For everything else, **do not invent a
473
473
  BusinessProcess** — adding one to a custom-object record type is wrong.
474
474
 
475
- #### CORRECT — Opportunity "Enterprise" record type, two deployable files
475
+ #### CORRECT — Opportunity "Enterprise" record type, two deployable files
476
476
 
477
477
  ```xml
478
478
  <!-- File 1: objects/Opportunity/businessProcesses/Enterprise_Sales_Process.businessProcess-meta.xml -->
@@ -519,7 +519,7 @@ BusinessProcess** — adding one to a custom-object record type is wrong.
519
519
  </RecordType>
520
520
  ```
521
521
 
522
- #### INCORRECT — BusinessProcess file emitted but NOT referenced (most common failure)
522
+ #### INCORRECT — BusinessProcess file emitted but NOT referenced (most common failure)
523
523
 
524
524
  ```xml
525
525
  <!-- File 1 (businessProcesses/Enterprise_Sales_Process...) was generated correctly, BUT -->
@@ -571,7 +571,7 @@ RecordType (filters the field's values; references the BusinessProcess)
571
571
  - For Opportunity/Lead/Case/Solution, the `<businessProcess>` must exist (same package or
572
572
  already in the org) before the RecordType.
573
573
 
574
- ### UI-sync gotcha — values may not auto-display after API deploy
574
+ ### UI-sync gotcha — values may not auto-display after API deploy
575
575
 
576
576
  When `<picklistValues>` are loaded via the Metadata API, the values are correctly associated
577
577
  under the hood, **but they may not automatically appear as "Selected Values" in the Record
@@ -0,0 +1,259 @@
1
+ ---
2
+ name: platform-custom-report-type-generate
3
+ description: "Use this skill when users need to create, generate, or validate Salesforce Custom Report Type metadata. Trigger when users mention custom report types, report types, CRTs, reporting frameworks, cross-object reports, report builder data sources, or ask to expose fields for reporting across related objects. Also use when users mention primary and related objects for reports, inner vs outer joins in reports, report type categories, or encounter deployment errors for .reportType-meta.xml files. Do NOT trigger for: running, editing, or filtering existing reports; creating report folders, dashboards, or list views; or general reporting questions that don't involve authoring a .reportType-meta.xml file."
4
+ metadata:
5
+ version: "1.0"
6
+ minApiVersion: "51.0"
7
+ ---
8
+
9
+ ## Specification
10
+
11
+ # Salesforce Custom Report Type Metadata Knowledge
12
+
13
+ ## Overview
14
+ Custom Report Types (CRTs) define the **data framework** for Salesforce reports. They specify a primary object, up to 3 related objects, the relationship (join) between them, and which fields are available in the report builder.
15
+
16
+ ## Purpose
17
+ - Enable reporting across custom objects and custom relationships not covered by standard report types
18
+ - Curate a focused set of fields for report builders (including fields reached via lookup)
19
+ - Control inner/outer join behavior to include or exclude primary records without related records
20
+
21
+ ## Configuration
22
+
23
+ **File extension:** `.reportType-meta.xml`. The file basename is the report type's developer name (e.g. `AccountsWithProjects.reportType-meta.xml`). Each CRT is a single file, not nested under an object folder.
24
+
25
+ ### Key Elements
26
+
27
+ Top-level `<ReportType>` children:
28
+
29
+ | Element | Required | Notes |
30
+ |---------|----------|-------|
31
+ | `<fullName>` | Yes | API identifier; must match the file name. Letters, numbers, underscores; must begin with a letter; no spaces; no trailing underscore; no consecutive underscores |
32
+ | `<label>` | Yes | Human-friendly name shown in the report type picker |
33
+ | `<description>` | Recommended | State the business "why" — who uses this and what they learn |
34
+ | `<baseObject>` | Yes | API name of the primary object (e.g. `Account`, `Project__c`). Cannot be changed after initial creation. All objects, including custom and external, are supported (external objects from API 38.0+) |
35
+ | `<category>` | Recommended | Report builder category — see `references/category-values.md` |
36
+ | `<deployed>` | Yes | `true` to expose to users; `false` while building/iterating |
37
+ | `<join>` | Conditional | Adds a related object and its join behavior. Nest further `<join>` blocks for deeper relationships |
38
+ | `<sections>` | Recommended | Groups of columns available to the report type. Though not strictly required, a report without columns isn't useful |
39
+
40
+ `<sections>` (group of columns) sub-elements:
41
+
42
+ | Element | Required | Notes |
43
+ |---------|----------|-------|
44
+ | `<masterLabel>` | Yes | Section heading shown in the report builder |
45
+ | `<columns>` | Conditional | One per field exposed in the section |
46
+
47
+ `<columns>` (single field) sub-elements:
48
+
49
+ | Element | Required | Notes |
50
+ |---------|----------|-------|
51
+ | `<field>` | Yes | Field API name (or dotted lookup-traversal path) |
52
+ | `<table>` | Yes | The object the field belongs to — base object name or dotted relationship path |
53
+ | `<checkedByDefault>` | Yes | `true` if the column is selected by default in the report builder |
54
+ | `<displayNameOverride>` | No | Custom column label shown in the report builder, overriding the field's default label |
55
+
56
+ ## Critical Rules (Read First)
57
+
58
+ ### Rule 1: If `<fullName>` Is Present, It Must Match the File Name
59
+ In source format, `fullName` is inherited from `Metadata` and derived from the file name, so the `<fullName>` element is technically optional. The repo convention is to include it. **If you include `<fullName>`, its value must equal the file name (everything before `.reportType-meta.xml`) exactly — same characters, same casing, same underscores.**
60
+
61
+ **Wrong** — file name and `<fullName>` differ:
62
+ - File: `account_projects.reportType-meta.xml`
63
+ - `<fullName>AccountProjects</fullName>`
64
+ (Mismatch: file uses `account_projects`, fullName uses `AccountProjects`)
65
+
66
+ **Right** — file name and `<fullName>` are identical:
67
+ - File: `AccountProjects.reportType-meta.xml`
68
+ - `<fullName>AccountProjects</fullName>`
69
+
70
+ ### Rule 2: Join Semantics — `outerJoin` Controls Inclusion
71
+
72
+ Each `<join>` block has an `<outerJoin>` element that determines which primary records appear in the report:
73
+
74
+ | `<outerJoin>` value | Behavior | Report Builder Label |
75
+ |---------------------|----------|----------------------|
76
+ | `false` | Inner join — only primary records that HAVE at least one related record | "Each 'A' record must have at least one related 'B' record" |
77
+ | `true` | Outer join — all primary records, with or without related records | "'A' records may or may not have related 'B' records" |
78
+
79
+ **Default when unspecified:** Use `true` (outer join) when the user wants to see all primary records regardless of children. Use `false` when the report only makes sense if children exist.
80
+
81
+ ### Rule 3: Each Object Needs Its Own `<sections>` Block
82
+
83
+ Every object in the CRT (primary + each joined object) must have a corresponding `<sections>` block that lists the fields exposed for reporting. Without a section for an object, none of its fields appear in the report builder.
84
+
85
+ - `<masterLabel>` on each section is the section heading in the report builder
86
+ - `<columns>` entries list the fields — each with a `<field>` (API name) and `<table>` (object API name)
87
+ - For fields reached via lookup, use the relationship path in `<field>` (e.g. `Owner.Name` with `<table>` set to the owning object)
88
+
89
+ ### Rule 4: Field API Names, Not Labels
90
+
91
+ Use exact API names for fields: standard fields use their defined names (`Name`, `CreatedDate`, `OwnerId`), custom fields use `Field__c`. Custom objects must include `__c`.
92
+
93
+ **Wrong:**
94
+ - `<field>Account Name</field>`
95
+
96
+ **Right:**
97
+ - `<field>Name</field>` with `<table>Account</table>`
98
+
99
+ ### Rule 5: Relationship Path for Joined Objects
100
+
101
+ When adding a `<join>`, the `<relationship>` element must use the **child relationship name** as defined on the lookup/master-detail field pointing from the child object to the parent. For custom relationships, this typically ends in `__r`.
102
+
103
+ **Wrong:**
104
+ - `<relationship>Project</relationship>` (for a custom child relationship)
105
+
106
+ **Right:**
107
+ - `<relationship>Projects__r</relationship>` (child relationship name)
108
+ - `<relationship>Contacts</relationship>` (standard, non-custom child relationship)
109
+
110
+ ### Rule 6: Maximum 4 Objects Total in a Join Chain
111
+
112
+ A single CRT can join a maximum of **four objects total** (the base object + up to 3 additional objects via nested `<join>` blocks).
113
+
114
+ ### Rule 7: No Inner Join After an Outer Join
115
+
116
+ Once the join chain contains an outer join (`<outerJoin>true</outerJoin>`), every subsequent nested join must also be an outer join. An inner join that follows an outer join earlier in the sequence is not allowed.
117
+
118
+ **Wrong:**
119
+ ```xml
120
+ <join>
121
+ <outerJoin>true</outerJoin> <!-- outer join first -->
122
+ <relationship>Contacts</relationship>
123
+ <join>
124
+ <outerJoin>false</outerJoin> <!-- WRONG: inner join after outer -->
125
+ <relationship>Assets</relationship>
126
+ </join>
127
+ </join>
128
+ ```
129
+
130
+ **Right:**
131
+ ```xml
132
+ <join>
133
+ <outerJoin>true</outerJoin>
134
+ <relationship>Contacts</relationship>
135
+ <join>
136
+ <outerJoin>true</outerJoin> <!-- outer stays outer -->
137
+ <relationship>Assets</relationship>
138
+ </join>
139
+ </join>
140
+ ```
141
+
142
+ ### Rule 8: `<table>` for Joined Objects Uses Dotted Path
143
+
144
+ In `<sections>`, the `<table>` element identifies which object in the join chain each column belongs to. For the base object, use the object name directly (e.g. `Account`). For joined objects, use the **dotted relationship path** from the base object.
145
+
146
+ | Object in chain | `<table>` value |
147
+ |-----------------|-----------------|
148
+ | Base (Account) | `Account` |
149
+ | First join (Account → Contacts) | `Account.Contacts` |
150
+ | Nested join (Account → Contacts → Assets) | `Account.Contacts.Assets` |
151
+
152
+ ### Rule 9: Field Paths Can Traverse Lookups
153
+
154
+ `<field>` values may reference fields reached via lookup relationships using dot notation — for example `Owner.Email` (owner User's email) or `ReportsTo.CreatedBy.Contact.Owner.MobilePhone`. The `<table>` must still be the object that owns the starting field.
155
+
156
+ ### Rule 10: Historical Trending Fields Use `_hst` Suffix
157
+
158
+ For a field with `trackTrending=true`, the API name in `<field>` and `<table>` uses the `_hst` suffix:
159
+
160
+ ```xml
161
+ <columns>
162
+ <checkedByDefault>false</checkedByDefault>
163
+ <field>Field2__c_hst</field>
164
+ <table>CustomTrendedObject__c.CustomTrendedObject__c_hst</table>
165
+ </columns>
166
+ ```
167
+
168
+ ### Rule 11: Primary Object Cannot Be Changed After Deployment
169
+
170
+ Once deployed, the `<baseObject>` of a CRT is locked. To change the primary object, create a new CRT and retire the old one.
171
+
172
+ ### Rule 12: `autogenerated` Is Reserved for Historical Trending
173
+
174
+ The `<autogenerated>` element (API 29.0+) marks CRTs that Salesforce created automatically when historical trending was enabled on an object. Do not set this manually on hand-authored CRTs.
175
+
176
+ ## Generation Workflow
177
+
178
+ ### Step 1: Gather Requirements
179
+ - Primary object API name (e.g. `Account`, `Project__c`)
180
+ - Related objects and the relationship between each (which has the lookup/master-detail to which)
181
+ - For each relationship: inner join (children required) or outer join (children optional)?
182
+ - Which fields to expose per object — aim for task-relevant, not the full field list
183
+ - Audience and category — where should this appear in the report builder picker?
184
+ - Whether this ships as `deployed=true` now or stays `deployed=false` during iteration
185
+
186
+ ### Step 2: Examine Existing Examples
187
+ - Look in the project for in-project CRT patterns
188
+ - If existing report types have been retrieved from an org, compare against those structures
189
+
190
+ ### Step 3: Write the Specification
191
+ Document before authoring:
192
+ - `fullName` and `label`
193
+ - `baseObject`
194
+ - Category and `deployed` state
195
+ - Join chain: for each related object — relationship name, outer vs inner join
196
+ - Section layout: one section per object, ordered list of fields
197
+ - Acceptance criteria: which records should appear when the report runs, which fields are available in the builder
198
+
199
+ ### Step 4: Author the Metadata File
200
+
201
+ Start from the closest example in `examples/` and adapt it to the user's scenario:
202
+
203
+ - Primary object only (no joins) → `examples/AccountsWithIndustry.reportType-meta.xml`
204
+ - Outer join (primary records included even without children) → `examples/AccountsWithProjects.reportType-meta.xml`
205
+ - Nested inner join (every level requires children) → `examples/AccountProjectsWithTasks.reportType-meta.xml`
206
+
207
+ Name the file `<DeveloperName>.reportType-meta.xml`.
208
+
209
+ ### Step 5: Validate
210
+ - Well-formed XML with correct namespace (`xmlns="http://soap.sforce.com/2006/04/metadata"`)
211
+ - File name (without `.reportType-meta.xml`) matches `<fullName>` when `<fullName>` is included
212
+ - `<baseObject>` is a valid API name and the object is deployed
213
+ - Every `<relationship>` uses the correct child relationship name (`__r` suffix for custom)
214
+ - Each object referenced in `<sections>` is part of the CRT (primary or joined)
215
+ - All `<field>` references exist on the parent `<table>` and use API names (not labels)
216
+ - `<category>` is a valid Salesforce category value
217
+ - `<deployed>` is `true` if users need to access the CRT immediately
218
+
219
+ ## Reference File Index
220
+
221
+ | File | When to read |
222
+ |------|--------------|
223
+ | `examples/AccountsWithIndustry.reportType-meta.xml` | Step 2 / Step 4 — primary-object-only template |
224
+ | `examples/AccountsWithProjects.reportType-meta.xml` | Step 2 / Step 4 — outer-join template (primary included even without children) |
225
+ | `examples/AccountProjectsWithTasks.reportType-meta.xml` | Step 2 / Step 4 — nested inner-join template (every level requires children) |
226
+ | `references/category-values.md` | Step 3 — to choose a valid `<category>` value from the `ReportTypeCategory` enum |
227
+ | `references/errors-and-troubleshooting.md` | When fields don't appear in the report builder or join requirements conflict |
228
+
229
+ ## Verification Checklist
230
+
231
+ ### Universal Checks
232
+ - [ ] File extension is `.reportType-meta.xml`
233
+ - [ ] File basename satisfies the developer-name rules (begins with a letter, only letters/numbers/underscores, no spaces, no trailing underscore, no consecutive underscores)
234
+ - [ ] If `<fullName>` is included, it matches the file basename exactly (same characters, casing, and underscores)
235
+ - [ ] `<label>` is human-readable and under 40 characters
236
+ - [ ] `<description>` explains the business purpose
237
+ - [ ] `<baseObject>` uses a valid API name and that object is deployed
238
+ - [ ] `<category>` is a valid `ReportTypeCategory` enum value
239
+ - [ ] `<deployed>` is set appropriately (`true` for user access, `false` for in-progress iteration)
240
+ - [ ] `<autogenerated>` is NOT set manually (reserved for historical-trending CRTs)
241
+
242
+ ### Join Checks
243
+ - [ ] Each `<join>` uses the correct child **relationship name** (not the lookup field API name)
244
+ - [ ] Custom relationships use `__r` suffix
245
+ - [ ] `<outerJoin>` is set intentionally: `true` = optional children, `false` = required children
246
+ - [ ] No inner join (`<outerJoin>false</outerJoin>`) appears after an outer join earlier in the sequence
247
+ - [ ] Total object count (base + joins, including nested) is 4 or fewer
248
+
249
+ ### Section Checks
250
+ - [ ] Every object in the CRT has a corresponding `<sections>` block
251
+ - [ ] `<masterLabel>` on each section is descriptive
252
+ - [ ] Every `<columns>` has both `<field>` (API name) and `<table>` (object API name or dotted path)
253
+ - [ ] `<checkedByDefault>` is set for each column
254
+ - [ ] `<table>` for base object is the object API name (e.g. `Account`)
255
+ - [ ] `<table>` for joined objects uses the dotted relationship path (e.g. `Account.Projects__r`, `Account.Projects__r.Tasks__r`)
256
+ - [ ] Field references use API names (not labels); custom fields use `__c`
257
+ - [ ] Lookup traversal fields use dot notation (e.g. `Owner.Email`) with `<table>` set to the object owning the starting field
258
+ - [ ] Historical trending fields use `_hst` suffix in both `<field>` and `<table>` when applicable
259
+ - [ ] No duplicate fields within a section
@@ -0,0 +1,51 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ReportType xmlns="http://soap.sforce.com/2006/04/metadata">
3
+ <fullName>AccountProjectsWithTasks</fullName>
4
+ <baseObject>Account</baseObject>
5
+ <category>other</category>
6
+ <deployed>true</deployed>
7
+ <label>Accounts with Projects with Tasks</label>
8
+ <description>Reports on accounts that have projects, and those projects that have tasks — useful for active-engagement tracking. Demonstrates a nested inner join chain and how each level extends the dotted relationship path in <table> (Account → Account.Projects__r → Account.Projects__r.Tasks__r).</description>
9
+ <join>
10
+ <outerJoin>false</outerJoin>
11
+ <relationship>Projects__r</relationship>
12
+ <join>
13
+ <outerJoin>false</outerJoin>
14
+ <relationship>Tasks__r</relationship>
15
+ </join>
16
+ </join>
17
+ <sections>
18
+ <masterLabel>Account Fields</masterLabel>
19
+ <columns>
20
+ <checkedByDefault>true</checkedByDefault>
21
+ <field>Name</field>
22
+ <table>Account</table>
23
+ </columns>
24
+ </sections>
25
+ <sections>
26
+ <masterLabel>Project Fields</masterLabel>
27
+ <columns>
28
+ <checkedByDefault>true</checkedByDefault>
29
+ <field>Name</field>
30
+ <table>Account.Projects__r</table>
31
+ </columns>
32
+ <columns>
33
+ <checkedByDefault>true</checkedByDefault>
34
+ <field>Status__c</field>
35
+ <table>Account.Projects__r</table>
36
+ </columns>
37
+ </sections>
38
+ <sections>
39
+ <masterLabel>Task Fields</masterLabel>
40
+ <columns>
41
+ <checkedByDefault>true</checkedByDefault>
42
+ <field>Name</field>
43
+ <table>Account.Projects__r.Tasks__r</table>
44
+ </columns>
45
+ <columns>
46
+ <checkedByDefault>false</checkedByDefault>
47
+ <field>Due_Date__c</field>
48
+ <table>Account.Projects__r.Tasks__r</table>
49
+ </columns>
50
+ </sections>
51
+ </ReportType>
@@ -0,0 +1,27 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ReportType xmlns="http://soap.sforce.com/2006/04/metadata">
3
+ <fullName>AccountsWithIndustry</fullName>
4
+ <baseObject>Account</baseObject>
5
+ <category>accounts</category>
6
+ <deployed>true</deployed>
7
+ <label>Accounts with Industry Detail</label>
8
+ <description>Report framework for reviewing accounts with industry and revenue fields surfaced.</description>
9
+ <sections>
10
+ <masterLabel>Account Fields</masterLabel>
11
+ <columns>
12
+ <checkedByDefault>true</checkedByDefault>
13
+ <field>Name</field>
14
+ <table>Account</table>
15
+ </columns>
16
+ <columns>
17
+ <checkedByDefault>true</checkedByDefault>
18
+ <field>Industry</field>
19
+ <table>Account</table>
20
+ </columns>
21
+ <columns>
22
+ <checkedByDefault>false</checkedByDefault>
23
+ <field>AnnualRevenue</field>
24
+ <table>Account</table>
25
+ </columns>
26
+ </sections>
27
+ </ReportType>
@@ -0,0 +1,44 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ReportType xmlns="http://soap.sforce.com/2006/04/metadata">
3
+ <fullName>AccountsWithProjects</fullName>
4
+ <baseObject>Account</baseObject>
5
+ <category>accounts</category>
6
+ <deployed>true</deployed>
7
+ <label>Accounts with or without Projects</label>
8
+ <description>Shows every account; related project fields appear when projects exist. Demonstrates outer join — primary records included regardless of related-record presence — and the dotted relationship path used in <table>Account.Projects__r</table> for joined-object fields.</description>
9
+ <join>
10
+ <outerJoin>true</outerJoin>
11
+ <relationship>Projects__r</relationship>
12
+ </join>
13
+ <sections>
14
+ <masterLabel>Account Fields</masterLabel>
15
+ <columns>
16
+ <checkedByDefault>true</checkedByDefault>
17
+ <field>Name</field>
18
+ <table>Account</table>
19
+ </columns>
20
+ <columns>
21
+ <checkedByDefault>true</checkedByDefault>
22
+ <field>Industry</field>
23
+ <table>Account</table>
24
+ </columns>
25
+ </sections>
26
+ <sections>
27
+ <masterLabel>Project Fields</masterLabel>
28
+ <columns>
29
+ <checkedByDefault>true</checkedByDefault>
30
+ <field>Name</field>
31
+ <table>Account.Projects__r</table>
32
+ </columns>
33
+ <columns>
34
+ <checkedByDefault>true</checkedByDefault>
35
+ <field>Status__c</field>
36
+ <table>Account.Projects__r</table>
37
+ </columns>
38
+ <columns>
39
+ <checkedByDefault>false</checkedByDefault>
40
+ <field>CreatedDate</field>
41
+ <table>Account.Projects__r</table>
42
+ </columns>
43
+ </sections>
44
+ </ReportType>
@@ -0,0 +1,32 @@
1
+ # `<category>` Values — `ReportTypeCategory` Enumeration
2
+
3
+ The `category` value determines where the CRT appears in the report builder's "Create New Report Type" wizard. Use one of these Salesforce-defined values from the Metadata API `ReportTypeCategory` enum.
4
+
5
+ | Category value | Typical use |
6
+ |----------------|-------------|
7
+ | `accounts` | Accounts & Contacts |
8
+ | `opportunities` | Opportunities |
9
+ | `forecasts` | Forecasts |
10
+ | `cases` | Customer Support Reports |
11
+ | `leads` | Leads |
12
+ | `campaigns` | Campaigns |
13
+ | `activities` | Activities |
14
+ | `busop` | Business operations |
15
+ | `products` | Price Books, Products and Assets |
16
+ | `admin` | Administrative Reports |
17
+ | `territory` | Territory management |
18
+ | `territory2` | Territory management (Enterprise Territory Management) — API 31.0+ |
19
+ | `usage_entitlement` | Usage entitlements |
20
+ | `wdc` | Work.com / Calibration — API 29.0+ |
21
+ | `calibration` | Calibration — API 29.0+ |
22
+ | `other` | Other Reports (default for custom-object-based CRTs without a natural home) |
23
+ | `content` | Content |
24
+ | `quotes` | Quotes |
25
+ | `individual` | Individual (privacy) — API 45.0+ |
26
+ | `employee` | Employee — API 46.0+ |
27
+ | `data_cloud` | Data Cloud — API 55.0+ |
28
+ | `commerce` | Commerce — API 60.0+ |
29
+ | `flow` | Flow — API 60.0+ |
30
+ | `semantic_model` | Semantic model — API 60.0+ |
31
+
32
+ **When in doubt:** Use `other` for custom-object-based CRTs.
@@ -0,0 +1,24 @@
1
+ # Common Authoring Errors
2
+
3
+ Read this when a generated `.reportType-meta.xml` is rejected during deployment or fields don't appear in the report builder. Use these to validate the authored XML before handing it off; deployment itself is outside this skill's scope.
4
+
5
+ | Error | Cause | Fix |
6
+ |-------|-------|-----|
7
+ | `Invalid object name 'X'` on `<baseObject>` | Primary object doesn't exist or isn't deployed | Deploy the custom object before the CRT |
8
+ | `Invalid relationship name 'X'` on `<join>` | Used the field API name instead of the child relationship name, or forgot `__r` | Use the child relationship name (e.g. `Projects__r` for a custom relationship) |
9
+ | `Invalid field 'X' for object 'Y'` | Field doesn't exist on `<table>`, used label instead of API name, or field not yet deployed | Verify field API name; deploy dependent fields first |
10
+ | `Invalid category value 'X'` | Typo or non-existent category | Use a valid `ReportTypeCategory` value (see `category-values.md`); use `other` for general-purpose custom-object CRTs |
11
+ | Inner join after outer join | A nested `<join>` has `<outerJoin>false</outerJoin>` following an earlier outer join | Switch the nested join to `<outerJoin>true</outerJoin>`, or restructure so inner joins come first |
12
+ | Fields from joined object not visible in report builder | `<table>` in `<sections>` for the joined object doesn't use the dotted relationship path | Change `<table>` to the full path (e.g. `Account.Projects__r` not `Project__c`) |
13
+ | `Cannot change base object` on update | Attempted to change `<baseObject>` after initial deploy | Create a new CRT with the new primary object; retire the old one |
14
+ | File not found / fullName mismatch | File name doesn't match `<fullName>` | Rename file so `<fullName>.reportType-meta.xml` matches |
15
+
16
+ ## Handling Conflicting Join Requirements
17
+
18
+ When a user wants both "include primary records without children" AND "exclude children that lack their own children" — those constraints are inexpressible in a single CRT join chain (Rule 7 forbids inner-after-outer). Three workarounds:
19
+
20
+ 1. **All-outer + report-level filter** — keep all joins outer and filter at report time (e.g. `Case ID ≠ null`). Pragmatic, but every report author must remember the filter.
21
+ 2. **Flip the base object** — base on the deepest required object. Lose primary-without-children but gain the inner-join guarantee. Lookup fields on the new base let you traverse back up for context.
22
+ 3. **Two CRTs** — one all-outer for "all primary records," one inner-chained for "only primary records with full children." Users pick the right one.
23
+
24
+ Surface this trade-off to the user rather than picking silently.
@@ -18,7 +18,7 @@ Add the skill to your Cursor project by placing the `platform-data-manage` direc
18
18
  ## Usage
19
19
 
20
20
  Invoke the skill:
21
- ```
21
+ ```text
22
22
  Skill(skill="platform-data-manage")
23
23
  Request: "Create 251 test Account records with varying Industries for trigger testing in org dev"
24
24
  ```
@@ -56,21 +56,21 @@ Request: "Create 251 test Account records with varying Industries for trigger te
56
56
  ## Cross-Skill Integration
57
57
 
58
58
  ### With platform-metadata-deploy
59
- ```
59
+ ```text
60
60
  Skill(skill="platform-metadata-deploy")
61
61
  Request: "Describe Invoice__c in org dev - show all fields"
62
62
  ```
63
63
  Then use platform-data-manage with accurate field names and permitted values.
64
64
 
65
65
  ### From platform-apex-generate / automation-flow-generate
66
- ```
66
+ ```text
67
67
  Skill(skill="platform-data-manage")
68
68
  Request: "Create 251 test Accounts to trigger AccountTrigger bulk testing"
69
69
  ```
70
70
 
71
71
  ## Directory Structure
72
72
 
73
- ```
73
+ ```text
74
74
  platform-data-manage/
75
75
  ├── SKILL.md # Main skill prompt
76
76
  ├── assets/
@@ -173,7 +173,7 @@ System.debug('Heap: ' + Limits.getHeapSize() + '/' + Limits.getLimitHeapSize());
173
173
 
174
174
  ## Validation Score
175
175
 
176
- ```
176
+ ```text
177
177
  Score: 128/130 ⭐⭐⭐⭐⭐ Excellent
178
178
  ├─ Query Efficiency: 25/25 (bulk queries)
179
179
  ├─ Bulk Safety: 25/25 (251 records, limits monitored)
@@ -12,7 +12,7 @@ Create a Deal Desk workflow test environment with:
12
12
 
13
13
  ## Phase 1: Discovery (sf-metadata)
14
14
 
15
- ```
15
+ ```text
16
16
  Skill(skill="sf-metadata")
17
17
  Request: "Describe object Account in org dev - show required fields and picklist values"
18
18
  ```
@@ -171,7 +171,7 @@ sf apex run --file create-hierarchy.apex --target-org dev
171
171
 
172
172
  ## Validation Score
173
173
 
174
- ```
174
+ ```text
175
175
  Score: 125/130 ⭐⭐⭐⭐⭐ Excellent
176
176
  ├─ Query Efficiency: 25/25 (indexed fields, no N+1)
177
177
  ├─ Bulk Safety: 23/25 (single records OK for demo)