jamesfredley commented on PR #15557:
URL: https://github.com/apache/grails-core/pull/15557#issuecomment-4409463913

   ## Final audit pass + 8.0.x merge (2026-05-08)
   
   Merged latest `8.0.x` (`b47917c1fe`, "Fix forge dockerBuildNative 
class-initialization conflicts" and the 8.0.0-M1 release/merge-back) into 
`grails8-groovy5-sb4`, then ran a final audit using parallel `librarian` 
(Groovy JIRA + GROOVY_5_0_X commit log) and `explore` (workaround code-path + 
silent-workaround sweep) sub-agents.
   
   ### Verdict per remaining workaround
   
   | # | Workaround | Verdict | Evidence |
   |---|---|---|---|
   | 1 | `render(Map)` File-truthiness | **Keep (Groovy semantics change, not a 
bug)** | GROOVY-11996 fix-version is **5.0.7**, not 5.0.6. The system property 
is an opt-out, not a revert. |
   | 2 | `VariableScopeVisitor` canonicalisation NPE (4 sites) | **Keep** | No 
matching JIRA on GROOVY_5_0_X. `:grails-datamapping-tck:compileGroovy` still 
fails with `BUG! exception in phase 'canonicalization'` on build #26. |
   | 3 | `boot4-disabled-integration-test-config` (5 test apps) | **Keep** | 
`MissingPropertyException` for action method parameters under 
`-PgrailsIndy=false` still reproduces on build #26. No JIRA. |
   | 4 | `ConfigurationBuilder` + `AbstractConstraint` | **Keep** | Spring 6/7 
+ Groovy 5 binding interaction; no upstream JIRA. |
   | 5 | `g.taglib` `@IgnoreIf` (`GspCompileStaticSpec`, 
`JsonViewTemplateResolverSpec`) | **Keep** | Regression of GROOVY-6362 / 
GROOVY-11817; no follow-up JIRA filed yet. |
   | 6 | `Validateable.resolveDefaultNullable()` reflection bypass | **Keep** | 
[GROOVY-11985](https://issues.apache.org/jira/browse/GROOVY-11985) is **OPEN**. 
Root cause is the GROOVY-8854 (Sep 2023) `TraitReceiverTransformer` change. |
   
   Cross-checked all 20 GROOVY-* tickets shipped in 5.0.6 and the 4 
post-release commits on `GROOVY_5_0_X` HEAD - none of them match any remaining 
Grails workaround. Latest `5.0.6-SNAPSHOT` resolves to `a1c006c974` 
(GROOVY-11996, 2026-05-06).
   
   ### Pushed in this final pass
   
   - **`a0b74286ed`** - Merge `origin/8.0.x` (15 commits, includes 8.0.0-M1 
release/merge-back and the forge `dockerBuildNative` class-init fix).
   - **`43ad57a296`** - Two follow-on cleanups the audit surfaced:
     - **Silent workaround in `grails-shell-cli/TemplateRendererImpl`**: the 
`render(CharSequence, File, Map, boolean)` (line 115), `render(File, File, Map, 
boolean)` (line 150), and `render(Resource, File, Map, boolean)` (line 193) 
overloads were *still* using `if (template && destination)` Groovy truthiness, 
hitting the same `File.asBoolean = exists() && (isDirectory() OR length>0)` 
trap that we fixed in `render(Map)` already. Rewrote all three to explicit `== 
null` checks with early returns, mirroring the `grails-core` counterparts.
     - **Stale JIRA reference in 
`grails-data-hibernate5/TraitPropertyAccessStrategy`**: dropped the misleading 
`// See https://issues.apache.org/jira/browse/GROOVY-11512` comment. 
GROOVY-11512 was closed and fixed in `5.0.0-alpha-11` / `4.0.24` (2024-11-05), 
long before this PR. The boolean-getter fallback is plain JavaBean-conventions 
defence, not Groovy-version-conditional.
   
   ### What is **not** changing in this pass
   
   - **`GenerateControllerCommand.generateFile` typed-positional bypass** stays 
as defence-in-depth. The `render(Map)` callee is fixed, but scaffolding 
silent-no-op is bad UX so the explicit-overload bypass is cheap insurance.
   - **`TraitPropertyAccessStrategy` boolean-getter fallback** stays as benign 
JavaBean defence (just dropped the stale JIRA comment).
   
   ### Local verification
   
   ```
   JAVA_HOME=/.../corretto-21 ./gradlew :grails-shell-cli:test 
:grails-data-hibernate5:classes
   JAVA_HOME=/.../corretto-21 ./gradlew :grails-geb:compileTestFixturesGroovy 
-PgrailsIndy=false --rerun-tasks
   JAVA_HOME=/.../corretto-21 ./gradlew 
:grails-test-examples-geb:compileIntegrationTestGroovy -PgrailsIndy=false 
--rerun-tasks
   ```
   
   All PASS. PR description has been refreshed in full and CI is now running on 
the merged + final-pass HEAD `43ad57a296`.
   
   @jdaugherty / @paulk-asert - this is the burn-down endpoint locally. The 6 
items in the table above are everything that still survives full audit against 
5.0.6-SNAPSHOT build #26.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to