Model Catalog Builder
The engine that assembles a ModelCatalog for a model. It is both the ElementCatalogScope fed to each element's ModelElement.specifyCatalog during roll-up and the CatalogCurationScope fed to each Model.curateCatalog block during model-level curation. Created and driven only by Model; never constructed directly.
Assembly is two-phase (see assemble):
Element roll-up (lenient): the element tree is walked in creation order and each element's
specifyCatalogcontributes nominations, each tagged with the contributing element's id (provenance). Because model-element names are unique, nominated keys are globally unique, so cross-element collisions cannot occur; should two elements nominate the same item (e.g. a parent and its child both nominate the child's response), the first wins. An invalid element nomination is recorded as a problem and skipped — never thrown — so a buggy reusable element cannot crash a consuming model.Model curation (strict): each
curateCatalogblock runs, able to add (overriding an element's nomination of the same key — model metadata wins), remove, or clear. An invalid model-level nomination throws.
Provenance is kept only here; it powers denominateAllFrom / denominateSubtree and never enters the serialized ModelCatalog.
Functions
Drop ALL element-declared nominations, leaving only what this block adds.
Remove every nomination contributed by element's own specifyCatalog.
Remove the nominated input with this key, if present.
Remove every nominated input matching predicate.
Remove the nominated output with this name, if present.
Remove every nominated output matching predicate.
Remove every nomination contributed by element or any element beneath it.
Nominate a numeric/string/JSON control by its key ("elementName.propertyName").
Nominate a response or counter by name.
Nominate a random-variable parameter (e.g. rvParameter("ServiceTimeRV", "mean")).