@salesforce/afv-skills 1.16.0 → 1.18.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 (69) hide show
  1. package/package.json +1 -1
  2. package/skills/activating-datacloud/SKILL.md +2 -2
  3. package/skills/analyzing-omnistudio-dependencies/SKILL.md +1 -1
  4. package/skills/building-sf-integrations/SKILL.md +1 -1
  5. package/skills/building-ui-bundle-app/SKILL.md +1 -1
  6. package/skills/configuring-code-analyzer/SKILL.md +482 -0
  7. package/skills/configuring-code-analyzer/examples/apex-project-config.yml +41 -0
  8. package/skills/configuring-code-analyzer/examples/ci-github-actions.yml +96 -0
  9. package/skills/configuring-code-analyzer/examples/fullstack-project-config.yml +46 -0
  10. package/skills/configuring-code-analyzer/examples/lwc-project-config.yml +26 -0
  11. package/skills/configuring-code-analyzer/references/ci-cd-templates.md +648 -0
  12. package/skills/configuring-code-analyzer/references/config-schema.md +257 -0
  13. package/skills/configuring-code-analyzer/references/diagnostic-flow.md +70 -0
  14. package/skills/configuring-code-analyzer/references/engine-prerequisites.md +276 -0
  15. package/skills/configuring-code-analyzer/references/rule-name-resolution.md +67 -0
  16. package/skills/configuring-code-analyzer/references/troubleshooting.md +298 -0
  17. package/skills/configuring-code-analyzer/scripts/check-prerequisites.sh +189 -0
  18. package/skills/configuring-code-analyzer/scripts/generate-config.sh +143 -0
  19. package/skills/configuring-code-analyzer/scripts/validate-config.sh +153 -0
  20. package/skills/connecting-datacloud/SKILL.md +2 -2
  21. package/skills/creating-b2b-commerce-store/SKILL.md +0 -1
  22. package/skills/developing-agentforce/SKILL.md +0 -1
  23. package/skills/generating-apex/SKILL.md +1 -0
  24. package/skills/generating-mermaid-diagrams/assets/datamodel/b2b-commerce-erd.md +1 -1
  25. package/skills/generating-mermaid-diagrams/assets/datamodel/campaigns-erd.md +1 -1
  26. package/skills/generating-mermaid-diagrams/assets/datamodel/consent-erd.md +1 -1
  27. package/skills/generating-mermaid-diagrams/assets/datamodel/files-erd.md +1 -1
  28. package/skills/generating-mermaid-diagrams/assets/datamodel/forecasting-erd.md +1 -1
  29. package/skills/generating-mermaid-diagrams/assets/datamodel/fsl-erd.md +1 -1
  30. package/skills/generating-mermaid-diagrams/assets/datamodel/party-model-erd.md +1 -1
  31. package/skills/generating-mermaid-diagrams/assets/datamodel/quote-order-erd.md +1 -1
  32. package/skills/generating-mermaid-diagrams/assets/datamodel/revenue-cloud-erd.md +1 -1
  33. package/skills/generating-mermaid-diagrams/assets/datamodel/sales-cloud-erd.md +1 -1
  34. package/skills/generating-mermaid-diagrams/assets/datamodel/salesforce-erd.md +1 -1
  35. package/skills/generating-mermaid-diagrams/assets/datamodel/scheduler-erd.md +1 -1
  36. package/skills/generating-mermaid-diagrams/assets/datamodel/service-cloud-erd.md +1 -1
  37. package/skills/generating-mermaid-diagrams/assets/datamodel/territory-management-erd.md +1 -1
  38. package/skills/generating-mermaid-diagrams/references/erd-conventions.md +1 -1
  39. package/skills/generating-mermaid-diagrams/references/preview-guide.md +2 -5
  40. package/skills/harmonizing-datacloud/SKILL.md +2 -2
  41. package/skills/implementing-ui-bundle-agentforce-conversation-client/SKILL.md +1 -2
  42. package/skills/investigating-agentforce-d360/SKILL.md +1 -1
  43. package/skills/managing-cdc-enablement/SKILL.md +164 -0
  44. package/skills/managing-cdc-enablement/assets/PlatformEventChannel-template.xml +5 -0
  45. package/skills/managing-cdc-enablement/assets/PlatformEventChannelMember-template.xml +11 -0
  46. package/skills/managing-cdc-enablement/references/deploy-troubleshooting.md +73 -0
  47. package/skills/managing-cdc-enablement/references/filter-expressions.md +93 -0
  48. package/skills/observing-agentforce/SKILL.md +0 -1
  49. package/skills/observing-agentforce/references/stdm-queries.md +3 -11
  50. package/skills/orchestrating-datacloud/README.md +5 -7
  51. package/skills/orchestrating-datacloud/SKILL.md +3 -3
  52. package/skills/orchestrating-datacloud/references/feature-readiness.md +2 -2
  53. package/skills/orchestrating-datacloud/references/plugin-setup.md +6 -8
  54. package/skills/orchestrating-datacloud/scripts/diagnose-org.mjs +1 -1
  55. package/skills/orchestrating-datacloud/scripts/verify-plugin.sh +2 -2
  56. package/skills/preparing-datacloud/SKILL.md +2 -2
  57. package/skills/retrieving-datacloud/SKILL.md +3 -3
  58. package/skills/reviewing-lwc-mobile-offline/SKILL.md +0 -1
  59. package/skills/running-code-analyzer/SKILL.md +264 -267
  60. package/skills/running-code-analyzer/references/post-scan-workflows.md +286 -0
  61. package/skills/running-code-analyzer/scripts/describe-rule.js +382 -0
  62. package/skills/running-code-analyzer/scripts/list-rules.js +260 -0
  63. package/skills/running-code-analyzer/scripts/query-results.js +230 -0
  64. package/skills/testing-agentforce/SKILL.md +0 -1
  65. package/skills/using-mobile-native-capabilities/SKILL.md +0 -1
  66. package/skills/using-salesforce-archive/SKILL.md +121 -0
  67. package/skills/using-salesforce-archive/examples/monitor-failed-jobs.md +47 -0
  68. package/skills/using-salesforce-archive/references/archive-activity-entity.md +59 -0
  69. package/skills/using-salesforce-archive/references/connect-api-operations.md +157 -0
