The GitHub Actions job "CI" on grails-core.git/grails8-groovy6-canary has 
failed.
Run started by GitHub user jamesfredley (triggered by jamesfredley).

Head commit for run:
78b62c57e4c684dd4a13a3f3db7a1dc4e88c4e45 / James Fredley 
<[email protected]>
fix(config): track WriteFilteringMap mutations under Groovy 6 by excluding 
overridden methods from @Delegate

WriteFilteringMap overrides put(String,Object), putAll(Map) and remove(Object) 
to record writes
into the shared nestedDestinationMap (exposed via getWrittenValues()). But 
@Delegate on the
`overlap` field also generated put(Object,Object)/putAll(Map)/remove(Object) 
forwarding straight
to `overlap`, competing with those overrides. Under Groovy 6 a mutation can 
dispatch to the
generated delegate method instead of the override, so the value lands in 
`overlap` but is never
recorded in nestedDestinationMap.

Effect: external .groovy config loading/merging silently lost values on Groovy 6
(ExternalConfigRunListener -> WriteFilteringMap), so getConfigProperty(...) 
returned null; and
WriteFilteringMapSpec failed with getWrittenValues() empty. A plain-Groovy 
reproduction of the
class works correctly, which is why it only surfaced through the full 
config-merge path and the
Spock groovy-5.0 artifact's spec compilation - this is a genuine Groovy 6 
production bug, not a
test-only workaround.

Exclude the three overridden mutators from @Delegate so only the tracking 
overrides (plus their
compiler bridge methods) exist; every mutation is now recorded regardless of 
dispatch.

Verified on Groovy 6.0.0-SNAPSHOT:
  :grails-core:test (309 tests) green, including WriteFilteringMapSpec
  :grails-test-examples-external-configuration:test green (ExternalConfigSpec, 
MergedConfigSpec)
  :grails-core:codeStyle green

Assisted-by: claude-code:claude-4.8-opus

Report URL: https://github.com/apache/grails-core/actions/runs/26660917756

With regards,
GitHub Actions via GitBox

Reply via email to