basically:
- "source"/"resources" are provided in a json file with checksums, are resolved from a local or remote cache, and if not there, then read from the filesystem.
- the same cache is used to store the result of a resolve: basically hashing everything requirements, interpreter constraints, etc to find a cache key for the precise resolve