@@ -0,0 +1,73 @@
1
+ # CDC Deploy Troubleshooting
2
+
3
+ Errors observed during real org dry-runs while authoring this skill, with the metadata-side fix.
4
+
5
+ ## "Unable to find the specified channel"
6
+
7
+ The `<eventChannel>` value doesn't match a channel known to the org.
8
+
9
+ - For the default channel, the value must be exactly `ChangeEvents`. NOT `data/ChangeEvents`, NOT `/data/ChangeEvents`, NOT `data/ChangeEvent`.
10
+ - For a custom channel, the value must match the channel's DeveloperName **including the `__chn` suffix** — e.g. `PartnerSync__chn`.
11
+ - If the custom channel is in the same deploy, ensure it's in the same package directory so MDAPI orders the deploy correctly.
12
+
13
+ ## "...invalid event in the 'selectedEntity' field"
14
+
15
+ `<selectedEntity>` must be the ChangeEvent entity, not the source object.
16
+
17
+ | Source | Wrong | Right |
18
+ |---|---|---|
19
+ | `Account` | `Account` | `AccountChangeEvent` |
20
+ | `Lead` | `Lead` | `LeadChangeEvent` |
21
+ | `Order__c` | `Order__c` | `Order__ChangeEvent` |
22
+ | `Custom__c` | `Custom__c` | `Custom__ChangeEvent` |
23
+
24
+ For custom objects, swap the trailing `__c` for `__ChangeEvent` — the double underscore separator is preserved.
25
+
26
+ ## "Cannot create a new component with the namespace: <Object>"
27
+
28
+ The member's fullName has two underscores between the entity and `ChangeEvent`. Salesforce parses `Foo__Bar` as `<namespace>__<name>` and rejects creation outside the org's own namespace.
29
+
30
+ - Member fullName format: `<Entity>_ChangeEvent` (single underscore).
31
+ - File name: `<Entity>_ChangeEvent.platformEventChannelMember-meta.xml`.
32
+
33
+ This applies even when the source object has `__c` — the member fullName drops the `__c` and uses single underscore: file `Order_ChangeEvent.platformEventChannelMember-meta.xml`, fullName `Order_ChangeEvent`.
34
+
35
+ ## "The selected field, X.Y, isn't valid" (enrichedFields)
36
+
37
+ Enrichment fields must be **single-hop API names on the source entity**. Field type doesn't matter — standard lookup IDs, custom lookups, and custom non-relationship fields all work. The rejection is specifically for relationship-traversal syntax (`X.Y`, `__r.Y`).
38
+
39
+ Verified working in dry-run:
40
+
41
+ | Field | Type | Result |
42
+ |---|---|---|
43
+ | `OwnerId` | standard lookup ID | ✓ deploys |
44
+ | `ParentId` | standard lookup ID | ✓ deploys |
45
+ | `MyAccountManager__c` | custom Lookup → User | ✓ deploys |
46
+ | `Region__c` | custom Text | ✓ deploys |
47
+ | `Status__c` | custom Picklist | ✓ deploys |
48
+
49
+ Verified rejected:
50
+
51
+ | Field | Why |
52
+ |---|---|
53
+ | `Owner.Name` | relationship traversal |
54
+ | `Parent.Account.Industry` | multi-hop traversal |
55
+ | `MyLookup__r.Name` | relationship traversal (custom) |
56
+
57
+ When the user says "include the owner's name in every event," the metadata stores `OwnerId` — CDC enriches the lookup automatically and the consumer resolves the related record from the ID.
58
+
59
+ ## "filter expression has syntax errors: unexpected token: 'WHERE'"
60
+
61
+ The body of `<filterExpression>` is a SOQL WHERE-clause body — without the `WHERE` keyword.
62
+
63
+ | Wrong | Right |
64
+ |---|---|
65
+ | `WHERE Status__c != null` | `Status__c != null` |
66
+ | `WHERE Industry IN ('Tech', 'Finance')` | `Industry IN ('Tech', 'Finance')` |
67
+
68
+ ## ChangeEvent entity doesn't exist (for custom objects)
69
+
70
+ `Foo__ChangeEvent` only exists if `Foo__c` exists. If both are being deployed in the same dry-run, the dry-run validator may flag the member because it validates entity references against the *current* org state, not the post-deploy state. Mitigations:
71
+
72
+ - Deploy the source object first, then the channel member in a second deploy.
73
+ - Or accept that dry-run will flag this case but a real (non-dry-run) deploy succeeds because MDAPI orders the components correctly.
@@ -0,0 +1,93 @@
1
+ # Filter Expression Reference
2
+
3
+ The `<filterExpression>` body is a SOQL-WHERE-clause-body — predicate only, no `WHERE` keyword. The platform supports a subset of SOQL grammar for CDC filters; this reference documents what the dry-run deploy verifies.
4
+
5
+ ## Operators by field type
6
+
7
+ | Field type | Supported operators | Notes |
8
+ |---|---|---|
9
+ | Text | `=`, `!=`, `IN`, `NOT IN`, `LIKE` | `LIKE` accepts `%` wildcard. Quote string literals with single quotes. |
10
+ | Number / Currency / Percent | `=`, `!=`, `<`, `<=`, `>`, `>=` | Numeric literals unquoted. |
11
+ | Boolean (Checkbox) | `=`, `!=` | Use `true` / `false` literal — no quotes. |
12
+ | Date | `=`, `!=` | Named literals (`TODAY`, `THIS_WEEK`, `LAST_N_DAYS:7`) and ISO date strings work. |
13
+ | DateTime | `=`, `!=` only | **Range operators (`>`, `<`) are rejected** — "Only equality operators are supported for this field type or value". |
14
+ | Reference (lookup ID) | `=`, `!=`, `IN`, `NOT IN` | Use the 18-character ID in single quotes: `OwnerId = '005000000000000AAA'`. |
15
+ | Picklist | `=`, `!=`, `IN`, `NOT IN` | Quote the value as a string. |
16
+
17
+ ## Compound expressions
18
+
19
+ `AND`, `OR`, and parentheses all work. There's no documented limit on nesting depth.
20
+
21
+ ```text
22
+ (Industry = 'Technology' OR Industry = 'Finance') AND AnnualRevenue > 0 AND Phone != null
23
+ ```
24
+
25
+ ## Null checks
26
+
27
+ ```text
28
+ Phone = null
29
+ Phone != null
30
+ ```
31
+
32
+ `null` is a literal — no quotes.
33
+
34
+ `ISBLANK()` and `ISNULL()` are **not** valid filter operators — they parse-fail with "unexpected token". They work in formulas but not in CDC filter expressions. Use `Field = null` / `Field != null` instead.
35
+
36
+ ## Functions
37
+
38
+ `LOWER(Name) = 'acme'` deploys successfully. Other SOQL functions probably work, but only `LOWER` has been verified in this skill's dataset. Test before relying on `UPPER`, `CONVERTCURRENCY`, etc.
39
+
40
+ ## What the filter cannot do
41
+
42
+ | Pattern | Deploy error |
43
+ |---|---|
44
+ | `WHERE Industry = 'Tech'` | "filter expression has syntax errors: unexpected token: 'WHERE'" — drop the keyword. |
45
+ | `IsDeleted = false` | "The IsDeleted field in the filter expression is invalid." Soft-deleted records still emit ChangeEvent; you cannot filter them out via this mechanism. |
46
+ | `Owner.Username = 'foo@bar.com'` | "The Owner.Username field in the filter expression is invalid." Relationship traversal works in `<enrichedFields>` rejection messages but NOT in filter expressions either — single-hop only. |
47
+ | `LastModifiedDate > LAST_N_DAYS:30` | "Only equality operators are supported for this field type or value." DateTime is equality-only; for "recent changes" semantics, use `LastModifiedDate = LAST_N_DAYS:N` (which compares to the *day*, not the timestamp). |
48
+
49
+ ## Field-to-field comparison: not supported
50
+
51
+ The right-hand side of a comparison must be a **literal**. Field references are rejected.
52
+
53
+ | Wrong | Deploy error |
54
+ |---|---|
55
+ | `BillingCity = ShippingCity` | "syntax errors: unexpected token: 'ShippingCity'" |
56
+ | `NumberOfEmployees > AnnualRevenue` | "unexpected token: 'AnnualRevenue'" |
57
+
58
+ If the user wants "records where two fields differ," that logic must live downstream of the change event consumer, not in the filter.
59
+
60
+ ## Composite (compound) fields like Address: dotted-component is the only valid form
61
+
62
+ Counterintuitively, the opposite rule applies for composite fields like `BillingAddress` vs. relationship traversals like `Owner.Name`. Compound fields **require** dot-notation; flat component names are rejected.
63
+
64
+ | Pattern | Result |
65
+ |---|---|
66
+ | `BillingAddress.City = 'San Francisco'` | ✓ deploys — required form for compound fields |
67
+ | `BillingAddress = null` | ✗ "Compound field BillingAddress has to be used with a component field in a filter expression" |
68
+ | `BillingCity = 'San Francisco'` (flat component) | ✗ "The BillingCity field in the filter expression is invalid" |
69
+ | `BillingState`, `BillingPostalCode`, `BillingCountry`, `BillingLatitude` (flat) | ✗ all rejected as invalid |
70
+
71
+ So, for the same `BillingAddress` field, the accepted form differs by location:
72
+
73
+ | Location | `BillingAddress` (compound) | `BillingAddress.City` (dotted) | `BillingCity` (flat component) |
74
+ |---|---|---|---|
75
+ | `<filterExpression>` | ✗ "has to be used with a component field" | ✓ deploys (required form) | ✗ "field is invalid" |
76
+ | `<enrichedFields>` | ✓ deploys | ✗ "isn't valid" (dots never allowed) | ✗ "isn't valid" (components not exposed at this layer) |
77
+
78
+ Rules per location:
79
+
80
+ - **Filter expression**: address components are reachable only via dotted form on the compound (`BillingAddress.City`). Both the compound itself (no component) and the flat component name are rejected.
81
+ - **Enrichment field**: takes a top-level field API name only. The compound `BillingAddress` is a top-level field and works; dotted forms are never valid here regardless of whether the dot would be a compound-component select or a relationship traversal; flat components like `BillingCity` are not top-level enrichable fields and are rejected.
82
+ - **Relationship traversal** (`Owner.Name`, `Parent.Industry`) is rejected in both locations.
83
+
84
+ The mental model: compound fields are a single physical column with sub-components; relationships are joins. The filter parser supports dotted access into compound sub-components but never into joins. The enrichment list takes top-level field names only and never accepts dots; the platform handles compound-vs-component decomposition itself when emitting the change event payload.
85
+
86
+ ## What's NOT yet verified
87
+
88
+ - Aggregate functions or subqueries — almost certainly unsupported.
89
+ - Operators on Long Text, Rich Text, Encrypted, Geolocation field types.
90
+ - Filter on a custom field that doesn't exist (deploy-time error vs runtime).
91
+ - Custom-object-specific picklist with locale-sensitive values.
92
+
93
+ If the user requests one of these and the deploy succeeds — update this file. If it fails — capture the error here.
@@ -4,7 +4,6 @@ description: "Analyze production Agentforce agent behavior using session traces
4
4
  allowed-tools: Bash Read Write Edit Glob Grep
