Loading...
Loading...
Generate the JSON config file that the Salesforce sandbox post-copy automation tool consumes, from a customer SOP in any format (PDF, xlsx, csv, JSON, docx, Markdown, plain text, or a screenshot of an endpoint table). Use when the user asks to create, build, generate, produce, or convert a post-copy or post-refresh automation config — turning a sandbox-refresh SOP into a JSON array of OutboundMessages and RemoteSiteSettings entries with ConfigurationName, Label, Fields, IsActive, and ExecutionOrder. Also trigger for phrasings like "post-copy config", "post-refresh automation JSON", "update the outbound message (OBM) endpoints after refresh", "convert this SOP to config", "remote site settings JSON", "refresh planner to JSON", or "sandbox refresh config". DO NOT TRIGGER when: user wants to deploy the generated config to an org (use platform-metadata-deploy) or execute/run the post-copy automation tool. This is the only skill for Salesforce sandbox post-copy config generation.
npx skill4agent add forcedotcom/sf-skills automation-sandbox-post-copy-config-generateassets/config_template.json[
{
"ConfigurationName": "OutboundMessages",
"Label": "IR_Account_OBM_PROD",
"Fields": { "EndpointUrl": "https://uat.example.com/services/account", "Object": "Account" },
"IsActive": true,
"ExecutionOrder": 1
},
{
"ConfigurationName": "RemoteSiteSettings",
"Label": "R12_Remote_Site",
"Fields": { "RemoteSiteUrl": "https://uat.example.com" },
"IsActive": true,
"ExecutionOrder": 2
}
]ConfigurationNameOutboundMessagesRemoteSiteSettingsTypeNameOperationFieldsEndpointUrlObjectFieldsRemoteSiteUrlUrlRemoteSiteURLstepsactionsrecords<…>REPLACE_WITH_…ConfigurationNamegenerating-*null<from-backup>TBDTODOpost-copy-config.jsonassets/config_template.jsonreferences/configuration_catalog.mdreferences/source_format_handling.mdpypdfpytesseractopenpyxldata_only=Truepython-docxReadreferences/source_format_handling.mdreferences/sop_parsing_patterns.mdConfigurationNamereferences/configuration_catalog.mdOutboundMessagesRemoteSiteSettingsassets/config_template.jsonOutboundMessagesRemoteSiteSettings<…><…>ConfigurationNameLabelFieldsIsActiveExecutionOrderTypeNameOperation<…>assets/json_schema.jsonConfigurationNameFieldsIsActiveExecutionOrderExecutionOrderExecutionOrderConfigurationNamereferences/sop_parsing_patterns.mdexamples/sample_sop_to_config.json| Constraint | Rationale |
|---|---|
| Output is a JSON array at the top level (not an object with a wrapper key) | The post-copy tool consumes an array directly |
Every entry has all five required keys: | The tool fails fast on missing keys; partial entries are not silently accepted |
| Unknown values cause the runtime mapper to error out — never invent a new type without updating the catalog |
| Wrong key names mean the tool can't locate the field at runtime |
| The post-copy tool applies the value as-is; placeholders are not resolved at runtime |
| If the SOP names an action but no concrete value (URL, etc.) is provided, skip the entry entirely and list it in the response | Generating an entry without a real value would produce a silent no-op or a deployment error at runtime |
Every Field in every emitted entry must be a real value sourced from the customer's SOP or a supplemental sheet they provided. Never emit | Customers consume the JSON directly — empty / placeholder fields surface to them as broken output and would also fail at runtime |
| Before skipping an OBM / RemoteSite for missing values, search every tab / sheet of the supplied workbook (and every supplied file) for an endpoint table keyed by that name | Customer SOPs frequently split the action list and the URL table across different sheets (e.g., the Michelin UAT Refresh Planner lists OBMs in the Integration tab but the URL table lives in the Evolution SFA tab) |
Information already captured by another field is not repeated in | Duplicate keys make the entry ambiguous and waste bytes the tool then has to reconcile |
For | Same Label can apply to multiple OBMs differing only by entity; |
For | The post-copy tool matches the field by exact API name; any other spelling means it can't locate the field and the entry silently no-ops at runtime |
| The post-copy tool runs all entries with the same |
| The customer toggles them on per-environment; deleting loses traceability |
Default | Most SOP steps are required; explicit opt-out is the exception |
assets/config_template.jsonConfigurationNameLabelFieldsIsActiveExecutionOrderTypeNameOperationapiNamestepsactionsrecords| Issue | Resolution |
|---|---|
| SOP step says "delete all endpoints" rather than "update X to Y" | Emit an entry with |
| Same Label appears for multiple environments (fcQA + fcUAT) | Emit one entry per environment; suffix the Label or use the environment-specific Label as it appears in the SOP |
For OutboundMessages, the same Label can legitimately apply to multiple entries when each targets a different | Do not collapse them — emit one entry per Object. The |
| SOP groups many Custom Labels together in a single table | One entry per row of the table — do not collapse into a single bulk entry |
| Action targets a setting outside the catalog (CustomLabels, ConnectedApps, NamedCredentials, SSO, CustomSettings, etc.) | Skip the action, do NOT invent a new |
| SOP includes pre-refresh steps interleaved with post-refresh | Filter out pre-refresh — only post-refresh / post-copy actions belong in the output |
| SOP names an outbound message / remote site to update but does not include the new URL | Skip the entry. List the skipped item in the response so the user can supply the URL or amend the SOP |
SOP includes secrets in URLs (e.g., | Embed them verbatim — the tool consumes the value as-is — but flag in the response so the user is aware the JSON now contains a secret and should be stored / shared accordingly |
| User's SOP is in a non-English language or has heavy formatting (tables, callouts) | Extract the prose first, normalize whitespace, then parse — formatting artifacts do not need to survive into the JSON |
| The SOP includes screenshots / images. Some are illustrative (architecture diagrams, flow charts, "this is what the setup screen looks like" examples); others are data-bearing (a screenshot of a real Outbound Messages list, a captured Remote Site table). | Treat illustrative images as out-of-scope — do NOT extract values from them. For data-bearing images (the surrounding text refers to "the values shown below" / "as captured in the screenshot above" / a real Endpoint URL is visible), OCR them and use the values. See |
| The SOP is supplied as multiple files (e.g., a PDF + a companion xlsx + a screenshot folder), or values are split across tabs / pages | Read every supplied file end-to-end before skipping any entry. The action list and the URL table are frequently in different files — see the rule above about multi-sheet sources. |
post-copy-config.jsonConfigurationNameassets/json_schema.json| Need | Delegate to |
|---|---|
| Generate the actual Salesforce metadata XML for a Custom Label / Named Credential / Remote Site / etc. | The matching |
| Deploy generated metadata or run the post-copy tool against an org | |
| Compare an SOP against entities defined in UDD | |
| File | When to read |
|---|---|
| Step 4 — starting structure for the JSON output |
| Step 5 — validate every emitted entry |
| Step 3 — to map an SOP action to a |
| Step 2 and step 6 — heuristics for extracting actions from prose and ordering them |
| Step 1 — exact extraction recipe per input format (PDF / xlsx / csv / JSON / docx / image) and the data-bearing-vs-illustrative image heuristic |
| Step 7 — verify output shape matches expected format |
| Step 7 — see a representative SOP excerpt that produced the sample JSON |