RubricSource = Literal['goal', 'sticky', 'invocation']Where a notice's active criteria came from.
Closed rather than str, because this value is hashed into the state
fingerprint: a typo would silently change notice identity and force a fresh
notice every turn, which no test of rendered text would catch.