R17 Covenant Resolution System
Dependencies​
Being able to specify covenants easily, and have them looked up conveniently, is crucial to the developer experience.
A partial solution is hinted at in the IPLD Schemas
Requirements:
- Follow Deno as closely as possible, which follows the browser
- convenient bare name based references to Covenants
- app complex wide upgrades of all covenants at once
- lock file like application, where a covenant referred to by name can be locked to a as soon as the first resolution occurs
- allow any other package manager to be used within a covenant
- means of doing resolution using external registries in a priority order
- local filesystem resolution
- trivial sharing with other chains
- overrides in dev mode, or in forked mode
- permanent overrides, to patch deep dependencies without forking everything
- duck typing on covenants
- support import maps ?
- support pathing for nested covenants
- Allow specifying hashes in covenant config declarations, possibly via the locking mechanism
- Any Covenant contains the same code as any registry, so any covenant can be used as a registry where its children can be fetched by path
- Cover hashlocking of first run ? if a url has not been converted to a covenant, then we should be able to do that, for convenience, ie: direct form npm, or deno.land
- Should never run any install scripts - should only use inert data
- Covenants must be fully hashlocked or else you cannot load from them
- Support direct loading from git hashes with url hints
- Vendoring of dependencies should be automatic and instant on first use
- Be able to specify a hashlocked covenant by name alone, or a path root
- Integrate with generate resolution of names to chainIds then to paths, like urls.
- Do not rely on a fast filesystem to be able to walk and test for multiple paths. Ie: only allow specific paths - no guessing or auto completes
- import maps should allow arbitrary overrides of deeply nested dependency resolutions
- handle bare paths eg:
something
orsomething/deeper
- handle absolute paths eg:
interblock://somechainname