@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
@@ -38,7 +38,7 @@ req.setEndpoint('https://api.example.com');
38
38
 
39
39
  Request only necessary scopes:
40
40
 
41
- ```
41
+ ```text
42
42
  ✅ read:orders write:orders
43
43
  ❌ admin:* read:* write:*
44
44
  ```
@@ -54,7 +54,7 @@ Request only necessary scopes:
54
54
 
55
55
  For mobile or SPA clients:
56
56
 
57
- ```
57
+ ```text
58
58
  Use Authorization Code with PKCE, not Implicit flow
59
59
  ```
60
60
 
@@ -62,6 +62,9 @@ Use Authorization Code with PKCE, not Implicit flow
62
62
 
63
63
  ### Remote Site Settings
64
64
 
65
+ **Template**: `assets/endpoint-security/example.remoteSite-meta.xml`
66
+ **Template**: `assets/endpoint-security/example.cspTrustedSite-meta.xml`
67
+
65
68
  - Only allow necessary domains
66
69
  - Don't use wildcard domains
67
70
  - Review and audit regularly
@@ -72,6 +72,12 @@ EXTERNAL_CREDENTIAL_NAME=$1
72
72
  PRINCIPAL_NAME=$2
73
73
  ORG_ALIAS=$3
74
74
 
75
+ # Validate EXTERNAL_CREDENTIAL_NAME for SOQL safety
76
+ if [[ ! "$EXTERNAL_CREDENTIAL_NAME" =~ ^[a-zA-Z0-9_]+$ ]]; then
77
+ echo -e "${RED}ERROR: Invalid credential name '$EXTERNAL_CREDENTIAL_NAME'. Only alphanumeric and underscores allowed.${NC}" >&2
78
+ exit 1
79
+ fi
80
+
75
81
  # Validate sf CLI is installed
76
82
  if ! command -v sf &> /dev/null; then
77
83
  echo -e "${RED}Error: Salesforce CLI (sf) is not installed${NC}"
@@ -138,10 +144,16 @@ fi
138
144
  echo -e "${GREEN}✓ API key received${NC}"
139
145
  echo ""
140
146
 
147
+ # Escape single quotes to prevent Apex injection
148
+ API_KEY_ESCAPED="${API_KEY//\'/\\\'}"
149
+ EXTERNAL_CREDENTIAL_NAME_ESCAPED="${EXTERNAL_CREDENTIAL_NAME//\'/\\\'}"
150
+ PRINCIPAL_NAME_ESCAPED="${PRINCIPAL_NAME//\'/\\\'}"
151
+
141
152
  # Generate Apex code to configure credential
142
153
  echo -e "${BLUE}► Generating Apex code to configure credential...${NC}"
143
154
 
144
155
  TEMP_APEX=$(mktemp /tmp/set-credential-XXXXXX.apex)
156
+ trap 'rm -f "$TEMP_APEX"' EXIT
145
157
 
146
158
  cat > "$TEMP_APEX" << EOF
147
159
  // Auto-generated by configure-named-credential.sh
@@ -151,14 +163,14 @@ cat > "$TEMP_APEX" << EOF
151
163
  ConnectApi.CredentialInput newCredentials = new ConnectApi.CredentialInput();
152
164
 
153
165
  // Specify the External Credential
154
- newCredentials.externalCredential = '$EXTERNAL_CREDENTIAL_NAME';
166
+ newCredentials.externalCredential = '$EXTERNAL_CREDENTIAL_NAME_ESCAPED';
155
167
 
156
168
  // Set authentication protocol
157
169
  newCredentials.authenticationProtocol = ConnectApi.CredentialAuthenticationProtocol.Custom;
158
170
 
159
171
  // Define the principal
160
172
  newCredentials.principalType = ConnectApi.CredentialPrincipalType.NamedPrincipal;
161
- newCredentials.principalName = '$PRINCIPAL_NAME';
173
+ newCredentials.principalName = '$PRINCIPAL_NAME_ESCAPED';
162
174
 
163
175
  // Create credentials map
164
176
  Map<String, ConnectApi.CredentialValueInput> creds = new Map<String, ConnectApi.CredentialValueInput>();
