@salesforce/afv-skills 1.45.0 → 1.47.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 (171) hide show
  1. package/package.json +1 -1
  2. package/skills/agentforce-observe/SKILL.md +32 -4
  3. package/skills/agentforce-observe/references/ahm-alerts.md +719 -0
  4. package/skills/automation-flow-generate/SKILL.md +11 -5
  5. package/skills/consumer-goods-promotion-bo-api-deploy/SKILL.md +275 -0
  6. package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/README.md +32 -0
  7. package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/SetCommentValue.cls +75 -0
  8. package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/SetCommentValue.cls-meta.xml +5 -0
  9. package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/interview-answers.json +13 -0
  10. package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/payloads/copy.json +10 -0
  11. package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/payloads/create.json +20 -0
  12. package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/payloads/update.json +16 -0
  13. package/skills/consumer-goods-promotion-bo-api-deploy/references/conventions-and-payload-rules.md +273 -0
  14. package/skills/consumer-goods-promotion-bo-api-deploy/references/generate-and-wire.md +236 -0
  15. package/skills/consumer-goods-promotion-bo-api-deploy/references/reference-example-set-comment-value.md +132 -0
  16. package/skills/consumer-goods-promotion-bo-api-deploy/references/smoke-and-verify.md +211 -0
  17. package/skills/dx-code-analyzer-configure/scripts/validate-config.sh +14 -10
  18. package/skills/dx-code-analyzer-run/scripts/apply-fixes.js +45 -4
  19. package/skills/dx-code-analyzer-run/scripts/describe-rule.js +52 -32
  20. package/skills/dx-devops-project-manage/SKILL.md +197 -0
  21. package/skills/dx-devops-project-manage/examples/common-workflows.md +197 -0
  22. package/skills/dx-devops-project-manage/references/cli-commands.md +295 -0
  23. package/skills/dx-devops-project-manage/scripts/create-project.sh +48 -0
  24. package/skills/dx-devops-project-manage/scripts/list-projects.sh +51 -0
  25. package/skills/dx-devops-project-manage/scripts/update-project.sh +96 -0
  26. package/skills/education-cloud-academic-calendar-generate/SKILL.md +225 -0
  27. package/skills/education-cloud-academic-calendar-generate/examples/quarter-calendar.json +47 -0
  28. package/skills/education-cloud-academic-calendar-generate/examples/sample-output.md +57 -0
  29. package/skills/education-cloud-academic-calendar-generate/examples/semester-calendar.json +54 -0
  30. package/skills/education-cloud-academic-calendar-generate/references/calendar-systems.md +127 -0
  31. package/skills/education-cloud-academic-calendar-generate/references/date-validation.md +222 -0
  32. package/skills/education-cloud-academic-calendar-generate/references/foundation_prerequisites.md +40 -0
  33. package/skills/education-cloud-academic-calendar-generate/scripts/validate_calendar_dates.py +143 -0
  34. package/skills/education-cloud-course-catalog-migrate/SKILL.md +321 -0
  35. package/skills/education-cloud-course-catalog-migrate/references/gotchas-detail.md +16 -0
  36. package/skills/education-cloud-course-catalog-migrate/references/gotchas.md +16 -0
  37. package/skills/education-cloud-course-catalog-migrate/references/large-catalog-handling.md +42 -0
  38. package/skills/education-cloud-course-catalog-migrate/scripts/batch_courses.py +36 -0
  39. package/skills/education-cloud-course-catalog-migrate/scripts/detect_linked_courses.py +51 -0
  40. package/skills/education-cloud-course-catalog-migrate/scripts/detect_modality_variants.py +48 -0
  41. package/skills/education-cloud-course-catalog-migrate/scripts/resolve_api_version.py +43 -0
  42. package/skills/education-cloud-course-catalog-migrate/scripts/split_course_code.py +39 -0
  43. package/skills/education-cloud-course-catalog-migrate/scripts/validate_completeness.py +54 -0
  44. package/skills/education-cloud-multi-campus-configure/references/foundation_prerequisites.md +3 -5
  45. package/skills/education-cloud-student-recruitment-agent-configure/SKILL.md +177 -0
  46. package/skills/education-cloud-student-recruitment-agent-configure/references/agent-and-subagents.md +151 -0
  47. package/skills/education-cloud-student-recruitment-agent-configure/references/customer-narration.md +34 -0
  48. package/skills/education-cloud-student-recruitment-agent-configure/references/execution-model.md +54 -0
  49. package/skills/education-cloud-student-recruitment-agent-configure/references/flows.md +82 -0
  50. package/skills/education-cloud-student-recruitment-agent-configure/references/grounding.md +199 -0
  51. package/skills/education-cloud-student-recruitment-agent-configure/references/permissions.md +183 -0
  52. package/skills/education-cloud-student-recruitment-agent-configure/references/platform-enablement.md +82 -0
  53. package/skills/education-cloud-student-recruitment-agent-configure/references/prerequisites.md +158 -0
  54. package/skills/education-cloud-student-recruitment-agent-configure/references/routing.md +141 -0
  55. package/skills/experience-cms-brand-apply/SKILL.md +5 -5
  56. package/skills/experience-cms-brand-create/SKILL.md +2 -2
  57. package/skills/experience-cms-content-generate/SKILL.md +1 -0
  58. package/skills/experience-cms-content-render/SKILL.md +173 -0
  59. package/skills/experience-cms-content-render/assets/angular/DetailPage.component.ts +25 -0
  60. package/skills/experience-cms-content-render/assets/angular/MediaRenderer.component.ts +133 -0
  61. package/skills/experience-cms-content-render/assets/angular/TypeList.component.ts +38 -0
  62. package/skills/experience-cms-content-render/assets/angular/TypeRenderer.component.ts +90 -0
  63. package/skills/experience-cms-content-render/assets/angular/cms-content.component.ts +248 -0
  64. package/skills/experience-cms-content-render/assets/angular/cms-item.service.ts +100 -0
  65. package/skills/experience-cms-content-render/assets/react/DetailPage.tsx +20 -0
  66. package/skills/experience-cms-content-render/assets/react/MediaRenderer.tsx +129 -0
  67. package/skills/experience-cms-content-render/assets/react/TypeList.tsx +40 -0
  68. package/skills/experience-cms-content-render/assets/react/TypeRenderer.tsx +64 -0
  69. package/skills/experience-cms-content-render/assets/react/heuristicRenderer.tsx +310 -0
  70. package/skills/experience-cms-content-render/assets/react/useCmsItem.ts +129 -0
  71. package/skills/experience-cms-content-render/assets/shared/cmsContentType.ts +49 -0
  72. package/skills/experience-cms-content-render/assets/shared/cmsCore.types.ts +96 -0
  73. package/skills/experience-cms-content-render/assets/shared/externalRefs.ts +55 -0
  74. package/skills/experience-cms-content-render/references/bulk-loading.md +60 -0
  75. package/skills/experience-cms-content-render/references/codegen-guardrails.md +111 -0
  76. package/skills/experience-cms-content-render/references/detail-pages.md +87 -0
  77. package/skills/experience-cms-content-render/references/embed-recipes.md +127 -0
  78. package/skills/experience-cms-content-render/references/failure-modes.md +96 -0
  79. package/skills/experience-cms-content-render/references/heuristic-render-rules.md +131 -0
  80. package/skills/experience-cms-content-render/references/init-scaffold.md +122 -0
  81. package/skills/experience-cms-content-render/references/interaction-model.md +173 -0
  82. package/skills/experience-cms-content-render/references/package-api.md +106 -0
  83. package/skills/experience-cms-content-render/references/schema-sync.md +114 -0
  84. package/skills/experience-cms-content-render/references/styling-scopes.md +65 -0
  85. package/skills/experience-cms-content-render/references/verify.md +49 -0
  86. package/skills/experience-cms-content-type-generate/SKILL.md +2 -2
  87. package/skills/experience-content-media-stock-image-search/SKILL.md +5 -4
  88. package/skills/experience-search-coordinate/SKILL.md +198 -0
  89. package/skills/experience-search-coordinate/assets/search-payload-template.json +25 -0
  90. package/skills/experience-search-coordinate/references/content-route.md +313 -0
  91. package/skills/experience-search-coordinate/references/content-type-discovery.md +57 -0
  92. package/skills/experience-search-coordinate/references/media-route.md +172 -0
  93. package/skills/experience-search-coordinate/references/scope-resolution.md +14 -0
  94. package/skills/experience-ui-bundle-localize/SKILL.md +1 -1
  95. package/skills/experience-ui-bundle-localize/references/i18n-setup.md +5 -3
  96. package/skills/experience-ui-bundle-project-generate/SKILL.md +18 -14
  97. package/skills/experience-ui-bundle-project-generate/references/angular-project-generate.md +22 -0
  98. package/skills/experience-ui-bundle-project-generate/references/react-project-generate.md +20 -0
  99. package/skills/experience-ui-bundle-salesforce-data-access/SKILL.md +58 -54
  100. package/skills/experience-ui-bundle-salesforce-data-access/references/caching.md +6 -0
  101. package/skills/experience-ui-bundle-salesforce-data-access/references/graphiti-cli.md +2 -2
  102. package/skills/experience-ui-bundle-salesforce-data-access/references/migration.md +6 -0
  103. package/skills/experience-ui-bundle-salesforce-data-access/references/rest-and-integration.md +2 -1
  104. package/skills/experience-ui-bundle-salesforce-data-access/references/sdk-api.md +6 -0
  105. package/skills/experience-ui-bundle-site-generate/SKILL.md +59 -8
  106. package/skills/experience-ui-bundle-site-generate/references/configure-metadata-digital-experience.md +8 -3
  107. package/skills/experience-ui-bundle-site-generate/references/configure-metadata-language-settings.md +120 -0
  108. package/skills/life-sciences-fieldsalesrep-coordinate/SKILL.md +336 -0
  109. package/skills/life-sciences-fieldsalesrep-coordinate/references/orchestration-flow.md +143 -0
  110. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-application-flexipage-mapping.md +127 -0
  111. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-deploy-commands.md +116 -0
  112. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-lifesci-metadata-deploy.md +111 -0
  113. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-overview.md +312 -0
  114. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-profile-layout-assignments.md +171 -0
  115. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-state-tracking.md +64 -0
  116. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-trigger-handlers.md +122 -0
  117. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-4-user-provisioning-overview.md +335 -0
  118. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-4-user-provisioning-user-provisioning-details.md +140 -0
  119. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-execution-state-and-recovery.md +196 -0
  120. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-metadata-cache-generation.md +155 -0
  121. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-overview.md +307 -0
  122. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-visit-creation-data.md +211 -0
  123. package/skills/life-sciences-fieldsalesrep-coordinate/references/state-machine-and-changes.md +108 -0
  124. package/skills/life-sciences-kam-coordinate/SKILL.md +241 -0
  125. package/skills/life-sciences-kam-coordinate/references/orchestration-flow.md +152 -0
  126. package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-application-flexipage-mapping.md +79 -0
  127. package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-deploy-commands.md +131 -0
  128. package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-kam-config-records.md +85 -0
  129. package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-lifesci-metadata-deploy.md +112 -0
  130. package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-overview.md +202 -0
  131. package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-profile-layout-assignments.md +67 -0
  132. package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-state-tracking.md +65 -0
  133. package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-trigger-handlers.md +123 -0
  134. package/skills/life-sciences-kam-coordinate/references/stage-4-participant-role-and-sprint.md +89 -0
  135. package/skills/life-sciences-kam-coordinate/references/stage-5-data-and-plan-templates-overview.md +337 -0
  136. package/skills/life-sciences-kam-coordinate/references/stage-5-data-creation-data.md +248 -0
  137. package/skills/life-sciences-kam-coordinate/references/stage-6-ipad-validation-script.md +35 -0
  138. package/skills/life-sciences-kam-coordinate/references/stage-6-metadata-cache-generation.md +155 -0
  139. package/skills/life-sciences-kam-coordinate/references/stage-6-user-provisioning-details.md +146 -0
  140. package/skills/life-sciences-kam-coordinate/references/stage-6-user-provisioning-overview.md +89 -0
  141. package/skills/life-sciences-kam-coordinate/references/state-machine-and-changes.md +114 -0
  142. package/skills/life-sciences-prerequisites-validate/SKILL.md +138 -0
  143. package/skills/life-sciences-prerequisites-validate/references/checks-org-settings.md +190 -0
  144. package/skills/life-sciences-prerequisites-validate/references/checks-user-and-package.md +211 -0
  145. package/skills/life-sciences-territory-configure/SKILL.md +217 -0
  146. package/skills/life-sciences-territory-configure/references/territory-metadata.md +262 -0
  147. package/skills/platform-apex-logs-debug/SKILL.md +7 -7
  148. package/skills/platform-custom-application-generate/SKILL.md +4 -4
  149. package/skills/platform-custom-object-generate/SKILL.md +7 -7
  150. package/skills/platform-custom-tab-generate/SKILL.md +1 -1
  151. package/skills/platform-dsar-policy-manage/SKILL.md +272 -0
  152. package/skills/platform-dsar-policy-manage/references/configure.md +106 -0
  153. package/skills/platform-dsar-policy-manage/references/export-and-history.md +123 -0
  154. package/skills/platform-dsar-policy-manage/references/gap-analysis-guide.md +150 -0
  155. package/skills/platform-dsar-policy-manage/references/gap-scan.md +129 -0
  156. package/skills/platform-dsar-policy-manage/references/headless-sor.md +59 -0
  157. package/skills/platform-dsar-policy-manage/references/report-format.md +59 -0
  158. package/skills/platform-dsar-policy-manage/scripts/tests/__init__.py +0 -0
  159. package/skills/platform-dsar-policy-manage/scripts/tests/test_validate_policy_tree.py +76 -0
  160. package/skills/platform-dsar-policy-manage/scripts/validate-policy-tree.py +130 -0
  161. package/skills/platform-flexipage-generate/SKILL.md +4 -0
  162. package/skills/platform-list-view-generate/SKILL.md +1 -0
  163. package/skills/platform-salesforce-connect-adapter-generate/SKILL.md +359 -0
  164. package/skills/platform-salesforce-connect-adapter-generate/references/official-examples.md +69 -0
  165. package/skills/platform-salesforce-connect-adapter-generate/references/scenarios.md +187 -0
  166. package/skills/platform-soql-query/SKILL.md +8 -8
  167. package/skills/platform-value-set-generate/SKILL.md +2 -2
  168. package/skills/service-itsm-agentic-setup-cmdb-coordinate/SKILL.md +20 -27
  169. package/skills/service-native-voice-recording-transcription-configure/SKILL.md +47 -27
  170. package/skills/service-native-voice-recording-transcription-configure/references/thunderbird-voice-settings.md +13 -9
  171. package/skills/service-native-voice-recording-transcription-configure/scripts/enable-recording-transcription.sh +104 -45
