npx skills add ...
npx skills add forcedotcom/sf-skills --skill deploying-ui-bundle
MUST activate when the project contains a uiBundles/*/src/ directory or sfdx-project.json and the task involves deploying, pushing to an org, or post-deploy setup. Use this skill when deploying a UI bundle app to a Salesforce org. Covers the full deployment sequence: org authentication, pre-deploy build, metadata deployment, permission set assignment, data import, GraphQL schema fetch, and codegen. Activate when files like *.uibundle-meta.xml or sfdx-project.json exist and the user mentions deploying, pushing, org setup, or post-deploy tasks.
npx skills add forcedotcom/sf-skills --skill deploying-ui-bundle
The order of operations is critical when deploying to a Salesforce org. This sequence reflects the canonical flow.
Check if the org is connected. If not, authenticate. All subsequent steps require an authenticated org.
Install dependencies and build the UI bundle to produce dist/. Required before deploying UI bundle entities.
Run when: deploying UI bundles and dist/ is missing or source has changed.
Check for a manifest (manifest/package.xml or package.xml) first. If present, deploy using the manifest. If not, deploy all metadata from the project.
Deploys objects, layouts, permission sets, Apex classes, UI bundles, and all other metadata. Must complete before schema fetch — the schema reflects org state.
Deploying does not mean assigning. After deployment:
Proactive behavior: after a successful deploy, discover permission sets in force-app/main/default/permissionsets/ and assign each one (or ask the user).
Only if data/data-plan.json exists. Delete runs in reverse plan order (children before parents). Import uses Anonymous Apex with duplicate rule save enabled.
Always ask the user before importing or cleaning data.
schema.graphql at project rootRun when: schema missing, or metadata/permissions changed since last fetch.
Build the UI bundle if not already done in Step 2.
After every successful metadata deploy:
data/data-plan.json exists, ask the user about data import