@salesforce/afv-skills 1.38.0 → 1.39.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.
- package/package.json +1 -1
- package/skills/agentforce-d360-analyze/README.md +2 -2
- package/skills/agentforce-d360-analyze/SKILL.md +6 -6
- package/skills/agentforce-d360-analyze/references/artifacts.md +1 -1
- package/skills/agentforce-d360-analyze/references/dc_dmo_fields.md +4 -4
- package/skills/agentforce-d360-analyze/references/dc_pipeline_contract.md +2 -2
- package/skills/commerce-b2b-open-code-components-integrate/SKILL.md +10 -10
- package/skills/commerce-b2b-store-create/SKILL.md +3 -4
- package/skills/commerce-b2b-store-create/references/store-vs-storefront.md +2 -2
- package/skills/data360-activate/SKILL.md +0 -1
- package/skills/data360-connect/SKILL.md +0 -1
- package/skills/data360-harmonize/SKILL.md +0 -1
- package/skills/data360-orchestrate/SKILL.md +0 -1
- package/skills/data360-prepare/SKILL.md +0 -1
- package/skills/data360-query/SKILL.md +0 -1
- package/skills/data360-segment/SKILL.md +0 -1
- package/skills/design-systems-slds-validate/references/quality-checks.md +5 -5
- package/skills/design-systems-slds2-migrate/SKILL.md +4 -4
- package/skills/design-systems-slds2-migrate/references/color-hooks-decision-guide.md +1 -1
- package/skills/design-systems-slds2-migrate/references/examples.md +3 -3
- package/skills/design-systems-slds2-migrate/references/rule-lwc-token-to-slds-hook.md +1 -1
- package/skills/design-systems-slds2-migrate/references/rule-no-deprecated-tokens-slds1.md +2 -2
- package/skills/design-systems-slds2-migrate/references/rule-no-hardcoded-values.md +2 -2
- package/skills/design-systems-slds2-migrate/references/rule-no-slds-class-overrides.md +1 -1
- package/skills/dx-code-analyzer-configure/SKILL.md +5 -5
- package/skills/dx-code-analyzer-configure/references/ci-cd-templates.md +2 -2
- package/skills/dx-code-analyzer-custom-rule-create/SKILL.md +26 -26
- package/skills/dx-code-analyzer-run/SKILL.md +9 -9
- package/skills/dx-code-analyzer-run/references/post-scan-workflows.md +5 -5
- package/skills/dx-code-analyzer-run/references/vendor-file-handling.md +2 -2
- package/skills/dx-org-switch/SKILL.md +0 -1
- package/skills/experience-cms-brand-apply/SKILL.md +0 -1
- package/skills/experience-content-media-search/SKILL.md +17 -18
- package/skills/experience-ui-bundle-site-generate/references/configure-metadata-custom-site.md +1 -1
- package/skills/experience-ui-bundle-site-generate/references/configure-metadata-digital-experience-bundle.md +1 -1
- package/skills/experience-ui-bundle-site-generate/references/configure-metadata-digital-experience-config.md +1 -1
- package/skills/experience-ui-bundle-site-generate/references/configure-metadata-digital-experience.md +1 -1
- package/skills/experience-ui-bundle-site-generate/references/configure-metadata-network.md +1 -1
- package/skills/experience-ui-bundle-site-generate/references/update-site-urls.md +1 -1
- package/skills/external-diagram-mermaid-generate/SKILL.md +0 -1
- package/skills/integration-eventing-subscription-configure/references/delete-guide.md +1 -1
- package/skills/mobile-platform-offline-validate/SKILL.md +4 -4
- package/skills/platform-lightning-app-coordinate/SKILL.md +9 -9
- package/skills/platform-metadata-retrieve/SKILL.md +0 -1
package/package.json
CHANGED
|
@@ -50,7 +50,7 @@ See `SKILL.md` for the full TRIGGER conditions, flag table, and the "DC-only bli
|
|
|
50
50
|
|
|
51
51
|
Three stages, each independently runnable:
|
|
52
52
|
|
|
53
|
-
```
|
|
53
|
+
```text
|
|
54
54
|
fetch_dc.py → 24 dc.<name>.json + dc._session_manifest.json (DC Query REST waterfall)
|
|
55
55
|
assemble_dc.py → dc._session_tree.json (in-memory hierarchical join)
|
|
56
56
|
render_dc.py → dc._session_summary.md (markdown rendering)
|
|
@@ -87,7 +87,7 @@ For design-time architecture questions (topic/action tree, flow inventory, Apex
|
|
|
87
87
|
|
|
88
88
|
## Layout
|
|
89
89
|
|
|
90
|
-
```
|
|
90
|
+
```text
|
|
91
91
|
agentforce-d360-analyze/
|
|
92
92
|
├── SKILL.md ← runtime-parsed entry point (TRIGGER / DO NOT TRIGGER, flags, prompts)
|
|
93
93
|
├── README.md ← this file
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
name: agentforce-d360-analyze
|
|
3
3
|
description: "Data Cloud 360° view of a single Agentforce session. TRIGGER when user asks to trace, inspect, summarize, or describe a specific Agentforce session by session id (Agent Session UUID `019d…` or MessagingSession id `0Mw…`). Also triggers on session discovery — find/list/search sessions by time, agent, channel, outcome, or conversation text — when the user has no session id yet. DO NOT TRIGGER for design-time architecture questions (use agentforce-architecture-analyze instead) or for runtime perf/latency/SLO questions that require platform telemetry beyond Data Cloud."
|
|
4
4
|
metadata:
|
|
5
|
+
version: "1.0"
|
|
6
|
+
minApiVersion: "66.0"
|
|
7
|
+
relatedSkills:
|
|
8
|
+
- "agentforce-architecture-analyze"
|
|
5
9
|
cliTools:
|
|
6
10
|
- tool: ["python3"]
|
|
7
11
|
semver: ">=3.10.0"
|
|
8
12
|
- tool: ["sf"]
|
|
9
13
|
semver: ">=2.0.0"
|
|
10
|
-
relatedSkills:
|
|
11
|
-
- "agentforce-architecture-analyze"
|
|
12
|
-
version: "1.0"
|
|
13
|
-
minApiVersion: "66.0"
|
|
14
14
|
---
|
|
15
15
|
|
|
16
16
|
# agentforce-d360-analyze — Data Cloud 360° session view
|
|
@@ -72,7 +72,7 @@ python3 "$prefix/discover_sessions.py" --org <alias> [filters...]
|
|
|
72
72
|
|
|
73
73
|
## Pipeline — three stages
|
|
74
74
|
|
|
75
|
-
```
|
|
75
|
+
```text
|
|
76
76
|
fetch_dc.py → 24 dc.<name>.json + dc._session_manifest.json (DC Query REST waterfall, 5 waves)
|
|
77
77
|
assemble_dc.py → dc._session_tree.json (pure in-memory hierarchical join)
|
|
78
78
|
render_dc.py → dc._session_summary.md (human summary, multi-section)
|
|
@@ -92,7 +92,7 @@ Flags: `--verbose` for per-DMO row counts; `--no-assemble` / `--no-render` to st
|
|
|
92
92
|
|
|
93
93
|
Everything lands under `~/.vibe/data/agentforce-d360-analyze/<org_id15>/<agent>__<ver>/<session_id>/` (default; override with `--data-dir <path>`):
|
|
94
94
|
|
|
95
|
-
```
|
|
95
|
+
```text
|
|
96
96
|
dc.sessions.json dc.steps.json dc.gateway_requests.json
|
|
97
97
|
dc.interactions.json dc.messages.json dc.gateway_responses.json
|
|
98
98
|
dc.participants.json dc.generations.json dc.gateway_request_llm.json
|
|
@@ -5,7 +5,7 @@ Every successful trace lands artifacts under
|
|
|
5
5
|
Re-running the same `(org, sid)` overwrites in place. Listed below in
|
|
6
6
|
the order they're produced.
|
|
7
7
|
|
|
8
|
-
```
|
|
8
|
+
```text
|
|
9
9
|
~/.vibe/data/agentforce-d360-analyze/<org_id15>/<agent>__<ver>/<sid>/
|
|
10
10
|
├── dc._session_manifest.json ← per-query counts + session_shape + empties
|
|
11
11
|
├── dc._session_tree.json ← hierarchical join (primary artifact)
|
|
@@ -59,7 +59,7 @@ Per-run row counts, empty reasons, and join paths are recorded in
|
|
|
59
59
|
Legend: ★ = session-FK direct (one hop) ▸ = polymorphic `parent__c`
|
|
60
60
|
⚠ = requires feature provisioning
|
|
61
61
|
|
|
62
|
-
```
|
|
62
|
+
```text
|
|
63
63
|
Session (ssot__AIAgentSession__dlm, PK ssot__Id__c)
|
|
64
64
|
│
|
|
65
65
|
├── ★ Participant (ssot__AiAgentSessionId__c)
|
|
@@ -135,7 +135,7 @@ All 24 entries below are in the `scripts/fetch_dc.py` waterfall — the
|
|
|
135
135
|
join expressions are exactly what the script runs, and each one has a
|
|
136
136
|
`.sql` template under `assets/dc/`.
|
|
137
137
|
|
|
138
|
-
```
|
|
138
|
+
```text
|
|
139
139
|
1. sessions WHERE ssot__Id__c = {sid}
|
|
140
140
|
2. interactions WHERE ssot__AiAgentSessionId__c = {sid}
|
|
141
141
|
3. messages WHERE ssot__AiAgentSessionId__c = {sid}
|
|
@@ -370,7 +370,7 @@ schemas are documented in the per-DMO sections below.
|
|
|
370
370
|
`turnId__c` column (verified via live `describe`; 11 fields total,
|
|
371
371
|
none reference session/trace/turn). The canonical join path is:
|
|
372
372
|
|
|
373
|
-
```
|
|
373
|
+
```text
|
|
374
374
|
Session → Interaction → Step (.ssot__GenerationId__c) → Generation (.generationId__c)
|
|
375
375
|
```
|
|
376
376
|
|
|
@@ -432,7 +432,7 @@ Richer than `GenAIGeneration` — carries prompt text, tokens, model, and
|
|
|
432
432
|
session/user/bot identifiers. **Forward entry point for the entire audit
|
|
433
433
|
chain**, reached from Session via `sessionId__c`:
|
|
434
434
|
|
|
435
|
-
```
|
|
435
|
+
```text
|
|
436
436
|
Session.ssot__Id__c → GatewayRequest.sessionId__c LIKE '%<sid>%'
|
|
437
437
|
```
|
|
438
438
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
The DC pipeline for a single Agentforce session runs as three stages in
|
|
4
4
|
sequence:
|
|
5
5
|
|
|
6
|
-
```
|
|
6
|
+
```text
|
|
7
7
|
fetch_dc.py → 24 dc.<name>.json artifacts + dc._session_manifest.json
|
|
8
8
|
assemble_dc.py → dc._session_tree.json (pure in-memory join)
|
|
9
9
|
render_dc.py → dc._session_summary.md (pure tree reader)
|
|
@@ -71,7 +71,7 @@ Per-field schema for every DMO lives in
|
|
|
71
71
|
The "normal" path that nests a `GatewayRequest` under its owning
|
|
72
72
|
`LLM_STEP` in the tree. Every edge is a platform-sanctioned forward FK:
|
|
73
73
|
|
|
74
|
-
```
|
|
74
|
+
```text
|
|
75
75
|
Step.ssot__GenerationId__c → Generation.generationId__c
|
|
76
76
|
Generation.generationResponseId__c → GatewayResponse.generationResponseId__c
|
|
77
77
|
GatewayResponse.generationRequestId__c → GatewayRequest.gatewayRequestId__c
|
|
@@ -3,15 +3,15 @@ name: commerce-b2b-open-code-components-integrate
|
|
|
3
3
|
description: "Integrate Salesforce B2B Commerce open source components from GitHub into B2B Commerce stores. Use when users mention \"integrate open code components\", \"open source B2B commerce\", \"add open code components\", \"forcedotcom/b2b-commerce-open-source-components\", or want to add open source commerce components to their store. Copies all components and labels so they become available in Experience Builder."
|
|
4
4
|
allowed-tools: Bash(git clone:*) Bash(cp:*) Read
|
|
5
5
|
metadata:
|
|
6
|
+
version: "1.0"
|
|
7
|
+
minApiVersion: "56.0"
|
|
8
|
+
relatedSkills:
|
|
9
|
+
- "commerce-b2b-store-create"
|
|
6
10
|
cliTools:
|
|
7
11
|
- tool: ["git"]
|
|
8
12
|
semver: ">=2.0.0"
|
|
9
13
|
- tool: ["sf"]
|
|
10
14
|
semver: ">=2.0.0"
|
|
11
|
-
relatedSkills:
|
|
12
|
-
- "commerce-b2b-store-create"
|
|
13
|
-
version: "1.0"
|
|
14
|
-
minApiVersion: "56.0"
|
|
15
15
|
---
|
|
16
16
|
|
|
17
17
|
## When to Use This Skill
|
|
@@ -98,8 +98,8 @@ Copy all components and labels from cloned repo to site directory:
|
|
|
98
98
|
5. Report: "Copied X components and Y label sets"
|
|
99
99
|
|
|
100
100
|
**Output:**
|
|
101
|
-
```
|
|
102
|
-
|
|
101
|
+
```text
|
|
102
|
+
Integration Complete!
|
|
103
103
|
|
|
104
104
|
Copied: X components and Y label sets to <store-name>
|
|
105
105
|
|
|
@@ -125,7 +125,7 @@ Next Steps:
|
|
|
125
125
|
**User:** "1"
|
|
126
126
|
|
|
127
127
|
**Agent:** "I'm checking if your project already has B2B store metadata locally..."
|
|
128
|
-
-
|
|
128
|
+
- [done] Found store metadata for My_B2B_Store1
|
|
129
129
|
|
|
130
130
|
**Agent:** "I'm checking if open code components already exist in your store's site metadata..."
|
|
131
131
|
|
|
@@ -138,10 +138,10 @@ Next Steps:
|
|
|
138
138
|
|
|
139
139
|
**Agent:** "I'm now copying all open code LWC components from the cloned repository into your store's site metadata directory..."
|
|
140
140
|
**Agent:** "I'm copying the associated label files that these components need..."
|
|
141
|
-
-
|
|
141
|
+
- [done] Copied 45 components and 38 label sets
|
|
142
142
|
|
|
143
|
-
```
|
|
144
|
-
|
|
143
|
+
```text
|
|
144
|
+
Integration Complete!
|
|
145
145
|
|
|
146
146
|
Copied: 45 components and 38 label sets to My_B2B_Store1
|
|
147
147
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: commerce-b2b-store-create
|
|
3
3
|
description: "Interactive workflow to create Commerce B2B Stores and retrieve storefront metadata. Use when users want to: create B2B Commerce stores, build Commerce storefronts, set up B2B stores from Vibes, retrieve Commerce metadata, deploy Commerce experiences, work with DigitalExperienceBundle for Commerce."
|
|
4
|
-
compatibility: "Requires Commerce licenses, Experience Cloud, Salesforce CLI"
|
|
5
4
|
metadata:
|
|
6
5
|
version: "1.0"
|
|
7
6
|
minApiVersion: "56.0"
|
|
@@ -101,7 +100,7 @@ sf org list metadata --metadata-type DigitalExperienceConfig --json
|
|
|
101
100
|
- Explain naming (underscores, number suffixes)
|
|
102
101
|
|
|
103
102
|
**Example output:**
|
|
104
|
-
```
|
|
103
|
+
```text
|
|
105
104
|
Available Digital Experience sites:
|
|
106
105
|
1. My_B2B_Store1
|
|
107
106
|
2. Partner_Portal
|
|
@@ -134,7 +133,7 @@ sf project retrieve start -m DigitalExperienceBundle:site/<selected-store-name>
|
|
|
134
133
|
- List retrieved directory structure
|
|
135
134
|
|
|
136
135
|
**Expected output:**
|
|
137
|
-
```
|
|
136
|
+
```text
|
|
138
137
|
Retrieved: force-app/main/default/digitalExperiences/site/My_B2B_Store1/
|
|
139
138
|
├── My_B2B_Store1.digitalExperience-meta.xml
|
|
140
139
|
├── sfdc_cms__view/ (home, current_cart, detail_*, list_*, etc.)
|
|
@@ -149,7 +148,7 @@ Retrieved: force-app/main/default/digitalExperiences/site/My_B2B_Store1/
|
|
|
149
148
|
|
|
150
149
|
**Agent provides:**
|
|
151
150
|
|
|
152
|
-
|
|
151
|
+
**Metadata retrieved successfully!**
|
|
153
152
|
|
|
154
153
|
**Next steps:**
|
|
155
154
|
- Customize with custom LWCs or branding changes
|
|
@@ -121,7 +121,7 @@ Understanding the distinction between Commerce Store and Storefront is critical
|
|
|
121
121
|
|
|
122
122
|
### Step 1: Create Commerce Store (Must Be First)
|
|
123
123
|
|
|
124
|
-
```
|
|
124
|
+
```text
|
|
125
125
|
User Interface (Commerce App)
|
|
126
126
|
↓
|
|
127
127
|
WebStore Record Created
|
|
@@ -144,7 +144,7 @@ Commerce Components Configured
|
|
|
144
144
|
|
|
145
145
|
### Step 2: Retrieve Storefront Metadata
|
|
146
146
|
|
|
147
|
-
```
|
|
147
|
+
```sh
|
|
148
148
|
sf org list metadata --metadata-type DigitalExperienceConfig
|
|
149
149
|
↓
|
|
150
150
|
Select Store from List
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: data360-activate
|
|
3
3
|
description: "Salesforce Data Cloud Act phase. Use this skill when the user manages activations, activation targets, data actions, or downstream delivery of Data Cloud audiences and data. TRIGGER when: user manages activations, activation targets, data actions, or downstream delivery of Data Cloud audiences and data. DO NOT TRIGGER when: the task is segment creation (use data360-segment), data retrieval/search work (use data360-query), or STDM/session tracing (use agentforce-observe)."
|
|
4
|
-
compatibility: "Requires an external community sf data360 CLI plugin and a Data Cloud-enabled org"
|
|
5
4
|
metadata:
|
|
6
5
|
cliTools:
|
|
7
6
|
- tool: ["node"]
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: data360-connect
|
|
3
3
|
description: "Salesforce Data Cloud Connect phase. Use this skill when the user manages Data Cloud connections, connectors, or sets up a new source system. TRIGGER when: user manages Data Cloud connections, connectors, connector metadata, tests a connection, browses source objects or databases, or sets up a new source system. DO NOT TRIGGER when: the task is about data streams or DLOs (use data360-prepare), DMOs or identity resolution (use data360-harmonize), retrieval/search (use data360-query), or STDM telemetry (use agentforce-observe)."
|
|
4
|
-
compatibility: "Requires the sf data360 CLI plugin and a Data Cloud-enabled org"
|
|
5
4
|
metadata:
|
|
6
5
|
cliTools:
|
|
7
6
|
- tool: ["node"]
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: data360-harmonize
|
|
3
3
|
description: "Salesforce Data Cloud Harmonize phase. Use this skill when the user works with DMOs, mappings, relationships, identity resolution, unified profiles, data graphs, or universal IDs. TRIGGER when: user works with DMOs, mappings, relationships, identity resolution, unified profiles, data graphs, or universal IDs. DO NOT TRIGGER when: the task is only about streams/DLOs (use data360-prepare), segments/insights (use data360-segment), retrieval/search (use data360-query), or STDM/session tracing (use agentforce-observe)."
|
|
4
|
-
compatibility: "Requires an external community sf data360 CLI plugin and a Data Cloud-enabled org"
|
|
5
4
|
metadata:
|
|
6
5
|
cliTools:
|
|
7
6
|
- tool: ["node"]
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: data360-orchestrate
|
|
3
3
|
description: "Salesforce Data Cloud product orchestrator for connect→prepare→harmonize→segment→act workflows. Use this skill when the user needs a multi-step Data Cloud pipeline, cross-phase troubleshooting, or data space and data kit management. TRIGGER when: user needs a multi-step Data Cloud pipeline, asks to set up or troubleshoot Data Cloud across phases, manages data spaces or data kits, or wants a cross-phase sf data360 workflow. DO NOT TRIGGER when: work is isolated to a single phase (use the matching phase-specific skill), the task is STDM/session tracing/parquet telemetry (use agentforce-observe), standard CRM SOQL (use platform-soql-query), or Apex implementation (use platform-apex-generate)."
|
|
4
|
-
compatibility: "Requires an external community sf data360 CLI plugin and a Data Cloud-enabled org"
|
|
5
4
|
metadata:
|
|
6
5
|
cliTools:
|
|
7
6
|
- tool: ["curl"]
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: data360-prepare
|
|
3
3
|
description: "Salesforce Data Cloud Prepare phase. Use this skill when the user creates or manages Data Cloud data streams, DLOs, transforms, or Document AI configurations. TRIGGER when: user creates or manages Data Cloud data streams, DLOs, transforms, or Document AI configurations, or asks about ingestion into Data Cloud. DO NOT TRIGGER when: the task is connection setup only (use data360-connect), DMOs and identity resolution (use data360-harmonize), or query/search work (use data360-query)."
|
|
4
|
-
compatibility: "Requires an external community sf data360 CLI plugin and a Data Cloud-enabled org"
|
|
5
4
|
metadata:
|
|
6
5
|
cliTools:
|
|
7
6
|
- tool: ["node"]
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: data360-query
|
|
3
3
|
description: "Salesforce Data Cloud Retrieve phase. Use this skill when the user runs Data Cloud SQL, async queries, vector search, search-index workflows, or metadata introspection for Data Cloud objects. TRIGGER when: user runs Data Cloud SQL, describe, async queries, vector search, search-index workflows, or metadata introspection for Data Cloud objects. DO NOT TRIGGER when: the task is standard CRM SOQL (use platform-soql-query), segment creation or calculated insight design (use data360-segment), or STDM/session tracing/parquet analysis (use agentforce-observe)."
|
|
4
|
-
compatibility: "Requires an external community sf data360 CLI plugin and a Data Cloud-enabled org"
|
|
5
4
|
metadata:
|
|
6
5
|
cliTools:
|
|
7
6
|
- tool: ["node"]
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: data360-segment
|
|
3
3
|
description: "Salesforce Data Cloud Segment phase. Use this skill when the user creates or publishes segments, manages calculated insights, or troubleshoots audience SQL in Data Cloud. TRIGGER when: user creates or publishes segments, manages calculated insights, inspects segment counts or membership, or troubleshoots audience SQL in Data Cloud. DO NOT TRIGGER when: the task is DMO/mapping/identity-resolution work (use data360-harmonize), activation work (use data360-activate), query/search-index work (use data360-query), or Standard Data Model (STDM)/session tracing (use agentforce-observe)."
|
|
4
|
-
compatibility: "Requires an external community sf data360 CLI plugin and a Data Cloud-enabled org"
|
|
5
4
|
metadata:
|
|
6
5
|
cliTools:
|
|
7
6
|
- tool: ["node"]
|
|
@@ -260,7 +260,7 @@ const NATIVE_SELECT = /<select\s/gi;
|
|
|
260
260
|
|
|
261
261
|
The script outputs individual category scores. It does **not** produce a combined overall grade — the agent computes that using the formula in SKILL.md Step 4:
|
|
262
262
|
|
|
263
|
-
```
|
|
263
|
+
```text
|
|
264
264
|
Overall = (Linter × 0.30) + (Theming × 0.20) + (Accessibility × 0.20)
|
|
265
265
|
+ (CodeQuality × 0.15) + (ComponentUsage × 0.15)
|
|
266
266
|
```
|
|
@@ -273,7 +273,7 @@ The script automates **17 of 53** checks listed above (marked **Script** in the
|
|
|
273
273
|
|
|
274
274
|
### Theming
|
|
275
275
|
|
|
276
|
-
```
|
|
276
|
+
```text
|
|
277
277
|
Score = 100 - (critical issues in category × 10)
|
|
278
278
|
- (warnings in category × 3)
|
|
279
279
|
- (info in category × 1)
|
|
@@ -282,7 +282,7 @@ Min: 0
|
|
|
282
282
|
|
|
283
283
|
### Accessibility
|
|
284
284
|
|
|
285
|
-
```
|
|
285
|
+
```text
|
|
286
286
|
Score = 100 - (critical issues in category × 10)
|
|
287
287
|
- (warnings in category × 3)
|
|
288
288
|
- (info in category × 1)
|
|
@@ -291,7 +291,7 @@ Min: 0
|
|
|
291
291
|
|
|
292
292
|
### Code Quality
|
|
293
293
|
|
|
294
|
-
```
|
|
294
|
+
```text
|
|
295
295
|
Score = 100 - (critical issues in category × 10)
|
|
296
296
|
- (warnings in category × 3)
|
|
297
297
|
- (info in category × 1)
|
|
@@ -300,7 +300,7 @@ Min: 0
|
|
|
300
300
|
|
|
301
301
|
### Component Usage
|
|
302
302
|
|
|
303
|
-
```
|
|
303
|
+
```text
|
|
304
304
|
Score = 100 - (critical issues in category × 10)
|
|
305
305
|
- (warnings in category × 3)
|
|
306
306
|
- (info in category × 1)
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
name: design-systems-slds2-migrate
|
|
3
3
|
description: "Migrate Lightning Web Components from SLDS 1 to SLDS 2 by running the SLDS linter and fixing violations. Use this skill whenever users mention SLDS 2, SLDS uplift, linter violations, LWC token migration, class overrides, hardcoded CSS values that need SLDS hook replacement, or styling hook selection. Covers all styling hook categories — color, spacing, sizing, typography, borders, radius, and shadows. Also use when users mention no-hardcoded-values, no-slds-class-overrides, lwc-to-slds-hooks, no-deprecated-tokens-slds1, or ask about SLDS component migration — even if they don't explicitly say \"uplift\" or \"migration\"."
|
|
4
4
|
metadata:
|
|
5
|
+
version: "1.0"
|
|
5
6
|
cliTools:
|
|
6
7
|
- tool: ["npx"]
|
|
7
8
|
semver: ">=7.0.0"
|
|
8
|
-
version: "1.0"
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Goal
|
|
@@ -36,7 +36,7 @@ Color hooks require the most judgment (context-dependent selection). Non-color h
|
|
|
36
36
|
|
|
37
37
|
# Workflow
|
|
38
38
|
|
|
39
|
-
```
|
|
39
|
+
```text
|
|
40
40
|
1. **REQUIRED — ALWAYS run first:** npx @salesforce-ux/slds-linter@latest lint --fix . — NEVER skip this step. This handles simple violations automatically.
|
|
41
41
|
2. Review linter output -> Identify remaining manual fixes needed
|
|
42
42
|
3. Fix by violation type -> Use per-rule reference guides
|
|
@@ -57,7 +57,7 @@ The linter analyzes all CSS and markup files (`.html` for LWC, `.cmp` for Aura),
|
|
|
57
57
|
|
|
58
58
|
The linter reports violations in this format:
|
|
59
59
|
|
|
60
|
-
```
|
|
60
|
+
```text
|
|
61
61
|
componentName.css
|
|
62
62
|
15:3 warning Overriding slds-button isn't supported. To differentiate SLDS and
|
|
63
63
|
custom classes, create a CSS class in your namespace.
|
|
@@ -126,7 +126,7 @@ See [rule-no-slds-class-overrides.md](references/rule-no-slds-class-overrides.md
|
|
|
126
126
|
|
|
127
127
|
**Linter feedback loop — repeat until zero errors:**
|
|
128
128
|
|
|
129
|
-
```
|
|
129
|
+
```text
|
|
130
130
|
1. npx @salesforce-ux/slds-linter@latest lint .
|
|
131
131
|
2. Review errors -> fix by type (Step 3)
|
|
132
132
|
3. Re-run linter
|
|
@@ -24,7 +24,7 @@ This guide helps you choose the correct SLDS 2 color hook. Use it when replacing
|
|
|
24
24
|
|
|
25
25
|
**Always try semantic hooks first.** ~85-90% of color decisions should use semantic hooks. System and palette hooks are last resorts, not alternatives.
|
|
26
26
|
|
|
27
|
-
```
|
|
27
|
+
```text
|
|
28
28
|
1. SEMANTIC HOOKS (try first, ~85-90% of decisions)
|
|
29
29
|
surface-*, accent-*, error/warning/success/info/disabled-*
|
|
30
30
|
• Accessibility built-in • Theme-aware • Dark mode ready
|
|
@@ -19,7 +19,7 @@ Before/after examples organized by violation type.
|
|
|
19
19
|
## Class Override Example
|
|
20
20
|
|
|
21
21
|
**Violation:**
|
|
22
|
-
```
|
|
22
|
+
```text
|
|
23
23
|
dataTable.css
|
|
24
24
|
5:1 warning Overriding slds-table isn't supported. To differentiate SLDS and
|
|
25
25
|
custom classes, create a CSS class in your namespace.
|
|
@@ -68,7 +68,7 @@ dataTable.css
|
|
|
68
68
|
## LWC Token Example
|
|
69
69
|
|
|
70
70
|
**Violation:**
|
|
71
|
-
```
|
|
71
|
+
```text
|
|
72
72
|
panelHeader.css
|
|
73
73
|
3:3 error The '--lwc-colorBackgroundAlt' design token is deprecated. Replace it with
|
|
74
74
|
the SLDS 2 styling hook and set the fallback to '--lwc-colorBackgroundAlt'.
|
|
@@ -106,7 +106,7 @@ panelHeader.css
|
|
|
106
106
|
### Tile with Border and Spacing
|
|
107
107
|
|
|
108
108
|
**Violation:**
|
|
109
|
-
```
|
|
109
|
+
```text
|
|
110
110
|
tile.css
|
|
111
111
|
2:20 warning Consider replacing the #ffffff static value with an SLDS 2 styling hook
|
|
112
112
|
that has a similar value:
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
The linter detects deprecated `--lwc-*` tokens and reports them as **errors**. When there is only one suggestion, `--fix` auto-applies it. When there are multiple suggestions, manual selection is required. Here's real linter output for a multiple-suggestion case:
|
|
12
12
|
|
|
13
|
-
```
|
|
13
|
+
```text
|
|
14
14
|
2:14 error The '--lwc-colorBackground' design token is deprecated. Replace it with
|
|
15
15
|
the SLDS 2 styling hook and set the fallback to '--lwc-colorBackground'.
|
|
16
16
|
1. --slds-g-color-surface-2
|
|
@@ -13,13 +13,13 @@ The linter detects `t()` and `token()` function calls in CSS, `.cmp`, and `.html
|
|
|
13
13
|
Two message types:
|
|
14
14
|
|
|
15
15
|
**When a replacement exists:**
|
|
16
|
-
```
|
|
16
|
+
```text
|
|
17
17
|
Consider removing t(colorTextDefault) or replacing it with --slds-g-color-on-surface-3.
|
|
18
18
|
Set the fallback to t(colorTextDefault).
|
|
19
19
|
```
|
|
20
20
|
|
|
21
21
|
**When no replacement exists:**
|
|
22
|
-
```
|
|
22
|
+
```text
|
|
23
23
|
Update outdated design tokens to SLDS 2 styling hooks with similar values.
|
|
24
24
|
```
|
|
25
25
|
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
The linter detects hardcoded values and reports them as warnings. Here's real output for an icon component:
|
|
12
12
|
|
|
13
|
-
```
|
|
13
|
+
```text
|
|
14
14
|
3:10 warning Consider replacing the 32px static value with an SLDS 2 styling hook
|
|
15
15
|
that has a similar value: --slds-g-sizing-9. slds/no-hardcoded-values-slds2
|
|
16
16
|
|
|
@@ -72,7 +72,7 @@ The fallback must be the **exact original value** from the source CSS (e.g., `#0
|
|
|
72
72
|
|
|
73
73
|
When examining a hardcoded value or deprecated token, follow this decision tree:
|
|
74
74
|
|
|
75
|
-
```
|
|
75
|
+
```text
|
|
76
76
|
1. SLDS utility class available?
|
|
77
77
|
└─ Yes → Remove CSS, add utility class to HTML
|
|
78
78
|
└─ No ↓
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
The linter detects CSS classes that directly override SLDS classes and reports them as **warnings**. It does **not** auto-fix — all changes require manual work in both CSS and HTML.
|
|
12
12
|
|
|
13
|
-
```
|
|
13
|
+
```text
|
|
14
14
|
1:1 warning Overriding slds-button isn't supported. To differentiate SLDS and
|
|
15
15
|
custom classes, create a CSS class in your namespace.
|
|
16
16
|
Examples: myapp-input, myapp-button. slds/no-slds-class-overrides
|
|
@@ -4,9 +4,11 @@ description: "Set up, configure, and troubleshoot Salesforce Code Analyzer for a
|
|
|
4
4
|
metadata:
|
|
5
5
|
version: "1.0"
|
|
6
6
|
relatedSkills:
|
|
7
|
-
- "dx-code-analyzer-run"
|
|
8
7
|
- "dx-code-analyzer-custom-rule-create"
|
|
8
|
+
- "dx-code-analyzer-run"
|
|
9
9
|
cliTools:
|
|
10
|
+
- tool: ["sf"]
|
|
11
|
+
semver: ">=2.0.0"
|
|
10
12
|
- tool: ["curl"]
|
|
11
13
|
semver: ">=7.0.0"
|
|
12
14
|
- tool: ["java"]
|
|
@@ -17,8 +19,6 @@ metadata:
|
|
|
17
19
|
semver: ">=9.0.0"
|
|
18
20
|
- tool: ["python3"]
|
|
19
21
|
semver: ">=3.10.0"
|
|
20
|
-
- tool: ["sf"]
|
|
21
|
-
semver: ">=2.0.0"
|
|
22
22
|
---
|
|
23
23
|
|
|
24
24
|
# Configuring Code Analyzer Skill
|
|
@@ -51,7 +51,7 @@ This skill manages the `code-analyzer.yml` configuration file — the single sou
|
|
|
51
51
|
|
|
52
52
|
## Tool Usage Rules
|
|
53
53
|
|
|
54
|
-
**Allowed:** Bash (sf, java, node, python3,
|
|
54
|
+
**Allowed:** Bash (sf, java, node, python3, npm), Read, Write, Edit
|
|
55
55
|
**Forbidden:** MCP tools, Agent tool, Web tools, other skills, `which`, `find`, `locate`, searching for binaries
|
|
56
56
|
|
|
57
57
|
---
|
|
@@ -359,7 +359,7 @@ rules:
|
|
|
359
359
|
|
|
360
360
|
### 6.1 Rule Name Resolution (Fuzzy Matching)
|
|
361
361
|
|
|
362
|
-
|
|
362
|
+
**CRITICAL:** A misspelled or partial rule name in `code-analyzer.yml` is SILENTLY IGNORED — no error, the override just won't apply.
|
|
363
363
|
|
|
364
364
|
**When users reference rules by approximate names** (e.g., "the doc rule", "CRUD violation", "hardcoded values"), resolve to exact names BEFORE writing YAML:
|
|
365
365
|
|
|
@@ -316,7 +316,7 @@ For monorepos where Salesforce code lives in a subdirectory, use `--target` to s
|
|
|
316
316
|
```
|
|
317
317
|
|
|
318
318
|
For multiple packages:
|
|
319
|
-
```
|
|
319
|
+
```text
|
|
320
320
|
--target packages/app-a/force-app --target packages/app-b/force-app
|
|
321
321
|
```
|
|
322
322
|
|
|
@@ -601,7 +601,7 @@ Build the `run-arguments` string by combining these independent flags as needed:
|
|
|
601
601
|
|
|
602
602
|
### Decision Tree for Template Selection
|
|
603
603
|
|
|
604
|
-
```
|
|
604
|
+
```text
|
|
605
605
|
User wants CI/CD for Code Analyzer
|
|
606
606
|
├── Platform?
|
|
607
607
|
│ ├── GitHub Actions → Use forcedotcom/run-code-analyzer@v2
|
|
@@ -4,8 +4,8 @@ description: "Create custom Code Analyzer rules for Regex (pattern matching), PM
|
|
|
4
4
|
metadata:
|
|
5
5
|
version: "1.0"
|
|
6
6
|
relatedSkills:
|
|
7
|
-
- "dx-code-analyzer-run"
|
|
8
7
|
- "dx-code-analyzer-configure"
|
|
8
|
+
- "dx-code-analyzer-run"
|
|
9
9
|
cliTools:
|
|
10
10
|
- tool: ["git"]
|
|
11
11
|
semver: ">=2.0.0"
|
|
@@ -102,7 +102,7 @@ These are non-negotiable rules. Violating any of them is a skill failure regardl
|
|
|
102
102
|
|
|
103
103
|
\* **For ESLint:** ALWAYS check Tier 1 (built-in rules) and Tier 2 (configurable rules) BEFORE creating a custom plugin. See `references/eslint-rules-discovery.md`.
|
|
104
104
|
|
|
105
|
-
|
|
105
|
+
**"Both could work → Regex first" NEVER applies to JavaScript/LWC/TypeScript files.** JS/LWC/TS patterns MUST use ESLint — Regex cannot distinguish code from comments/strings in JS and produces false positives. Do NOT rationalize Regex for JS files based on "simplicity" or "no npm dependencies."
|
|
106
106
|
|
|
107
107
|
Tell the user which engine you chose and why. Respect their preference if they disagree.
|
|
108
108
|
|
|
@@ -116,7 +116,7 @@ When a rule should NOT apply to test classes, the approach differs by engine:
|
|
|
116
116
|
| **Regex** | Use `ignores.files` in `code-analyzer.yml` with globs like `**/*Test.cls` | `regex_ignore` is per-LINE, not per-FILE — it CANNOT exclude entire test classes. Only use `regex_ignore` for per-line patterns like `// NOPMD` |
|
|
117
117
|
| **ESLint** | Use `ignores` array in `eslint.config.js` | Standard ESLint file-level ignores |
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
**`regex_ignore` is NOT file-level exclusion.** It only skips matches on lines that ALSO match the ignore pattern. Example: `regex_ignore: "/@isTest/i"` only suppresses violations on lines containing `@isTest` — a SOQL query on line 50 of a test class still flags because line 50 doesn't contain `@isTest`. To exclude test files from regex rules entirely, use:
|
|
120
120
|
```yaml
|
|
121
121
|
ignores:
|
|
122
122
|
files:
|
|
@@ -124,7 +124,7 @@ ignores:
|
|
|
124
124
|
- "**/*_Test.cls"
|
|
125
125
|
```
|
|
126
126
|
|
|
127
|
-
|
|
127
|
+
**`ignores.files` is GLOBAL** — it affects ALL engines and ALL rules. If you need test-class exclusion for some rules but not others (e.g., exclude tests from SOQL rules but still scan tests for @AuraEnabled), use **PMD with XPath** for the rules that need selective exclusion. PMD's XPath can structurally check `@Test = true()` per-method or per-class — Regex cannot.
|
|
128
128
|
|
|
129
129
|
**Decision guide for Apex rules that should skip test classes:**
|
|
130
130
|
- If the pattern is structural (method calls, annotations, nesting) → use PMD. XPath handles test-class exclusion natively.
|
|
@@ -180,7 +180,7 @@ When the user highlights a code block in their editor and asks to "catch this",
|
|
|
180
180
|
--name "<RuleName>" --regex "<pattern>" --description "<desc>" \
|
|
181
181
|
--severity <1-5> --file-extensions ".cls,.trigger"
|
|
182
182
|
```
|
|
183
|
-
|
|
183
|
+
**ALWAYS use the script.** Do NOT manually write regex patterns into `code-analyzer.yml` — regex characters (quotes, backslashes, braces) inside YAML cause parsing failures. The script handles serialization correctly.
|
|
184
184
|
4. **Validate** — `sf code-analyzer rules --rule-selector regex:<RuleName>`
|
|
185
185
|
5. **Test positive** — `sf code-analyzer run --rule-selector regex:<RuleName> --target <violation-sample>` — must find violations
|
|
186
186
|
6. **Test negative** — `sf code-analyzer run --rule-selector regex:<RuleName> --target <clean-sample>` — must find 0 violations. If it flags clean code, your regex is too broad — go back and tighten the pattern.
|
|
@@ -190,10 +190,10 @@ When the user highlights a code block in their editor and asks to "catch this",
|
|
|
190
190
|
### For PMD/XPath Rules (Apex)
|
|
191
191
|
|
|
192
192
|
1. **Write a minimal sample** (5-10 lines) demonstrating the violation. Write sample files inside the project workspace (e.g., a temporary `samples/` directory at the project root) so Code Analyzer can target them. **After both positive and negative tests pass, delete ALL sample files you created** — both the original samples and any copies made during testing. Do not leave temporary test fixtures in the user's project. For loop-based rules, the positive sample MUST include all 3 Apex loop types (`for-each`, traditional `for`, and `while`) — omitting any loop type means the XPath won't be validated against it and may silently miss violations.
|
|
193
|
-
2.
|
|
193
|
+
2. **MANDATORY: Dump the AST** — `sf code-analyzer ast-dump --file <sample.cls> --output-file <ast.xml>` — this step is NOT optional. Do NOT skip it even if you "already know" the node names. Run it, read the output, confirm the exact node names and attributes.
|
|
194
194
|
3. **Read the AST output** — identify the target node and its attributes from the ACTUAL ast-dump output (not from memory). Use `references/apex-ast-reference.md` and `references/xpath-patterns.md` as supplementary context only.
|
|
195
195
|
4. **Write XPath** — target the smallest stable node with discriminating attributes. Every node name in your XPath MUST appear verbatim in the ast-dump output you just read. Use `/Child` (direct child) vs `//Descendant` deliberately — check the ast-dump to understand which nodes are siblings vs nested.
|
|
196
|
-
5.
|
|
196
|
+
5. **BEFORE creating the rule: Write a SEPARATE negative sample file** (5-10 lines) showing code that is CORRECT and must NOT be flagged. This MUST be a distinct file from the positive sample — do NOT combine positive and negative cases into one file. For loop-based rules, include `for (x : [SELECT...])` idiom. Run `sf code-analyzer ast-dump` on this negative sample file too. Read the output and trace your XPath against it — confirm it does NOT match any node in the negative AST. If it would match, go back to step 4 and tighten the XPath BEFORE proceeding. Do NOT skip this step or defer it until after rule creation. The negative file will be used again in step 9 for an explicit zero-violation confirmation.
|
|
197
197
|
6. **Create the rule** — run the script:
|
|
198
198
|
```bash
|
|
199
199
|
node "<skill_dir>/scripts/create-pmd-rule.js" \
|
|
@@ -224,7 +224,7 @@ When the user highlights a code block in their editor and asks to "catch this",
|
|
|
224
224
|
file_extensions:
|
|
225
225
|
xml: [".xml"]
|
|
226
226
|
```
|
|
227
|
-
|
|
227
|
+
Do NOT add compound extensions like `.permissionset-meta.xml` — Code Analyzer's validator rejects them (`/^[.][a-zA-Z0-9]+$/` pattern). Just `.xml` covers all Salesforce metadata files automatically.
|
|
228
228
|
6. **Write a SEPARATE negative sample file** — same as Apex rules: create a metadata file that is correct and must NOT be flagged. Verify the XPath does not match it BEFORE creating the rule. Both positive and negative samples should be `.xml` extension files in the workspace so PMD can scan them directly.
|
|
229
229
|
7. **Create the rule** — run the script:
|
|
230
230
|
```bash
|
|
@@ -265,7 +265,7 @@ ESLint has 200+ built-in rules plus thousands more from plugins. DO NOT attempt
|
|
|
265
265
|
|
|
266
266
|
---
|
|
267
267
|
|
|
268
|
-
0.
|
|
268
|
+
0. **MANDATORY: Run the ESLint discovery workflow FIRST.** 90% of ESLint requests are solved by built-in rules (Tier 1) or configurable rules like `no-restricted-syntax` (Tier 2). Creating a custom plugin (Tier 3) is a LAST RESORT. Before proceeding:
|
|
269
269
|
|
|
270
270
|
a) **Run:** `sf code-analyzer rules --rule-selector eslint`
|
|
271
271
|
b) **Search** the output for keywords from the user's request (e.g., "console", "equal", "unused")
|
|
@@ -276,9 +276,9 @@ ESLint has 200+ built-in rules plus thousands more from plugins. DO NOT attempt
|
|
|
276
276
|
|
|
277
277
|
**Validation:** After configuration, run `sf code-analyzer rules --rule-selector eslint:<ruleName>` to confirm it appears. If it doesn't, the config is wrong.
|
|
278
278
|
|
|
279
|
-
|
|
279
|
+
**Skipping this discovery workflow and creating a custom plugin when a built-in rule exists is a skill failure**, regardless of whether the custom plugin works.
|
|
280
280
|
|
|
281
|
-
|
|
281
|
+
**Built-in ESLint rules vs. configurable ESLint rules:** Code Analyzer bundles a SUBSET of ESLint rules in its base config. Rules like `no-restricted-globals`, `no-restricted-syntax`, and `no-restricted-properties` are core ESLint rules but are NOT active until you enable them in an `eslint.config.js`. They WILL appear in `sf code-analyzer rules` output ONLY after you configure them. **Always validate** (step 4) to confirm the rule actually loaded — do NOT assume a rule exists just because it's a core ESLint rule.
|
|
282
282
|
|
|
283
283
|
1. **Install the ESLint plugin** (skip if using a built-in/core ESLint rule) — `npm install --save-dev eslint-plugin-<name>`
|
|
284
284
|
2. **Create/update `eslint.config.js`** — add plugin and rule configuration (or just enable the built-in rule with `"error"` severity). **The file MUST exist** before configuring `engines.eslint.eslint_config_file` in `code-analyzer.yml` — Code Analyzer validates the path and fails if the file is missing.
|
|
@@ -300,26 +300,26 @@ For `no-restricted-globals`, `no-restricted-syntax`, and `no-restricted-properti
|
|
|
300
300
|
- User: "Ban console.log in LWC"
|
|
301
301
|
- Discovery: `sf code-analyzer rules --rule-selector eslint | grep console` → finds `no-console`
|
|
302
302
|
- Action: Enable `no-console` in eslint.config.js
|
|
303
|
-
- Result:
|
|
303
|
+
- Result: Done in 2 minutes (no custom plugin needed)
|
|
304
304
|
|
|
305
305
|
**Example 2: Configurable rule (Tier 2)**
|
|
306
306
|
- User: "Ban setTimeout in LWC"
|
|
307
307
|
- Discovery: No built-in `no-setTimeout` rule
|
|
308
308
|
- Action: Use `no-restricted-globals` with custom message
|
|
309
|
-
- Result:
|
|
309
|
+
- Result: Done in 5 minutes (no custom plugin needed)
|
|
310
310
|
|
|
311
311
|
**Example 3: LWC plugin rule (Tier 1)**
|
|
312
312
|
- User: "Ban innerHTML for XSS prevention"
|
|
313
313
|
- Discovery: `@lwc/lwc/no-inner-html` already exists
|
|
314
314
|
- Action: Enable `@lwc/lwc/no-inner-html` in config
|
|
315
|
-
- Result:
|
|
315
|
+
- Result: Done in 2 minutes (no custom plugin needed)
|
|
316
316
|
|
|
317
317
|
**Example 4: Custom plugin justified (Tier 3)**
|
|
318
318
|
- User: "Flag imperative Apex calls without error handling"
|
|
319
319
|
- Discovery: No built-in rule for this pattern
|
|
320
320
|
- Analysis: Pattern requires checking `import` + `.then()` without `.catch()` — multi-node traversal
|
|
321
321
|
- Action: Create custom plugin with visitor pattern
|
|
322
|
-
- Result:
|
|
322
|
+
- Result: Custom plugin is justified (20+ minutes effort)
|
|
323
323
|
|
|
324
324
|
See `references/eslint-rules-discovery.md` for complete discovery workflow.
|
|
325
325
|
|
|
@@ -375,11 +375,11 @@ When creating multiple PMD rules, use the `create-pmd-rule.js` script for the fi
|
|
|
375
375
|
|
|
376
376
|
### What NOT to do
|
|
377
377
|
|
|
378
|
-
-
|
|
379
|
-
-
|
|
380
|
-
-
|
|
381
|
-
-
|
|
382
|
-
-
|
|
378
|
+
- Do NOT rewrite the entire `code-analyzer.yml` to reorganize it
|
|
379
|
+
- Do NOT create all rules in parallel then validate all at once
|
|
380
|
+
- Do NOT create a PMD rule with an unverified XPath from the reference docs — ast-dump each pattern
|
|
381
|
+
- Do NOT mix engine types in one creation step (e.g., creating regex + PMD rules simultaneously)
|
|
382
|
+
- Do NOT add `engines.eslint.eslint_config_file` to `code-analyzer.yml` before the file exists
|
|
383
383
|
|
|
384
384
|
---
|
|
385
385
|
|
|
@@ -393,7 +393,7 @@ When creating multiple PMD rules, use the `create-pmd-rule.js` script for the fi
|
|
|
393
393
|
| Always validate after creation | `sf code-analyzer rules --rule-selector <engine>:<name>` catches config errors |
|
|
394
394
|
| Always test against sample code | Catches XPath/regex mismatches before full scan |
|
|
395
395
|
| Use `@FullMethodName` for method calls in XPath | More reliable than `@Image` or `@MethodName` alone |
|
|
396
|
-
|
|
|
396
|
+
| **NEVER skip `ast-dump`** | Run `ast-dump`, read output, THEN write XPath. No exceptions — even for "obvious" patterns. Using node names from memory without ast-dump verification is a skill failure. |
|
|
397
397
|
| **PMD 7 boolean attributes: use `= false()` XPath function** | In PMD 7, boolean attributes like `@WithSharing`, `@Abstract`, `@Final` are ALWAYS present on the node (never absent). Compare with `= false()` (XPath boolean function), NOT string `'false'`. `@WithSharing = false()` works. `@WithSharing='false'` (string) does NOT. `not(@WithSharing)` does NOT (attribute is always present). |
|
|
398
398
|
| `code-analyzer.yml` at project root | Auto-discovered by CLI — placing it elsewhere causes silent failures for rule authors |
|
|
399
399
|
| **XML rules MUST use `local-name()`** | Salesforce metadata namespace breaks bare element names |
|
|
@@ -451,11 +451,11 @@ node "<skill_dir>/scripts/create-regex-rule.js" \
|
|
|
451
451
|
--name "RuleName" --regex "/pattern/flags" ...
|
|
452
452
|
```
|
|
453
453
|
|
|
454
|
-
|
|
455
|
-
-
|
|
456
|
-
-
|
|
457
|
-
-
|
|
458
|
-
-
|
|
454
|
+
**DO NOT:**
|
|
455
|
+
- Invent or generate script code yourself
|
|
456
|
+
- Use bare relative paths like `node scripts/create-regex-rule.js` (won't resolve from user's CWD)
|
|
457
|
+
- Use heredocs or inline script content
|
|
458
|
+
- Skip resolving `<skill_dir>` — find the absolute path first
|
|
459
459
|
|
|
460
460
|
---
|
|
461
461
|
|
|
@@ -160,7 +160,7 @@ security/OWASP → `Security` · performance → `Performance` · best practices
|
|
|
160
160
|
### 1.4 SPECIFIC RULE
|
|
161
161
|
If the user names a rule (e.g., "ApexCRUDViolation", "no-unused-vars"): `--rule-selector <engine>:<ruleName>`, or just `<ruleName>` if engine is ambiguous.
|
|
162
162
|
|
|
163
|
-
|
|
163
|
+
**Partial names:** `--rule-selector` requires the **exact full** rule name (e.g., `@salesforce-ux/slds/no-hardcoded-values-slds2`, not `no-hardcoded-values`). No wildcards. If you are not 100% certain, look it up first — **do not guess**:
|
|
164
164
|
```bash
|
|
165
165
|
sf code-analyzer rules --rule-selector all 2>&1 | grep -i "USER_KEYWORD"
|
|
166
166
|
```
|
|
@@ -246,12 +246,12 @@ Run the parse script straight after the scan — do not pause to ask:
|
|
|
246
246
|
node "<skill_dir>/scripts/parse-results.js" "./code-analyzer-results-TIMESTAMP.json"
|
|
247
247
|
```
|
|
248
248
|
|
|
249
|
-
|
|
250
|
-
-
|
|
251
|
-
-
|
|
252
|
-
-
|
|
253
|
-
-
|
|
254
|
-
-
|
|
249
|
+
**DO NOT:**
|
|
250
|
+
- Invent or generate script code yourself
|
|
251
|
+
- Use bare relative paths like `node scripts/parse-results.js` (won't resolve from user's CWD)
|
|
252
|
+
- Use heredocs or inline script content
|
|
253
|
+
- Use `jq` as a substitute for the parse script (shell quoting will break)
|
|
254
|
+
- Read the JSON file directly
|
|
255
255
|
|
|
256
256
|
### Presentation template
|
|
257
257
|
|
|
@@ -328,7 +328,7 @@ These are safe, deterministic fixes generated by the engines (not AI-generated).
|
|
|
328
328
|
Would you like me to apply these fixes? (yes / no / select specific rules)
|
|
329
329
|
```
|
|
330
330
|
|
|
331
|
-
|
|
331
|
+
**Stop and wait for the user's reply, even if they originally said "scan and fix everything".** Apply only on a fresh "yes" / "apply" / "go ahead" in the next turn.
|
|
332
332
|
|
|
333
333
|
### 6.4 Apply
|
|
334
334
|
|
|
@@ -346,7 +346,7 @@ node "<skill_dir>/scripts/summarize-fixes.js" "./code-analyzer-results-TIMESTAMP
|
|
|
346
346
|
Then present:
|
|
347
347
|
|
|
348
348
|
```text
|
|
349
|
-
### Engine-Provided Fixes Applied Successfully
|
|
349
|
+
### Engine-Provided Fixes Applied Successfully
|
|
350
350
|
**Applied X auto-fixes across Y files.**
|
|
351
351
|
|
|
352
352
|
| Severity | Fixes Applied |
|
|
@@ -82,7 +82,7 @@ When `--summary` is used, the `violations` array is omitted.
|
|
|
82
82
|
|
|
83
83
|
Present query results using the same format as Step 5, but with a header indicating the active filter:
|
|
84
84
|
|
|
85
|
-
```
|
|
85
|
+
```text
|
|
86
86
|
## Filtered Results: [description of filter]
|
|
87
87
|
|
|
88
88
|
**X matches** out of Y total violations.
|
|
@@ -192,7 +192,7 @@ node "<skill_dir>/scripts/describe-rule.js" "OperationWithLimitsInLoop"
|
|
|
192
192
|
|
|
193
193
|
**For a successful lookup**, present:
|
|
194
194
|
|
|
195
|
-
```
|
|
195
|
+
```text
|
|
196
196
|
## Rule: ApexCRUDViolation
|
|
197
197
|
|
|
198
198
|
| Property | Value |
|
|
@@ -219,7 +219,7 @@ Want me to show all violations of this rule in your scan results?
|
|
|
219
219
|
|
|
220
220
|
**For multiple matches**, present:
|
|
221
221
|
|
|
222
|
-
```
|
|
222
|
+
```text
|
|
223
223
|
I found multiple rules matching "CRUD":
|
|
224
224
|
|
|
225
225
|
| # | Rule | Engine | Severity |
|
|
@@ -232,7 +232,7 @@ Which rule would you like details on?
|
|
|
232
232
|
|
|
233
233
|
**For not found**, present:
|
|
234
234
|
|
|
235
|
-
```
|
|
235
|
+
```text
|
|
236
236
|
I couldn't find a rule named "FakeRule". Would you like me to:
|
|
237
237
|
- Search for similar rules? (I'll grep the full rule list)
|
|
238
238
|
- List all rules for a specific engine or category?
|
|
@@ -253,7 +253,7 @@ Offer next steps:
|
|
|
253
253
|
|
|
254
254
|
Present available rules in this format:
|
|
255
255
|
|
|
256
|
-
```
|
|
256
|
+
```text
|
|
257
257
|
## Available Rules: Security
|
|
258
258
|
|
|
259
259
|
**Found X rules** across Y engines.
|
|
@@ -123,7 +123,7 @@ UMD/AMD/CommonJS wrapper → 70% vendor
|
|
|
123
123
|
|
|
124
124
|
### Final Score
|
|
125
125
|
|
|
126
|
-
```
|
|
126
|
+
```text
|
|
127
127
|
Weighted Score = (PathScore × 0.3) + (NameScore × 0.3) + (ContentScore × 0.4)
|
|
128
128
|
|
|
129
129
|
> 70% = Vendor file
|
|
@@ -133,7 +133,7 @@ Weighted Score = (PathScore × 0.3) + (NameScore × 0.3) + (ContentScore × 0.4)
|
|
|
133
133
|
|
|
134
134
|
## Example Output
|
|
135
135
|
|
|
136
|
-
```
|
|
136
|
+
```text
|
|
137
137
|
=== INTELLIGENT VENDOR FILE DETECTION ===
|
|
138
138
|
|
|
139
139
|
Original violations: 9714
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: dx-org-switch
|
|
3
3
|
description: "Switches the active Salesforce org (default target-org) using the Salesforce CLI. Use whenever someone wants to change which org CLI commands run against — whether they say \"switch org\", \"change default org\", \"set my org to\", \"use alias\", \"point to\", or describe wanting to work against a specific org, scratch org, sandbox, or production."
|
|
4
|
-
compatibility: Salesforce CLI (sf) v2+
|
|
5
4
|
metadata:
|
|
6
5
|
cliTools:
|
|
7
6
|
- tool: ["sf"]
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: experience-cms-brand-apply
|
|
3
3
|
description: "Extracts, retrieves, and applies CMS brand guidelines (voice, tone, style, colors, typography) to generated content. Use this skill ANY TIME a user request involves branding, brand voice, brand tone, brand guidelines, brand identity, brand styling, or applying a brand to content. Triggers for requests like \"apply my brand\", \"use our brand voice\", \"match our brand guidelines\", \"find my brand\", \"search for brand\", \"get brand instructions\", \"apply brand tone\". Handles the full workflow: searching for brands in Salesforce CMS, extracting brand instructions, and applying brand voice/tone/guidelines to generated content. Does not apply to media/image search (use experience-content-media-search skill), logo search, or creating new brand definitions."
|
|
4
|
-
compatibility: "Requires get_brand_instructions and/or search_media_cms_channels MCP tools"
|
|
5
4
|
metadata:
|
|
6
5
|
version: "1.0"
|
|
7
6
|
---
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: experience-content-media-search
|
|
3
3
|
description: "Searches for and retrieves existing visual media (images, logos, icons, photos, graphics, banners, thumbnails, hero images, backgrounds) from sources such as Salesforce CMS, Data 360 or any other source. Use this skill ANY TIME a user request involves finding, searching, getting, fetching, retrieving, grab, looking up, locating media. NEVER call search_media_cms_channels, search_electronic_media tools directly — always go through this skill first. This skill must be activated before any tool is used for media search or retrieval, without exception. Takes PRIORITY and activates FIRST when ANY media search/retrieval is mentioned, regardless of what else happens with the media afterward. Triggers for requests like \"search for logo\", \"find hero image\", \"get company logo\", \"locate icons\", \"fetch background image\", \"retrieve product photos\". Handles the search and source selection workflow. Does not apply when the request is about brand search, to generate NEW images with AI, or edit existing images."
|
|
4
|
-
compatibility: "Requires search_media_cms_channels and/or search_electronic_media MCP tools"
|
|
5
4
|
metadata:
|
|
6
5
|
version: "1.1"
|
|
7
6
|
relatedSkills:
|
|
@@ -51,17 +50,17 @@ When a user requests to find an image:
|
|
|
51
50
|
|
|
52
51
|
|
|
53
52
|
**Example of what NOT to do:**
|
|
54
|
-
-
|
|
55
|
-
-
|
|
56
|
-
-
|
|
57
|
-
-
|
|
58
|
-
-
|
|
53
|
+
- Calling ANY tool before the user picks a source (MCP tools, file reads, descriptor checks, etc.)
|
|
54
|
+
- "Checking which MCP tools are available" — do not probe or discover tools via tool calls
|
|
55
|
+
- Immediately calling `search_electronic_media` or `search_media_cms_channels`
|
|
56
|
+
- Reading MCP tool descriptors or schemas to see what's available
|
|
57
|
+
- Deciding which search source to use without asking
|
|
59
58
|
|
|
60
59
|
**Example of what TO do:**
|
|
61
|
-
-
|
|
62
|
-
-
|
|
63
|
-
-
|
|
64
|
-
-
|
|
60
|
+
- Respond with ONLY text — a numbered list of search sources
|
|
61
|
+
- Ask: "Which option would you like to use?"
|
|
62
|
+
- Wait for user to reply with their choice
|
|
63
|
+
- Then (and only then) call the tool they selected
|
|
65
64
|
|
|
66
65
|
**Your first response when this skill triggers MUST be a text-only message presenting search sources. No tool calls. No exceptions.**
|
|
67
66
|
|
|
@@ -72,7 +71,7 @@ When a user requests to find an image:
|
|
|
72
71
|
|
|
73
72
|
Copy this checklist and track your progress:
|
|
74
73
|
|
|
75
|
-
```
|
|
74
|
+
```text
|
|
76
75
|
Media Search Progress:
|
|
77
76
|
- [ ] Step 1: Check your own tool list for available search tools (no tool calls — just inspect what's in your context)
|
|
78
77
|
- [ ] Step 2: Present only the available options to the user as a numbered list (plain text, no tool calls)
|
|
@@ -101,7 +100,7 @@ Look at the tools already in your context and check for these names:
|
|
|
101
100
|
|
|
102
101
|
Include ONLY the sources whose tools you actually have. Number them sequentially.
|
|
103
102
|
|
|
104
|
-
```
|
|
103
|
+
```text
|
|
105
104
|
I can help you find that image. Where would you like to search?
|
|
106
105
|
|
|
107
106
|
[NUMBER]. [SEARCH SOURCE NAME] — [Brief description]
|
|
@@ -118,7 +117,7 @@ After presenting the list, STOP. Do not call any tool. Do not proceed. Wait for
|
|
|
118
117
|
### Examples
|
|
119
118
|
|
|
120
119
|
**Both tools available:**
|
|
121
|
-
```
|
|
120
|
+
```text
|
|
122
121
|
I can help you find that image. Where would you like to search?
|
|
123
122
|
|
|
124
123
|
1. Search using Data 360 hybrid search — Semantic search across Salesforce CMS and connected DAMs
|
|
@@ -129,7 +128,7 @@ Which option would you like to use?
|
|
|
129
128
|
```
|
|
130
129
|
|
|
131
130
|
**Only `search_media_cms_channels` available:**
|
|
132
|
-
```
|
|
131
|
+
```text
|
|
133
132
|
I can help you find that image. Where would you like to search?
|
|
134
133
|
|
|
135
134
|
1. Search using keywords — Search Salesforce CMS by keywords and taxonomies
|
|
@@ -139,7 +138,7 @@ Which option would you like to use?
|
|
|
139
138
|
```
|
|
140
139
|
|
|
141
140
|
**Only `search_electronic_media` available:**
|
|
142
|
-
```
|
|
141
|
+
```text
|
|
143
142
|
I can help you find that image. Where would you like to search?
|
|
144
143
|
|
|
145
144
|
1. Search using Data 360 hybrid search — Semantic search across Salesforce CMS and connected DAMs
|
|
@@ -149,7 +148,7 @@ Which option would you like to use?
|
|
|
149
148
|
```
|
|
150
149
|
|
|
151
150
|
**Neither tool available:**
|
|
152
|
-
```
|
|
151
|
+
```text
|
|
153
152
|
No automated media search sources are currently configured. Please provide a direct URL or asset library path.
|
|
154
153
|
```
|
|
155
154
|
|
|
@@ -157,7 +156,7 @@ No automated media search sources are currently configured. Please provide a dir
|
|
|
157
156
|
|
|
158
157
|
## Executing the Selected Search Method
|
|
159
158
|
|
|
160
|
-
|
|
159
|
+
**ONLY reach this step if the user has explicitly selected an option from your numbered list.**
|
|
161
160
|
|
|
162
161
|
If you haven't shown options yet, go back to the "Presenting Search Sources" section first.
|
|
163
162
|
|
|
@@ -291,7 +290,7 @@ Ask the user to provide:
|
|
|
291
290
|
3. **Receive the user's selection** from the tool response
|
|
292
291
|
4. **Then** apply the selected image
|
|
293
292
|
|
|
294
|
-
```
|
|
293
|
+
```text
|
|
295
294
|
I found 4 images. Which one would you like to use?
|
|
296
295
|
|
|
297
296
|
1. Luxury Apartment Exterior
|
package/skills/experience-ui-bundle-site-generate/references/configure-metadata-custom-site.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
This configuration file creates a **net-new, default** CustomSite metadata record for a Digital Experience React Site. It is not intended to edit or modify an existing CustomSite record. Use this template only when provisioning a brand-new React site.
|
|
5
5
|
|
|
6
6
|
## File Location
|
|
7
|
-
```
|
|
7
|
+
```text
|
|
8
8
|
sites/{siteName}.site-meta.xml
|
|
9
9
|
```
|
|
10
10
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
This configuration file creates a **net-new, default** DigitalExperienceBundle metadata record for a Digital Experience React Site. It is not intended to edit or modify an existing DigitalExperienceBundle record. Use this template only when provisioning a brand-new React site.
|
|
5
5
|
|
|
6
6
|
## File Location
|
|
7
|
-
```
|
|
7
|
+
```text
|
|
8
8
|
digitalExperiences/site/{siteName}1/{siteName}1.digitalExperience-meta.xml
|
|
9
9
|
```
|
|
10
10
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
This configuration file creates a **net-new, default** DigitalExperienceConfig metadata record for a Digital Experience React Site. It is not intended to edit or modify an existing DigitalExperienceConfig record. Use this template only when provisioning a brand-new React site.
|
|
5
5
|
|
|
6
6
|
## File Location
|
|
7
|
-
```
|
|
7
|
+
```text
|
|
8
8
|
digitalExperienceConfigs/{siteName}1.digitalExperienceConfig-meta.xml
|
|
9
9
|
```
|
|
10
10
|
|
|
@@ -8,7 +8,7 @@ The `appContainer: true` field in `content.json` is what makes this a React site
|
|
|
8
8
|
## File Location
|
|
9
9
|
The DigitalExperience directory contains only `_meta.json` and `content.json`. Do not create any directories other than `sfdc_cms__site` inside the bundle.
|
|
10
10
|
|
|
11
|
-
```
|
|
11
|
+
```text
|
|
12
12
|
digitalExperiences/site/{siteName}1/sfdc_cms__site/{siteName}1/_meta.json
|
|
13
13
|
digitalExperiences/site/{siteName}1/sfdc_cms__site/{siteName}1/content.json
|
|
14
14
|
```
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
This configuration file creates a **net-new, default** Network metadata record for a Digital Experience React Site. It is not intended to edit or modify an existing Network record. Use this template only when provisioning a brand-new React site.
|
|
5
5
|
|
|
6
6
|
## File Location
|
|
7
|
-
```
|
|
7
|
+
```text
|
|
8
8
|
networks/{siteName}.network-meta.xml
|
|
9
9
|
```
|
|
10
10
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: external-diagram-mermaid-generate
|
|
3
3
|
description: "Salesforce architecture diagrams using Mermaid with ASCII fallback. Use this skill when generating text-based diagrams for Salesforce architecture, OAuth flows, ERDs, integration sequences, or Agentforce structure. TRIGGER when: user says \"diagram\", \"visualize\", \"ERD\", or asks for sequence diagrams, flowcharts, class diagrams, or architecture visualizations in Mermaid. DO NOT TRIGGER when: user asks about non-Salesforce systems."
|
|
4
|
-
compatibility: "Requires Mermaid-capable renderer for diagram previews"
|
|
5
4
|
metadata:
|
|
6
5
|
cliTools:
|
|
7
6
|
- tool: ["curl"]
|
|
@@ -13,7 +13,7 @@ After deletion, avoid reusing the same DeveloperName immediately — the Pub/Sub
|
|
|
13
13
|
### Step 1 — Remove the metadata file
|
|
14
14
|
|
|
15
15
|
Delete the file from your project:
|
|
16
|
-
```
|
|
16
|
+
```text
|
|
17
17
|
managedEventSubscriptions/<DeveloperName>.managedEventSubscription-meta.xml
|
|
18
18
|
```
|
|
19
19
|
|
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
name: mobile-platform-offline-validate
|
|
3
3
|
description: "Review a Lightning Web Component for **mobile offline** compatibility — the Komaci offline static analyzer that pre-primes the data graph for Salesforce Mobile App Plus and Field Service Mobile App. Produces a finding list with code-level fixes covering inline GraphQL queries in `@wire` configurations, modern `lwc:if` / `lwc:elseif` / `lwc:else` directives, and Komaci ESLint rule violations (private wire properties, non-local reactive references, getter side-effects). Use when the user asks for a \"mobile offline review\", \"Komaci check\", \"offline priming audit\", \"offline priming failure\", or \"offline data graph error\", or to validate an LWC against the `@salesforce/eslint-plugin-lwc-graph-analyzer` recommended ruleset. Do not use for generic LWC code review (use an appropriate domain review skill) or for building LWCs with native mobile capabilities (use `mobile-platform-native-capabilities-integrate`)."
|
|
4
4
|
metadata:
|
|
5
|
+
version: "1.0"
|
|
6
|
+
relatedSkills:
|
|
7
|
+
- "mobile-platform-native-capabilities-integrate"
|
|
5
8
|
cliTools:
|
|
6
9
|
- tool: ["eslint"]
|
|
7
10
|
semver: ">=8.0.0"
|
|
@@ -9,9 +12,6 @@ metadata:
|
|
|
9
12
|
semver: ">=9.0.0"
|
|
10
13
|
- tool: ["npx"]
|
|
11
14
|
semver: ">=9.0.0"
|
|
12
|
-
relatedSkills:
|
|
13
|
-
- "mobile-platform-native-capabilities-integrate"
|
|
14
|
-
version: "1.0"
|
|
15
15
|
---
|
|
16
16
|
|
|
17
17
|
# Reviewing LWC Mobile Offline
|
|
@@ -113,7 +113,7 @@ environment.
|
|
|
113
113
|
|
|
114
114
|
Emit a report in this shape:
|
|
115
115
|
|
|
116
|
-
```
|
|
116
|
+
```text
|
|
117
117
|
## Mobile Offline (Komaci priming)
|
|
118
118
|
- <reviewer> — <file>:<startLine>:<startColumn>-<endLine>:<endColumn> — <type>
|
|
119
119
|
Description: <verbatim from the reviewer reference>
|
|
@@ -84,7 +84,7 @@ This table shows which metadata types are commonly needed for Lightning Experien
|
|
|
84
84
|
|
|
85
85
|
### Phase 1: Data Model (Foundation)
|
|
86
86
|
|
|
87
|
-
```
|
|
87
|
+
```text
|
|
88
88
|
Custom Objects (no dependencies)
|
|
89
89
|
↓
|
|
90
90
|
Custom Fields (depends on: Objects exist)
|
|
@@ -99,7 +99,7 @@ Relationships (depends on: Both parent and child objects + fields exist)
|
|
|
99
99
|
|
|
100
100
|
### Phase 2: Business Logic (Optional - only if requested)
|
|
101
101
|
|
|
102
|
-
```
|
|
102
|
+
```text
|
|
103
103
|
Validation Rules (depends on: Fields exist)
|
|
104
104
|
↓
|
|
105
105
|
Flows (depends on: Objects, Fields exist)
|
|
@@ -112,7 +112,7 @@ Flows (depends on: Objects, Fields exist)
|
|
|
112
112
|
|
|
113
113
|
### Phase 3: User Interface
|
|
114
114
|
|
|
115
|
-
```
|
|
115
|
+
```text
|
|
116
116
|
List Views (depends on: Objects, Fields exist)
|
|
117
117
|
↓
|
|
118
118
|
Custom Tabs (depends on: Objects exist)
|
|
@@ -128,7 +128,7 @@ FlexiPages (depends on: Objects, Tabs exist)
|
|
|
128
128
|
|
|
129
129
|
### Phase 4: Application Assembly
|
|
130
130
|
|
|
131
|
-
```
|
|
131
|
+
```text
|
|
132
132
|
Custom Application (depends on: Tabs exist)
|
|
133
133
|
```
|
|
134
134
|
|
|
@@ -138,7 +138,7 @@ Custom Application (depends on: Tabs exist)
|
|
|
138
138
|
|
|
139
139
|
### Phase 5: Security & Access
|
|
140
140
|
|
|
141
|
-
```
|
|
141
|
+
```text
|
|
142
142
|
Permission Sets (depends on: Objects, Fields, Tabs, App exist)
|
|
143
143
|
```
|
|
144
144
|
|
|
@@ -170,7 +170,7 @@ Permission Sets (depends on: Objects, Fields, Tabs, App exist)
|
|
|
170
170
|
|
|
171
171
|
Generate a structured plan listing:
|
|
172
172
|
|
|
173
|
-
```
|
|
173
|
+
```text
|
|
174
174
|
Lightning App Build Plan: [App Name]
|
|
175
175
|
|
|
176
176
|
DATA MODEL:
|
|
@@ -299,7 +299,7 @@ The completed build produces:
|
|
|
299
299
|
- Organized by standard SFDX structure: `force-app/main/default/`
|
|
300
300
|
2. **Metadata Files** - One file per component, organized by type:
|
|
301
301
|
|
|
302
|
-
```
|
|
302
|
+
```text
|
|
303
303
|
force-app/main/default/
|
|
304
304
|
├── objects/ # Custom Objects (.object-meta.xml)
|
|
305
305
|
├── fields/ # Custom Fields (.field-meta.xml)
|
|
@@ -324,7 +324,7 @@ The completed build produces:
|
|
|
324
324
|
|
|
325
325
|
**Example Summary Structure:**
|
|
326
326
|
|
|
327
|
-
```
|
|
327
|
+
```text
|
|
328
328
|
Lightning App Build Complete: Project Management App
|
|
329
329
|
|
|
330
330
|
METADATA GENERATED:
|
|
@@ -400,7 +400,7 @@ Log warning and continue if:
|
|
|
400
400
|
|
|
401
401
|
**Warning Pattern:**
|
|
402
402
|
|
|
403
|
-
```
|
|
403
|
+
```yaml
|
|
404
404
|
Warning: [Component Type] generation encountered issue
|
|
405
405
|
Component: [Name]
|
|
406
406
|
Issue: [Description]
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: platform-metadata-retrieve
|
|
3
3
|
description: "ALWAYS USE THIS SKILL to retrieve metadata from an org to your local project using the sf project retrieve start command. Supports multiple retrieval modes: retrieve all remote changes, retrieve by source directory, retrieve by metadata type with wildcards, retrieve by manifest (package.xml), or retrieve by package name. Use when the user asks to retrieve, pull, sync, or download metadata, Apex classes, custom objects, or org changes. Supports source format (default) or metadata format (ZIP). DO NOT TRIGGER for deploying metadata (use platform-metadata-deploy skill), listing metadata, or generating package.xml. NEVER use MCP tools - always use this skill and the Bash tool with sf project retrieve start."
|
|
4
|
-
compatibility: Salesforce CLI (sf) v2+
|
|
5
4
|
metadata:
|
|
6
5
|
version: "1.0"
|
|
7
6
|
relatedSkills:
|