@peernova/cuneiform-sf 1.0.2 → 1.0.4-beta.6
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/LICENSE +81 -30
- package/README.md +59 -95
- package/messages/compatibility.check.md +71 -0
- package/messages/cuneiform.access.md +138 -0
- package/messages/definition.create.md +511 -0
- package/messages/definition.export.md +88 -0
- package/messages/definition.get.md +147 -0
- package/messages/definition.import.md +65 -0
- package/messages/definition.list.md +264 -0
- package/messages/definition.purge.md +318 -0
- package/messages/definition.update.md +80 -0
- package/messages/mcp.serve.md +66 -0
- package/messages/object.describe.md +201 -0
- package/messages/object.list.md +443 -0
- package/messages/org.details.md +386 -0
- package/messages/org.reset.md +71 -0
- package/messages/profile.md +231 -0
- package/messages/profile.request.cancel.md +143 -0
- package/messages/profile.request.delete.md +139 -0
- package/messages/profile.request.list.md +89 -0
- package/messages/summary.purge.md +218 -0
- package/messages/summary.reprofile.md +150 -0
- package/messages/summary.stop.md +157 -0
- package/messages/user.details.md +501 -0
- package/oclif.lock +3021 -2224
- package/oclif.manifest.json +2 -116
- package/package.json +84 -19
- package/lib/commands/cuneiform/about.d.ts +0 -13
- package/lib/commands/cuneiform/about.js +0 -26
- package/lib/commands/cuneiform/about.js.map +0 -1
- package/lib/commands/hello/world.d.ts +0 -14
- package/lib/commands/hello/world.js +0 -27
- package/lib/commands/hello/world.js.map +0 -1
- package/lib/index.d.ts +0 -2
- package/lib/index.js +0 -2
- package/lib/index.js.map +0 -1
- package/messages/cuneiform.about.md +0 -19
- package/messages/hello.world.md +0 -29
|
@@ -0,0 +1,511 @@
|
|
|
1
|
+
# summary
|
|
2
|
+
|
|
3
|
+
Build profiling definitions that translate scoping decisions — object selection, filtering, and profiling methodology — into executable configuration records across one or dozens of objects in a single command.
|
|
4
|
+
|
|
5
|
+
# description
|
|
6
|
+
|
|
7
|
+
Profiling definitions are the blueprint that tells Cuneiform what to analyze. Each definition specifies an object, a profiling method, and a time scope. This command translates your intent — expressed through flags for method selection, object filtering, and time windowing — into structured definition records in the target org.
|
|
8
|
+
|
|
9
|
+
The command executes in two phases. Phase 1 discovers and validates objects, builds a preview table showing each object with its record count, profiling type, category, time category, and segment category, then prompts for confirmation. Phase 2 creates definitions sequentially, reporting progress via spinner updates. Output includes separate Created and Skipped tables, a summary box (Objects/Created/Skipped/Failed), and optional post-creation actions: trigger immediate profiling, open the first definition in Salesforce Lightning, or write session data to a local log directory.
|
|
10
|
+
|
|
11
|
+
PREREQUISITES: Run `sf cuneiform user details --configure` to verify permissions. Objects must exist in the target org.
|
|
12
|
+
|
|
13
|
+
CHOOSING A PROFILING METHOD (--method):
|
|
14
|
+
|
|
15
|
+
- metadata — Catalogs field structure and configuration. No record scanning. Fast. No time dimension.
|
|
16
|
+
- historical — Full record-level data profiling with year-based time windows. Captures how field population changes over time.
|
|
17
|
+
- comparative — Year-over-year comparison: compares current-period records (SetA) against prior-period records (SetB). Requires --year or --date-literal.
|
|
18
|
+
- recordtype — Per-record-type analysis across 6 time windows. Segments data by business process stage (e.g., New Business vs Renewal).
|
|
19
|
+
- outcome — Boolean outcome comparison: Won vs Lost for Opportunity, Closed vs Open for Case, Converted vs Unconverted for Lead. Surfaces data quality gaps between business outcomes.
|
|
20
|
+
- full — All five methods combined. Comprehensive first-time profiling of a new org. Default.
|
|
21
|
+
|
|
22
|
+
SCOPING OBJECTS:
|
|
23
|
+
|
|
24
|
+
- --objects Account,Contact — Profile specific named objects (comma-separated or repeated)
|
|
25
|
+
- --filter custom — All custom objects; --filter standard — All standard objects
|
|
26
|
+
- --with-records — Only objects that have at least one record (recommended for historical/comparative)
|
|
27
|
+
- --min-records 100 — Only objects with 100+ records
|
|
28
|
+
- --namespace SBQQ — Only objects from a specific managed package (e.g., SBQQ for CPQ, FinServ for FSC)
|
|
29
|
+
- --pattern Account\* — Objects matching a wildcard pattern
|
|
30
|
+
|
|
31
|
+
ROLLING TIME WINDOWS (use with --method comparative, historical, recordtype, or full):
|
|
32
|
+
|
|
33
|
+
- --date-literal THIS_YEAR — Profile the current year's records
|
|
34
|
+
- --date-literal THIS_QUARTER — Profile the current quarter
|
|
35
|
+
- --date-literal THIS_MONTH — Profile the current month
|
|
36
|
+
- --depth 3 — With a date literal, creates 3 cascading periods: this period, last period, and two periods ago
|
|
37
|
+
- --depth 2 --date-literal THIS_QUARTER — Creates definitions for this quarter AND last quarter
|
|
38
|
+
- --year 2026 — Use a specific year instead of a date literal; --depth controls how many prior years to include
|
|
39
|
+
- --date-field LastModifiedDate — Use LastModifiedDate instead of CreatedDate for time filtering
|
|
40
|
+
|
|
41
|
+
NATURAL LANGUAGE → FLAG MAPPING:
|
|
42
|
+
|
|
43
|
+
- "compare X from 2025 vs 2026" → --method comparative --year 2026
|
|
44
|
+
- "rolling quarterly analysis" → --method comparative --date-literal THIS_QUARTER --depth N
|
|
45
|
+
- "year-over-year trends" → --method comparative
|
|
46
|
+
- "by business stage / record type" → --method recordtype
|
|
47
|
+
- "won vs lost / closed vs open" → --method outcome
|
|
48
|
+
- "field-level stats only" → --method metadata
|
|
49
|
+
- "objects with data" → --with-records
|
|
50
|
+
- "FSC objects" → --namespace FinServ
|
|
51
|
+
- "CPQ objects" → --namespace SBQQ
|
|
52
|
+
- "last N months" → --date-literal LAST_MONTH --depth N
|
|
53
|
+
- "this fiscal year" → --date-literal THIS_FISCAL_YEAR
|
|
54
|
+
|
|
55
|
+
COMMAND SEQUENCE: `user details --configure` (verify permissions) → `object describe` (understand structure) → `definition create` (build definitions) → `profile` (execute profiling)
|
|
56
|
+
|
|
57
|
+
SAFETY: Objects that already have definitions are skipped automatically (no duplicates). A confirmation prompt appears before creation. Use --dry-run to preview without creating.
|
|
58
|
+
|
|
59
|
+
# flags.target-org.summary
|
|
60
|
+
|
|
61
|
+
Salesforce org where definitions will be created. The command validates Cuneiform installation and permission sets before any API calls.
|
|
62
|
+
|
|
63
|
+
# flags.objects.summary
|
|
64
|
+
|
|
65
|
+
Salesforce object API names to create definitions for (e.g., --objects Account --objects Contact). Repeat the flag for multiple objects. When you know exactly which objects to profile, this is the most direct selection mode. Cannot be combined with --filter when targeting specific objects.
|
|
66
|
+
|
|
67
|
+
# flags.pattern.summary
|
|
68
|
+
|
|
69
|
+
Filter objects by API name pattern using wildcard matching (e.g., Account\_ matches Account and AccountTeamMember). Use plain text for substring matching (e.g., Account matches any object containing "Account"). Targets families of related objects by naming convention.
|
|
70
|
+
|
|
71
|
+
# flags.filter.summary
|
|
72
|
+
|
|
73
|
+
Filter objects by Salesforce object type: custom (objects with \_\_c suffix), standard (built-in objects like Account, Contact, Opportunity), or all (both). Defaults to all.
|
|
74
|
+
|
|
75
|
+
# flags.namespace.summary
|
|
76
|
+
|
|
77
|
+
Filter objects by managed package namespace prefix to scope profiling to a specific product installation (e.g., --namespace SBQQ for CPQ, --namespace FinServ for Financial Services Cloud, --namespace HealthCloudGA for Health Cloud). Pass an empty string ("") to target only unpackaged custom objects. Combines with --filter custom to isolate custom objects from a specific package.
|
|
78
|
+
|
|
79
|
+
# flags.classification.summary
|
|
80
|
+
|
|
81
|
+
Filter by object classification: customer (business-facing objects), internal (system objects), or all. Defaults to all.
|
|
82
|
+
|
|
83
|
+
# flags.with-records.summary
|
|
84
|
+
|
|
85
|
+
Include only objects that have at least one record. Avoids creating definitions for empty staging or archive objects. Recommended for historical and comparative profiling where empty objects produce no analytical value. Cannot be combined with --without-records.
|
|
86
|
+
|
|
87
|
+
# flags.without-records.summary
|
|
88
|
+
|
|
89
|
+
Include only objects that have zero records. Targets empty objects for data completeness analysis or unused schema identification. Cannot be combined with --with-records.
|
|
90
|
+
|
|
91
|
+
# flags.with-record-types.summary
|
|
92
|
+
|
|
93
|
+
Include only objects that have at least one active record type defined. Use with --method recordtype to ensure targeted objects have record types to segment by.
|
|
94
|
+
|
|
95
|
+
# flags.category.summary
|
|
96
|
+
|
|
97
|
+
Label assigned to every definition created in this run (e.g., --category "Phase 1" or --category "Sales Cloud"). Groups definitions by engagement phase or functional area for later filtering and management. Freeform text.
|
|
98
|
+
|
|
99
|
+
# flags.min-records.summary
|
|
100
|
+
|
|
101
|
+
Minimum record count an object must have to be included (e.g., --min-records 100 skips objects with fewer than 100 records). Filters out low-volume objects that would produce statistically insignificant profiling results. Defaults to 0 (include all).
|
|
102
|
+
|
|
103
|
+
# flags.limit.summary
|
|
104
|
+
|
|
105
|
+
Maximum number of objects to create definitions for (e.g., --limit 20 for a quick demo setup). Constrains scope in large orgs or matches a statement-of-work object count. Objects are selected in the order returned by the Salesforce DescribeGlobal API. When omitted, processes all matching objects.
|
|
106
|
+
|
|
107
|
+
# flags.method.summary
|
|
108
|
+
|
|
109
|
+
Profiling methodology that determines the analytical questions each definition can answer:
|
|
110
|
+
metadata — Catalogs field structure and configuration. Fast, no record scanning, no time dimension.
|
|
111
|
+
historical — Full record-level analysis with year-based time windows. Captures field population changes over time.
|
|
112
|
+
comparative — Compares current-period records (SetA) vs prior-period records (SetB). Requires --year or --date-literal.
|
|
113
|
+
recordtype — Per-record-type analysis across 6 time windows. Segments by business process stage (e.g., New Business vs Renewal for Opportunity).
|
|
114
|
+
outcome — Boolean outcome comparison: Won vs Lost (Opportunity), Closed vs Open (Case), Converted vs Unconverted (Lead). Surfaces data quality gaps between business outcomes.
|
|
115
|
+
full — All five methods combined. Comprehensive first-time profiling of a new org or client engagement. Default.
|
|
116
|
+
Defaults to full.
|
|
117
|
+
|
|
118
|
+
# flags.year.summary
|
|
119
|
+
|
|
120
|
+
Anchor year for time-based profiling definitions (e.g., --year 2026). Used with --method comparative, historical, recordtype, or full. Accepts comma-separated years (--year 2026,2025,2024). When combined with --depth, sets the starting year and counts backward (e.g., --year 2026 --depth 3 creates definitions for 2026, 2025, and 2024). Defaults to the current year. Cannot be combined with --date-literal.
|
|
121
|
+
|
|
122
|
+
# flags.depth.summary
|
|
123
|
+
|
|
124
|
+
Number of cascading time periods to create, counting backward from the anchor year or date literal (e.g., --depth 3 with --year 2026 creates definitions for 2026, 2025, and 2024). Use with --date-literal to span periods (e.g., --date-literal THIS_QUARTER --depth 2 creates definitions for this quarter and last quarter). When no anchor year is specified, defaults to the current year. Defaults to 1 for comparative, 3 for full and recordtype. Maximum 10.
|
|
125
|
+
|
|
126
|
+
# flags.from.summary
|
|
127
|
+
|
|
128
|
+
Start year of an explicit range (inclusive). Use with --to for a custom year range (e.g., --from 2020 --to 2026). Cannot be combined with --depth.
|
|
129
|
+
|
|
130
|
+
# flags.to.summary
|
|
131
|
+
|
|
132
|
+
End year of an explicit range (inclusive). Use with --from for a custom year range (e.g., --from 2020 --to 2026). Defaults to the current year when --from is specified.
|
|
133
|
+
|
|
134
|
+
# errors.yearRangeInvalid
|
|
135
|
+
|
|
136
|
+
Invalid year range: %s
|
|
137
|
+
|
|
138
|
+
# flags.recordtype.summary
|
|
139
|
+
|
|
140
|
+
Filter to a specific record type name for record-type-specific profiling (e.g., --recordtype "New Business"). Used with --method recordtype or --method full. When omitted, all record types matching --record-type-status are included.
|
|
141
|
+
|
|
142
|
+
# flags.record-type-status.summary
|
|
143
|
+
|
|
144
|
+
Filter record types by activity status: active (default), all (active and inactive), or inactive (only inactive). Used with --method recordtype or --method full.
|
|
145
|
+
|
|
146
|
+
# warnings.yearIgnored
|
|
147
|
+
|
|
148
|
+
Year-related flags (--year, --depth, --from, --to) have no effect with --method metadata. Metadata profiling analyzes field structure only, with no time dimension. Ignoring.
|
|
149
|
+
|
|
150
|
+
# flags.no-value-frequency.summary
|
|
151
|
+
|
|
152
|
+
Skip common value frequency analysis during profiling. Reduces profiling time for objects where frequency distribution data is not needed.
|
|
153
|
+
|
|
154
|
+
# flags.use-prior.summary
|
|
155
|
+
|
|
156
|
+
Expand the comparison baseline (SetB) for comparative definitions to include all records created before the anchor year, rather than only the immediately prior year. Shows "current year vs everything before" instead of "current year vs last year" — useful for demonstrating data quality improvements across the full historical record. Cannot be combined with --date-literal.
|
|
157
|
+
|
|
158
|
+
# flags.lifetime-primary.summary
|
|
159
|
+
|
|
160
|
+
Lifetime-vs-X comparative variant: SetA is unfiltered (all records), SetB is the supplied secondary filter. Shows "all records ever vs records matching the filter" — useful for highlighting what fraction of the lifetime data falls within a recent window or specific year. Requires --method comparative AND one of (--date-literal, --year, --from/--to). Mutually exclusive with --use-prior, --depth, and non-comparative methods.
|
|
161
|
+
|
|
162
|
+
# flags.date-literal.summary
|
|
163
|
+
|
|
164
|
+
Rolling time window for time-scoped profiling — use instead of --year for calendar-relative periods. Combine with --depth to create cascading definitions across multiple periods (e.g., --date-literal THIS_QUARTER --depth 4 creates definitions for the last 4 quarters). Cannot be combined with --year, --from, --to, or --use-prior.
|
|
165
|
+
|
|
166
|
+
Supported values:
|
|
167
|
+
TODAY, YESTERDAY — Single-day windows
|
|
168
|
+
THIS_WEEK, LAST_WEEK — Weekly windows
|
|
169
|
+
THIS_MONTH, LAST_MONTH — Monthly windows (use with --depth for "last N months")
|
|
170
|
+
THIS_QUARTER, LAST_QUARTER — Quarterly windows (use with --depth for "rolling quarters")
|
|
171
|
+
THIS_FISCAL_QUARTER, LAST_FISCAL_QUARTER — Fiscal quarter windows
|
|
172
|
+
THIS_YEAR, LAST_YEAR — Annual windows
|
|
173
|
+
THIS_FISCAL_YEAR, LAST_FISCAL_YEAR — Fiscal year windows
|
|
174
|
+
N_YEARS_AGO:2, N_YEARS_AGO:3 — Specific years in the past
|
|
175
|
+
LAST_N_YEARS:2, LAST_N_YEARS:3 — Last N complete years
|
|
176
|
+
|
|
177
|
+
# flags.date-field.summary
|
|
178
|
+
|
|
179
|
+
Date field used to assign records to time windows when using --date-literal. Determines which records fall in "this year" vs "last year." Defaults to CreatedDate. Use LastModifiedDate to analyze records by when they were last updated rather than when they were created (e.g., --date-field LastModifiedDate to profile recently refreshed data).
|
|
180
|
+
|
|
181
|
+
# errors.dateLiteralMutualExclusion
|
|
182
|
+
|
|
183
|
+
Cannot combine --date-literal with --year, --from, --to, or --use-prior. Date literals replace year-based time scoping. Use --date-literal with --depth to cascade across multiple periods.
|
|
184
|
+
|
|
185
|
+
# errors.lifetimePrimaryMethodRequired
|
|
186
|
+
|
|
187
|
+
--lifetime-primary is only valid with --method comparative.
|
|
188
|
+
|
|
189
|
+
# errors.lifetimePrimaryUsePriorMutualExclusion
|
|
190
|
+
|
|
191
|
+
Cannot combine --lifetime-primary with --use-prior. Choose one variant: --lifetime-primary (lifetime vs filtered) or --use-prior (current year vs all prior).
|
|
192
|
+
|
|
193
|
+
# errors.lifetimePrimaryDepthMutualExclusion
|
|
194
|
+
|
|
195
|
+
Cannot combine --lifetime-primary with --depth. The lifetime-vs-X variant produces a single definition shape per object — no cascade.
|
|
196
|
+
|
|
197
|
+
# errors.lifetimePrimaryRequiresSecondaryFilter
|
|
198
|
+
|
|
199
|
+
--lifetime-primary requires a secondary filter: provide --date-literal, --year, or --from/--to.
|
|
200
|
+
|
|
201
|
+
# flags.dry-run.summary
|
|
202
|
+
|
|
203
|
+
Preview which definitions would be created without writing any records to the org. The preview table shows the same columns as the creation output: object name, record count, type, category, and time segment. Use before any scoped run to verify the object selection and methodology match your intent.
|
|
204
|
+
|
|
205
|
+
# flags.no-prompt.summary
|
|
206
|
+
|
|
207
|
+
Skip the confirmation prompt and create definitions immediately. Use for scripted execution and CI automation workflows.
|
|
208
|
+
|
|
209
|
+
# prompt.showDetail
|
|
210
|
+
|
|
211
|
+
Show detailed preview?
|
|
212
|
+
|
|
213
|
+
# prompt.confirm
|
|
214
|
+
|
|
215
|
+
Create %s Profiling Definitions?
|
|
216
|
+
|
|
217
|
+
# output.cancelled
|
|
218
|
+
|
|
219
|
+
Definition creation cancelled.
|
|
220
|
+
|
|
221
|
+
# examples
|
|
222
|
+
|
|
223
|
+
- Create definitions for a single object using all profiling methods:
|
|
224
|
+
|
|
225
|
+
<%= config.bin %> <%= command.id %> --target-org myOrg --objects Account
|
|
226
|
+
|
|
227
|
+
- Preview what would be created before committing (recommended before batch runs):
|
|
228
|
+
|
|
229
|
+
<%= config.bin %> <%= command.id %> --target-org myOrg --filter custom --with-records --dry-run
|
|
230
|
+
|
|
231
|
+
- Profile all custom objects with at least 100 records, tagged by engagement phase:
|
|
232
|
+
|
|
233
|
+
<%= config.bin %> <%= command.id %> --target-org myOrg --filter custom --with-records --min-records 100 --category "Phase 1"
|
|
234
|
+
|
|
235
|
+
- Isolate Financial Services Cloud objects by namespace:
|
|
236
|
+
|
|
237
|
+
<%= config.bin %> <%= command.id %> --target-org myOrg --namespace FinServ --method metadata
|
|
238
|
+
|
|
239
|
+
- Rolling quarterly trend analysis across the last 4 quarters:
|
|
240
|
+
|
|
241
|
+
<%= config.bin %> <%= command.id %> --target-org myOrg --objects Opportunity --method comparative --date-literal THIS_QUARTER --depth 4
|
|
242
|
+
|
|
243
|
+
- Lifetime vs last 2 years — show what fraction of all records were created in the recent window:
|
|
244
|
+
|
|
245
|
+
<%= config.bin %> <%= command.id %> --target-org myOrg --objects Account,Contact,Opportunity --method comparative --lifetime-primary --date-literal LAST_N_YEARS:2
|
|
246
|
+
|
|
247
|
+
- Lifetime vs a specific year — compare all records ever against records created in 2024:
|
|
248
|
+
|
|
249
|
+
<%= config.bin %> <%= command.id %> --target-org myOrg --objects Opportunity --method comparative --lifetime-primary --year 2024
|
|
250
|
+
|
|
251
|
+
- Won vs Lost opportunity analysis to surface data quality gaps between business outcomes:
|
|
252
|
+
|
|
253
|
+
<%= config.bin %> <%= command.id %> --target-org myOrg --objects Opportunity --objects Case --objects Lead --method outcome
|
|
254
|
+
|
|
255
|
+
- Bulk run with shared, human-readable category labels across every created definition:
|
|
256
|
+
|
|
257
|
+
<%= config.bin %> <%= command.id %> --target-org myOrg --filter custom --with-records --time-category "Q1 2026" --segment-category "Pilot Run"
|
|
258
|
+
|
|
259
|
+
# flags.profiled.summary
|
|
260
|
+
|
|
261
|
+
Only create definitions for objects that already have successful metadata profiling results. Builds on prior metadata analysis — run metadata profiling first, review the results, then create historical or comparative definitions for the objects worth deeper analysis. Cannot be combined with --method metadata.
|
|
262
|
+
|
|
263
|
+
# errors.profiledWithMetadata
|
|
264
|
+
|
|
265
|
+
Cannot use --profiled with --method metadata. The --profiled flag targets objects that already have metadata profiling results.
|
|
266
|
+
|
|
267
|
+
# errors.noObjectsFound
|
|
268
|
+
|
|
269
|
+
No objects found matching the specified filters.
|
|
270
|
+
|
|
271
|
+
# errors.objectsNotFound
|
|
272
|
+
|
|
273
|
+
None of the specified objects exist in the org: %s
|
|
274
|
+
|
|
275
|
+
# errors.allObjectsSkipped
|
|
276
|
+
|
|
277
|
+
All %d objects already have existing definitions.
|
|
278
|
+
|
|
279
|
+
# errors.operationFailed
|
|
280
|
+
|
|
281
|
+
Failed to create definitions: %s
|
|
282
|
+
|
|
283
|
+
# errors.filterFailed
|
|
284
|
+
|
|
285
|
+
Failed to filter objects: %s
|
|
286
|
+
|
|
287
|
+
# flags.profile.summary
|
|
288
|
+
|
|
289
|
+
Trigger profiling immediately after definitions are created — equivalent to running `sf cuneiform profile` as a follow-up. Useful for quick single-object setup. For batch runs, create definitions first, review them, then profile separately.
|
|
290
|
+
|
|
291
|
+
# flags.open.summary
|
|
292
|
+
|
|
293
|
+
Open the created definition in Salesforce Lightning after creation completes. When multiple definitions are created, opens the first one. Useful for verifying the definition record in the Profiling Definition Wizard.
|
|
294
|
+
|
|
295
|
+
# flags.logs.summary
|
|
296
|
+
|
|
297
|
+
Write session logs to the .cuneiform/logs/ directory for audit and troubleshooting.
|
|
298
|
+
|
|
299
|
+
# errors.noProfiledObjects
|
|
300
|
+
|
|
301
|
+
No objects have been profiled yet. Run profiling with --method metadata first.
|
|
302
|
+
|
|
303
|
+
# errors.orgUnreachable
|
|
304
|
+
|
|
305
|
+
Unable to connect to the target org.
|
|
306
|
+
|
|
307
|
+
The org "%s" could not be reached. This usually means:
|
|
308
|
+
|
|
309
|
+
1. The org alias or username is incorrect
|
|
310
|
+
2. The org has expired or been deleted
|
|
311
|
+
3. Your authentication has expired
|
|
312
|
+
|
|
313
|
+
To resolve:
|
|
314
|
+
|
|
315
|
+
- Verify the org exists: sf org list
|
|
316
|
+
- Re-authenticate: sf org login web --alias <your-org>
|
|
317
|
+
- Check org status: sf org display --target-org <your-org>
|
|
318
|
+
|
|
319
|
+
# errors.noTargetOrg
|
|
320
|
+
|
|
321
|
+
Could not determine target org username.
|
|
322
|
+
|
|
323
|
+
# errors.mutuallyExclusiveRecordFlags
|
|
324
|
+
|
|
325
|
+
Cannot use --with-records and --without-records together.
|
|
326
|
+
|
|
327
|
+
# errors.minRecordsWithoutRecords
|
|
328
|
+
|
|
329
|
+
Cannot use --min-records with --without-records. The --min-records flag requires record counts, which --without-records excludes.
|
|
330
|
+
|
|
331
|
+
# errors.recordtypeMethodRequired
|
|
332
|
+
|
|
333
|
+
--recordtype flag cannot be used with --method metadata. Use it with --method historical, comparative, recordtype, outcome, or full.
|
|
334
|
+
|
|
335
|
+
# output.title
|
|
336
|
+
|
|
337
|
+
Creating Cuneiform Profiling Definitions for %s (%s)
|
|
338
|
+
|
|
339
|
+
# output.creating
|
|
340
|
+
|
|
341
|
+
Creating %d Cuneiform Profiling Definitions
|
|
342
|
+
|
|
343
|
+
# errors.objectsNotFoundDetail
|
|
344
|
+
|
|
345
|
+
No Salesforce Objects were found matching the specified criteria.
|
|
346
|
+
|
|
347
|
+
Please check the object name(s) and confirm they exist in your Salesforce org.
|
|
348
|
+
|
|
349
|
+
# spinner.connecting
|
|
350
|
+
|
|
351
|
+
Connecting
|
|
352
|
+
|
|
353
|
+
# spinner.validatingObjects
|
|
354
|
+
|
|
355
|
+
Validating Salesforce Objects
|
|
356
|
+
|
|
357
|
+
# warnings.objectNotVerified
|
|
358
|
+
|
|
359
|
+
We could not verify the Object %s; no Profiling Definitions will be created for this object.
|
|
360
|
+
|
|
361
|
+
# output.failedSummary
|
|
362
|
+
|
|
363
|
+
%s definitions failed:
|
|
364
|
+
|
|
365
|
+
# output.profileDryRun
|
|
366
|
+
|
|
367
|
+
[DRY RUN] Would start profiling for %s definitions.
|
|
368
|
+
|
|
369
|
+
# output.profilingStarting
|
|
370
|
+
|
|
371
|
+
Profiling created definitions...
|
|
372
|
+
|
|
373
|
+
# output.profilingSuccess
|
|
374
|
+
|
|
375
|
+
[PROFILING] %s — request %s
|
|
376
|
+
|
|
377
|
+
# warnings.profilingFailed
|
|
378
|
+
|
|
379
|
+
Failed to start profiling for %s: %s
|
|
380
|
+
|
|
381
|
+
# output.openedMultiple
|
|
382
|
+
|
|
383
|
+
Opened first definition. Use Salesforce to view all %s definitions.
|
|
384
|
+
|
|
385
|
+
# output.openedSingle
|
|
386
|
+
|
|
387
|
+
Opened definition in Salesforce.
|
|
388
|
+
|
|
389
|
+
# output.sessionLog
|
|
390
|
+
|
|
391
|
+
Session log: %s
|
|
392
|
+
|
|
393
|
+
# output.creationSummary
|
|
394
|
+
|
|
395
|
+
Creation Summary
|
|
396
|
+
|
|
397
|
+
# output.summaryObjects
|
|
398
|
+
|
|
399
|
+
Objects:
|
|
400
|
+
|
|
401
|
+
# output.summaryMethod
|
|
402
|
+
|
|
403
|
+
Method:
|
|
404
|
+
|
|
405
|
+
# output.summaryToCreate
|
|
406
|
+
|
|
407
|
+
To create:
|
|
408
|
+
|
|
409
|
+
# output.summaryExisting
|
|
410
|
+
|
|
411
|
+
Existing:
|
|
412
|
+
|
|
413
|
+
# output.summaryPreview
|
|
414
|
+
|
|
415
|
+
Preview:
|
|
416
|
+
|
|
417
|
+
# output.summaryCreated
|
|
418
|
+
|
|
419
|
+
Created:
|
|
420
|
+
|
|
421
|
+
# output.summarySkipped
|
|
422
|
+
|
|
423
|
+
Skipped:
|
|
424
|
+
|
|
425
|
+
# output.summaryFailed
|
|
426
|
+
|
|
427
|
+
Failed:
|
|
428
|
+
|
|
429
|
+
# output.summaryHeader
|
|
430
|
+
|
|
431
|
+
Summary
|
|
432
|
+
|
|
433
|
+
# output.tablePrefix.preview
|
|
434
|
+
|
|
435
|
+
Preview
|
|
436
|
+
|
|
437
|
+
# output.tablePrefix.created
|
|
438
|
+
|
|
439
|
+
Created
|
|
440
|
+
|
|
441
|
+
# output.skippedExisting
|
|
442
|
+
|
|
443
|
+
Skipped %s Existing Definitions
|
|
444
|
+
|
|
445
|
+
# output.definitionsTitle
|
|
446
|
+
|
|
447
|
+
Cuneiform Profiling Definitions
|
|
448
|
+
|
|
449
|
+
# table.header.object
|
|
450
|
+
|
|
451
|
+
object
|
|
452
|
+
|
|
453
|
+
# table.header.records
|
|
454
|
+
|
|
455
|
+
records
|
|
456
|
+
|
|
457
|
+
# table.header.type
|
|
458
|
+
|
|
459
|
+
type
|
|
460
|
+
|
|
461
|
+
# table.header.category
|
|
462
|
+
|
|
463
|
+
category
|
|
464
|
+
|
|
465
|
+
# table.header.time
|
|
466
|
+
|
|
467
|
+
time
|
|
468
|
+
|
|
469
|
+
# table.header.segment
|
|
470
|
+
|
|
471
|
+
segment
|
|
472
|
+
|
|
473
|
+
# spinner.status.created
|
|
474
|
+
|
|
475
|
+
created
|
|
476
|
+
|
|
477
|
+
# spinner.status.skipped
|
|
478
|
+
|
|
479
|
+
skipped
|
|
480
|
+
|
|
481
|
+
# output.summaryToCreateSuffix
|
|
482
|
+
|
|
483
|
+
%s definitions
|
|
484
|
+
|
|
485
|
+
# output.summaryExistingSuffix
|
|
486
|
+
|
|
487
|
+
%s definitions (skipped)
|
|
488
|
+
|
|
489
|
+
# flags.name-prefix.summary
|
|
490
|
+
|
|
491
|
+
Prefix prepended to each definition name (e.g., --name-prefix TC-01). Joined with the bullet separator character.
|
|
492
|
+
|
|
493
|
+
# flags.name-suffix.summary
|
|
494
|
+
|
|
495
|
+
Suffix appended to each definition name (e.g., --name-suffix "Run A"). Joined with the bullet separator character.
|
|
496
|
+
|
|
497
|
+
# flags.time-category.summary
|
|
498
|
+
|
|
499
|
+
Verbatim time category applied to every definition created in this run (e.g., --time-category "Q1 2026" or --time-category "Pilot Period"). Overrides all computed time category values regardless of method, year, or outcome configuration. Useful for grouping definitions across a bulk run with a single shared, human-readable time label.
|
|
500
|
+
|
|
501
|
+
# flags.segment-category.summary
|
|
502
|
+
|
|
503
|
+
Verbatim segment category applied to every definition created in this run (e.g., --segment-category "Pilot Run" or --segment-category "Phase 1 Cohort"). Overrides all computed segment category values regardless of method, record type, or outcome configuration. Useful for grouping definitions across a bulk run with a single shared, human-readable segment label.
|
|
504
|
+
|
|
505
|
+
# flags.origin.summary
|
|
506
|
+
|
|
507
|
+
Origin message appended to auto-generated definition descriptions. Defaults to "Created via the Cuneiform for Salesforce CLI." Pass an empty string to suppress the origin tag.
|
|
508
|
+
|
|
509
|
+
# spinner.status.failed
|
|
510
|
+
|
|
511
|
+
failed
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# summary
|
|
2
|
+
|
|
3
|
+
Preserve profiling definitions as portable CSV files before sandbox refreshes, package upgrades, or cross-org migrations — so hours of scoping work are recoverable in seconds.
|
|
4
|
+
|
|
5
|
+
# description
|
|
6
|
+
|
|
7
|
+
Profiling definitions represent hours of scoping work — object selection, method assignment, category classification, field configuration. That configuration exists inside the Salesforce org and a sandbox refresh removes it. This command extracts all profiling definitions and writes them to a self-contained export directory for backup, migration, or version control.
|
|
8
|
+
|
|
9
|
+
The export creates a timestamped directory containing three files:
|
|
10
|
+
|
|
11
|
+
- `export.json` — SFDMU configuration file for round-trip compatibility with `definition import`
|
|
12
|
+
- `pnova__Profiling_Definition__c.csv` — all definition records (fields covering identity, aggregation status, version tracking, profiling configuration, and formula fields)
|
|
13
|
+
- `export-metadata.json` — source org, timestamp, record count, and file manifest
|
|
14
|
+
|
|
15
|
+
This command exports OUT of the org. To bring definitions back IN, use `sf cuneiform definition import`.
|
|
16
|
+
|
|
17
|
+
WHEN TO USE:
|
|
18
|
+
|
|
19
|
+
- Before a sandbox refresh — preserve definitions so you can restore after the refresh wipes custom data
|
|
20
|
+
- Before a package upgrade — capture the current configuration in case the upgrade affects profiling definitions
|
|
21
|
+
- For cross-org migration — export from sandbox, review the CSV in a spreadsheet, import to production
|
|
22
|
+
- For version control — commit definition exports to Git with `--exclude-ids` for clean diffs between versions
|
|
23
|
+
|
|
24
|
+
The `--exclude-ids` flag strips Salesforce-generated IDs (Id, CreatedById, LastModifiedById) from the CSV output. This produces clean diffs between exports — org-specific IDs create false diffs in version control.
|
|
25
|
+
|
|
26
|
+
Read-only. Does not modify definitions in the org. Fails if the output directory already exists, preventing accidental overwrites of previous exports.
|
|
27
|
+
|
|
28
|
+
# flags.target-org.summary
|
|
29
|
+
|
|
30
|
+
Export definitions from this Salesforce org. Specify the org alias or username when you have multiple authenticated orgs.
|
|
31
|
+
|
|
32
|
+
# flags.output.summary
|
|
33
|
+
|
|
34
|
+
Override the default timestamped output directory. Defaults to `./data/exports/definitions/{timestamp}`, creating a unique directory per export. Specify a custom path to organize exports within a project structure (e.g., `--output ./config/definitions`).
|
|
35
|
+
|
|
36
|
+
# flags.exclude-ids.summary
|
|
37
|
+
|
|
38
|
+
Strip Salesforce-generated IDs (Id, CreatedById, LastModifiedById) from the CSV output. Use this when committing exports to Git — org-specific IDs differ between environments and create false diffs. Keep IDs when exporting for same-org restore fidelity.
|
|
39
|
+
|
|
40
|
+
# spinner.exporting
|
|
41
|
+
|
|
42
|
+
Exporting definitions...
|
|
43
|
+
|
|
44
|
+
# export.complete
|
|
45
|
+
|
|
46
|
+
Exported %s definition(s) successfully.
|
|
47
|
+
|
|
48
|
+
# output.directory
|
|
49
|
+
|
|
50
|
+
Output directory: %s
|
|
51
|
+
|
|
52
|
+
# table.header.file
|
|
53
|
+
|
|
54
|
+
File
|
|
55
|
+
|
|
56
|
+
# table.header.definition
|
|
57
|
+
|
|
58
|
+
Definition
|
|
59
|
+
|
|
60
|
+
# table.header.path
|
|
61
|
+
|
|
62
|
+
Path
|
|
63
|
+
|
|
64
|
+
# warnings.title
|
|
65
|
+
|
|
66
|
+
Warnings
|
|
67
|
+
|
|
68
|
+
# examples
|
|
69
|
+
|
|
70
|
+
- Back up all definitions before a sandbox refresh:
|
|
71
|
+
|
|
72
|
+
<%= config.bin %> <%= command.id %> --target-org myOrg
|
|
73
|
+
|
|
74
|
+
- Save to a specific directory within your project structure:
|
|
75
|
+
|
|
76
|
+
<%= config.bin %> <%= command.id %> --target-org myOrg --output ./backup/definitions
|
|
77
|
+
|
|
78
|
+
- Export for Git — strip org-specific IDs so diffs reflect only meaningful configuration changes:
|
|
79
|
+
|
|
80
|
+
<%= config.bin %> <%= command.id %> --target-org myOrg --exclude-ids --output ./config/definitions
|
|
81
|
+
|
|
82
|
+
- Export for cross-org migration — keep IDs for exact restore fidelity in the target org:
|
|
83
|
+
|
|
84
|
+
<%= config.bin %> <%= command.id %> --target-org myOrg --output ./migration/source-org
|
|
85
|
+
|
|
86
|
+
- Output as JSON for scripting, automation pipelines, or downstream tooling:
|
|
87
|
+
|
|
88
|
+
<%= config.bin %> <%= command.id %> --target-org myOrg --json
|