@@ -166,7 +178,7 @@ Map<String, ConnectApi.CredentialValueInput> creds = new Map<String, ConnectApi.
166
178
  // Create API key parameter
167
179
  ConnectApi.CredentialValueInput apiKeyParam = new ConnectApi.CredentialValueInput();
168
180
  apiKeyParam.encrypted = true; // Required for security
169
- apiKeyParam.value = '$API_KEY';
181
+ apiKeyParam.value = '$API_KEY_ESCAPED';
170
182
 
171
183
  // Add to credentials map
172
184
  creds.put('apiKey', apiKeyParam);
@@ -230,7 +242,6 @@ else
230
242
  echo -e "${YELLOW}Apex execution output:${NC}"
231
243
  echo "$APEX_RESULT"
232
244
  echo ""
233
- echo -e "${YELLOW}Temp Apex file saved at: $TEMP_APEX${NC}"
234
- echo "Review the file and run manually if needed"
245
+ echo -e "${YELLOW}Re-run this script to retry.${NC}"
235
246
  exit 1
236
247
  fi
@@ -45,6 +45,12 @@ SETTING_NAME=$1
45
45
  API_KEY=$2
46
46
  ORG_ALIAS=$3
47
47
 
48
+ # Validate SETTING_NAME to prevent SOQL injection
49
+ if [[ ! "$SETTING_NAME" =~ ^[a-zA-Z0-9_]+$ ]]; then
50
+ echo -e "${RED}Error: Invalid setting name '$SETTING_NAME'. Only alphanumeric and underscores allowed.${NC}" >&2
51
+ exit 1
52
+ fi
53
+
48
54
  # If API key is "-", prompt securely
49
55
  if [ "$API_KEY" = "-" ]; then
50
56
  echo -e "${YELLOW}Enter API key (input hidden):${NC}"
@@ -58,6 +64,9 @@ if [ -z "$API_KEY" ]; then
58
64
  exit 1
59
65
  fi
60
66
 
67
+ # Escape single quotes in API_KEY for safe interpolation
68
+ API_KEY_ESCAPED="${API_KEY//\'/\\\'}"
69
+
61
70
  # Validate org
62
71
  echo -e "${BLUE}Validating org connection...${NC}"
63
72
  if ! sf org display --target-org "$ORG_ALIAS" &> /dev/null; then
@@ -120,7 +129,7 @@ if [ -z "$EXISTING_ID" ]; then
120
129
  echo -e "${BLUE}Creating new credential record...${NC}"
121
130
  sf data create record \
122
131
  --sobject API_Credentials__c \
123
- --values "Name='$SETTING_NAME' API_Key__c='$API_KEY'" \
132
+ --values "Name='$SETTING_NAME' API_Key__c='$API_KEY_ESCAPED'" \
124
133
  --target-org "$ORG_ALIAS"
125
134
  echo -e "${GREEN}✓ Credential created${NC}"
126
135
  else
@@ -128,7 +137,7 @@ else
128
137
  sf data update record \
129
138
  --sobject API_Credentials__c \
130
139
  --record-id "$EXISTING_ID" \
131
- --values "API_Key__c='$API_KEY'" \
140
+ --values "API_Key__c='$API_KEY_ESCAPED'" \
132
141
  --target-org "$ORG_ALIAS"
133
142
  echo -e "${GREEN}✓ Credential updated${NC}"
134
143
  fi
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env python3
2
2
  """
3
- Credential Setup Suggestion Hook for building-sf-integrations
3
+ Credential Setup Suggestion Hook for integration-connectivity-generate
4
4
 
5
5
  Detects when credential metadata files are created and suggests
6
6
  running the appropriate automation scripts.
@@ -19,6 +19,7 @@ import os
19
19
  import re
20
20
  import sys
21
21
  from pathlib import Path
22
+ from typing import Optional
22
23
 
23
24
  # File pattern matchers
24
25
  PATTERNS = {
@@ -82,7 +83,7 @@ SCRIPT_RECOMMENDATIONS = {
82
83
  }
83
84
 
84
85
 
85
- def detect_file_type(file_path: str) -> str | None:
86
+ def detect_file_type(file_path: str) -> Optional[str]:
86
87
  """Detect the credential file type from the file path."""
87
88
  filename = os.path.basename(file_path)
88
89
 
@@ -204,7 +205,7 @@ def generate_suggestion_message(file_type: str, cred_name: str, file_context: di
204
205
  if file_context.get('has_oauth'):
205
206
  lines.extend([
206
207
  '',
207
- '⚠️ OAuth detected: Consider using /configuring-connected-apps to',
208
+ '⚠️ OAuth detected: Consider using /integration-connectivity-connected-app-configure to',
208
209
  ' create the Connected App for this credential.',
209
210
  ])
210
211
 
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env python3
2
2
  """