5
5
  metadata:
6
6
  version: "1.0"
7
- last_updated: "2026-04-08"
8
7
  argument-hint: "<org-alias> [--agent-file <path>] [--session-id <id>] [--days <n>]"
9
8
  compatibility: claude-code
10
9
  ---
@@ -23,18 +23,10 @@ Methods:
23
23
  # Ensure the classes directory exists
24
24
  mkdir -p <project-root>/force-app/main/default/classes
25
25
 
26
- # Copy from the installed skill location
27
- cp skills/observing-agentforce/apex/AgentforceOptimizeService.cls \
26
+ # Copy from the skill's apex directory
27
+ cp ../apex/AgentforceOptimizeService.cls \
28
28
  <project-root>/force-app/main/default/classes/
29
- cp skills/observing-agentforce/apex/AgentforceOptimizeService.cls-meta.xml \
30
- <project-root>/force-app/main/default/classes/
31
- ```
32
-
33
- If the skill is installed globally via the installer, use the installed path:
34
- ```bash
35
- cp ~/.claude/skills/observing-agentforce/apex/AgentforceOptimizeService.cls \
36
- <project-root>/force-app/main/default/classes/
37
- cp ~/.claude/skills/observing-agentforce/apex/AgentforceOptimizeService.cls-meta.xml \
29
+ cp ../apex/AgentforceOptimizeService.cls-meta.xml \
38
30
  <project-root>/force-app/main/default/classes/