@@ -1,5 +1,11 @@
1
1
  # Caching & the reactive query result
2
2
 
3
+ > **Behavior mirror — `@salesforce/platform-sdk` `docs/data/`, as of v11.70.0.** When the package
4
+ > is installed, its shipped `docs/data/` folder is the authoritative, version-current source
5
+ > ([tier-2b](../SKILL.md#ground-the-sdk-behavior-on-the-installed-docs-tier-2b)) — let it win. This
6
+ > file restates that behavior as a self-contained fallback for when the folder is absent (older SDK,
7
+ > or a types-only build); it reflects the SDK version above and may lag a newer install.
8
+
3
9
  Deep reference for the WebApp resource cache and the two refresh tools. The
4
10
  [SKILL.md](../SKILL.md#freshness--caching) Freshness & caching section is the summary; this is
5
11
  the full behavior.
@@ -335,8 +335,8 @@ unchanged:
335
335
  same shape; codegen is the canonical import source.)
336
336
  3. **Call** — `sdk.graphql!.query({ query, variables })` for reads,
337
337
  `sdk.graphql!.mutate({ mutation, variables })` for writes, using the codegen'd types and the
338
- `variables` the CLI listed. Surface decision (`!` vs guard), error handling, and caching are
339
- exactly as the SKILL spine and [sdk-api.md](sdk-api.md) describe.
338
+ `variables` the CLI listed. Surface decision (`!` vs guard), error handling, and caching ground
339
+ on the SKILL spine's fallbacks and **tier-2b** `docs/data/` (thin fallbacks in [sdk-api.md](sdk-api.md)).
340
340
 
341
341
  The CLI never executes anything — it has no part in step 3. It just makes step 1 produce a
342
342
  query you can trust.
@@ -1,5 +1,11 @@
1
1
  # Migration — old Data SDK → `@salesforce/platform-sdk`
2
2
 
3
+ > **Behavior mirror — `@salesforce/platform-sdk` `docs/data/`, as of v11.70.0.** When the package
4
+ > is installed, its shipped `docs/data/` folder is the authoritative, version-current source
5
+ > ([tier-2b](../SKILL.md#ground-the-sdk-behavior-on-the-installed-docs-tier-2b)) — let it win. This
6
+ > file restates that behavior as a self-contained fallback for when the folder is absent (older SDK,
7
+ > or a types-only build); it reflects the SDK version above and may lag a newer install.
8
+
3
9
  The Data SDK changed in two breaking ways (PR #502, shipped in `@salesforce/platform-sdk`
4
10
  v10.10.1):
5
11
 
@@ -145,7 +145,8 @@ export async function executeGraphQL<TData, TVariables>(
145
145
  ```
146
146
 
147
147
  (To thread caching or use the reactive handle, call `sdk.graphql!.query()` directly with
148
- `cacheControl` / `subscribe` — see [caching.md](caching.md).)
148
+ `cacheControl` / `subscribe` — see [SKILL.md → Freshness & caching](../SKILL.md#freshness--caching),
149
+ which grounds on **tier-2b** `docs/data/`.)
149
150
 
150
151
  > Directory layout and the full command table (`graphql:schema` / `graphql:codegen` / `eslint` /
151
152
  > `graphql-search.sh`, plus the graphiti commands) live in the spine — see
@@ -1,5 +1,11 @@
1
1
  # The Data SDK operational guide
2
2
 
3
+ > **Behavior mirror — `@salesforce/platform-sdk` `docs/data/`, as of v11.70.0.** When the package
4
+ > is installed, its shipped `docs/data/` folder is the authoritative, version-current source
5
+ > ([tier-2b](../SKILL.md#ground-the-sdk-behavior-on-the-installed-docs-tier-2b)) — let it win. This
6
+ > file restates that behavior as a self-contained fallback for when the folder is absent (older SDK,
7
+ > or a types-only build); it reflects the SDK version above and may lag a newer install.
8
+
3
9
  The installed `@salesforce/platform-sdk` declarations own the current call contract: exports,
4
10
  `query`/`mutate` signatures, options bags, result types, `CacheControl`, and
5
11
  `NodeOfConnection`. Read `dist/core/data.d.ts` and `dist/data/index.d.ts` first and let them win
@@ -1,10 +1,17 @@
1
1
  ---
2
2
  name: experience-ui-bundle-site-generate
3
- description: "MUST activate when the project contains a uiBundles/*/src/ directory and the task involves creating or configuring site infrastructure. Use this skill when creating or configuring a Salesforce Digital Experience Site for hosting a UI bundle. Activate when files matching digitalExperiences/, networks/, customSite/, or DigitalExperienceBundle exist and need modification, or when the user wants to publish, host, or configure guest access for their app."
3
+ description: "MUST activate when the project contains a uiBundles/*/src/ directory and the task involves creating or configuring site infrastructure. Use this skill when creating or configuring a Salesforce Digital Experience Site for hosting a UI bundle. Activate when files matching digitalExperiences/, networks/, customSite/, or DigitalExperienceBundle exist and need modification, or when the user wants to publish, host, or configure guest access for their app. Also use this skill to add multi-language, multi-locale, internationalization, or translation support to such a site by declaring a default locale and additional supported languages via the sfdc_cms__languageSettings content type. DO NOT TRIGGER for LWR (non-React) sites; use experience-lwr-site-generate instead."
4
4
  metadata:
5
- version: "1.0"
5
+ version: "1.3"
6
+ minApiVersion: "65.0"
6
7
  domains: ["Experience"]
8
+ relatedSkills:
9
+ - experience-lwr-site-generate
7
10
  cliTools:
11
+ - tool: ["awk"]
12
+ semver: ">=1.0"
13
+ - tool: ["jq"]
14
+ semver: ">=1.6.0"
8
15
  - tool: ["sf"]
9
16
  semver: ">=2.0.0"
10
17
  ---
@@ -25,11 +32,36 @@ Resolve all five properties before generating any metadata. Each has a fallback
25
32
  | **appDevName** | String | `UIBundle` metadata in the project → `sf data query -q "SELECT DeveloperName FROM UIBundle" --target-org ${usernameOrAlias}` → default to siteName |
26
33
  | **enableGuestAccess** | Boolean | Ask user whether unauthenticated guest users can access site APIs → default `false` |
27
34
 
28
- The `appNamespace` and `appDevName` properties connect the site to the correct React application. Getting these wrong means the site deploys but shows a blank page, so take care to resolve them from real project data.
35
+ The `appNamespace` and `appDevName` properties record the intended UIBundle binding for a **future follow-up update**; they are **not** substituted into `appSpace` at initial site creation. `appSpace` in the `sfdc_cms__site` `content.json` is always `""` at initial creation — see [configure-metadata-digital-experience.md](references/configure-metadata-digital-experience.md) for the reason and the follow-up flow.
36
+
37
+ ### Language Properties
38
+ The skill always emits `sfdc_cms__languageSettings` alongside `sfdc_cms__site`. Resolve `defaultLocale` for every site (defaults to `en_US`); resolve `languages` only when the user requests additional languages beyond the default.
39
+
40
+ | Property | Format | How to Resolve |
41
+ |----------|--------|----------------|
42
+ | **defaultLocale** | `xx` or `xx_YY` (e.g., `en`, `en_US`) | Ask user → default `en_US` |
43
+ | **languages** | List of `{label, locale}` | Only when the user asks for multiple languages, locales, internationalization, or translation support: ask for the additional languages the site supports. When not requested, the languageSettings content declares only the resolved `defaultLocale` as a single-language entry. |
44
+
45
+ The content-item folder name (`languages`), `title` (`LanguageContent`), and `urlName` (`languagecontent`) are fixed Experience Builder auto-defaults — they are **not** user-authored. See [configure-metadata-language-settings.md](references/configure-metadata-language-settings.md).
46
+
47
+ ## Pre-flight: Target Org Release (Multi-Language Only)
48
+ The `sfdc_cms__languageSettings` content type accepts multi-language declarations only on Salesforce Release 264 (API **v68.0** or higher). Sites reduced to a single-locale `en_US` declaration work on any org and do not need this check.
49
+
50
+ When the user requests multiple languages, verify the target org's maximum supported API version **before writing any metadata**. `sf api request rest` hits `/services/data/` on the instance directly and handles authentication at the transport layer, so the org's true ceiling is returned without any access token entering this script's context.
51
+
52
+ ```bash
53
+ MAX_API=$(sf api request rest "/services/data/" --target-org "${usernameOrAlias}" \
54
+ | jq -r '[.[].version | tonumber] | max')
55
+
56
+ awk -v v="$MAX_API" 'BEGIN{ exit !(v+0 >= 68.0) }' \
57
+ || { echo "ERROR: multi-language site containers require Salesforce Release 264 (API v68.0+). Target org's maximum supported API version is v${MAX_API}. Retarget to a Release 264+ org, or reduce the site to a single-locale (en_US) declaration." >&2; exit 1; }
58
+ ```
59
+
60
+ If the check fails, do not write metadata. Report the version mismatch to the user and stop.
29
61
 
30
62
  ## Generation Workflow
31
63
  ### Step 1: Resolve All Required Properties
32
- Determine values for all five properties before constructing anything. Use the resolution strategies in the table above, falling through each option until a value is found.
64
+ Determine values for all five required properties and the `defaultLocale` language property before constructing anything. Use the resolution strategies in the tables above, falling through each option until a value is found. Resolve the `languages` property only when the user has requested multiple languages — and when they do, run the [Pre-flight](#pre-flight-target-org-release-multi-language-only) check above before continuing to Step 2.
33
65
 
34
66
  ### Step 2: Create the Project Structure
35
67
  Use available Salesforce metadata schema and field context for `Network`, `CustomSite`, `DigitalExperienceConfig`, and `DigitalExperienceBundle` to ensure each file uses valid structure.
@@ -43,8 +75,9 @@ Create any files and directories that don't already exist, using these paths:
43
75
  | DigitalExperienceConfig | `digitalExperienceConfigs/{siteName}1.digitalExperienceConfig-meta.xml` |
44
76
  | DigitalExperienceBundle | `digitalExperiences/site/{siteName}1/{siteName}1.digitalExperience-meta.xml` |
45
77
  | DigitalExperience (sfdc_cms__site) | `digitalExperiences/site/{siteName}1/sfdc_cms__site/{siteName}1/*` |
78
+ | DigitalExperience (sfdc_cms__languageSettings) | `digitalExperiences/site/{siteName}1/sfdc_cms__languageSettings/languages/*` |
46
79
 
47
- The DigitalExperience directory contains only `_meta.json` and `content.json`. Do not create any directories other than `sfdc_cms__site` inside the bundle.
80
+ Each DigitalExperience content-type directory contains only `_meta.json` and `content.json`. Both `sfdc_cms__site` and `sfdc_cms__languageSettings` are always required inside the bundle. The `sfdc_cms__languageSettings` default declares only the resolved `defaultLocale` (e.g. `en_US`); it is extended with additional languages when the user requests multi-language support. No other content types are permitted.
48
81
 
49
82
  ### Step 3: Populate All Metadata Fields
50
83
  Use the default templates in the docs below. Values in `{braces}` are resolved property references — substitute them with the actual values from Step 1.
@@ -56,6 +89,7 @@ Use the default templates in the docs below. Values in `{braces}` are resolved p
56
89
  | DigitalExperienceConfig | [configure-metadata-digital-experience-config.md](references/configure-metadata-digital-experience-config.md) |
57
90
  | DigitalExperienceBundle | [configure-metadata-digital-experience-bundle.md](references/configure-metadata-digital-experience-bundle.md) |
58
91
  | DigitalExperience (sfdc_cms__site) | [configure-metadata-digital-experience.md](references/configure-metadata-digital-experience.md) |
92
+ | DigitalExperience (sfdc_cms__languageSettings) | [configure-metadata-language-settings.md](references/configure-metadata-language-settings.md) |
59
93
 
60
94
  For URL updates, see [update-site-urls.md](references/update-site-urls.md).
61
95
 
@@ -68,6 +102,7 @@ For URL updates, see [update-site-urls.md](references/update-site-urls.md).
68
102
  - `references/configure-metadata-digital-experience-config.md`
69
103
  - `references/configure-metadata-digital-experience-bundle.md`
70
104
  - `references/configure-metadata-digital-experience.md`
105
+ - `references/configure-metadata-language-settings.md`
71
106
  - Read entire file contents, replace placeholders (e.g. `{siteName}`) with the resolved values, then use the expanded templates to populate the metadata XML/JSON content.
72
107
 
73
108
  ### Step 4: Do Not Modify Non-Templated Properties
@@ -76,11 +111,15 @@ Do not modify any default property values for `Network`, `CustomSite`, `DigitalE
76
111
  ## Verification Checklist
77
112
  Before deploying, confirm:
78
113
 
79
- - [ ] All five required properties are resolved
114
+ - [ ] All five required properties are resolved, and `defaultLocale` is resolved (defaulting to `en_US` when the user does not specify one)
80
115
  - [ ] All metadata directories and files exist per the project structure
81
116
  - [ ] All metadata fields match the Step 3 templates with `{braces}` substituted only; no other default property values were added or changed
82
- - [ ] `appSpace` in `content.json` matches an existing `UIBundle` metadata record
83
- - [ ] Deployment validates successfully:
117
+ - [ ] `appSpace` in `sfdc_cms__site` `content.json` is the empty string `""` (initial site creation never binds `appSpace`; that is a separate follow-up update after the UIBundle is deployed to the target org)
118
+ - [ ] The `sfdc_cms__languageSettings/languages/` files exist. The language declaration satisfies every platform rule below:
119
+ - [ ] `defaultLocale` matches the `locale` of one declared language, which is active
120
+ - [ ] every `locale` is Salesforce-supported, every language is `isActive: true`, each `locale` + `label` combination is unique, and the number of declared languages does not exceed the platform maximum
121
+ - See [configure-metadata-language-settings.md](references/configure-metadata-language-settings.md) for the full rule catalog. Single-language default declarations satisfy every rule trivially.
122
+ - [ ] Deployment validates successfully (the `DigitalExperience` type already covers `sfdc_cms__languageSettings` — no change to the `--metadata` list is needed):
84
123
  ```bash
85
124
  sf project deploy validate --metadata Network CustomSite DigitalExperienceConfig DigitalExperienceBundle DigitalExperience --target-org ${usernameOrAlias}
86
125
  ```
@@ -94,3 +133,15 @@ sf project deploy validate --metadata Network CustomSite DigitalExperienceConfig
94
133
  **Steps**:
95
134
  - [ ] Read [update-site-urls.md](references/update-site-urls.md) to understand the three-component architecture and URL update workflow
96
135
  - [ ] Follow the step-by-step workflow in the doc to update URLs consistently across all three components (DigitalExperienceConfig, Network, CustomSite)
136
+
137
+ ### Configuring Multi-Language Support
138
+
139
+ **Use when** user wants the site to support multiple languages, locales, internationalization, or translation — beyond the default-locale-only declaration that every site already receives.
140
+
141
+ **Steps**:
142
+ - [ ] Collect the additional languages the site should support and which locale is the default (resolve the `defaultLocale` and `languages` properties above)
143
+ - [ ] Run the [Pre-flight: Target Org Release](#pre-flight-target-org-release-multi-language-only) check — abort if the org is below Release 264 (API v68+)
144
+ - [ ] Read [configure-metadata-language-settings.md](references/configure-metadata-language-settings.md) for the templates, field reference, and platform validation rules
145
+ - [ ] Extend the `sfdc_cms__languageSettings/languages/content.json` (which already exists with the default locale) to include the additional language entries, then re-run deploy validation
146
+
147
+ **Note:** This is authoring-only — declared locales deploy cleanly, but locale-in-path routing does not resolve at request time yet. Do not translate the UI bundle content itself; this only declares the site's supported languages.
@@ -3,10 +3,15 @@
3
3
  ## Purpose
4
4
  These configuration files create **net-new, default** DigitalExperience content records (`sfdc_cms__site` type) for a Digital Experience React Site. They are not intended to edit or modify existing DigitalExperience content. Use these templates only when provisioning a brand-new React site.
5
5
 
6
- The `appContainer: true` field in `content.json` is what makes this a React site rather than a standard LWR site. The `appSpace` field should **be left empty if the UIBundle metadata record does not already exist**. When the UIBundle exists, populate the `appSpace` value following the format `{namespace}__{developerName}` to match the deployed `UIBundle` metadata record.
6
+ The `appContainer: true` field in `content.json` is what makes this a React site rather than a standard LWR site.
7
+
8
+ ### `appSpace`: always empty at initial site creation
9
+ The `appSpace` field **MUST be an empty string (`""`) at initial site creation**. This is the correct default even when the prompt supplies `appNamespace` and `appDevName`, and even when a `uiBundles/<Name>/src/` directory exists in the local project. Reason: the UIBundle metadata record must already be **deployed and active in the target org** before `appSpace` can reference it — attempting to bind `appSpace` to a not-yet-deployed UIBundle causes deploy validation to fail with `We couldn't find the <namespace>__<name> UIBundle`.
10
+
11
+ Populate `appSpace` with `"{appNamespace}__{appDevName}"` **only** in a later, follow-up update once you have confirmed (via `sf data query -q "SELECT DeveloperName FROM UIBundle WHERE DeveloperName = '{appDevName}'"`) that the UIBundle metadata record exists in the target org. This is a rare secondary operation, not part of initial scaffolding.
7
12
 
8
13
  ## File Location
9
- The DigitalExperience directory contains only `_meta.json` and `content.json`. Do not create any directories other than `sfdc_cms__site` inside the bundle.
14
+ Each DigitalExperience content-type directory contains only `_meta.json` and `content.json`. Two content types are always emitted inside the bundle: `sfdc_cms__site` (required) and `sfdc_cms__languageSettings` (defaults to a single `en_US` declaration; extended when the user requests additional languages — see [configure-metadata-language-settings.md](references/configure-metadata-language-settings.md)). No other content types are permitted.
10
15
 
11
16
  ```text
12
17
  digitalExperiences/site/{siteName}1/sfdc_cms__site/{siteName}1/_meta.json
@@ -37,4 +42,4 @@ digitalExperiences/site/{siteName}1/sfdc_cms__site/{siteName}1/content.json
37
42
  }
38
43
  ```
39
44
 
40
- **Note:** Leave `appSpace` empty (`""`) if the UIBundle does not exist. If the UIBundle metadata record is already deployed, populate it with `"{appNamespace}__{appDevName}"`.
45
+ **Note:** `appSpace` is always `""` at initial site creation. Do not substitute `{appNamespace}__{appDevName}` here even if those properties are resolved — that binding happens in a follow-up update after the UIBundle is deployed to the org (see the `appSpace` guidance in the Purpose section above).
@@ -0,0 +1,120 @@
1
+ # Configure Metadata: DigitalExperience (sfdc_cms__languageSettings)
2
+
3
+ ## Purpose
4
+ These configuration files create the `sfdc_cms__languageSettings` content record for a Digital Experience React Site. The record declares the set of languages the site supports and which one is the default locale. It is **always emitted** alongside `sfdc_cms__site` — a fresh site defaults to a single-language declaration (the resolved `defaultLocale`, typically `en_US`), and the same file is extended when the user requests additional languages. This is **authoring-only**: declared locales deploy cleanly, but locale-in-path routing does not resolve at request time until the platform runtime change lands.
5
+
6
+ ## When to Use
7
+ Always. The skill emits `sfdc_cms__languageSettings` for every generated site, in addition to the required `sfdc_cms__site` content type. When the user does not request multiple languages, populate the file with a single-language default declaration using the resolved `defaultLocale` (default `en_US`). When the user requests additional languages/locales, extend the same file with the requested language entries. `sfdc_cms__site` and `sfdc_cms__languageSettings` are the only two content types this skill authors; no others are permitted.
8
+
9
+ ## File Location
10
+ The languageSettings content lives in its own content-type directory inside the bundle, alongside `sfdc_cms__site`. The folder name (`languages`), `title` (`LanguageContent`), and `urlName` (`languagecontent`) are fixed Experience Builder auto-defaults — they are **not** derived from the site name and are **not** user-authored.
11
+
12
+ ```text
13
+ digitalExperiences/site/{siteName}1/sfdc_cms__languageSettings/languages/_meta.json
14
+ digitalExperiences/site/{siteName}1/sfdc_cms__languageSettings/languages/content.json
15
+ ```
16
+
17
+ ## Generation Workflow
18
+ 1. **Collect input.** Resolve the `defaultLocale` (ask the user, or default to `en_US`). If the user requests additional languages, collect for each: a display `label` and a `locale`. If the user does not request additional languages, no further input is needed — the file will contain a single-language declaration for the default locale only.
19
+ 2. **Build the `languages` array.**
20
+ - **Single-language default (no additional languages requested).** Emit exactly one entry using the resolved `defaultLocale`. Set `isActive: true`. Provide a human-readable `label` matching the locale (e.g. `English (United States)` for `en_US`).
21
+ - **Multi-language (additional languages requested).** Emit one object per declared language, always including the default-locale entry as the first element. Set `isActive: true` for every language.
22
+ 3. **Substitute and write both files.** Fill `{defaultLocale}` and each language object's fields into the templates, then write `_meta.json` and `content.json` into the folder above.
23
+ 4. **Assert structural rules with `jq`.** Run the assertion below against the written `content.json`. If it exits non-zero, fix the declaration and rewrite the file. Rules 3–4 in the reference below cannot be checked offline — the deploy validation step covers them.
24
+
25
+ ```bash
26
+ jq -e '
27
+ (.contentBody as $b | $b.languages | any(.locale == $b.defaultLocale))
28
+ and (.contentBody as $b
29
+ | $b.languages[]
30
+ | select(.locale == $b.defaultLocale)
31
+ | .isActive == true)
32
+ and ((.contentBody.languages | map(.locale + "|" + .label) | unique | length)
33
+ == (.contentBody.languages | length))
34
+ ' content.json > /dev/null
35
+ ```
36
+
37
+ Enforces rules 1 (defaultLocale is declared), 2 (default-entry active), and 5 (locale+label uniqueness) below.
38
+
39
+ ## Default Templates
40
+ Substitute values in `{braces}`. `apiName`, `type`, `path`, `title`, and `urlName` are fixed — do not parameterize them. The only variables are `{defaultLocale}` and the `languages[]` element fields (`{label}`, `{locale}`).
41
+
42
+ ### `_meta.json`
43
+ ```json
44
+ {
45
+ "apiName": "languages",
46
+ "type": "sfdc_cms__languageSettings",
47
+ "path": "_settings"
48
+ }
49
+ ```
50
+
51
+ ### `content.json` — single-language default
52
+ Use this shape when the user has not requested additional languages. The single entry uses the resolved `defaultLocale`.
53
+
54
+ ```json
55
+ {
56
+ "type": "sfdc_cms__languageSettings",
57
+ "title": "LanguageContent",
58
+ "contentBody": {
59
+ "defaultLocale": "{defaultLocale}",
60
+ "languages": [
61
+ {
62
+ "isActive": true,
63
+ "label": "{label}",
64
+ "locale": "{defaultLocale}"
65
+ }
66
+ ]
67
+ },
68
+ "urlName": "languagecontent"
69
+ }
70
+ ```
71
+
72
+ ### `content.json` — multi-language
73
+ Use this shape when the user has requested additional languages. The example shows two languages — the default (`en_US`) and one additional locale. Emit one object per declared language; keys within each language object are alphabetically ordered.
74
+
75
+ ```json
76
+ {
77
+ "type": "sfdc_cms__languageSettings",
78
+ "title": "LanguageContent",
79
+ "contentBody": {
80
+ "defaultLocale": "{defaultLocale}",
81
+ "languages": [
82
+ {
83
+ "isActive": true,
84
+ "label": "{label}",
85
+ "locale": "{defaultLocale}"
86
+ },
87
+ {
88
+ "isActive": true,
89
+ "label": "{label}",
90
+ "locale": "{locale}"
91
+ }
92
+ ]
93
+ },
94
+ "urlName": "languagecontent"
95
+ }
96
+ ```
97
+
98
+ ## Field Reference
99
+ - `defaultLocale` — the site's default locale; must match the `locale` of one of the declared `languages[]`.
100
+ - `locale` — a Salesforce-supported locale, either `xx` (e.g. `am`, `de`, `fr`) or `xx_YY` (e.g. `en_US`, `es_MX`, `zh_CN`). Support is org-dependent; deploy validation rejects unsupported values.
101
+ - `label` — human-readable display name for the language.
102
+ - `isActive` — only `true` is supported in authoring; every declared language must be active.
103
+
104
+ ## Platform Validation Rules
105
+ Deploy rejects a languageSettings declaration that breaks any of these. Rules 1, 2, and 5 are enforced by the jq assertion in Step 4; rules 3–4 are enforced by deploy validation only:
106
+
107
+ 1. The `defaultLocale` must appear as the `locale` of a declared language.
108
+ 2. The default-locale language must be active (`isActive: true`).
109
+ 3. Every `locale` must be a Salesforce-supported locale (org-dependent; deploy validation enforces).
110
+ 4. The number of declared languages must not exceed the platform maximum.
111
+ 5. The `locale` + `label` combination must be unique per workspace.
112
+
113
+ ## Deploy Validation
114
+ After writing the files, validate the whole site bundle (languageSettings deploys within the existing `DigitalExperience` metadata type — no new type is needed):
115
+
116
+ ```bash
117
+ sf project deploy validate --metadata Network CustomSite DigitalExperienceConfig DigitalExperienceBundle DigitalExperience --target-org ${usernameOrAlias}
118
+ ```
119
+
120
+ A clean validate confirms the declaration satisfies every rule above — for the single-language default case as well as for multi-language declarations.