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.eblocked by rule 1x.c.d.eblocked by rule 1x.x.x.x.c.d.eblocked by rule 1b.c.d.epermitted by rule 2 which is a whitelist and therefore takes priorityx.x.x.b.c.d.eblocked by rule 1 since rule 2 is exacta.b.c.d.eblocked by rule 1 or rule 3 (whichever is found in gravity first) since rule 2 is exactx.x.x.a.b.c.d.eblocked by rule 1 or rule 3 (whichever is found in gravity first) since rule 2 is exact