39
31
  ```
40
32
 
@@ -63,14 +63,12 @@ These are intentionally generic and should be adapted to the target org.
63
63
 
64
64
  ## Quick start
65
65
 
66
- > The script examples below assume the skill is installed under `~/.claude/skills/` via the full Claude Code installer. If you are working from a repo checkout, run the same scripts from that checkout path.
67
-
68
66
  ### 1. Verify the runtime
69
67
 
70
68
  ```bash
71
- bash ~/.claude/skills/orchestrating-datacloud/scripts/verify-plugin.sh
69
+ bash ./scripts/verify-plugin.sh
72
70
  # or with an org alias
73
- bash ~/.claude/skills/orchestrating-datacloud/scripts/verify-plugin.sh myorg
71
+ bash ./scripts/verify-plugin.sh myorg
74
72
  ```
75
73
 
76
74
  The helper treats `sf data360 doctor` as advisory and falls back to additional read-only smoke checks when an org is only partially provisioned.
@@ -78,9 +76,9 @@ The helper treats `sf data360 doctor` as advisory and falls back to additional r
78
76
  ### 2. Diagnose feature readiness before mutating
79
77
 
80
78
  ```bash
81
- node ~/.claude/skills/orchestrating-datacloud/scripts/diagnose-org.mjs -o myorg --json
79
+ node ./scripts/diagnose-org.mjs -o myorg --json
82
80
  # optional retrieve-plane probe, only when you know the table is real