3
- building-sf-integrations Validation Script
3
+ integration-connectivity-generate Validation Script
4
4
 
5
5
  Validates integration-related files against best practices.
6
6
  Scoring: 120 points across 6 categories.
@@ -17,7 +17,7 @@ rubric and migration guidance from legacy `VlocityOpenInterface` implementations
17
17
 
18
18
  ### 1. Invoke the skill
19
19
 
20
- ```
20
+ ```text
21
21
  Skill: omnistudio-callable-apex-generate
22
22
  Request: "Create a callable implementation for Order actions with createOrder and cancelOrder"
23
23
  ```
@@ -66,10 +66,6 @@ The skill generates:
66
66
  | platform-apex-test-run | Run tests and analyze coverage |
67
67
  | platform-metadata-deploy | Deploy callable classes to an org |
68
68
 
69
- ## Documentation
70
-
71
- - [Skill Instructions](SKILL.md)
72
-
73
69
  ### VlocityOpenInterface / VlocityOpenInterface2
74
70
 
75
71
  The skill includes design (Phase 2) and implementation (Phase 3) guidance for the Open Interface signature `invokeMethod(String methodName, Map<String, Object> inputMap, Map<String, Object> outputMap, Map<String, Object> options)`. Use this when extending legacy OmniStudio/Vlocity integration points or building dual Callable + Open Interface implementations.
@@ -53,7 +53,7 @@ Then:
53
53
  - Output schema (consistent response envelope)
54
54
 
55
55
  **Recommended response envelope**:
56
- ```
56
+ ```json
57
57
  {
58
58
  "success": true|false,
59
59
  "data": {...},
@@ -70,7 +70,7 @@ Then:
70
70
 
71
71
  When designing for legacy Open Interface extensions (or dual Callable + Open Interface support), map the signature:
72
72
 
73
- ```
73
+ ```text
74
74
  invokeMethod(String methodName, Map<String, Object> inputMap, Map<String, Object> outputMap, Map<String, Object> options)
75
75
  ```
76
76
 
@@ -171,7 +171,7 @@ action contract stable.
171
171
  | **Testing** | 15 | Positive/negative/contract/bulk tests |
172
172
  | **Documentation** | 10 | ApexDoc (`/** ... */` block comments — Salesforce Apex documentation standard) for class and action methods |
173
173
 
174
- **Thresholds**: 90+ (Ready) | ⚠️ 70-89 (Review) | <70 (Block)
174
+ **Thresholds**: [PASS] 90+ (Ready) | [REVIEW] 70-89 (Review) | [BLOCK] <70 (Block)
175
175
 
176
176
  ---
177
177
 
@@ -266,10 +266,20 @@ Deliverables produced by this skill:
266
266
  | `examples/Test_VlocityOpenInterfaceConversion/MyCustomCallable.cls` | Phase 3 — migration pattern from legacy `VlocityOpenInterface` |
267
267
  | `examples/Test_VlocityOpenInterfaceConversion/MyCustomCallableTest.cls` | Phase 4 — test class for VlocityOpenInterface migration example |
268
268
  | `examples/Test_VlocityOpenInterfaceConversion/IndustriesCallableException.cls` | Phase 3 — custom exception class deployed alongside VlocityOpenInterface conversion |
269
- | `examples/Test_VlocityOpenInterfaceConversion/MyCustomVlocityOpenInterface2.cls` | Phase 3 — the original legacy VlocityOpenInterface2 class before migration |
269
+ | `examples/Test_VlocityOpenInterfaceConversion/MyCustomClass.cls` | Phase 3 — the original legacy VlocityOpenInterface class before migration |
270
270
  | `examples/Test_VlocityOpenInterfaceConversion/TRANSCRIPT.md` | Reference — reasoning transcript for VlocityOpenInterface conversion |
