Optional Readonlyattributesfixed attributes, name -> value type; an attribute not named here is unknown
Readonlyidthe type:name id, the same string MwlHookRegistry keys an implementation by
Optional Readonlyopenwhen set, any attribute name is accepted and every value is checked as this type
What a hook says about the attributes its own
[hook]calls carry. A hook's name is checked at compile time already; without this its attributes are not, so a typo in one of a command hook's 18 modes is only discovered at the moment the scenario runs it.The declaration is the hook's, not the tag's: MWG checks
[hook]invocations, where every attribute butnamebelongs to the hook. Ahook=attribute on a condition-bearing tag ([victory] hook=predicate:holds value=3) keeps that tag's own schema and this does not apply, sincevaluethere is the condition's to define.