83
- node ~/.claude/skills/orchestrating-datacloud/scripts/diagnose-org.mjs -o myorg --phase retrieve --describe-table MyDMO__dlm --json
81
+ node ./scripts/diagnose-org.mjs -o myorg --phase retrieve --describe-table MyDMO__dlm --json
84
82
  ```
85
83
 
86
84
  Use the diagnose helper to distinguish between:
@@ -94,7 +92,7 @@ Use the diagnose helper to distinguish between:
94
92
  ```bash
95
93
  python3 ~/.claude/sf-skills-install.py --with-datacloud-runtime
96
94
  # or run the helper script directly
97
- bash ~/.claude/skills/orchestrating-datacloud/scripts/bootstrap-plugin.sh
95
+ bash ./scripts/bootstrap-plugin.sh
98
96
  ```
99
97
 
100
98
  ### 4. Start with read-only inspection
@@ -92,7 +92,7 @@ Recommended checks:
92
92
  ```bash
93
93
  sf data360 man
94
94
  sf org display -o <alias>
95
- bash ~/.claude/skills/orchestrating-datacloud/scripts/verify-plugin.sh <alias>
95
+ bash ./scripts/verify-plugin.sh <alias>
96
96
  ```
97
97
 
98
98
  Treat `sf data360 doctor` as a broad health signal, not the sole gate. On partially provisioned orgs it can fail even when read-only command families like connectors, DMOs, or segments still work.
@@ -100,12 +100,12 @@ Treat `sf data360 doctor` as a broad health signal, not the sole gate. On partia
100
100
  ### 2. Classify readiness before changing anything
101
101
  Run the shared classifier first:
102
102
  ```bash
