I'd like to discuss the way trigger functions are evaluated for unsupported items, and what can be changed for the greater good.
Existing trigger functions can be separated in two logical groups.
1. Time-based functions, which are evaluated on schedule (every 30 seconds): nodata(), date(), dayofmonth(), dayofweek(), time(), now()
2. The rest, which are evaluated each time a new history value is received.
Currently when an item changes status to unsupported, any trigger expression function referencing this item change trigger value to UNKNOWN.
Let's look at first group of functions.
nodata() is the only sane way to detect whether an important item is receiving new values. When an item's data source is broken, and item turns unsupported, nodata() stops evaluating, making it impossible to detect that this exact item is not updating anymore. I'm aware of the way to track global number of server's unsupported items, but it requires tedious manual work to find out which item(s) went sideways, and it isn't healthy.
Due to limitations of currently implemented trigger expression parser, each date() dayofmonth() dayofweek() time() and now() function call requires a mandatory argument, a reference to an existing item. This item is not used in function calculation at all. Therefore, it is illogical to stop recalculation of these functions when dummy item argument turns unsupported, as there's no connection between a function and its item-parameter at all.
I feel that current implementation requires rethinking, and composing a spec about the way this must be handled.