@salesforce/afv-skills 1.13.0 → 1.15.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 (359) hide show
  1. package/package.json +3 -3
  2. package/skills/applying-slds/SKILL.md +322 -0
  3. package/skills/applying-slds/checklists.md +83 -0
  4. package/skills/applying-slds/examples.md +283 -0
  5. package/skills/applying-slds/guidance/README.md +83 -0
  6. package/skills/applying-slds/guidance/blueprints-index.md +213 -0
  7. package/skills/applying-slds/guidance/icons-guidance.md +186 -0
  8. package/skills/applying-slds/guidance/overviews/borders.md +236 -0
  9. package/skills/applying-slds/guidance/overviews/color.md +266 -0
  10. package/skills/applying-slds/guidance/overviews/display-density.md +366 -0
  11. package/skills/applying-slds/guidance/overviews/icons.md +240 -0
  12. package/skills/applying-slds/guidance/overviews/illustrations.md +235 -0
  13. package/skills/applying-slds/guidance/overviews/shadows.md +176 -0
  14. package/skills/applying-slds/guidance/overviews/spacing.md +216 -0
  15. package/skills/applying-slds/guidance/overviews/typography.md +323 -0
  16. package/skills/applying-slds/guidance/overviews/utilities.md +542 -0
  17. package/skills/applying-slds/guidance/slds-development-guide.md +288 -0
  18. package/skills/applying-slds/guidance/styling-hooks/borders.md +202 -0
  19. package/skills/applying-slds/guidance/styling-hooks/color/expressive-palette-hooks.md +153 -0
  20. package/skills/applying-slds/guidance/styling-hooks/color/index.md +171 -0
  21. package/skills/applying-slds/guidance/styling-hooks/color/semantic/accent-hooks.md +204 -0
  22. package/skills/applying-slds/guidance/styling-hooks/color/semantic/feedback-hooks.md +768 -0
  23. package/skills/applying-slds/guidance/styling-hooks/color/semantic/surface-hooks.md +337 -0
  24. package/skills/applying-slds/guidance/styling-hooks/color/system-hooks.md +132 -0
  25. package/skills/applying-slds/guidance/styling-hooks/index.md +327 -0
  26. package/skills/applying-slds/guidance/styling-hooks/shadows.md +238 -0
  27. package/skills/applying-slds/guidance/styling-hooks/spacing.md +254 -0
  28. package/skills/applying-slds/guidance/styling-hooks/typography.md +448 -0
  29. package/skills/applying-slds/guidance/utilities/alignment.md +119 -0
  30. package/skills/applying-slds/guidance/utilities/borders.md +131 -0
  31. package/skills/applying-slds/guidance/utilities/box.md +125 -0
  32. package/skills/applying-slds/guidance/utilities/color.md +165 -0
  33. package/skills/applying-slds/guidance/utilities/dark-mode.md +111 -0
  34. package/skills/applying-slds/guidance/utilities/description-list.md +168 -0
  35. package/skills/applying-slds/guidance/utilities/floats.md +117 -0
  36. package/skills/applying-slds/guidance/utilities/grid.md +264 -0
  37. package/skills/applying-slds/guidance/utilities/horizontal-list.md +110 -0
  38. package/skills/applying-slds/guidance/utilities/hyphenation.md +84 -0
  39. package/skills/applying-slds/guidance/utilities/index.md +205 -0
  40. package/skills/applying-slds/guidance/utilities/interactions.md +89 -0
  41. package/skills/applying-slds/guidance/utilities/layout.md +109 -0
  42. package/skills/applying-slds/guidance/utilities/line-clamp.md +131 -0
  43. package/skills/applying-slds/guidance/utilities/margin.md +155 -0
  44. package/skills/applying-slds/guidance/utilities/media-object.md +161 -0
  45. package/skills/applying-slds/guidance/utilities/name-value-list.md +152 -0
  46. package/skills/applying-slds/guidance/utilities/padding.md +155 -0
  47. package/skills/applying-slds/guidance/utilities/position.md +177 -0
  48. package/skills/applying-slds/guidance/utilities/print.md +114 -0
  49. package/skills/applying-slds/guidance/utilities/scrollable.md +126 -0
  50. package/skills/applying-slds/guidance/utilities/sizing.md +190 -0
  51. package/skills/applying-slds/guidance/utilities/themes.md +121 -0
  52. package/skills/applying-slds/guidance/utilities/truncate.md +127 -0
  53. package/skills/applying-slds/guidance/utilities/typography.md +166 -0
  54. package/skills/applying-slds/guidance/utilities/vertical-list.md +166 -0
  55. package/skills/applying-slds/guidance/utilities/visibility.md +228 -0
  56. package/skills/applying-slds/metadata/README.md +84 -0
  57. package/skills/applying-slds/metadata/blueprints/components/accordion.yaml +304 -0
  58. package/skills/applying-slds/metadata/blueprints/components/activity-timeline.yaml +92 -0
  59. package/skills/applying-slds/metadata/blueprints/components/alert.yaml +103 -0
  60. package/skills/applying-slds/metadata/blueprints/components/app-launcher.yaml +94 -0
  61. package/skills/applying-slds/metadata/blueprints/components/avatar-group.yaml +81 -0
  62. package/skills/applying-slds/metadata/blueprints/components/avatar.yaml +97 -0
  63. package/skills/applying-slds/metadata/blueprints/components/badges.yaml +102 -0
  64. package/skills/applying-slds/metadata/blueprints/components/brand-band.yaml +198 -0
  65. package/skills/applying-slds/metadata/blueprints/components/breadcrumbs.yaml +95 -0
  66. package/skills/applying-slds/metadata/blueprints/components/builder-header.yaml +192 -0
  67. package/skills/applying-slds/metadata/blueprints/components/button-groups.yaml +82 -0
  68. package/skills/applying-slds/metadata/blueprints/components/button-icons.yaml +295 -0
  69. package/skills/applying-slds/metadata/blueprints/components/buttons.yaml +230 -0
  70. package/skills/applying-slds/metadata/blueprints/components/cards.yaml +124 -0
  71. package/skills/applying-slds/metadata/blueprints/components/carousel.yaml +140 -0
  72. package/skills/applying-slds/metadata/blueprints/components/chat.yaml +179 -0
  73. package/skills/applying-slds/metadata/blueprints/components/checkbox-button-group.yaml +192 -0
  74. package/skills/applying-slds/metadata/blueprints/components/checkbox-button.yaml +204 -0
  75. package/skills/applying-slds/metadata/blueprints/components/checkbox-toggle.yaml +177 -0
  76. package/skills/applying-slds/metadata/blueprints/components/checkbox.yaml +108 -0
  77. package/skills/applying-slds/metadata/blueprints/components/color-picker.yaml +172 -0
  78. package/skills/applying-slds/metadata/blueprints/components/combobox.yaml +136 -0
  79. package/skills/applying-slds/metadata/blueprints/components/counter.yaml +147 -0
  80. package/skills/applying-slds/metadata/blueprints/components/data-tables.yaml +157 -0
  81. package/skills/applying-slds/metadata/blueprints/components/datepickers.yaml +130 -0
  82. package/skills/applying-slds/metadata/blueprints/components/datetime-picker.yaml +155 -0
  83. package/skills/applying-slds/metadata/blueprints/components/docked-composer.yaml +201 -0
  84. package/skills/applying-slds/metadata/blueprints/components/docked-form-footer.yaml +161 -0
  85. package/skills/applying-slds/metadata/blueprints/components/docked-utility-bar.yaml +175 -0
  86. package/skills/applying-slds/metadata/blueprints/components/drop-zone.yaml +115 -0
  87. package/skills/applying-slds/metadata/blueprints/components/dueling-picklist.yaml +196 -0
  88. package/skills/applying-slds/metadata/blueprints/components/dynamic-icons.yaml +128 -0
  89. package/skills/applying-slds/metadata/blueprints/components/dynamic-menu.yaml +141 -0
  90. package/skills/applying-slds/metadata/blueprints/components/expandable-section.yaml +115 -0
  91. package/skills/applying-slds/metadata/blueprints/components/expression.yaml +143 -0
  92. package/skills/applying-slds/metadata/blueprints/components/feeds.yaml +125 -0
  93. package/skills/applying-slds/metadata/blueprints/components/file-selector.yaml +154 -0
  94. package/skills/applying-slds/metadata/blueprints/components/files.yaml +119 -0
  95. package/skills/applying-slds/metadata/blueprints/components/form-element.yaml +145 -0
  96. package/skills/applying-slds/metadata/blueprints/components/global-header.yaml +120 -0
  97. package/skills/applying-slds/metadata/blueprints/components/global-navigation.yaml +100 -0
  98. package/skills/applying-slds/metadata/blueprints/components/icons.yaml +138 -0
  99. package/skills/applying-slds/metadata/blueprints/components/illustration.yaml +205 -0
  100. package/skills/applying-slds/metadata/blueprints/components/input.yaml +151 -0
  101. package/skills/applying-slds/metadata/blueprints/components/list-builder.yaml +127 -0
  102. package/skills/applying-slds/metadata/blueprints/components/lookups.yaml +132 -0
  103. package/skills/applying-slds/metadata/blueprints/components/map.yaml +118 -0
  104. package/skills/applying-slds/metadata/blueprints/components/menus.yaml +134 -0
  105. package/skills/applying-slds/metadata/blueprints/components/modals.yaml +152 -0
  106. package/skills/applying-slds/metadata/blueprints/components/notifications.yaml +88 -0
  107. package/skills/applying-slds/metadata/blueprints/components/page-headers.yaml +135 -0
  108. package/skills/applying-slds/metadata/blueprints/components/panels.yaml +149 -0
  109. package/skills/applying-slds/metadata/blueprints/components/path.yaml +154 -0
  110. package/skills/applying-slds/metadata/blueprints/components/picklist.yaml +125 -0
  111. package/skills/applying-slds/metadata/blueprints/components/pills.yaml +154 -0
  112. package/skills/applying-slds/metadata/blueprints/components/popovers.yaml +120 -0
  113. package/skills/applying-slds/metadata/blueprints/components/progress-bar.yaml +110 -0
  114. package/skills/applying-slds/metadata/blueprints/components/progress-indicator.yaml +133 -0
  115. package/skills/applying-slds/metadata/blueprints/components/progress-ring.yaml +102 -0
  116. package/skills/applying-slds/metadata/blueprints/components/prompt.yaml +126 -0
  117. package/skills/applying-slds/metadata/blueprints/components/publishers.yaml +178 -0
  118. package/skills/applying-slds/metadata/blueprints/components/radio-button-group.yaml +172 -0
  119. package/skills/applying-slds/metadata/blueprints/components/radio-group.yaml +112 -0
  120. package/skills/applying-slds/metadata/blueprints/components/rich-text-editor.yaml +135 -0
  121. package/skills/applying-slds/metadata/blueprints/components/scoped-notifications.yaml +188 -0
  122. package/skills/applying-slds/metadata/blueprints/components/scoped-tabs.yaml +97 -0
  123. package/skills/applying-slds/metadata/blueprints/components/select.yaml +127 -0
  124. package/skills/applying-slds/metadata/blueprints/components/setup-assistant.yaml +152 -0
  125. package/skills/applying-slds/metadata/blueprints/components/slider.yaml +111 -0
  126. package/skills/applying-slds/metadata/blueprints/components/spinners.yaml +135 -0
  127. package/skills/applying-slds/metadata/blueprints/components/split-view.yaml +112 -0
  128. package/skills/applying-slds/metadata/blueprints/components/summary-detail.yaml +103 -0
  129. package/skills/applying-slds/metadata/blueprints/components/tabs.yaml +138 -0
  130. package/skills/applying-slds/metadata/blueprints/components/textarea.yaml +116 -0
  131. package/skills/applying-slds/metadata/blueprints/components/tiles.yaml +108 -0
  132. package/skills/applying-slds/metadata/blueprints/components/timepicker.yaml +111 -0
  133. package/skills/applying-slds/metadata/blueprints/components/toast.yaml +154 -0
  134. package/skills/applying-slds/metadata/blueprints/components/tooltips.yaml +107 -0
  135. package/skills/applying-slds/metadata/blueprints/components/tree-grid.yaml +116 -0
  136. package/skills/applying-slds/metadata/blueprints/components/trees.yaml +116 -0
  137. package/skills/applying-slds/metadata/blueprints/components/trial-bar.yaml +112 -0
  138. package/skills/applying-slds/metadata/blueprints/components/vertical-navigation.yaml +130 -0
  139. package/skills/applying-slds/metadata/blueprints/components/vertical-tabs.yaml +140 -0
  140. package/skills/applying-slds/metadata/blueprints/components/visual-picker.yaml +150 -0
  141. package/skills/applying-slds/metadata/blueprints/components/welcome-mat.yaml +136 -0
  142. package/skills/applying-slds/metadata/hooks-index.json +6272 -0
  143. package/skills/applying-slds/metadata/icon-metadata.json +38466 -0
  144. package/skills/applying-slds/metadata/utilities-index.json +21912 -0
  145. package/skills/applying-slds/references/component-selection.md +112 -0
  146. package/skills/applying-slds/references/icons-decision-guide.md +124 -0
  147. package/skills/applying-slds/references/styling-decision-guide.md +228 -0
  148. package/skills/applying-slds/references/utilities-quick-ref.md +125 -0
  149. package/skills/applying-slds/scripts/search-blueprints.cjs +117 -0
  150. package/skills/applying-slds/scripts/search-hooks.cjs +139 -0
  151. package/skills/applying-slds/scripts/search-icons.cjs +174 -0
  152. package/skills/applying-slds/scripts/search-utilities.cjs +161 -0
  153. package/skills/building-ui-bundle-app/SKILL.md +33 -8
  154. package/skills/generating-custom-application/SKILL.md +1 -1
  155. package/skills/generating-custom-lightning-type/SKILL.md +17 -39
  156. package/skills/generating-custom-lightning-type/assets/primitive-types-and-constraints.md +41 -0
  157. package/skills/generating-custom-lightning-type/references/widget-rendition.md +124 -0
  158. package/skills/generating-ui-bundle-custom-app/SKILL.md +93 -0
  159. package/skills/generating-ui-bundle-custom-app/docs/configure-metadata-custom-application.md +70 -0
  160. package/skills/generating-ui-bundle-metadata/SKILL.md +39 -1
  161. package/skills/investigating-agentforce-architecture/README.md +156 -0
  162. package/skills/investigating-agentforce-architecture/SKILL.md +230 -0
  163. package/skills/investigating-agentforce-architecture/assets/cli/describe_sobject.yaml +16 -0
  164. package/skills/investigating-agentforce-architecture/assets/cli/describe_tooling_sobject.yaml +17 -0
  165. package/skills/investigating-agentforce-architecture/assets/cli/list_metadata_genaiprompttemplate.yaml +17 -0
  166. package/skills/investigating-agentforce-architecture/assets/cli/org_display.yaml +15 -0
  167. package/skills/investigating-agentforce-architecture/assets/cli/retrieve_genai_plugin.yaml +18 -0
  168. package/skills/investigating-agentforce-architecture/assets/cli/show_access_token.yaml +27 -0
  169. package/skills/investigating-agentforce-architecture/assets/mermaid/action_tree.mmd +20 -0
  170. package/skills/investigating-agentforce-architecture/assets/mermaid/data_flow.mmd +19 -0
  171. package/skills/investigating-agentforce-architecture/assets/mermaid/dependency_graph.mmd +19 -0
  172. package/skills/investigating-agentforce-architecture/assets/mermaid/invocation_sequence.mmd +20 -0
  173. package/skills/investigating-agentforce-architecture/assets/mermaid/planner_state.mmd +18 -0
  174. package/skills/investigating-agentforce-architecture/assets/soql/apex_class_bodies_by_ids.soql +3 -0
  175. package/skills/investigating-agentforce-architecture/assets/soql/apex_class_bodies_by_names.soql +3 -0
  176. package/skills/investigating-agentforce-architecture/assets/soql/bot_definition_details.soql +3 -0
  177. package/skills/investigating-agentforce-architecture/assets/soql/bot_version_lookup.soql +4 -0
  178. package/skills/investigating-agentforce-architecture/assets/soql/flow_definition_by_ids.soql +3 -0
  179. package/skills/investigating-agentforce-architecture/assets/soql/flow_definition_ids_by_names.soql +3 -0
  180. package/skills/investigating-agentforce-architecture/assets/soql/flow_definition_view_by_durable_ids.soql +4 -0
  181. package/skills/investigating-agentforce-architecture/assets/soql/flow_metadata_by_id.soql +3 -0
  182. package/skills/investigating-agentforce-architecture/assets/soql/functions_by_plugins.soql +5 -0
  183. package/skills/investigating-agentforce-architecture/assets/soql/planner_attrs_by_parent_ids.soql +3 -0
  184. package/skills/investigating-agentforce-architecture/assets/soql/planner_bundle_functions.soql +3 -0
  185. package/skills/investigating-agentforce-architecture/assets/soql/planner_definition_by_agent_chain.soql +3 -0
  186. package/skills/investigating-agentforce-architecture/assets/soql/plugin_functions_by_plugin_ids.soql +3 -0
  187. package/skills/investigating-agentforce-architecture/assets/soql/plugin_instructions_by_plugin_ids.soql +3 -0
  188. package/skills/investigating-agentforce-architecture/assets/soql/plugins_by_planner.soql +4 -0
  189. package/skills/investigating-agentforce-architecture/references/architecture_sections.md +243 -0
  190. package/skills/investigating-agentforce-architecture/references/contract.json +244 -0
  191. package/skills/investigating-agentforce-architecture/references/soql_fields.md +512 -0
  192. package/skills/investigating-agentforce-architecture/scripts/_shared/__init__.py +1 -0
  193. package/skills/investigating-agentforce-architecture/scripts/_shared/fs_guard.py +329 -0
  194. package/skills/investigating-agentforce-architecture/scripts/_shared/paths.py +110 -0
  195. package/skills/investigating-agentforce-architecture/scripts/_shared/runtime.py +59 -0
  196. package/skills/investigating-agentforce-architecture/scripts/_shared/sql.py +10 -0
  197. package/skills/investigating-agentforce-architecture/scripts/cache_check.py +234 -0
  198. package/skills/investigating-agentforce-architecture/scripts/config.py +131 -0
  199. package/skills/investigating-agentforce-architecture/scripts/fetch_soql.py +689 -0
  200. package/skills/investigating-agentforce-architecture/scripts/finalize.py +295 -0
  201. package/skills/investigating-agentforce-architecture/scripts/main.py +2835 -0
  202. package/skills/investigating-agentforce-architecture/scripts/metadata_listing.py +265 -0
  203. package/skills/investigating-agentforce-architecture/scripts/parallel_retrieve.py +69 -0
  204. package/skills/investigating-agentforce-architecture/scripts/parse_bundle.py +215 -0
  205. package/skills/investigating-agentforce-architecture/scripts/parse_wave.py +845 -0
  206. package/skills/investigating-agentforce-architecture/scripts/probe_channels.py +302 -0
  207. package/skills/investigating-agentforce-architecture/scripts/render_architecture.py +1043 -0
  208. package/skills/investigating-agentforce-architecture/scripts/resolve_bot.py +255 -0
  209. package/skills/investigating-agentforce-architecture/scripts/resolve_invocation_target.py +130 -0
  210. package/skills/investigating-agentforce-architecture/scripts/rest_client.py +763 -0
  211. package/skills/investigating-agentforce-architecture/scripts/retrieve_planner.py +13 -0
  212. package/skills/investigating-agentforce-architecture/scripts/sf_cli.py +242 -0
  213. package/skills/investigating-agentforce-architecture/scripts/soql_loader.py +253 -0
  214. package/skills/investigating-agentforce-architecture/scripts/summarize_tree.py +143 -0
  215. package/skills/investigating-agentforce-architecture/scripts/tests/__init__.py +0 -0
  216. package/skills/investigating-agentforce-architecture/scripts/tests/_bootstrap.py +23 -0
  217. package/skills/investigating-agentforce-architecture/scripts/tests/fixtures/__init__.py +0 -0
  218. package/skills/investigating-agentforce-architecture/scripts/tests/fixtures/genai_payloads.py +400 -0
  219. package/skills/investigating-agentforce-architecture/scripts/tests/test_cache_check.py +307 -0
  220. package/skills/investigating-agentforce-architecture/scripts/tests/test_cache_check_main.py +283 -0
  221. package/skills/investigating-agentforce-architecture/scripts/tests/test_config.py +115 -0
  222. package/skills/investigating-agentforce-architecture/scripts/tests/test_end_to_end_fixture.py +651 -0
  223. package/skills/investigating-agentforce-architecture/scripts/tests/test_finalize.py +278 -0
  224. package/skills/investigating-agentforce-architecture/scripts/tests/test_flow_children_inflation.py +582 -0
  225. package/skills/investigating-agentforce-architecture/scripts/tests/test_fs_guard.py +113 -0
  226. package/skills/investigating-agentforce-architecture/scripts/tests/test_iterative_wave_b.py +478 -0
  227. package/skills/investigating-agentforce-architecture/scripts/tests/test_main_pipeline.py +3359 -0
  228. package/skills/investigating-agentforce-architecture/scripts/tests/test_parallel_retrieve.py +131 -0
  229. package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_bundle.py +400 -0
  230. package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_wave.py +644 -0
  231. package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_wave_classifiers.py +224 -0
  232. package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_wave_helpers.py +380 -0
  233. package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_wave_main.py +397 -0
  234. package/skills/investigating-agentforce-architecture/scripts/tests/test_per_branch_visited.py +244 -0
  235. package/skills/investigating-agentforce-architecture/scripts/tests/test_probe_channels.py +359 -0
  236. package/skills/investigating-agentforce-architecture/scripts/tests/test_probe_cli_recipes.py +185 -0
  237. package/skills/investigating-agentforce-architecture/scripts/tests/test_render_architecture.py +810 -0
  238. package/skills/investigating-agentforce-architecture/scripts/tests/test_resolve_bot.py +203 -0
  239. package/skills/investigating-agentforce-architecture/scripts/tests/test_resolve_creds.py +157 -0
  240. package/skills/investigating-agentforce-architecture/scripts/tests/test_resolve_invocation_target.py +145 -0
  241. package/skills/investigating-agentforce-architecture/scripts/tests/test_rest_client.py +1253 -0
  242. package/skills/investigating-agentforce-architecture/scripts/tests/test_runtime_override.py +100 -0
  243. package/skills/investigating-agentforce-architecture/scripts/tests/test_sf_cli.py +261 -0
  244. package/skills/investigating-agentforce-architecture/scripts/tests/test_signature_stamping.py +466 -0
  245. package/skills/investigating-agentforce-architecture/scripts/tests/test_soql_loader.py +501 -0
  246. package/skills/investigating-agentforce-architecture/scripts/tests/test_summarize_tree.py +241 -0
  247. package/skills/investigating-agentforce-architecture/scripts/tests/test_write_emit_ctx.py +480 -0
  248. package/skills/investigating-agentforce-architecture/tools/emit_env.py +157 -0
  249. package/skills/investigating-agentforce-architecture/tools/emit_result.py +262 -0
  250. package/skills/investigating-agentforce-architecture/tools/sanitize.py +33 -0
  251. package/skills/investigating-agentforce-architecture/tools/write_emit_ctx.py +332 -0
  252. package/skills/investigating-agentforce-d360/README.md +123 -0
  253. package/skills/investigating-agentforce-d360/SKILL.md +163 -0
  254. package/skills/investigating-agentforce-d360/assets/dc/app_generation.sql +51 -0
  255. package/skills/investigating-agentforce-d360/assets/dc/content_category.sql +44 -0
  256. package/skills/investigating-agentforce-d360/assets/dc/content_quality.sql +41 -0
  257. package/skills/investigating-agentforce-d360/assets/dc/discover_sessions.sql +36 -0
  258. package/skills/investigating-agentforce-d360/assets/dc/feedback.sql +47 -0
  259. package/skills/investigating-agentforce-d360/assets/dc/feedback_details.sql +38 -0
  260. package/skills/investigating-agentforce-d360/assets/dc/gateway_records.sql +45 -0
  261. package/skills/investigating-agentforce-d360/assets/dc/gateway_request_llm.sql +50 -0
  262. package/skills/investigating-agentforce-d360/assets/dc/gateway_request_metadata.sql +44 -0
  263. package/skills/investigating-agentforce-d360/assets/dc/gateway_request_tags.sql +42 -0
  264. package/skills/investigating-agentforce-d360/assets/dc/gateway_requests.sql +89 -0
  265. package/skills/investigating-agentforce-d360/assets/dc/gateway_responses.sql +43 -0
  266. package/skills/investigating-agentforce-d360/assets/dc/generations.sql +52 -0
  267. package/skills/investigating-agentforce-d360/assets/dc/interactions.sql +53 -0
  268. package/skills/investigating-agentforce-d360/assets/dc/messages.sql +53 -0
  269. package/skills/investigating-agentforce-d360/assets/dc/messaging_session.sql +37 -0
  270. package/skills/investigating-agentforce-d360/assets/dc/moment_interactions.sql +34 -0
  271. package/skills/investigating-agentforce-d360/assets/dc/moments.sql +39 -0
  272. package/skills/investigating-agentforce-d360/assets/dc/participants.sql +48 -0
  273. package/skills/investigating-agentforce-d360/assets/dc/sessions.sql +78 -0
  274. package/skills/investigating-agentforce-d360/assets/dc/steps.sql +64 -0
  275. package/skills/investigating-agentforce-d360/assets/dc/tag_associations.sql +46 -0
  276. package/skills/investigating-agentforce-d360/assets/dc/tag_definition_associations.sql +37 -0
  277. package/skills/investigating-agentforce-d360/assets/dc/tag_definitions.sql +50 -0
  278. package/skills/investigating-agentforce-d360/assets/dc/tags.sql +37 -0
  279. package/skills/investigating-agentforce-d360/assets/dc/telemetry_spans.sql +55 -0
  280. package/skills/investigating-agentforce-d360/references/artifacts.md +50 -0
  281. package/skills/investigating-agentforce-d360/references/dc_dmo_fields.md +823 -0
  282. package/skills/investigating-agentforce-d360/references/dc_pipeline_contract.md +608 -0
  283. package/skills/investigating-agentforce-d360/scripts/_shared/__init__.py +2 -0
  284. package/skills/investigating-agentforce-d360/scripts/_shared/cli_override.py +98 -0
  285. package/skills/investigating-agentforce-d360/scripts/_shared/fs_guard.py +334 -0
  286. package/skills/investigating-agentforce-d360/scripts/_shared/paths.py +155 -0
  287. package/skills/investigating-agentforce-d360/scripts/_shared/runtime.py +59 -0
  288. package/skills/investigating-agentforce-d360/scripts/_shared/sql.py +14 -0
  289. package/skills/investigating-agentforce-d360/scripts/assemble_dc.py +1624 -0
  290. package/skills/investigating-agentforce-d360/scripts/config.py +45 -0
  291. package/skills/investigating-agentforce-d360/scripts/dc.py +188 -0
  292. package/skills/investigating-agentforce-d360/scripts/discover_sessions.py +556 -0
  293. package/skills/investigating-agentforce-d360/scripts/fetch_dc.py +1045 -0
  294. package/skills/investigating-agentforce-d360/scripts/render_dc.py +1750 -0
  295. package/skills/investigating-agentforce-d360/scripts/resolve_session.py +264 -0
  296. package/skills/investigating-agentforce-d360/scripts/storage.py +92 -0
  297. package/skills/investigating-agentforce-d360/scripts/tests/__init__.py +0 -0
  298. package/skills/investigating-agentforce-d360/scripts/tests/_bootstrap.py +15 -0
  299. package/skills/investigating-agentforce-d360/scripts/tests/fixtures/__init__.py +0 -0
  300. package/skills/investigating-agentforce-d360/scripts/tests/fixtures/synthetic_session.py +424 -0
  301. package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_bootstrap_and_mode.py +115 -0
  302. package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_gateway_direct.py +220 -0
  303. package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_gateway_direct_integration.py +158 -0
  304. package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_helpers.py +287 -0
  305. package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_integration.py +247 -0
  306. package/skills/investigating-agentforce-d360/scripts/tests/test_dc_and_resolve_session.py +433 -0
  307. package/skills/investigating-agentforce-d360/scripts/tests/test_discover_sessions.py +458 -0
  308. package/skills/investigating-agentforce-d360/scripts/tests/test_discover_sessions_grep_ci.py +193 -0
  309. package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_helpers.py +266 -0
  310. package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_identity.py +528 -0
  311. package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_main.py +251 -0
  312. package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_waterfall.py +229 -0
  313. package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_waterfall_full.py +283 -0
  314. package/skills/investigating-agentforce-d360/scripts/tests/test_identity_coherence.py +327 -0
  315. package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_branches.py +256 -0
  316. package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_gateway_direct.py +130 -0
  317. package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_helpers.py +291 -0
  318. package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_integration.py +220 -0
  319. package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_planner_llm_calls.py +284 -0
  320. package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_show_prompts_gating.py +215 -0
  321. package/skills/investigating-agentforce-d360/scripts/tests/test_resolve_from_disk.py +100 -0
  322. package/skills/investigating-agentforce-d360/scripts/tests/test_resolve_session_main.py +149 -0
  323. package/skills/investigating-agentforce-d360/scripts/tests/test_runtime_override.py +104 -0
  324. package/skills/investigating-agentforce-d360/scripts/tests/test_session_shape.py +95 -0
  325. package/skills/investigating-agentforce-d360/scripts/tests/test_session_shape_dropped_by_stdm.py +85 -0
  326. package/skills/managing-managed-event-subscription/SKILL.md +152 -0
  327. package/skills/managing-managed-event-subscription/assets/managed-event-subscription-template.xml +20 -0
  328. package/skills/managing-managed-event-subscription/references/delete-guide.md +57 -0
  329. package/skills/managing-managed-event-subscription/references/topic-name-formats.md +26 -0
  330. package/skills/managing-managed-event-subscription/references/update-constraints.md +30 -0
  331. package/skills/reviewing-lwc-mobile-offline/SKILL.md +168 -0
  332. package/skills/reviewing-lwc-mobile-offline/references/grounding.md +7 -0
  333. package/skills/reviewing-lwc-mobile-offline/references/inline-graphql.md +43 -0
  334. package/skills/reviewing-lwc-mobile-offline/references/komaci-eslint.md +125 -0
  335. package/skills/reviewing-lwc-mobile-offline/references/lwc-if.md +78 -0
  336. package/skills/reviewing-lwc-mobile-offline/scripts/komaci.config.mjs +18 -0
  337. package/skills/reviewing-lwc-mobile-offline/scripts/package.json +10 -0
  338. package/skills/reviewing-lwc-mobile-offline/scripts/run-komaci.sh +69 -0
  339. package/skills/uplifting-components-to-slds2/SKILL.md +3 -2
  340. package/skills/uplifting-components-to-slds2/references/color-hooks-decision-guide.md +30 -9
  341. package/skills/uplifting-components-to-slds2/references/examples.md +24 -6
  342. package/skills/using-mobile-native-capabilities/SKILL.md +182 -0
  343. package/skills/using-mobile-native-capabilities/references/app-review.md +68 -0
  344. package/skills/using-mobile-native-capabilities/references/ar-space-capture.md +125 -0
  345. package/skills/using-mobile-native-capabilities/references/barcode-scanner.md +219 -0
  346. package/skills/using-mobile-native-capabilities/references/base-capability.md +22 -0
  347. package/skills/using-mobile-native-capabilities/references/biometrics.md +90 -0
  348. package/skills/using-mobile-native-capabilities/references/calendar.md +213 -0
  349. package/skills/using-mobile-native-capabilities/references/contacts.md +232 -0
  350. package/skills/using-mobile-native-capabilities/references/document-scanner.md +342 -0
  351. package/skills/using-mobile-native-capabilities/references/geofencing.md +123 -0
  352. package/skills/using-mobile-native-capabilities/references/location.md +158 -0
  353. package/skills/using-mobile-native-capabilities/references/mobile-capabilities.md +30 -0
  354. package/skills/using-mobile-native-capabilities/references/nfc.md +181 -0
  355. package/skills/using-mobile-native-capabilities/references/payments.md +95 -0
  356. package/skills/validating-slds/SKILL.md +262 -0
  357. package/skills/validating-slds/references/quality-checks.md +308 -0
  358. package/skills/validating-slds/references/report-format.md +302 -0
  359. package/skills/validating-slds/scripts/analyze-quality.cjs +521 -0
