Composition / foldkit-composition

What validation finds

CodeMeaning
composition:missing-nodea root or Region names an id with no node
composition:orphana node that no root or Region reaches
composition:second-parenta node placed twice
composition:cyclea node that contains itself
composition:unknown-blocka Block name the Catalog does not have; the node is kept and what it holds is still checked
composition:invalid-propsprops the Block's schema refuses, including a key it does not name
composition:unknown-regiona Region the Block does not have
composition:region-cardinalitytoo few or too many children for the Region
composition:region-rejectsa child whose Content the Region does not accept
composition:root-rejectsa root whose Content the Catalog's roots do not accept
composition:invalid-appearancean appearance that is not a record, an axis the Block lacks, or a value off the axis's list
composition:unknown-tokena token axis naming a token the theme does not have
composition:invalid-conditiona when that is not a list of conditions
composition:unknown-contexta condition over a key the Catalog's context does not declare, or a value that key cannot have
composition:invalid-actionan event the Block does not have, a reference that is not { action, input }, or input the action's Schema refuses
composition:unknown-actionan action the Catalog does not offer

Props are decoded strictly, so a prop an old version left behind is found rather than silently kept.