271
271
  | `examples/Test_VlocityOpenInterface2Conversion/MyCustomCallable.cls` | Phase 3 — migration pattern from `VlocityOpenInterface2` |
272
272
  | `examples/Test_VlocityOpenInterface2Conversion/MyCustomCallableTest.cls` | Phase 4 — test class for VlocityOpenInterface2 migration example |
273
273
  | `examples/Test_VlocityOpenInterface2Conversion/IndustriesCallableException.cls` | Phase 3 — custom exception class deployed alongside VlocityOpenInterface2 conversion |
274
274
  | `examples/Test_VlocityOpenInterface2Conversion/MyCustomRemoteClass.cls` | Phase 3 — remote class used by the VlocityOpenInterface2 migration example |
275
275
  | `examples/Test_VlocityOpenInterface2Conversion/TRANSCRIPT.md` | Reference — reasoning transcript for VlocityOpenInterface2 conversion |
276
+
277
+ ---
278
+
279
+ ## Pre-Delivery Checklist
280
+
281
+ - [ ] `call()` null-checks `args` before accessing keys
282
+ - [ ] `IndustriesCallableException` class included in deployment package
283
+ - [ ] Namespace qualified for `omnistudio.VlocityOpenInterface2` (if applicable)
284
+ - [ ] `outputMap` keys documented per action (success and error cases)
285
+ - [ ] Migrated callers read return value instead of `outputMap` by reference
@@ -20,7 +20,14 @@ public with sharing class Industries_XxxCallable implements System.Callable {
20
20
  }
21
21
 
