Description
Ford's global cache, $flow, is a referentially transparent cache of builds, and so intuitively every build it contains should be usable by any other ship. This has obvious appeal: one can imagine providing a fresh ship with a pill containing a primed $flow in order to reduce boot time, or similarly serving builds to ships à la a Nix binary cache e.g. Cachix, for example.
However, the builds, being vases of cores, are generally not portable in the presence of jet hints. Producing a vase of a core evaluates its outer formula, eliminating any hints it contains in the process. Hints that depend on the cores these vases contain then miss their targets, breaking jet registration.
The trick to fix this is known, and involves using (trap vase)
in place of vase
to defer outer formula evaluation until the core is on the target ship, at which point jet registration can proceed normally. This technique is already used to get around the problem in Arvo's larval stage and gen/ivory.hoon.
So: to make caches portable, $flow, and the rest of ford that touches $flow, probably must be converted to deal with (trap vase)
instead of plain vase
. And in addition to just transforming the relevant types and code in ford, clay must procure a zuse in the form of a (trap vase)
rather than the one wrapped in a vase that's presently used (which is constructed in clay, via zapgar). Presumably this can be provided via Arvo.