Blueprint vs. cartridge
Why the specification has two objects where a repository with a build script might seem enough, and why the line between them runs exactly at the weights.
Two audiences, two shapes
A host wants something sealed: bytes it can verify against a signature and load, with no network access, no build, no decisions. That is a cartridge, and nothing about blueprints changes it.
A reader of source — a contributor, a reviewer, a license auditor, someone porting the model to new hardware — wants the opposite: everything open to inspection, nothing opaque, nothing that had to be trusted because it was too big to read. A directory of compiled modules and a 500 MB parameter archive fails that reader completely, even under an open-source license.
The two shapes cannot be the same object. A blueprint is the second shape; materialization is the function from one to the other.
blueprint (open, small, reviewable) cartridge (sealed, large, verifiable) ───────────────────────────────────── ───────────────────────────────────── API + runtime SOURCE runtime LIBRARY descriptor TEMPLATE ──► descriptor, with measured numbers sources: uri + revision + digest materialize weights, compiled model (bytes) toolchain pins, ordered steps ──► manifest: digests, licenses, provenance license of the code EFFECTIVE license of everything inside signed by: nobody needs to signed by: whoever materialized
Why the line runs at the weights
Three different things change hands at that line.
Ownership. Code in a blueprint belongs to its authors and is theirs to license. Weights belong to a publisher who set terms — sometimes permissive, sometimes capped by revenue, sometimes conditional on accepting an agreement. A repository that contains the weights has made a redistribution decision on behalf of everyone who clones it. A blueprint makes none: it names the publisher, the revision and the terms, and the person who builds decides.
Size and specificity. Source is kilobytes and target-independent. A compiled module is megabytes and useful for one backend on one architecture. Keeping them apart means the open part stays small enough to actually read, and targets can be added by changing a recipe instead of committing another set of binaries.
Trust. A recipe can be trusted by reading it. Bytes cannot — they are trusted because someone accountable signed them, or because you rebuilt them yourself. So a blueprint needs review, and a cartridge needs a signature by the party that ran the build. Conflating the two is how "open-source model packages" end up with unauditable binaries in their trees.
Why measured numbers stay out of the recipe
The descriptor’s rule is that performance and quality are measured on the stated target and
reported honestly. If a blueprint carried those numbers, every cartridge built from it would
inherit a claim about hardware its builder may never have touched. So the template leaves them
out, the schema rejects them, and a blueprint can offer only reference_measurements — "this is
what we saw" — which a materializer compares against and never copies. Two honest builders of
the same blueprint will publish different numbers. That is the system working.
Why product content is an input, not an example
A function-calling model needs a catalog of functions; a keyword spotter needs a vocabulary. Shipping "a sample" inside the blueprint looks harmless and is how product knowledge leaks into public components: the sample is always derived from the real one. The cartridge contract already draws this line for code — no application concepts inside a cartridge — and blueprints draw it for the build: the slot is declared, with a schema; the content arrives through a profile. A public blueprint ships at most a toy that could not be mistaken for anyone’s product.
What this buys, and what it costs
It buys cartridges that can be open source at all; license terms that surface before a download instead of after a release; private builds without forks; and a defined object for reproducible builds to be about.
It costs a second artifact to specify and keep true. A blueprint that is not the way the cartridge is actually built is worse than none — which is why the first blueprints replace the hand-run build paths of the existing cartridges instead of documenting them from the side.