Indeed, the filter workflow appears to not be documented to that level. Perhaps code on github will reveal how it behaves?
In terms of the use case presented in the opening post
the blocks would be treated as wildcards, as they are now
||c.d.e^ equivalent to regex blacklist ^.*c\.d\.e$
and exceptions would be treated as exact (representing the "it" that is being whitelisted mentioned in the use case). That also eliminates the uncertainty in the last couple of examples you gave.
@@||b.c.d.e^ equivalent to exact whitelist b.c.d.e (or regex whitelist ^b\.c\.d\.e$)
But I agree that's a single use case interpretation and perhaps the filter list maintainer intended for the latter to represent whitelisting all subdomains of b.c.d.e
in order to be actually useful in his curated list, and it's not clear if that's how ABP interprets that syntax.
Treating as above would result in:
||c.d.e^ rule 1
@@||b.c.d.e^ rule 2
||a.b.c.d.e^ rule 3
c.d.e
blocked by rule 1x.c.d.e
blocked by rule 1x.x.x.x.c.d.e
blocked by rule 1b.c.d.e
permitted by rule 2 which is a whitelist and therefore takes priorityx.x.x.b.c.d.e
blocked by rule 1 since rule 2 is exacta.b.c.d.e
blocked by rule 1 or rule 3 (whichever is found in gravity first) since rule 2 is exactx.x.x.a.b.c.d.e
blocked by rule 1 or rule 3 (whichever is found in gravity first) since rule 2 is exact