The Layers
In superbrief:
- Content — filesystems, and their hashes.
- Execution — hashes go in, something is exec’d, hashes come out.
- Plans — multiple steps of execution are described in advance.
- Intentions — a templating system can crank out plans.
L0: Content
- nuff said. WareIDs. That's it.
- A WareID is a content-addressable identifier of a Ware. A Ware is just a fancy name for (packed) filesystem snapshot.
- A Ware has no implied or presumed structure. It’s just files.
L1: Hashed / Crystallized / Executable
- Ready to invoke — all inputs are content-addressed wareIDs.
- No catalog references, nothing.
- Internal graph structure no longer allowed either. No pipes. Just one action.
- Is the basis of memoization. You can hash this whole document.
- Should have no extraneous non-load-bearing contents, in order for this to work ideally. No semantic tagging should float down this far.
- One exception to this: if mounts have been used here, memoization should probably not be applied.
- Mostly not seen by a user, in practice, it turns out.
- If you engage some real verbose debugging flags, sure.
L2: Flattened / Resolved
- The replayable.
- Still has catalog references.