pub fn product_artifacts(ctx: &Context) -> Result<Vec<Artifact>, Error>Expand description
The product model as the site’s templates read it: site/data/registry/product.json.
A projection of crate::product::ProductModel through the product.* capabilities, so the
homepage renders what the API and MCP answer. The bodies are not in it: a feature’s
page takes its prose from the file the record names in source, so the dataset stays
the metadata every card, chapter, matrix row and count needs and never a second copy of
the writing.
Every feature is copied field by field through PUBLIC_FEATURE_FIELDS: the site is
public, and what reaches it is what was named, not what was not excluded.
Index-independent, like the Why dataset: the payload depends on the features, the
registry, the catalogue and the topology and never on the index’s fingerprint, so both
generate passes of scripts/derive produce the same bytes.