It is described in GROOVY-9382, GROOVY-10133, GROOVY-10707, GROOVY-10821 and possibly others.
""" This was an intentional change for Groovy 4. There was much discussion and it was noted as a breaking change, but may not have been that prominent in the release notes. There are a few edge cases like isFirstChild() and getFirstChild() with different return types in W3C DOM. Your example above illustrates this same case. Improving the consistency of boolean and Boolean properties in relation to the Java Bean spec and "developer intuition" (sorry to have to go there) were primary goals. """ https://issues.apache.org/jira/browse/GROOVY-10821