For a start we should distinguish between:
- core extensions (provided)
- installed extensions
- remote-core: a different version of a core extension
- remote-installed: a different version of an installed extension
- remote: an extension that is available to be installed (either from the local/cached repository or from a remote repository)
The same distinction should be applied to the list of dependencies of an extension.