Catalogs on the Filesystem

The filesystem layout is a convention.

The essential form of a Catalog is just a series of IPLD objects. We project them into a filesystem layout based on some of their properties, for convenience and ease-of-splunking.

Everything is also linked by hash, and the filesystem paths shown here have nothing to do with that merkle tree. (That a git merkle tree can be computed over the filesystem projection is true, but generally considered incidental.)

Filesystem Outline

Example catalog filesystem outline:

{catalogroot}/{moduleName}/_module.json
{catalogroot}/{moduleName}/_releases/{releasename}.json
{catalogroot}/{moduleName}/_mirrors.json
{catalogroot}/{moduleName}/_replays/{HASH}

Why like this?

Can you author this filesystem manually?

Kinda, but not really. You'll need some tool assistance to do so.

If you write a release json by hand, you'd need to invoke a small tool to compute its CID and add it to the _module.json. You probably can't do that by hand easily.

Similarly, we should have a catalog linting tool that makes sure there aren't extra _releases/*.json files floating around that aren't actually referenced, and similarly for replays, etc.