OptionalLookupMatchField?: stringFK only: which column of the related entity the model's answer matches. Default 'Name'.
OptionalOnLookupMiss?: "null" | "fail" | "create"FK only: what to do when no related row matches. Default 'null'.
MODE 2 — a related child row. FanOutRef promotes an array result to N rows (one per element). Values resolve from $ (result), record (parent row) and $run (provenance) alike.
MODE 3 — a tag, through the MJ Tagging system. The pipeline states WHERE in the taxonomy this feature is allowed to live and how far it may grow, so one entity can constrain different features to different subtrees.
OptionalGrowth?: "constrained" | "auto-grow" | "hybrid"Maps to TagEngine's TaxonomyMode. Default 'constrained'.
OptionalMatchThreshold?: numberMinimum semantic-match score to accept an existing tag.
OptionalMaxDepth?: numberHow deep below the root a value may be placed/created. 1 = direct children only.
Root tag this feature's values must live under. Required — an unrooted feature pollutes the taxonomy.
OptionalTaggedEntityName?: stringEntity the TaggedItem points at. Default: the processed entity.
MODE 1 — a field on the processed row. Write semantics are DERIVED from the field's metadata: TSType coercion for numeric/date/boolean, the CHECK value list for an enum, and for a foreign key the allowed set comes from RelatedEntityID — resolved by matching MatchField and writing the related row's ID. The spec never restates what metadata already knows.