@@ -0,0 +1,181 @@
1
+ # NFC Service Grounding Context
2
+
3
+ The following content provides grounding information for generating a Salesforce LWC that leverages NFC facilities on mobile devices. Specifically, this context will cover the API types and methods available to leverage the NFC API of the mobile device, within the LWC.
4
+
5
+ ## NFC Service API
6
+
7
+ ```typescript
8
+ /*
9
+ * Copyright (c) 2024, Salesforce, Inc.
10
+ * All rights reserved.
11
+ * For full license text, see the LICENSE.txt file
12
+ */
13
+
14
+ import { BaseCapability } from '../BaseCapability.js';
15
+
16
+ /**
17
+ * Use this factory function to get an instance of {@linkcode NfcService}.
18
+ * @returns An instance of {@linkcode NfcService}.
19
+ */
20
+ export function getNfcService(): NfcService;
21
+
22
+ /**
23
+ * Interact with NFC tags from a Lightning web component.
24
+ * @see {@link https://developer.salesforce.com/docs/platform/lwc/guide/reference-lightning-nfcservice.html|NFCService API}
25
+ */
26
+ export interface NfcService extends BaseCapability {
27
+ /**
28
+ * Reads an NFC tag and returns the data read from it.
29
+ * @param options An {@linkcode NFCServiceOptions} object to configure the {@linkcode NfcService} request.
30
+ * @returns A Promise object that resolves to an array containing a single {@linkcode NFCMessage} object.
31
+ */
32
+ read(options?: NFCServiceOptions): Promise<NFCMessage[]>;
33
+
34
+ /**
35
+ * Erase the contents of an NFC tag.
36
+ * @param options An {@linkcode NFCServiceOptions} object to configure the {@linkcode NfcService} request.
37
+ * @returns If successful, the OS returns a Promise object that resolves to null.
38
+ */
39
+ erase(options?: NFCServiceOptions): Promise<null>;
40
+
41
+ /**
42
+ * Write text to an NFC tag.
43
+ * @param payloads An array of {@linkcode NFCRecord} objects containing the raw bytes to be written.
44
+ * @param options An {@linkcode NFCServiceOptions} object to configure the {@linkcode NfcService} request.
45
+ * @returns If successful, the OS returns a Promise object that resolves to null.
46
+ */
47
+ write(payloads: NFCRecord[], options?: NFCServiceOptions): Promise<null>;
48
+
49
+ /**
50
+ * Given a text payload, this function creates a properly formatted {@linkcode NFCRecord} to be written to an NFC tag.
51
+ * @param payload A {@link TextPayload} object, which contains the text to be converted to an NFC record.
52
+ * @returns A Promise object that resolves to an {@linkcode NFCRecord} object.
53
+ */
54
+ createTextRecord(payload: TextPayload): Promise<NFCRecord>;
55
+
56
+ /**
57
+ * Given a URI string payload, this function creates a properly formatted {@linkcode NFCRecord} to be written to an NFC tag.
58
+ * @param payload The URI to be converted to an NFC record.
59
+ * @returns A Promise object that resolves to an {@linkcode NFCRecord} object.
60
+ */
61
+ createUriRecord(payload: string): Promise<NFCRecord>;
62
+ }
63
+
64
+ /**
65
+ * An object returned by an NFC read() operation.
66
+ */
67
+ export interface NFCMessage {
68
+ /**
69
+ * The size, in number of bytes, of the data received by the read() operation.
70
+ */
71
+ totalByteLength: number;
72
+
73
+ /**
74
+ * An array containing a single {@linkcode NFCMessageRecord} object, which in turn contains the payload from the NFC tag.
75
+ */
76
+ records: NFCMessageRecord[];
77
+ }
78
+
79
+ /**
80
+ * An object within an {@linkcode NFCMessage} object, containing the payload read from an NFC tag.
81
+ */
82
+ export interface NFCMessageRecord {
83
+ /**
84
+ * Contains the parsed values of the raw data read from the NFC tag. The parsing operation
85
+ * only occurs if the value of the typeNameFormat property on the {@linkcode NFCRecord} object is "WELLKNOWN".
86
+ * Otherwise, this property’s value is null.
87
+ */
88
+ parsed: NFCRecord;
89
+
90
+ /**
91
+ * Contains the raw base64 data string read from the NFC tag.
92
+ */
93
+ raw: NFCRecord;
94
+ }
95
+
96
+ /**
97
+ * An object containing one record of data from an NFC tag scan.
98
+ */
99
+ export interface NFCRecord {
100
+ /**
101
+ * The Type Name Format field of the payload, as defined by the NDEF specification.
102
+ */
103
+ typeNameFormat: TypeNameFormat;
104
+
105
+ /**
106
+ * The type of the payload, as defined by the NDEF specification.
107
+ */
108
+ type: string;
109
+
110
+ /**
111
+ * The identifier of the payload, as defined by the NDEF specification, or an empty string if no identifier data was present in the tag.
112
+ */
113
+ identifier: string;
114
+
115
+ /**
116
+ * The content of the record, encoded in base64 format.
117
+ */
118
+ payload: string;
119
+ }
120
+
121
+ /**
122
+ * An object containing raw text input, to be converted into an {@linkcode NFCRecord}.
123
+ */
124
+ export interface TextPayload {
125
+ /**
126
+ * The raw text payload to be converted.
127
+ */
128
+ text: string;
129
+
130
+ /**
131
+ * The ISO 639-1 language ID of the text.
132
+ */
133
+ langId: string;
134
+ }
135
+
136
+ /**
137
+ * The following constants are available as properties on an instance of {@linkcode NfcService}. The constants enumerate the accepted values for the associated properties.
138
+ */
139
+ export type TypeNameFormat = 'ABSOLUTE_URI' | 'EMPTY' | 'EXTERNAL' | 'MEDIA' | 'WELLKNOWN' | 'UNCHANGED' | 'UNKNOWN';
140
+
141
+ /**
142
+ * An object containing configuration details for an NFC interaction.
143
+ */
144
+ export interface NFCServiceOptions {
145
+ /**
146
+ * Optional. Provides instructions to display in the user interface. Defaults to no text.
147
+ */
148
+ instructionText?: string;
149
+
150
+ /**
151
+ * Optional. Provides a message to display in the user interface when an NFC operation is successfully completed. Defaults to no text.
152
+ */
153
+ successText?: string;
154
+ }
155
+
156
+ /**
157
+ * An object representing an error that occurred when accessing {@linkcode NfcService} features.
158
+ */
159
+ export interface NFCServiceFailure {
160
+ /**
161
+ * A value representing the reason for an error. See {@linkcode NFCServiceFailureCode} for the list of possible values.
162
+ */
163
+ code: NFCServiceFailureCode;
164
+
165
+ /**
166
+ * A string value describing the reason for the failure. This value is suitable for use in user interface messages. The message is provided in English and isn’t localized.
167
+ */
168
+ message: string;
169
+ }
170
+
171
+ /**
172
+ * Correlates with the code property on the {@linkcode NFCServiceFailure} object.
173
+ */
174
+ export type NFCServiceFailureCode =
175
+ | 'USER_DISMISSED' // The user dismissed the scanner.
176
+ | 'NFC_NOT_SUPPORTED' // The device doesn’t support NFC capabilities.
177
+ | 'NFC_NOT_ENABLED' // The device NFC feature is turned off.
178
+ | 'TAG_EMPTY' // The NFC tag contains no data to be read.
179
+ | 'SERVICE_NOT_ENABLED' // NFCService is not enabled and cannot be used.
180
+ | 'UNKNOWN_REASON'; // An error occurred in the native code that isn’t related to permissions or hardware issues. More information is provided in the NFCServiceFailure message.
181
+ ```
@@ -0,0 +1,95 @@
1
+ # Payments Service Grounding Context
2
+
3
+ The following content provides grounding information for generating a Salesforce LWC that leverages payments facilities on mobile devices. Specifically, this context will cover the API types and methods available to leverage the payments API of the mobile device, within the LWC.
4
+
5
+ ## Payments Service API
6
+
7
+ ```typescript
8
+ /*
9
+ * Copyright (c) 2024, Salesforce, Inc.
10
+ * All rights reserved.
11
+ * For full license text, see the LICENSE.txt file
12
+ */
13
+
14
+ import { BaseCapability } from '../BaseCapability.js';
15
+
16
+ /**
17
+ * Use this factory function to get an instance of {@linkcode PaymentsService}.
18
+ * @returns An instance of {@linkcode PaymentsService}.
19
+ */
20
+ export function getPaymentsService(): PaymentsService;
21
+
22
+ /**
23
+ * PaymentsService is a Nimbus plugin that allows JavaScript code in a Lightning web component to call functions that launches Stripe's Tap to Pay capabilities.
24
+ */
25
+ export interface PaymentsService extends BaseCapability {
26
+ /**
27
+ * Process payment.
28
+ * @param options The customization options.
29
+ * @returns A Promise object that resolves to {@linkcode CollectPaymentResult} object.
30
+ */
31
+ collectPayment(options: CollectPaymentOptions): Promise<CollectPaymentResult>;
32
+
33
+ /**
34
+ * Get the supported payment methods on this device
35
+ * @param options The customization options.
36
+ * @returns A Promise object that resolves to an array containing {@linkcode PaymentMethod} objects.
37
+ */
38
+ getSupportedPaymentMethods(options: GetSupportedPaymentMethodsOptions): Promise<PaymentMethod[]>;
39
+ }
40
+
41
+ /**
42
+ * PaymentMethod values.
43
+ */
44
+ export type PaymentMethod = 'TAP_TO_PAY' | 'CREDIT_CARD_DETAILS' | 'PAY_VIA_LINK';
45
+
46
+ /**
47
+ * GetSupportedPaymentMethodsOptions interface.
48
+ */
49
+ export interface GetSupportedPaymentMethodsOptions {
50
+ countryIsoCode?: string;
51
+ merchantAccountId?: string;
52
+ permissionRationaleText?: string;
53
+ }
54
+
55
+ /**
56
+ * CollectPaymentOptions interface.
57
+ */
58
+ export interface CollectPaymentOptions {
59
+ amount: number;
60
+ paymentMethod: PaymentMethod;
61
+ currencyIsoCode: string;
62
+ merchantAccountId: string;
63
+ merchantName: string;
64
+ payerAccountId?: string;
65
+ sourceObjectIds?: string[];
66
+ permissionRationaleText?: string;
67
+ }
68
+
69
+ /**
70
+ * CollectPaymentResult interface.
71
+ */
72
+ export interface CollectPaymentResult {
73
+ gatewayRefId?: string;
74
+ guid?: string;
75
+ paymentGatewayId?: string;
76
+ status?: string;
77
+ }
78
+
79
+ /**
80
+ * PaymentsServiceFailure interface.
81
+ */
82
+ export interface PaymentsServiceFailure {
83
+ code: PaymentsServiceFailureCode;
84
+ message: string;
85
+ }
86
+
87
+ /**
88
+ * Possible failure codes.
89
+ */
90
+ export type PaymentsServiceFailureCode =
91
+ | 'USER_DISMISSED' // User cancelled the operation.
92
+ | 'USER_DENIED_PERMISSION' // Permission to access device location is denied.
93
+ | 'SERVICE_NOT_ENABLED' // The service is not enabled and therefore cannot be used.
94
+ | 'UNKNOWN_REASON'; // An error happened in the native code that is not permission based. Will give more information in the PaymentsServiceFailure message.
95
+ ```
@@ -0,0 +1,262 @@
1
+ ---
2
+ name: validating-slds
3
+ description: "Audit Lightning Web Components for SLDS compliance and produce a scored quality report. Runs the SLDS linter, analyzes CSS for theming hook usage and pairing, checks HTML for accessibility attributes, and scores findings across categories into an overall grade. Use when asked to \"score my component\", \"SLDS scorecard\", \"quality report\", \"audit SLDS compliance\", \"how good is my SLDS\", \"check component quality\", \"rate my component\", \"evaluate my component\", \"is this component ready to ship?\", \"look at my LWC for issues\", \"audit this before I submit\", \"review my component before code review\", or any time a user wants a quality assessment or production-readiness check on an LWC or SLDS component. Not for fixing violations (use uplifting-components-to-slds2) or building new components (use applying-slds)."
4
+ metadata:
5
+ version: "1.0"
6
+ ---
7
+
8
+ # SLDS Quality Audit
9
+
10
+ Audit Lightning Web Components for SLDS compliance and produce an automated scorecard plus a required manual review gate. Combines SLDS linter output with supplementary static analysis to catch what the linter misses.
11
+
12
+ ## Scope
13
+
14
+ Also valid for: auditing SLDS compliance across a project or component set, and before/after quality comparison after making changes.
15
+
16
+ Not for:
17
+ - **Fixing** linter violations — use `uplifting-components-to-slds2` instead
18
+ - **Building** new components — use `applying-slds` instead
19
+ - **Just running the linter** — run `npx @salesforce-ux/slds-linter@latest lint .` directly
20
+ - **Full WCAG accessibility audit** — this skill checks attribute presence only (labels, alt text, focus indicators), not contrast ratios, keyboard flows, or screen reader behavior
21
+ - **Framework-specific template auditing** beyond `.css`, `.html`, and `.js` files — JSX/TSX/Vue/Svelte outputs need additional manual review
22
+
23
+ ---
24
+
25
+ ## Quality Validation Process
26
+
27
+ ```
28
+ 1. Run SLDS Linter → Collect violation counts (linter's job)
29
+ 2. Run Analyze Script → Check what linter doesn't cover (supplementary)
30
+ 3. Agent Review → Required manual review gate
31
+ 4. Score & Grade → Compute automated score + final recommendation
32
+ 5. Generate Report → Produce formatted scorecard
33
+ ```
34
+
35
+ ## Step 1: Run SLDS Linter
36
+
37
+ Run the linter to collect baseline violation data:
38
+
39
+ ```bash
40
+ npx @salesforce-ux/slds-linter@latest lint <component-path> 2>&1
41
+ ```
42
+
43
+ Count violations by rule. These feed directly into the **Linter Compliance** score:
44
+
45
+ | Rule | Impact |
46
+ |------|--------|
47
+ | `slds/class-override` | Breaks theming, dark mode |
48
+ | `slds/lwc-token-to-slds-hook` | SLDS 1 technical debt |
49
+ | `slds/no-hardcoded-values` | Breaks theming, accessibility |
50
+
51
+ **Linter Compliance Score** = `100 - (total_violations × 10)`, minimum 0.
52
+
53
+ **If the linter is unavailable** (no Node.js, no network access, CI sandbox restrictions): skip this step, note "Linter not run" in the report header, mark Linter Compliance as N/A, and compute the Overall score using the remaining 4 categories renormalized to 100%:
54
+
55
+ ```
56
+ Overall (linter unavailable) = (Theming × 0.29) + (Accessibility × 0.29)
57
+ + (CodeQuality × 0.21) + (ComponentUsage × 0.21)
58
+ ```
59
+
60
+ ## Step 2: Run Supplementary Analysis
61
+
62
+ Run the analyze script to catch issues the linter doesn't cover. The bundled analyzer scans `.css`, `.html`, and `.js` files only:
63
+
64
+ ```bash
65
+ node scripts/analyze-quality.cjs <component-path>
66
+ ```
67
+
68
+ The script outputs JSON with findings organized by severity. It checks:
69
+
70
+ ### CSS Checks (linter-complementary)
71
+
72
+ | Check | What It Catches | Severity |
73
+ |-------|----------------|----------|
74
+ | Missing fallbacks | `var(--slds-g-*)` without a fallback value | Critical |
75
+ | Invented hooks (T051) | `--slds-g-*` tokens not found in `hooks-index.json` (requires `--hooks-index`) | Critical |
76
+ | Hook pairing | Background hooks without matching foreground hooks | Warning |
77
+ | `!important` | Specificity overrides | Warning |
78
+ | Magic pixel values | Hardcoded `px` not using spacing hooks | Warning |
79
+ | High z-index | z-index values > 99 | Warning |
80
+ | Outline removal | `outline: none` without alternative focus style | Warning |
81
+
82
+ ### JS Checks
83
+
84
+ | Check | What It Catches | Severity |
85
+ |-------|----------------|----------|
86
+ | Inline style assignment | `.style.*=` direct property assignment | Warning |
87
+ | SLDS class manipulation | Dynamic `.classList.add('slds-*')` manipulation | Warning |
88
+
89
+ ### HTML Checks
90
+
91
+ | Check | What It Catches | Severity |
92
+ |-------|----------------|----------|
93
+ | LBC input labels | `<lightning-input>` without `label` attribute | Critical |
94
+ | Icon alt text | `<lightning-icon>` without `alternative-text` | Critical |
95
+ | Image alt text | `<img>` without `alt` | Critical |
96
+ | Heading hierarchy | Skipped heading levels (h2 to h4) | Warning |
97
+ | Positive tabindex | `tabindex` values other than 0 or -1 | Warning |
98
+ | Clickable divs | `<div onclick>` instead of `<button>` | Warning |
99
+ | Inline styles | `style="..."` attributes | Warning |
100
+ | Native elements | `<input>`, `<button>`, `<select>` where LBC alternatives exist | Warning |
101
+
102
+ ### Hook Pairing Validation
103
+
104
+ The script checks that background/foreground hooks are semantically paired:
105
+
106
+ ```
107
+ surface-* backgrounds → on-surface-* text
108
+ surface-container-* bg → on-surface-* text
109
+ accent-* backgrounds → on-accent-* text
110
+ accent-container-* bg → on-accent-* text
111
+ ```
112
+
113
+ > **Limitation:** Hook pairing is checked at the file level, not per-selector. A file with `surface-1` in `.classA` and `on-accent-1` in `.classB` would pass because both surface and accent families are present. Review pairing correctness per-selector during manual review (Step 3).
114
+
115
+ ### Invented Hook Detection (T051)
116
+
117
+ The script cross-references every `--slds-g-*` token in CSS against `hooks-index.json`. Any hook not found in metadata is flagged as critical — this catches the most common agent mistake of inventing hooks from naming patterns.
118
+
119
+ ## Step 3: Agent Manual Review
120
+
121
+ These checks require understanding the component's purpose and cannot be automated reliably. Review each and classify findings as either:
122
+
123
+ - **Blocking** — incorrect blueprint structure, missing required states, or semantic/interaction issues that make the component not production-ready
124
+ - **Advisory** — worthwhile improvements that do not block shipping on their own
125
+
126
+ | Review Area | What to Look For |
127
+ |-------------|-----------------|
128
+ | Loading states | Does the component show a spinner or skeleton when fetching data? |
129
+ | Error states | Are errors surfaced to the user with actionable messages? |
130
+ | Empty states | Is there a meaningful empty state when no data exists? |
131
+ | Disabled states | Do interactive elements visually and functionally handle disabled? |
132
+ | Semantic HTML | Are `<nav>`, `<article>`, `<section>` used where appropriate? |
133
+ | SLDS blueprint compliance | Do cards, modals, forms follow SLDS blueprint structure? |
134
+
135
+ > Manual review findings are not automated, but they do affect the final recommendation. Do not report an automated grade as the only verdict.
136
+
137
+ ## Step 4: Calculate Automated Scores and Final Recommendation
138
+
139
+ ### Component Complexity
140
+
141
+ Before scoring, classify the component to give the score context:
142
+
143
+ | Complexity | Criteria | Report Note |
144
+ |------------|----------|-------------|
145
+ | Small | 1-2 files, < 100 total lines | Score is high-confidence (small surface area) |
146
+ | Medium | 3-6 files, 100-500 total lines | Score reflects typical component |
147
+ | Large | 7+ files, 500+ total lines | Score reflects absolute issue count — even well-built large components may score lower |
148
+
149
+ Include the complexity classification in the report header. This prevents misreading a "B" on a 1000-line component vs. a "B" on a 20-line component.
150
+
151
+ ### Automated Scoring Formula
152
+
153
+ ```
154
+ Category Score = 100 - (critical_issues × 10) - (warnings × 3) - (info × 1)
155
+ Minimum score: 0
156
+ ```
157
+
158
+ ### Categories and Weights
159
+
160
+ | Category | Weight | Source |
161
+ |----------|--------|--------|
162
+ | Linter Compliance | 30% | SLDS linter output (Step 1) |
163
+ | Theming | 20% | Script: fallbacks, hook pairing (Step 2) |
164
+ | Accessibility | 20% | Script: labels, alt text, focus (Step 2) |
165
+ | Code Quality | 15% | Script: !important, inline styles, z-index (Step 2) |
166
+ | Component Usage | 15% | Script: native elements (Step 2) plus manual semantic/blueprint review (Step 3) |
167
+
168
+ ### Automated Overall Score
169
+
170
+ ```
171
+ Overall = (Linter × 0.30) + (Theming × 0.20) + (Accessibility × 0.20)
172
+ + (CodeQuality × 0.15) + (ComponentUsage × 0.15)
173
+ ```
174
+
175
+ ### Automated Grade Thresholds
176
+
177
+ | Score | Grade | Meaning |
178
+ |-------|-------|---------|
179
+ | 90-100 | A | Excellent automated score |
180
+ | 80-89 | B | Good automated score |
181
+ | 70-79 | C | Acceptable automated score |
182
+ | 60-69 | D | Weak automated score |
183
+ | 0-59 | F | Failing automated score |
184
+
185
+ ### Manual Review Gate
186
+
187
+ After computing the automated score, apply the manual review outcome:
188
+
189
+ | Gate | When to use it | Effect on final recommendation |
190
+ |------|----------------|-------------------------------|
191
+ | Pass | No manual findings | Final recommendation can follow the automated score |
192
+ | Advisory | Only non-blocking manual findings | Final recommendation can be "Ready with follow-ups" at best |
193
+ | Blocking | One or more blocking manual findings | Final recommendation is **not ready for production**, regardless of automated grade |
194
+
195
+ ### Final Recommendation Rules
196
+
197
+ Use both the automated score and the manual review gate:
198
+
199
+ | Final Recommendation | Conditions |
200
+ |----------------------|------------|
201
+ | Ready for production | Automated grade A/B, no critical findings, manual gate = Pass |
202
+ | Ready with follow-ups | Automated grade A/B, no critical findings, manual gate = Advisory |
203
+ | Needs work | Any critical findings, automated grade C/D, or manual gate = Blocking |
204
+ | Failing | Automated grade F |
205
+
206
+ ## Step 5: Generate Quality Report
207
+
208
+ Use the template in **[report-format.md](references/report-format.md)** to produce the final report. Default to the **compact format** for initial output and expand sections on request.
209
+
210
+ The report includes:
211
+ - Executive summary with automated grade and final recommendation
212
+ - Manual review gate outcome (`Pass`, `Advisory`, or `Blocking`)
213
+ - Scores by category with visual indicators
214
+ - Detailed findings organized by severity
215
+ - Specific code locations and recommendations
216
+ - Checklist of required actions
217
+
218
+ ---
219
+
220
+ ## Quick Validation Mode
221
+
222
+ For a rapid quality check without full analysis:
223
+
224
+ 1. Run linter: `npx @salesforce-ux/slds-linter@latest lint <path>`
225
+ 2. Count violations by type
226
+ 3. Report summary only
227
+
228
+ ```
229
+ Quick Quality Check: <component-name>
230
+ ─────────────────────────────────────
231
+ Linter Violations:
232
+ • Class Override: 0
233
+ • Deprecated Tokens: 3
234
+ • Hardcoded Values: 5
235
+
236
+ Quick Automated Grade: C (estimated)
237
+ Run full validation for detailed report.
238
+ ```
239
+
240
+ ---
241
+
242
+ ## Edge Cases and False Positives
243
+
244
+ | Situation | Guidance |
245
+ |-----------|----------|
246
+ | **Headless components** (JS-only, no HTML) | Skip HTML checks; score only CSS + linter categories |
247
+ | **Wrapper/container components** | May legitimately have minimal CSS; don't penalize low hook usage |
248
+ | **Intentional native elements** | `<button>` inside custom SLDS blueprints is correct; suppress C002 if inside an `slds-*` blueprint structure |
249
+ | **Components outside LEX** | LWR/Experience Cloud components may not use Lightning Base Components; note context in report |
250
+ | **Test/demo components** | Lower the bar — note in report but don't block on warnings |
251
+
252
+ If a check produces a false positive, note it in the report as "suppressed" with justification rather than silently dropping it.
253
+
254
+ ---
255
+
256
+ ## References
257
+
258
+ - **[Quality Checks](references/quality-checks.md)** - Complete list of all quality checks with detection patterns
259
+ - **[Report Format](references/report-format.md)** - Quality report template and formatting guide
260
+ - **[Analyze Script](scripts/analyze-quality.cjs)** - Automated analysis for linter-complementary checks
261
+ - **uplifting-components-to-slds2 skill** - How to fix linter violations
262
+ - **applying-slds skill** - Guide for building new components with correct patterns