Updating (or creating) a dynamic attribute does not cause the updateTs or the version of the related record to be updated.
For example, if I update the value of attributeXYZ on recordABC, I would expect that recordABC would be updated and that the entity listener for recordABC would be fired.
Dynamic attributes work on the DataManager level, which is a higher-level mechanism comparing to ORM-based entity listeners and update timestamps. It’s just implemented this way, and actually has some advantages. For example, you can have dynamic attributes for an entity from an additional data store, so the entity record is in one database and dynamic attributes are in the other.
We wouldn’t like to introduce additional dependencies between these layers. Instead, we are thinking about extending the DataManager API to make it the main and recommended API for writing business logic.
If you really want to update timestamps and invoke entity listeners on the master entity, use a listener on the CategoryAttributeValue like this: