|
| runtime::Result< std::string, CapsuleError > | pulp::authoring_capsule::to_canonical_json (const Manifest &manifest) |
| | Serialize to canonical JSON: UTF-8 without BOM, LF, keys sorted by code point, no insignificant whitespace, shortest round-tripping numbers, no NaN or infinity, files sorted by path and dependencies by id in byte order.
|
| runtime::Result< Manifest, CapsuleError > | pulp::authoring_capsule::parse_manifest (std::string_view json) |
| | Parse and structurally validate.
|
| runtime::Result< std::string, CapsuleError > | pulp::authoring_capsule::revision_digest (const Manifest &manifest) |
| | sha256 over the canonical JSON of the whole manifest with exactly three fields removed: revision_id (self-referential), exported_at (the one value that changes when nothing else did), and attestations (signatures are computed over this digest).
|
| Completeness | pulp::authoring_capsule::derive_completeness (const Manifest &manifest) |
| | Recomputed from the component rows.
|
The capsule envelope: the only authority for what a capsule is.
The file extension, the marketplace category, the title, and the tags are descriptive. Routing reads profile, profile_version, product, authoring_kind, topology, and required_capabilities — nothing else.