103
- node ~/.claude/skills/orchestrating-datacloud/scripts/diagnose-org.mjs -o <org> --json
103
+ node ./scripts/diagnose-org.mjs -o <org> --json
104
104
  ```
105
105
 
106
106
  Only use a query-plane probe after you know the table name is real:
107
107
  ```bash
108
- node ~/.claude/skills/orchestrating-datacloud/scripts/diagnose-org.mjs -o <org> --phase retrieve --describe-table MyDMO__dlm --json
108
+ node ./scripts/diagnose-org.mjs -o <org> --phase retrieve --describe-table MyDMO__dlm --json
109
109
  ```
110
110
 
111
111
  Use the classifier to distinguish:
@@ -27,13 +27,13 @@ Examples:
27
27
  Run the shared readiness classifier before mutation-heavy work:
28
28
 
29
29
  ```bash
30
- node ~/.claude/skills/orchestrating-datacloud/scripts/diagnose-org.mjs -o myorg --json
30
+ node ../scripts/diagnose-org.mjs -o myorg --json
31
31
  ```
32
32
 
33
33
  For retrieve/query work, only add a table probe when you already know the table name is real:
34
34
 
35
35
  ```bash
36
- node ~/.claude/skills/orchestrating-datacloud/scripts/diagnose-org.mjs -o myorg --phase retrieve --describe-table MyDMO__dlm --json
36
+ node ../scripts/diagnose-org.mjs -o myorg --phase retrieve --describe-table MyDMO__dlm --json
37
37
  ```
38
38
 
39
39
  ## Signal matrix
@@ -18,8 +18,6 @@ The orchestrating-datacloud family uses a **community `sf data360` CLI runtime**
18
18
 
19
19
  ## Recommended setup path
20
20
 
21
- The command examples below assume the skill is installed under `~/.claude/skills/` via the full Claude Code installer. If you are working from a cloned sf-skills repo instead, run the same scripts from that checkout path.
22
-
23
21
  If you use the Python installer, it can install this optional runtime for you:
24
22
 
25
23
  ```bash