22
22
  private Map<String, Object> actionOne(Map<String, Object> args) {
23
- // 1. Validate required keys (e.g. args.get('requiredKey'))
23
+ // 1. Validate required keys
24
+ Map<String, Object> inputMap = (Map<String, Object>) args.get('inputMap');
25
+ if (inputMap == null || inputMap.isEmpty()) {
26
+ return new Map<String, Object>{
27
+ 'success' => false,
28
+ 'error' => 'Missing required input in inputMap'
29
+ };
30
+ }
24
31
  // 2. Coerce types safely
25
32
  // 3. Run business logic (SOQL with WITH USER_MODE, DML with sharing)
26
33
  // 4. Return response envelope
@@ -43,7 +43,7 @@ Convert a VlocityOpenInterface2 implementation (`MyCustomRemoteClass`) to `Syste
43
43
  - `switch on action` with `when else` throwing `IndustriesCallableException`
44
44
 
45
45
  - **Response envelope:**
46
- ```
46
+ ```json
47
47
  { success, data: { total }, errors }
48
48
  ```
49
49
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Task
4
4
 
5
- Convert `MyCustomVlocityOpenInterface2.cls` (VlocityOpenInterface) to System.Callable and create a test class. Keep a transcript of reasoning and skills used.
5
+ Convert `MyCustomClass.cls` (VlocityOpenInterface) to System.Callable and create a test class. Keep a transcript of reasoning and skills used.
6
6
 
7
7
  ---
8
8
 
@@ -167,7 +167,7 @@ Use the **platform-metadata-deploy** skill: "Proceed with actual deployment to [
167
167
  | **Performance** | 15 | Bounded queries with LIMIT/filters; Turbo Extract for read-heavy scenarios; minimal relationship depth; indexed filter fields |
168
168
  | **Documentation** | 15 | Description on OmniDataTransform record; field mapping rationale documented; consuming components identified |
169
169
 
170
- **Thresholds**: 90+ (Deploy) | ⚠️ 67-89 (Review) | <67 (Block - fix required)
170
+ **Thresholds**: [PASS] 90+ (Deploy) | [REVIEW] 67-89 (Review) | [BLOCK] <67 (Block - fix required)
171
171
 
172
172
  ---
173
173
 
@@ -4,7 +4,7 @@ Use these templates in Phase 3 (scoring output) and Phase 5 (completion summary)
4
4
 
5
5
  ## Scoring Output (Phase 3)
6
6
 
7
- ```
7
+ ```text
8
8
  Score: XX/100 Rating
9
9
  |- Design & Naming: XX/20
10
10
  |- Field Mapping: XX/25
@@ -17,7 +17,7 @@ Score: XX/100 Rating
17
17
 
18
18
  ## Completion Summary (Phase 5)
19
19
 
20
- ```
20
+ ```text
21
21
  Data Mapper Complete: [Name]
22
22
  Type: [Extract|Transform|Load|Turbo Extract]
23
23
  Target Object(s): [Object1, Object2]
@@ -65,7 +65,7 @@ Do NOT use Load when:
65
65
 
66
66
  Always specify fields explicitly. Never rely on wildcard or "all fields" selection.
67
67
 
68
- ```
68
+ ```text
69
69
  Good: Account.Name, Account.Industry, Account.BillingCity
70
70
  Bad: Account.* (extracts all fields, wastes bandwidth and heap)
71
71
  ```
@@ -74,14 +74,14 @@ Bad: Account.* (extracts all fields, wastes bandwidth and heap)
74
74
 
75
75
  Data Mapper fields use dot-notation paths for input and output:
76
76
 
77
- ```
77
+ ```text
78
78
  Input Path: AccountData.Name
79
79
  Output Path: Account.Name
80
80
  ```
81
81
 
82
82
  For nested structures:
83
83
 
84
- ```
84
+ ```text
85
85
  Input Path: Response.data.accounts[0].name
86
86
  Output Path: AccountList.Name
87
87
  ```
@@ -106,7 +106,7 @@ When loading records with lookup relationships:
106
106
  2. Specify the lookup object and match field (e.g., `Account.Name` to resolve `AccountId`)
107
107
  3. Handle cases where the lookup returns no match (set default or fail gracefully)
108
108
 
109
- ```
109
+ ```text
110
110
  Field: AccountId
111
111
  Lookup Object: Account
112
112
  Match Field: Name
@@ -132,7 +132,7 @@ For Extract and Turbo Extract, filter on indexed fields whenever possible:
132
132
 
133
133
  Place the most selective filter first to reduce the result set early:
134
134
 
135
- ```
135
+ ```text
136
136
  Good: WHERE Id = :recordId AND Status = 'Active'
137
137
  Bad: WHERE Status = 'Active' AND Id = :recordId
138
138
  ```
@@ -141,7 +141,7 @@ Bad: WHERE Status = 'Active' AND Id = :recordId
141
141
 
142
142
  Limit relationship traversal to 2 levels for performance:
143
143
 
144
- ```
144
+ ```text
145
145
  Good: Account.Owner.Name (1 level)
146
146
  Bad: Account.Parent.Parent.Parent.Owner.Name (3+ levels)
147
147
  ```
@@ -150,7 +150,7 @@ Bad: Account.Parent.Parent.Parent.Owner.Name (3+ levels)
150
150
 
151
151
  Always set a LIMIT on Extract queries unless the consuming component guarantees a bounded input:
152
152
 
153
- ```
153
+ ```text
154
154
  LIMIT 200 -- Standard batch size
155
155
  LIMIT 2000 -- Maximum for most UI scenarios
156
156
  LIMIT 10000 -- Absolute maximum, use only with pagination
@@ -189,7 +189,7 @@ When mapping fields that may be null:
189
189
 
190
190
  Extract supports parent-to-child relationship queries:
191
191
 
192
- ```
192
+ ```text
193
193
  Object: Account
194
194
  Fields: Name, Industry
195
195
  Child Relationship: Contacts (Contact)
@@ -212,7 +212,7 @@ Output structure:
212
212
 
213
213
  Extract supports child-to-parent traversal via dot notation:
214
214
 
215
- ```
215
+ ```text
216
216
  Object: Contact
217
217
  Fields: FirstName, LastName, Account.Name, Account.Industry
218
218
  ```
@@ -21,7 +21,7 @@ The `DR_` prefix stands for DataRaptor, the original product name. It remains th
21
21
 
22
22
  ### Format
23
23
 
24
- ```
24
+ ```text
25
25
  DR_[Type]_[PrimaryObject]_[Purpose]
26
26
  ```
27
27
 
@@ -56,14 +56,14 @@ For custom objects, include the namespace prefix if applicable but drop the `__c
56
56
 
57
57
  When a Data Mapper spans multiple objects, name it after the primary (root) object:
58
58
 
59
- ```
59
+ ```text
60
60
  DR_Extract_Account_WithContactsAndOpps
61
61
  DR_Extract_Order_WithLineItems
62
62
  ```
63
63
 
64
64
  If the Data Mapper truly serves a cross-cutting concern, use a domain name instead:
65
65
 
66
- ```
66
+ ```text
67
67
  DR_Extract_CustomerProfile_Full
68
68
  DR_Transform_ClaimSubmission_Normalize
69
69
  ```
@@ -88,7 +88,7 @@ Output field names in the Data Mapper JSON response should follow these conventi
88
88
 
89
89
  Input paths reference the source data structure. Use consistent dot notation:
90
90
 
91
- ```
91
+ ```text
92
92
  AccountData.Name -- Simple field
93
93
  AccountData.Owner.Name -- Relationship traversal
94
94
  AccountData.Contacts[0] -- Collection index
@@ -99,7 +99,7 @@ RequestBody.payload.id -- Nested JSON path
99
99
 
100
100
  Output paths define the JSON structure returned by the Data Mapper:
101
101
 
102
- ```
102
+ ```text
103
103
  AccountInfo.Name -- Nested output
104
104
  AccountInfo.OwnerName -- Flattened relationship
105
105
  AccountInfo.Contacts -- Collection output
@@ -126,7 +126,7 @@ Result.status -- Top-level result wrapper
126
126
 
127
127
  Data Mapper names should be environment-agnostic. Do not include environment identifiers in the name:
128
128
 
129
- ```
129
+ ```text
130
130
  Bad: DR_Extract_Account_Details_DEV
131
131
  Bad: DR_Extract_Account_Details_v2
132
132
  Good: DR_Extract_Account_Details
@@ -14,7 +14,7 @@ Salesforce Industries DataPack deployment automation using Vlocity Build. Export
14
14
 
15
15
  Invoke this skill when working with OmniStudio/Vlocity DataPack deployments:
16
16
 
17
- ```
17
+ ```text
18
18
  Skill: omnistudio-datapacks-deploy
19
19
  Request: "Deploy my OmniStudio DataPacks to UAT using Vlocity Build and include retry guidance."
20
20
  ```
@@ -1,5 +1,5 @@
1
1
  projectPath: ../../../../
2
- expansionPath: skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle
2
+ expansionPath: skills/omnistudio-epc-catalog-generate/examples/business-internet-plus-bundle
3
3
 
4
4
  # Deterministic scope for this validation example.
5
5
  manifest:
@@ -190,7 +190,7 @@ sf data query --query "SELECT Id, Type, SubType, Language, IsActive FROM OmniPro
190
190
 
191
191
  #### Algorithm: BFS with Circular Detection
192
192
 
193
- ```
193
+ ```text
194
194
  1. Initialize empty graph G and visited set V
195
195
  2. For each root component C:
196
196
  a. Enqueue C into work queue Q
@@ -221,7 +221,7 @@ OmniScript and IP elements store references in the `PropertySetConfig` JSON fiel
221
221
  | Apex Remote Action | `remoteClass` | Apex Class |
222
222
 
223
223
  **Parsing PropertySetConfig**:
224
- ```
224
+ ```text
225
225
  For each OmniProcessElement:
226
226
  1. Read PropertySetConfig (JSON string)
227
227
  2. Parse JSON
@@ -235,7 +235,7 @@ For each OmniProcessElement:
235
235
 
236
236
  FlexCards store their data source configuration in the `DataSourceConfig` JSON field (NOT `Definition` — that field does not exist on `OmniUiCard`):
237
237
 
238
- ```
238
+ ```text
239
239
  Parse DataSourceConfig JSON:
240
240
  1. Access dataSource object (singular, not array)
241
241
  2. For each dataSource where type === 'IntegrationProcedures' (note: PLURAL):
@@ -254,7 +254,7 @@ Parse DataSourceConfig JSON:
254
254
 
255
255
  Data Mappers reference Salesforce objects via their items:
256
256
 
257
- ```
257
+ ```text
258
258
  For each OmniDataTransformItem:
259
259
  1. Read InputObjectName → source sObject
260
260
  2. Read OutputObjectName → target sObject
@@ -343,7 +343,7 @@ graph LR
343
343
 
344
344
  #### Output Format 3: Human-Readable Report
345
345
 
346
- ```
346
+ ```text
347
347
  OmniStudio Dependency Report
348
348
  =============================
349
349
  Org Namespace: Core (Industries)
@@ -468,6 +468,13 @@ sf data query --query "SELECT Id, OmniDataTransformationId, InputObjectName, Out
468
468
 
469
469
  ---
470
470
 
471
+ ## Pre-Delivery Checklist
472
+
473
+ - [ ] Namespace detected before any downstream queries
474
+ - [ ] Orchestration order followed (this skill runs first in the chain)
475
+
476
+ ---
477
+
471
478
  ## Reference File Index
472
479
 
473
480
  | File | When to read |
@@ -10,7 +10,7 @@ OmniStudio components form a directed graph where each component type can refere
10
10
 
11
11
  ## Dependency Direction Summary
12
12
 
13
- ```
13
+ ```text
14
14
  OmniScript ──→ Integration Procedure (via IP Action element)
15
15
  OmniScript ──→ Data Mapper (via DataRaptor Action element)
16
16
  OmniScript ──→ OmniScript (via embedded OmniScript element)
@@ -206,7 +206,7 @@ Integration Procedures use the same element types as OmniScripts but are filtere
206
206
 
207
207
  An Integration Procedure can call another Integration Procedure, creating a chain:
208
208
 
209
- ```
209
+ ```text
210
210
  IP: OrderValidation
211
211
  └── IP Action → IP: CustomerLookup
212
212
  └── DR Action → DM: CustomerExtract
@@ -322,7 +322,7 @@ Each `OmniDataTransformItem` (Core) or `DRMapItem__c` (Vlocity) record contains:
322
322
 
323
323
  ### Extract Type Data Mapper Example
324
324
 
325
- ```
325
+ ```text
326
326
  DM: AccountExtract (Type: Extract)
327
327
  ├── Item 1: InputObjectName = "Account"
328
328
  │ InputFieldName = "Name"
@@ -339,7 +339,7 @@ Dependencies: Account (read), Contact (read)
339
339
 
340
340
  ### Load Type Data Mapper Example
341
341
 
342
- ```
342
+ ```text
343
343
  DM: OrderCreate (Type: Load)
344
344
  ├── Item 1: OutputObjectName = "Order"
345
345
  │ InputFieldName = "OrderData.accountId"
@@ -355,7 +355,7 @@ Dependencies: Order (write), OrderItem (write)
355
355
 
356
356
  Transform type Data Mappers do not reference Salesforce objects directly — they map between data structures. They have no sObject dependencies but may participate in a chain:
357
357
 
358
- ```
358
+ ```text
359
359
  OmniScript → DR Extract (reads Account) → DR Transform (reshapes data) → DR Load (writes CustomObj__c)
360
360
  ```
361
361
 
@@ -373,7 +373,7 @@ Circular references happen when component A depends on component B, which direct
373
373
 
374
374
  ### Detection Algorithm
375
375
 
376
- ```
376
+ ```javascript
377
377
  function detectCircularDependencies(graph):
378
378
  cycles = []
379
379
  for each node N in graph:
@@ -402,7 +402,7 @@ function dfs(node, visited, path, graph, cycles):
402
402
 
403
403
  When a cycle is detected, report it clearly:
404
404
 
405
- ```
405
+ ```text
406
406
  CIRCULAR DEPENDENCY DETECTED:
407
407
  OS:editAccount → IP:validateAccount → OS:editAccount
408
408
 
@@ -421,7 +421,7 @@ a termination condition.
421
421
 
422
422
  ### Step-by-Step Process
423
423
 
424
- ```
424
+ ```text
425
425
  1. DETECT namespace (see namespace-guide.md)
426
426
 
427
427
  2. QUERY all container objects:
@@ -465,7 +465,7 @@ a termination condition.
465
465
 
466
466
  To answer "what breaks if I change Data Mapper X?", reverse the dependency direction:
467
467
 
468
- ```
468
+ ```text
469
469
  Given: DM:AccountExtract
470
470
 
471
471
  Direct dependents (components that reference this DM):
@@ -20,7 +20,7 @@ Salesforce OmniStudio exists under three distinct namespaces depending on the or
20
20
 
21
21
  Run SOQL queries against each namespace's primary object. The first query that succeeds determines the namespace.
22
22
 
23
- ```
23
+ ```text
24
24
  1. Probe Core:
25
25
  SELECT COUNT() FROM OmniProcess
26
26
  → Success? Namespace = Core. Stop.
@@ -15,7 +15,7 @@ Salesforce Industries CME EPC product-modeling skill for Product2-based catalog
15
15
 
16
16
  ### 1. Invoke the skill
17
17
 
18
- ```
18
+ ```yaml
19
19
  Skill: omnistudio-epc-catalog-generate
20
20
  Request: "Create a Product2 offer bundle named Business Internet Plus with ProductCode BIZ-INT-PLUS-01, 3 child products, and generate all companion DataPack JSON files from the assets templates."
21
21
  ```
@@ -36,7 +36,7 @@ Expert OmniStudio engineer specializing in FlexCard UI components for Salesforce
36
36
 
37
37
  FlexCards sit at the presentation layer of the OmniStudio stack. Ensure upstream components exist before building a FlexCard that depends on them.
38
38
 
39
- ```
39
+ ```text
40
40
  omnistudio-dependencies-analyze → omnistudio-datamapper-generate → omnistudio-integration-procedure-generate → omnistudio-omniscript-generate → omnistudio-flexcard-generate (you are here)
41
41
  ```
42
42
 
@@ -88,7 +88,7 @@ Read `references/best-practices.md` for layout patterns, SLDS compliance, access
88
88
 
89
89
  Each FlexCard data source connects to an Integration Procedure (or other source type) and maps response fields to display elements.
90
90
 
91
- ```
91
+ ```text
92
92
  FlexCard → Data Source (type: IntegrationProcedure)
93
93
  → IP Name + Input Mapping
94
94
  → Response Field Mapping → Card Elements
@@ -165,7 +165,7 @@ Avoid these patterns when generating FlexCard definitions:
165
165
 
166
166
  ## Scoring Rubric (130 Points)
167
167
 
168
- All FlexCards are validated against 7 categories. **Thresholds**: 90+ (Deploy) | ⚠️ 67-89 (Review) | <67 (Block - fix required)
168
+ All FlexCards are validated against 7 categories. **Thresholds**: [PASS] 90+ (Deploy) | [VERIFY] 67-89 (Review) | [BLOCK] <67 (Block - fix required)
169
169
 
170
170
  | Category | Points | Criteria |
171
171
  |----------|--------|----------|
@@ -211,7 +211,7 @@ Read `assets/omni-ui-card.json` for the complete OmniUiCard record template incl
211
211
 
212
212
  Map IP response fields to card display elements using merge field syntax:
213
213
 
214
- ```
214
+ ```text
215
215
  IP Response: FlexCard Merge Field:
216
216
  ───────────── ─────────────────────
217
217
  { "Name": "Acme Corp" } → {Name}
@@ -322,3 +322,10 @@ Deliverables produced by this skill:
322
322
  | `references/data-binding-guide.md` | Phase 2-3 — Data source types, merge field syntax, input parameter mapping, and multi-source coordination |
323
323
  | `references/scoring-rubric.md` | Phase 3 — Full per-criterion breakdown of all 7 scoring categories (130 points) |
324
324
  | `scripts/flexcard-commands.sh` | Phase 4 — All CLI commands for querying, retrieving, and deploying FlexCard metadata |
325
+
326
+ ---
327
+
328
+ ## Pre-Delivery Checklist
329
+
330
+ - [ ] Upstream Integration Procedures exist and are active before FlexCard depends on them
331
+ - [ ] Orchestration order followed (FlexCard is last in the chain)