There's two extra forms of compatibility we should define and document
Source code compatibility
Whether or not a patch will apply across versions. I'm tempted to make no guarantees across major versions (what we have today w.r.t 1.x and 2.x), and a "no deliberate attempt to break things", policy, but otherwise: you are on your own if you fork the code and try to cherry pick, or try to have private patches to apply on top of the source tree. "The best way to ensure your patches stay in sync with the code is to get them into the Apache source tree".
Whether configuration parameters will be consistent over versions; whether, if the names change, there will be a transition from one version to the other. This happens today, with warnings on deprecation -which should be called out. "When warned, fix". Similarly, whether defaults change between major/minor releases. I'd say "sometimes", as it is becoming time to increase the default block size, the default #of reducers and a few more.