@@ -29,7 +27,7 @@ python3 ~/.claude/sf-skills-install.py --with-datacloud-runtime
29
27
  Or use the helper script directly:
30
28
 
31
29
  ```bash
32
- bash ~/.claude/skills/orchestrating-datacloud/scripts/bootstrap-plugin.sh
30
+ bash ../scripts/bootstrap-plugin.sh
33
31
  ```
34
32
 
35
33
  By default it clones the plugin into `~/.sf-community-tools/datacloud/sf-cli-plugin-data360`, installs dependencies, compiles it, and links it into the local Salesforce CLI.
@@ -41,7 +39,7 @@ git clone https://github.com/Jaganpro/sf-cli-plugin-data360.git
41
39
  cd sf-cli-plugin-data360
42
40
  yarn install
43
41
  npx tsc
44
- node ~/.claude/skills/orchestrating-datacloud/scripts/generate-manifest.mjs .
42
+ node ../scripts/generate-manifest.mjs .
45
43
  sf plugins link .
46
44
  ```
47
45
 
@@ -49,9 +47,9 @@ sf plugins link .
49
47
 
50
48
  ```bash
51
49
  sf data360 man
52
- bash ~/.claude/skills/orchestrating-datacloud/scripts/verify-plugin.sh
53
- bash ~/.claude/skills/orchestrating-datacloud/scripts/verify-plugin.sh myorg
54
- node ~/.claude/skills/orchestrating-datacloud/scripts/diagnose-org.mjs -o myorg --json
50
+ bash ../scripts/verify-plugin.sh
51
+ bash ../scripts/verify-plugin.sh myorg
52
+ node ../scripts/diagnose-org.mjs -o myorg --json
55
53
  ```
56
54
 
57
55
  For newer command families such as `sf data360 query hybrid` and recent pagination fixes, update the community runtime to the latest upstream commit by re-running the bootstrap helper.
@@ -80,7 +78,7 @@ sf data360 segment list -o myorg 2>/dev/null
80
78
  If you see `Warning: @gthoppae/sf-cli-plugin-data360 is a linked ESM module and cannot be auto-transpiled`, generate the oclif command manifest:
81
79
 
82
80
  ```bash
