We would need to make sure we tear this observer down if we take this approach.

However, I don't think we need to add an observer here: we should be able to override `didChange` to track values to push to the invalidate hook.  If we take the `didChange` approach:
- we'll have fewer observers and
- we'll have less of a divergence between reduce CPs and regular CPs