CSS Display Module Level 3 defines the animation type of visibility to be discrete, but Web Animations Level 1 defines in the appendix a special interpolation method for visibility:
For the visibility property, visible is interpolated as a discrete step where values of p between 0 and 1 map to visible and other values of p map to the closer endpoint; if neither value is visible then discrete animation is used.
which means that it's not "flipping at half way" as the definition of discrete animation type. So at least one spec needs a fix on this.