Went into the lab again. First, rechecked whether or not all moves cancel on the first active frame by looking at their animations; some of them look like they cancel a lot later than their first active frame, but I guess I can't be sure just looking at them, right?i tested 4 df1 whiff vs kotal. blocking kotal doing d1 after. attacking kotal beats it with d1 (5 f) and trades with d3 (6f)
did a similar process with 114
Second, looked at numbers for other strings; your math doesn't work for f34. It would be -7 by your math, yet it can be punished by at least 10-frame normals (Kotal standing 2). It doesn't work for f1b2 either; your math would indeed make it -8, yet it can be punished by at least 13-frame normals (Johnny Cage standing 3). Your math would also make b12~df1 whiff -9, but it can be punished by at least 14-frame normals (Erron Black b2). Not going to bother testing others; it doesn't work.
Third, redid the jump test. 4 is close enough to neutral that it is very easy to tell that 4~df1 whiff has the attacking Kotal jumping later. (They jump at the same height after df1~whiff)
Lastly, though an unreliable test for this, recorded and rerecorded Kotal Kahn doing 4~df1 whiff, d1 on block and tried poking out with Kotal's d1. On the second try, got a recording that after many attempts at using d1 to poke out of, the best I could manage was a trade. Rerecorded Kotal several more times, but could not get a tighter blockstring. As I understand it, it takes a frame to leave the blocking animation unless you reversal special, throw, or backdash, so this would imply that 4~df1 whiff is -1 by the game's frame data standards, which is also supported by the jump test having both Kotals at the same height.
I'm gonna make a post mentioning the airgrab whiff in Understanding Frame Data thread while asking about specifics in a few minutes regardless, as there's some things I'm obviously still unclear about with regard to the frame data in this game.