$MESSAGE Timeout : STRING THROW
@ seconds int
"no answer within {$seconds} s"

A message takes a copy of the current settings at its $MESSAGE line: which artefacts are enabled, their names, bases and options, and the $LANGUAGE. Later settings do not change it.

The artefact list

$MESSAGE Name : A B … generates exactly the listed artefacts for this message, whatever ENABLE / DISABLE said; everything else — names, bases, LOCALE EXTRA, EXIT — still comes from the settings. The sticky settings themselves are not changed, so the next message is unaffected.

Consistency checks

After parsing, a message whose settings cannot produce compilable code is an error, reported without a position:

mstring: error: message 'A': $STRING MEMBER AS text makes a member of the streamable class, but $STREAMABLE is not enabled
mstring: error: message 'A': $EXCEPTION OVERRIDE whatStr overrides a method of the base class, but the exception has none (INHERITED)

A message without text is a warning; it still generates code (the text is empty).