Named environment profiles let the CLI compare and mirror component definitions between instances without treating instance-local UUIDs as portable identity.
Save profiles
env add prompts for an API key, validates it through /api/v1/me, and saves the inferred instance beside the profile. Use --offline only when validation is intentionally unavailable.
The special profile name default means the normal login or REVO_URL/REVO_TOKEN configuration.
Prepare stable identity
Cross-environment matching uses a stable component key stored in metadata. Component and element UUIDs are instance-local and are not portable identifiers.
If the same logical component already exists in both environments, make both copies use the exact same stable-key value before promotion. Similar readable prefixes with different generated suffixes are different identities.
Review drift
The plan classifies components as create, update, unchanged, orphaned, delete, or collision. Portable content comparison ignores instance-local IDs, versions, and timestamps. A duplicate stable key is a collision and blocks apply.
Use --key or --category to narrow a review:
--strict exits non-zero whenever the environments differ, making it suitable for a CI drift gate.
Apply a plan
Start with a dry run:
Apply creates first, then updates, then deletes. Each successful create/update is fetched again and verified against the source content hash. Failures are reported per component and do not hide earlier results.
By default, target-only components are orphan and remain untouched. Deletion requires all three choices:
--prune --force deletes target components that are absent from the selected source scope. Review the exact plan and stable-key ownership before using it in CI.
CI pattern
Keep profile keys and default credentials in the CI secret store. Current environment synchronization is component-focused; do not assume other Platform API families are mirrored unless a future CLI version explicitly adds them.