The MediaCapabilityChangeEvent seems to mark things as having capabilities based on the MediaElement, but not on the actual capability being enabled.
For example, if I attempt to load a video, canSeek, canPlay, etc shouldn't be enabled until the media is actually ready.
Furthermore, if I get an error, I still have capabilities that are present when they shouldn't. For example canSeek is still true, etc.
When you load a new media element I would expect that all capabilites disable until the point they actually come into play. So with every request all the capabilities that were true would fire false, then true again as they came back into play.
The behavior you describe (that capabilities are disabled until the MediaElement is loaded, i.e. in the READY state) is the intended behavior, so if you're seeing a case where that's not happening, please file a bug.
Note that there was a bug (FM-242) in which the canSeek capability would be exposed before the video could truly be seeked, but that was fixed as of yesterday.
You raise a valid point that if the media enters an error state, then we should remove capabilities. Can you file a bug? And are there other cases where you're seeing capabilities exposed that shouldn't be?
A bug has already being filed for the case that when media enters an error state, we should remove capabilities.