Install multiple packs safely
Install several requested roots in one command when their exact dependency graphs and managed targets are compatible.
Preview roots in order
List roots in the order Luna should process them:
luna install [email protected] [email protected] `
--dry-run `
--scripts skip
Each root resolves its complete dependency graph before its files are applied. Shared transient packs at the same version are reused. Luna reports a conflict when another requested root requires a different version or when managed targets cannot coexist.
Reuse means one resolved node, one lock record, one set of managed-file contributions, and one lifecycle entry for the shared pack, even when several roots reference it. Its hooks run once rather than once per incoming reference. When uninstalling a root, Luna follows locked dependency edges from every root that remains; a shared dependency stays installed until its last reachable root is removed.
Understand partial success
A multi-root invocation processes requested roots sequentially. If a later root fails, earlier successful roots remain installed; the complete command is not one atomic transaction. A root already installed at the requested version is warned about and skipped so processing can continue.
Prefer separate commands when each root needs different parameters, remappings, script policy, or external-source approval. Shared command options otherwise apply to each requested root.
Apply and verify
Remove --dry-run after reviewing every root and dependency:
luna install [email protected] [email protected] `
--scripts skip
luna audit
If a later root fails, run luna audit to identify completed roots. Correct the
conflict and retry only the missing root, or explicitly uninstall earlier roots
that should not remain.