@elftia/presentation-contracts
v1.0.0
Published
Versioned Semantic Slot, Deck IR, stable-ID, and minimal provenance-reference contracts shared by Elftia presentation producers.
Readme
@elftia/presentation-contracts
Public, producer-neutral contracts for Elftia presentation authoring and materialization. This package is the single source for Deck IR v1, Semantic Slot v1, stable presentation identities, minimal asset/provenance/decision references, and their conformance goldens.
The package does not emit PPTX, discover templates, or make license decisions. In the absence
of a verified decisionRef, licenseStatus must remain not_evaluated.
Public seam
parseDeckIr,parseSemanticSlotSet, andparseTemplateContractvalidate untrusted data and reject unknown schema versions.createStableDeckId,createStableSlideId, andcreateStableObjectIdderive deterministic identities from semantic keys. Array indexes are rejected. User-created objects usecreatePersistentPresentationId; clones useclonePresentationIdand retainclonedFrom.migrateDeckIrandmigrateSemanticSlotSetare explicit migration registries. Version 1 has only the identity migration; no unknown version is guessed or silently coerced.
Stable-ID algorithm
elftia.presentation-id.v1 frames the kind and every NFKC-normalized UTF-8 input as
<byte-length>:<value>, joins the frames with |, computes SHA-256, and uses the first 128 bits
as <kind>_<32 lowercase hex>. fixtures/v1/stable-id-vectors.json is normative for every
language implementation.
Run npm run build --prefix packages/presentation-contracts to regenerate JSON Schemas,
goldens, their byte-level SHA-256 manifest, and the publishable JS/type bundles.
The ownership/versioning decision is recorded in
docs/design/presentation-contracts-owner-adr.md. From the Host repository,
npm run check:presentation-contracts builds this package and verifies that the Design Studio
TypeScript consumer and document-skills Python consumer interpret the same published artifacts,
stable-ID vectors, Deck IR content hash, versions, and license status identically.