83
- node ~/.claude/skills/orchestrating-datacloud/scripts/generate-manifest.mjs ~/.sf-community-tools/datacloud/sf-cli-plugin-data360
81
+ node ../scripts/generate-manifest.mjs ~/.sf-community-tools/datacloud/sf-cli-plugin-data360
84
82
  ```
85
83
 
86
84
  This tells oclif to use pre-compiled output directly instead of attempting auto-transpilation. The `npx oclif manifest` alternative may fail on newer Node.js versions due to `@oclif/core` version mismatches.
@@ -257,7 +257,7 @@ function guidanceFromProbe(scope, probe) {
257
257
  if (probe.state === 'runtime_missing') {
258
258
  return [
259
259
  'Install or relink the community sf data360 runtime before attempting Data Cloud work.',
260
- 'Use python3 ~/.claude/sf-skills-install.py --with-datacloud-runtime or bash ~/.claude/skills/orchestrating-datacloud/scripts/bootstrap-plugin.sh.',
260
+ 'Use python3 ~/.claude/sf-skills-install.py --with-datacloud-runtime or bash ./scripts/bootstrap-plugin.sh.',
261
261
  ];
262
262
  }
263
263
 
@@ -10,7 +10,7 @@ fi
10
10
 
11
11
  if ! sf data360 man >/dev/null 2>&1; then
12
12
  echo "The community 'sf data360' runtime is not available." >&2
13
- echo "Run bash ~/.claude/skills/orchestrating-datacloud/scripts/bootstrap-plugin.sh first." >&2
13
+ echo "Run bash ./scripts/bootstrap-plugin.sh first." >&2
14
14
  exit 1
15
15
  fi
16
16
 
@@ -54,5 +54,5 @@ fi
54
54
 
55
55
  echo "Verification complete."
56
56
  if [[ -n "${ORG}" ]]; then
57
- echo "Next: node ~/.claude/skills/orchestrating-datacloud/scripts/diagnose-org.mjs -o '${ORG}' --json"
57
+ echo "Next: node ./scripts/diagnose-org.mjs -o '${ORG}' --json"
58
58
  fi
@@ -44,7 +44,7 @@ Ask for or infer:
44
44
  ## Core Operating Rules
45
45
 
46
46
  - Verify the external plugin runtime before running Data Cloud commands.
47
- - Run the shared readiness classifier before mutating ingestion assets: `node ~/.claude/skills/orchestrating-datacloud/scripts/diagnose-org.mjs -o <org> --phase prepare --json`.
47
+ - Run the shared readiness classifier before mutating ingestion assets: `node ../orchestrating-datacloud/scripts/diagnose-org.mjs -o <org> --phase prepare --json`.
48
48
  - Prefer inspecting existing streams and DLOs before creating new ingestion assets.
49
49
  - Suppress linked-plugin warning noise with `2>/dev/null` for normal usage.
50
50
  - Treat DLO naming and field naming as Data Cloud-specific, not CRM-native.
@@ -59,7 +59,7 @@ Ask for or infer:
59
59
 
60
60
  ### 1. Classify readiness for prepare work
61
61
  ```bash
62
- node ~/.claude/skills/orchestrating-datacloud/scripts/diagnose-org.mjs -o <org> --phase prepare --json
62
+ node ../orchestrating-datacloud/scripts/diagnose-org.mjs -o <org> --phase prepare --json
63
63
  ```
64
64
 
65
65
  ### 2. Inspect existing ingestion assets
@@ -39,7 +39,7 @@ Ask for or infer:
39
39
  ## Core Operating Rules
40
40
 
41
41
  - Treat Data Cloud SQL as its own query language, not SOQL.
42
- - Run the shared readiness classifier before relying on query/search surfaces: `node ~/.claude/skills/orchestrating-datacloud/scripts/diagnose-org.mjs -o <org> --phase retrieve --json`.
42
+ - Run the shared readiness classifier before relying on query/search surfaces: `node ../orchestrating-datacloud/scripts/diagnose-org.mjs -o <org> --phase retrieve --json`.
43
43
  - Use describe before guessing columns.
44
44
  - Prefer `sqlv2` or async query flows for larger result sets.
45
45
  - Use vector search or hybrid search only when the search index lifecycle is healthy.
@@ -51,9 +51,9 @@ Ask for or infer:
51
51
 
52
52
  ### 1. Classify readiness for retrieve work
53
53
  ```bash
54
- node ~/.claude/skills/orchestrating-datacloud/scripts/diagnose-org.mjs -o <org> --phase retrieve --json
54
+ node ../orchestrating-datacloud/scripts/diagnose-org.mjs -o <org> --phase retrieve --json
55
55
  # optional query-plane probe, only with a real table name
56
- node ~/.claude/skills/orchestrating-datacloud/scripts/diagnose-org.mjs -o <org> --phase retrieve --describe-table MyDMO__dlm --json
56
+ node ../orchestrating-datacloud/scripts/diagnose-org.mjs -o <org> --phase retrieve --describe-table MyDMO__dlm --json
57
57
  ```
58
58
 
59
59
  ### 2. Choose the smallest correct query shape
@@ -4,7 +4,6 @@ description: "Review a Lightning Web Component for **mobile offline** compatibil
4
4
  metadata:
5
5
  version: "1.0"
6
6
  ---
7
- <!-- adk-managed-skill -->
8
7
 
9
8
  # Reviewing LWC Mobile Offline
10
9