You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@grails.apache.org by bo...@apache.org on 2026/10/15 13:11:44 UTC

(grails-core) branch refactor/java-to-groovy-grails-converters updated (0ceee1c453 -> efd6ea9743)

This is an automated email from the ASF dual-hosted git repository.

borinquenkid pushed a change to branch refactor/java-to-groovy-grails-converters
in repository https://gitbox.apache.org/repos/asf/grails-core.git


    from 0ceee1c453 Merge refactor/java-to-groovy-grails-web-common into refactor/java-to-groovy-grails-converters
     add c303782388 feat: add app-level indy A/B benches to the performance workflow
     add b8561d4662 refactor: replace the app-bench PowerShell runner with a Gradle task
     add c17dc649c3 fix: address app-bench review feedback on stats, fixtures, and CI
     add 40a862613f Merge branch '9.0.x' into feat/app-bench-ci
     add bb53ead213 Merge branch '9.0.x' into feat/app-bench-ci
     add 097a63b12e Merge branch '9.0.x' into feat/app-bench-ci
     add 73c234f26e Keep StartupProgressSpec off ports held on the loopback address
     add 144f6bbacd Merge branch '8.1.x' into 9.0.x
     add bfa709384d Hibernate 7: name nested composite foreign key columns in the referenced key's order (#16539)
     add c424313499 Hibernate 7: unique groups on enum and collection properties (#16533)
     add 57582ce032 Use the Grails Develocity access key for the remote build cache
     add 4b9a585205 Merge pull request #16613 from clayburn/ci/develocity-cache-access-key
     add 92cb18fd46 Cache the Gradle User Home through setup-gradle instead of actions/cache
     add 5a6bf2a9ad Merge pull request #16618 from apache/ci/gradle-enhanced-cache
     add 7f2c45a767 Merge branch '8.0.x' into 8.1.x
     add 72bfff21fc Merge branch '8.1.x' into 9.0.x
     add 36d314efca Give StartupProgressSpec requests the time a slow CI runner needs
     add bf9c215ace Merge branch '8.1.x' into 9.0.x
     add a8535abace Add Groovy 6 groovy.concurrent async and events modules, deprecate GPars
     add 2f777c7799 Remove author tags from files touched by the groovy.concurrent migration
     add 8dc51e090e Merge pull request #16620 from jdaugherty/feat/groovy6-replace-gpars
     add 8237828397 Build with Gradle 9.8.1
     add 093d11297e Merge pull request #16623 from jdaugherty/deps/gradle-9.8.1
     add e57bd1359a fix: preserve configuration snapshots when merging profile metadata
     add 0aa7bf735f fix: support YAML profile expressions and multiple active profiles
     add d6fd8ac1ee fix: handle blank YAML selectors and clarify Groovy profile semantics
     add a643247dd2 fix: evaluate sequence-valued YAML profile selectors
     add b92b61d8df fix: remove selected YAML profile selectors before Boot evaluates them
     add 3ec69de7a2 Merge pull request #16547 from jdaugherty/fix/15840-config-merge-7.0.x
     add c965fc4baa Build with Gradle 8.14.6
     add dd59549883 Merge pull request #16622 from jdaugherty/deps/gradle-8.14.6
     add 84f222b74d Merge branch '7.0.x' into 7.1.x
     add 93bc170840 Merge branch '7.1.x' into 7.2.x
     add b281fe6abf Merge branch '7.2.x' into 8.0.x
     add 9fc21da6b2 Merge branch '8.0.x' into 8.1.x
     add a3f835597a Merge branch '8.1.x' into 9.0.x
     add 5822aa762b Merge remote-tracking branch 'upstream/9.0.x' into feat/app-bench-ci
     add 37d722d079 Address review on the app indy benches
     add 59ec5e6f34 Fold the app bench wiring into functional-test-config.gradle
     add c647f93aae Align the app-bench setup-gradle step with the other benchmark jobs
     add 780f9c72ff Give the app CPU ruler its own warm-up
     add eb0d8572fd Raise the CI app bench profile to 2,000 warm-up and 2,000 samples
     add a3b5aa39df Warm the CI app benches past their JIT drift
     add b18c864d16 Integrate Spring AI through a grails-spring-ai plugin and stream Publishers from actions
     add f77d9182d9 Address the review of the Spring AI integration
     add ea0698edeb Address the second review of the Spring AI integration
     add 6089445541 Merge pull request #16599 from jdaugherty/feat/grails-ai
     add a6cc5e3c2a Geb: manage Selenium 4.49.0 so the Chrome container image has an arm64 variant
     add 7ed196e0b5 Merge pull request #16626 from jdaugherty/fix/geb-default-chromium-image
     add 7008f7f309 Hibernate 7: keep HQL queries with a subquery intact
     add f0f8729b27 fix(hibernate7): do not read select inside a longer word as the select of an HQL query
     add 85d7c8621c Merge pull request #16597 from gustavoharff/fix/hibernate7-hql-subquery-select
     add b214607a5b Replace ehcache's jaxb-runtime version range with the BOM-managed version
     add 974357f6ca Keep the dependency metadata cache on pull request runs
     add fc0ac6266f Report every validation failure at once and warn about what resolution skipped
     add 200ab342fa Log the resolution warnings from the task so a configuration cache hit shows them
     add a6d05ed1f3 Merge pull request #16644 from jdaugherty/fix/ehcache-jaxb-dynamic-version
     add f9af0924cc Merge branch '8.0.x' into 8.1.x
     add 1edb825aa8 Merge branch '8.1.x' into 9.0.x
     add ba940ec415 Honour grails.native2ascii in a plugin's build script
     add e1131ca72e Move the Forge build conventions into build-logic
     add 46ff841f4e Make Forge a Grails plugin hosted by a web application and a CLI application
     add 50f0f7975d Let a GSP page write no line for its template logic
     add b686570349 Render Forge's templates with GSP instead of Rocker
     add 6010bed3a4 Keep the Forge API's OpenAPI base document with the web application's configuration
     add 27971429e8 Reduce Forge's documentation script to what Groovydoc needs
     add 651f2cde15 Trim only the logic lines of a GSP page's text
     add 27068cdbbf Leave a GSP page's last line of blanks as it is when trimming logic lines
     add a20c6e6402 Merge branch '8.0.x' into feat/forge-grails-composite
     add 2d11d0d1c5 Keep build-logic on the Maven 3 compatible plexus-xml
     add 0203519866 Merge branch '8.1.x' into feat/forge-grails-composite
     add 9f08b0d9af Build the Forge AWS bundle with the configuration cache
     add acb868664a Poll status before failing the start in the hidden-details spec
     add 1b259afe51 Restore Forge compatibility after the Grails conversion
     add 967cb319c5 Merge branch '8.1.x' into feat/forge-grails-composite
     add 313f9787b7 Keep hosted Forge API details in the deployment runbook
     add 6a14f076e4 Merge branch '8.1.x' into feat/forge-grails-composite
     add f64c002d33 Merge pull request #16551 from apache/feat/forge-grails-composite
     add 696429eab7 Merge branch '8.1.x' into 9.0.x
     add 1c2b6b8cac Copy the streamed renderers before adding the built-in ones
     add 386e881473 Give the Forge CLI test fixtures Groovy 6's call-site module
     add 27581b32f7 Merge remote-tracking branch 'upstream/9.0.x' into feat/app-bench-ci
     add e63c8a2540 Merge pull request #16169 from apache/feat/app-bench-ci
     add 47b836c628 fix(hibernate7): bind each collection of an embedded entity with its own second pass
     add fcee01ddfe test(hibernate7): cover the collection second passes of an embedded entity
     add c2bc931199 test(hibernate7): fold the embedded hasMany spec into EmbeddedEntityCollectionKindsSpec
     add 8b7b316af9 Merge pull request #16617 from apache/fix/hibernate7-embedded-hasmany-collection-8.0.x
     add b13072430f Use the Grails Develocity access key for the remote build cache
     add 0868ee4187 Cache the Gradle User Home through setup-gradle instead of actions/cache
     add 33de4d48f0 Write the Gradle User Home cache from one core build job per OS
     add 9ac5e38869 Merge pull request #16645 from jdaugherty/ci/gradle-cache-single-writer
     add 947726325a Merge branch '7.0.x' into 7.1.x
     add 47d4cef9fc Merge branch '7.1.x' into 7.2.x
     add 77b8a0029f Merge branch '7.2.x' into 8.0.x
     add 05c2d94df8 Merge branch '8.0.x' into 8.1.x
     add 94fee3996c Merge branch '8.1.x' into 9.0.x
     add d277b7f7e1 Write the Gradle cache only from the default branch's major and later
     add ce6f680bce Decide Gradle cache writes in one shared action, and document the policy
     add 45c8b99786 Merge branch '7.0.x' into 7.1.x
     add 2adc3210d1 Merge branch '7.1.x' into 7.2.x
     add de5a0802c5 Merge branch '7.2.x' into 8.0.x
     add 1435057571 Save the mongod download only from the default branch
     add 041f607fa5 Merge branch '8.0.x' into 8.1.x
     add d989ce9032 Merge branch '8.1.x' into 9.0.x
     add d750df3f2f Bring the local action along in the Groovy build's sparse checkout
     add 0265f3dbee Merge branch '7.0.x' into 7.1.x
     add cd63206df8 Merge branch '7.1.x' into 7.2.x
     add a2c44f376f Merge branch '7.2.x' into 8.0.x
     add 4876810dbb Bring the local action along in the Groovy canary's sparse checkout
     add 4ec228da5f Merge branch '8.0.x' into 8.1.x
     add c948a638d9 Merge branch '8.1.x' into 9.0.x
     add ad785d574d Merge origin/9.0.x into refactor/java-to-groovy-build-tooling
     add 2835e5c405 Merge sync9/refactor/java-to-groovy-build-tooling into refactor/java-to-groovy-core-leaves
     add 9fc5eeecc4 Merge sync9/refactor/java-to-groovy-core-leaves into refactor/java-to-groovy-grails-bootstrap
     add bb87840c62 Merge sync9/refactor/java-to-groovy-grails-bootstrap into refactor/java-to-groovy-grails-databinding-core
     add 22524cdfbf Merge sync9/refactor/java-to-groovy-grails-databinding-core into refactor/java-to-groovy-grails-datastore-core
     add a5d81b0e71 Merge sync9/refactor/java-to-groovy-grails-datastore-core into refactor/java-to-groovy-grails-spring
     add 17ba83d2dd Merge sync9/refactor/java-to-groovy-grails-spring into refactor/java-to-groovy-grails-shell-cli
     add 46c2ba3019 Merge branch 'sync9/refactor/java-to-groovy-grails-shell-cli' into sync9/refactor/java-to-groovy-grails-core
     add d5a731725d Merge sync9/refactor/java-to-groovy-grails-core into refactor/java-to-groovy-datamapping-validation
     add 8e4c3f9c44 Merge sync9/refactor/java-to-groovy-datamapping-validation into refactor/java-to-groovy-grails-datamapping-core
     add cdfcacf08c Merge sync9/refactor/java-to-groovy-grails-datamapping-core into refactor/java-to-groovy-grails-encoder
     add ba58d92b79 Merge sync9/refactor/java-to-groovy-grails-encoder into refactor/java-to-groovy-runtime-small
     add cd7aba5e71 Merge sync9/refactor/java-to-groovy-runtime-small into refactor/java-to-groovy-datamapping-satellites
     add 333269a806 Merge sync9/refactor/java-to-groovy-datamapping-satellites into refactor/java-to-groovy-grails-data-mongodb
     add 77263facbd Merge sync9/refactor/java-to-groovy-grails-data-mongodb into refactor/java-to-groovy-grails-data-neo4j
     add f37ba3088b Merge sync9/refactor/java-to-groovy-grails-data-neo4j into refactor/java-to-groovy-grails-taglib
     add 1be2dbadd8 Merge branch 'sync9/refactor/java-to-groovy-grails-taglib' into sync9/refactor/java-to-groovy-grails-gsp-core
     add a0eaf66ee7 Merge sync9/refactor/java-to-groovy-grails-gsp-core into refactor/java-to-groovy-grails-web-common
     add efd6ea9743 Merge sync9/refactor/java-to-groovy-grails-web-common into refactor/java-to-groovy-grails-converters

No new revisions were added by this update.

Summary of changes:
 .agents/skills/README.md                           |   1 +
 .agents/skills/gradle-developer/SKILL.md           |  31 +-
 .agents/skills/grails-ai-developer                 |   1 +
 .github/actions/gradle-cache-policy/action.yml     |  57 ++
 .github/dependency-graph/external-references.yml   |   3 +
 .../groovy-snapshot-canary-build.init.gradle       |   3 +-
 .github/workflows/benchmark.yml                    |  60 +-
 .github/workflows/build-health.yml                 |  24 +-
 .github/workflows/codeanalysis.yml                 |  16 +-
 .github/workflows/codestyle.yml                    |  24 +-
 .github/workflows/coverage.yml                     |  16 +-
 .github/workflows/end-to-end.yml                   |  20 +-
 .github/workflows/forge-deploy-aws.yml             |  11 +-
 .github/workflows/gradle.yml                       | 461 +++++----------
 .github/workflows/groovy-snapshot-canary.yml       |  51 +-
 .github/workflows/rat.yml                          |   8 +-
 .github/workflows/release-publish-docs.yml         |   8 +-
 .github/workflows/release.yml                      |  16 +-
 .github/workflows/sitemesh2.yml                    |  16 +-
 .github/workflows/validate-actions.yml             |   8 +-
 .github/workflows/vulnerability-scan.yml           |  14 +-
 .gitignore                                         |   4 +
 .sdkmanrc                                          |   2 +-
 AGENTS.md                                          |  23 +-
 RELEASE.md                                         |   4 +-
 THREAT_MODEL.md                                    |   6 +-
 build-logic/gradle/wrapper/gradle-wrapper.jar      | Bin 47623 -> 48749 bytes
 .../gradle/wrapper/gradle-wrapper.properties       |   4 +-
 build-logic/plugins/build.gradle                   |  13 +
 .../grails/buildsrc/BomDependencyGraph.groovy      | 187 +++++++
 .../grails/buildsrc/GrailsCodeStylePlugin.groovy   |   2 +-
 .../GrailsDependencyValidatorPlugin.groovy         | 103 ++--
 .../org/apache/grails/buildsrc/SbomPlugin.groovy   |   4 +
 .../buildsrc/ValidateDependencyVersionsTask.groovy |  89 ++-
 .../buildsrc/WriteGrailsVersionInfoTask.groovy     |  12 +-
 .../GrailsGroovyExtensionTransformer.groovy        |  26 +-
 .../shadowjar/GrailsShadowLicenseTransform.groovy  |   0
 .../shadowjar/GrailsShadowNoticeTransform.groovy   |   0
 .../internal/tasks/GenerateManpageAsciidoc.java    |   0
 .../internal/tasks/PicocliBuildCompletionTask.java |   0
 .../grails/buildsrc/BomDependencyGraphSpec.groovy  |  41 +-
 .../ValidateDependencyVersionsTaskSpec.groovy      | 178 +++++-
 .../buildsrc/WriteGrailsVersionInfoTaskSpec.groovy | 122 ++++
 .../GrailsGroovyExtensionTransformerSpec.groovy    | 125 +++++
 build-logic/settings.gradle                        |   4 +-
 build.gradle                                       |  13 +-
 dependencies.gradle                                |  25 +
 end-to-end/README.md                               |   2 +-
 end-to-end/agent-skills-plain-build/build.gradle   |   1 +
 end-to-end/agent-skills/build.gradle               |   1 +
 .../grails/e2e/skills/AgentSkillsSpec.groovy       |   1 +
 end-to-end/gradle/wrapper/gradle-wrapper.jar       | Bin 47623 -> 48749 bytes
 .../gradle/wrapper/gradle-wrapper.properties       |   2 +-
 end-to-end/legacy-g7-command-plugin/.sdkmanrc      |   4 +-
 .../gradle/wrapper/gradle-wrapper.jar              | Bin 47623 -> 48749 bytes
 .../gradle/wrapper/gradle-wrapper.properties       |   2 +-
 .../legacy-g7-command-plugin/settings.gradle       |   4 +-
 end-to-end/settings.gradle                         |   4 +-
 gradle.properties                                  |   6 +-
 gradle/docs-dependencies.gradle                    |   6 +
 gradle/functional-test-config.gradle               |  27 +
 gradle/publish-root-config.gradle                  |   4 +
 gradle/rat-root-config.gradle                      |   2 +-
 gradle/wrapper/gradle-wrapper.jar                  | Bin 47623 -> 48749 bytes
 gradle/wrapper/gradle-wrapper.properties           |   4 +-
 grails-async/README.adoc                           |   2 +-
 .../grails/async/factory/gpars/GparsPromise.groovy |   4 +-
 .../async/factory/gpars/GparsPromiseFactory.groovy |  14 +-
 .../async/factory/gpars/LoggingPoolFactory.groovy  |   3 +-
 .../groovy/grails/async/GparsPromiseSpec.groovy    |  11 +-
 .../{plugin => groovy-concurrent}/build.gradle     |  22 +-
 .../async/factory/groovy/AwaitablePromise.groovy   | 160 ++++++
 .../factory/groovy/AwaitablePromiseFactory.groovy  | 186 +++++++
 .../META-INF/services/grails.async.PromiseFactory  |   1 +
 .../groovy/AwaitablePromiseFactorySpec.groovy      | 473 ++++++++++++++++
 grails-async/plugin/build.gradle                   |   6 +
 .../grails/async/web/StreamItemRenderer.groovy     |  41 ++
 .../web/async/ControllersAsyncGrailsPlugin.groovy  |  53 +-
 .../web/async/mvc/DefaultStreamItemRenderer.groovy |  46 +-
 .../web/async/mvc/JacksonStreamItemRenderer.groovy |  67 +++
 .../mvc/PublisherActionResultTransformer.groovy    | 177 ++++++
 .../web/async/mvc/ServerSentEventFormatter.groovy  | 126 +++++
 .../web/async/mvc/ServerSentEventSubscriber.groovy | 209 +++++++
 .../web/async/mvc/SingleValueSubscriber.groovy     |  86 +++
 .../additional-spring-configuration-metadata.json  |  21 +
 .../async/ControllersAsyncGrailsPluginSpec.groovy  |  94 ++++
 .../PublisherActionResultTransformerSpec.groovy    | 388 +++++++++++++
 .../async/mvc/ServerSentEventFormatterSpec.groovy  | 133 +++++
 .../groovy/org/grails/config/NavigableMap.groovy   |  49 --
 .../groovy/grails/config/NavigableMapSpec.groovy   |  21 +
 .../grails/config/SpringProfileExcludeSpec.groovy  | 173 ------
 ...railsConcurrentLinkedMapCacheManagerSpec.groovy |  97 ++++
 ...ailsConcurrentLinkedMapCacheManagerTests.groovy | 101 ----
 .../GrailsConcurrentMapCacheManagerSpec.groovy     |  97 ++++
 .../GrailsConcurrentMapCacheManagerTests.groovy    | 101 ----
 .../config/yaml/YamlPropertySourceLoader.groovy    |  63 ++-
 .../grails/boot/GrailsAppYamlProfileSpec.groovy    | 100 ++++
 .../config/PropertySourcesConfigReloadSpec.groovy  | 220 ++++++++
 .../config/YamlPropertySourceLoaderSpec.groovy     |  23 +
 .../org/grails/config/YamlSpringProfileSpec.groovy | 463 ++++++++++++++++
 .../GroovyConfigPropertySourceLoaderSpec.groovy    |  50 ++
 .../cfg/domainbinding/binder/CollectionBinder.java |   6 +-
 .../CompositeIdentifierToManyToOneBinder.java      |  95 +++-
 .../cfg/domainbinding/binder/EnumTypeBinder.java   |  20 +
 .../domainbinding/binder/GrailsDomainBinder.java   |   1 +
 .../domainbinding/binder/GrailsPropertyBinder.java |   5 +-
 .../hibernate/GrailsHibernatePersistentEntity.java |  59 +-
 .../hibernate/HibernateToManyProperty.java         |  15 +
 .../secondpass/BidirectionalOneToManyLinker.java   |  11 +-
 .../secondpass/CompositeForeignKeySecondPass.java  |  67 +++
 .../domainbinding/secondpass/ListSecondPass.java   |  13 +
 .../domainbinding/secondpass/MapSecondPass.java    |  13 +
 .../domainbinding/secondpass/SetSecondPass.java    |  13 +
 .../cfg/domainbinding/util/CreateKeyForProps.java  |   8 +
 .../util/PropertyFromValueCreator.java             |  18 +-
 .../orm/hibernate/query/HqlQueryContext.java       |  97 +++-
 .../tests/EmbeddedEntityCollectionKindsSpec.groovy | 111 ++++
 .../tests/UniqueGroupEnumAndCollectionSpec.groovy  | 302 ++++++++++
 .../hibernate/HibernateGormStaticApiSpec.groovy    |  71 +++
 .../cfg/domainbinding/CollectionBinderSpec.groovy  |  70 ++-
 ...CompositeIdentifierToManyToOneBinderSpec.groovy |  86 ++-
 .../cfg/domainbinding/CreateKeyForPropsSpec.groovy |  77 +++
 .../cfg/domainbinding/EnumTypeBinderSpec.groovy    |  20 +
 .../domainbinding/GrailsPropertyBinderSpec.groovy  |   1 +
 .../PropertyFromValueCreatorSpec.groovy            |  32 ++
 .../CompositeForeignKeyColumnTypesSpec.groovy      | 422 ++++++++++++++
 ...CompositeForeignKeyRegistrationOrderSpec.groovy | 225 ++++++++
 .../domainbinding/binder/ForeignKeyPairs.groovy    |  55 ++
 ...verseHasManyCompositeIdentifierOrderSpec.groovy | 109 ++++
 .../BidirectionalOneToManyLinkerSpec.groovy        |   4 +
 .../secondpass/CollectionKeyBinderSpec.groovy      |   2 +-
 .../secondpass/ListSecondPassBinderSpec.groovy     |   2 +-
 .../secondpass/MapSecondPassBinderSpec.groovy      |   2 +-
 .../orm/hibernate/query/HqlQueryContextSpec.groovy |  94 ++++
 grails-data-neo4j/core/build.gradle                |   1 -
 .../test/groovy/grails/gorm/tests/MiscSpec.groovy  |   8 +-
 grails-doc/build.gradle                            |  14 +-
 grails-doc/src/en/guide/async.adoc                 |   3 +-
 grails-doc/src/en/guide/async/asyncPromises.adoc   |  12 +-
 grails-doc/src/en/guide/async/asyncStreaming.adoc  | 110 ++++
 grails-doc/src/en/guide/async/events.adoc          |  10 +-
 .../src/en/guide/async/events/asyncConfigure.adoc  |   4 +-
 .../guide/async/rxjava/asyncServerSentEvents.adoc  |   2 +
 .../src/en/guide/commandLine/creatingProject.adoc  |   2 +-
 .../src/en/guide/commandLine/interactiveMode.adoc  |  10 +-
 grails-doc/src/en/guide/conf/config.adoc           |  31 ++
 .../src/en/guide/gettingStarted/agentSkills.adoc   |   3 +
 grails-doc/src/en/guide/introduction.adoc          |   2 +-
 grails-doc/src/en/guide/introduction/whatsNew.adoc |  14 +
 .../src/en/guide/testing/functionalTesting.adoc    |  40 +-
 .../theWebLayer/gsp/GSPBasics/pageDirectives.adoc  |  40 ++
 grails-doc/src/en/guide/toc.yml                    |  11 +
 .../src/en/guide/upgrading/upgrading81x.adoc       |  53 ++
 .../src/en/guide/upgrading/upgrading90x.adoc       |  48 ++
 grails-doc/src/en/guide/usingAi.adoc               |  32 ++
 grails-doc/src/en/guide/usingAi/aiChatClient.adoc  |  87 +++
 .../src/en/guide/usingAi/aiConfiguration.adoc      |  74 +++
 .../src/en/guide/usingAi/aiInstallation.adoc       |  43 ++
 grails-doc/src/en/guide/usingAi/aiProviders.adoc   | 213 +++++++
 grails-doc/src/en/guide/usingAi/aiStreaming.adoc   |  64 +++
 grails-doc/src/en/guide/usingAi/aiTesting.adoc     |  77 +++
 .../src/en/ref/Command Line/create-plugin.adoc     |   2 +-
 .../src/en/ref/Command Line/create-restapi.adoc    |   2 +-
 .../src/en/ref/Command Line/create-web-plugin.adoc |   2 +-
 grails-doc/src/en/ref/Command Line/help.adoc       |   4 +-
 .../src/en/ref/Command Line/list-features.adoc     |   6 +
 .../events/bus/spring/EventBusFactoryBean.groovy   |  15 +-
 .../grails/events/TaskExecuterEventBusSpec.groovy  |  40 ++
 .../org/grails/events/gpars/ActorEventBus.groovy   |  14 +-
 .../grails/events/gpars/ActorEventBusSpec.groovy   |   6 +
 .../groovy-concurrent}/build.gradle                |  23 +-
 .../org/grails/events/groovy/ActorEventBus.groovy  | 103 ++++
 .../META-INF/services/grails.events.bus.EventBus   |   1 +
 .../grails/events/groovy/ActorEventBusSpec.groovy  | 215 +++++++
 grails-forge/.gitattributes                        |   5 -
 grails-forge/.gitignore                            |  20 -
 grails-forge/README.md                             |  61 +-
 grails-forge/build.gradle                          |  18 +-
 grails-forge/buildSrc/build.gradle                 |  62 ---
 grails-forge/buildSrc/settings.gradle              |  35 --
 .../forge/rocker/plugin/JavaGeneratorRunnable.java | 166 ------
 .../forge/rocker/plugin/RockerConfiguration.java   |  99 ----
 .../grails/forge/rocker/plugin/RockerPlugin.java   |  92 ---
 .../rocker/plugin/RockerSourceSetProperty.java     |  80 ---
 .../org/grails/forge/rocker/plugin/RockerTask.java | 185 -------
 .../forge/rocker/plugin/TemplateDirectorySet.java  | 124 -----
 .../forge/rocker/plugin/WhitespaceProcessor.java   |  52 --
 grails-forge/config/checkstyle/checkstyle.xml      | 227 --------
 grails-forge/config/spotless.license.java          |  18 -
 grails-forge/docs/aws-elastic-beanstalk.md         |  18 +-
 grails-forge/docs/choose-postgresql.png            | Bin 108993 -> 0 bytes
 grails-forge/docs/cloud_sql_create_intance.png     | Bin 100207 -> 0 bytes
 grails-forge/docs/create-database.png              | Bin 150843 -> 0 bytes
 grails-forge/docs/create-two-databases.png         | Bin 175471 -> 0 bytes
 grails-forge/docs/dbinstance-options.png           | Bin 100921 -> 0 bytes
 grails-forge/docs/enable-cloud-sql-admin-api.png   | Bin 151032 -> 0 bytes
 grails-forge/docs/enable-compute-engine-api.png    | Bin 79831 -> 0 bytes
 .../etc/bin/generate-build-artifact-hashes.groovy  |  79 ---
 grails-forge/etc/bin/test-reproducible-builds.sh   |  64 ---
 grails-forge/gradle.properties                     |  33 +-
 grails-forge/gradle/code-style-config.gradle       |  96 ----
 grails-forge/gradle/doc-config.gradle              |  15 +-
 grails-forge/gradle/groovy-version-pin.gradle      |  29 -
 .../gradle/micronaut-openapi-config.gradle         |  53 --
 grails-forge/gradle/test-config.gradle             |  26 +-
 grails-forge/gradle/wrapper/gradle-wrapper.jar     | Bin 47623 -> 48749 bytes
 .../gradle/wrapper/gradle-wrapper.properties       |   4 +-
 grails-forge/grails-cli-shadow/build.gradle        |  11 +
 grails-forge/grails-cli/build.gradle               |  16 +-
 .../grails/cli/DelegatingShellApplication.groovy   |   2 +-
 .../grails-forge-analytics-postgres/build.gradle   | 120 ----
 .../analytics/postgres/AnalyticsController.java    |  98 ----
 .../forge/analytics/postgres/Application.java      | 140 -----
 .../analytics/postgres/ApplicationRepository.java  |  53 --
 .../grails/forge/analytics/postgres/Feature.java   |  79 ---
 .../analytics/postgres/FeatureRepository.java      | 121 ----
 .../org/grails/forge/analytics/postgres/Main.java  |  49 --
 .../postgres/gcp/GoogleCloudSqlSetup.java          |  58 --
 .../native-image.properties                        |  24 -
 .../src/main/resources/application-dev.yml         |   9 -
 .../src/main/resources/application.yml             |  14 -
 .../resources/databasemigrations/V1__schema.sql    |  21 -
 .../src/main/resources/logback.xml                 |  15 -
 .../postgres/StoreGeneratedProjectStatsSpec.groovy | 125 -----
 grails-forge/grails-forge-api/build.gradle         |  83 ---
 .../grails/forge/api/ApplicationController.java    | 240 --------
 .../org/grails/forge/api/ApplicationTypeDTO.java   | 129 -----
 .../forge/api/ApplicationTypeOperations.java       |  75 ---
 .../org/grails/forge/api/DevelopmentReloading.java |  50 --
 .../grails/forge/api/DevelopmentReloadingDTO.java  | 103 ----
 .../main/java/org/grails/forge/api/FeatureDTO.java | 153 -----
 .../java/org/grails/forge/api/FeatureService.java  | 104 ----
 .../java/org/grails/forge/api/GormImplDTO.java     | 111 ----
 .../java/org/grails/forge/api/JdkVersionDTO.java   | 110 ----
 .../java/org/grails/forge/api/LanguageDTO.java     | 124 -----
 .../main/java/org/grails/forge/api/LinkDTO.java    |  63 ---
 .../java/org/grails/forge/api/RequestInfo.java     | 139 -----
 .../java/org/grails/forge/api/SelectOptionDTO.java |  62 ---
 .../java/org/grails/forge/api/ServletImplDTO.java  | 100 ----
 .../forge/api/analytics/GenerationListener.java    |  68 ---
 .../forge/api/bind/RequestInfoArgumentBinder.java  |  93 ----
 .../forge/api/create/AbstractCreateController.java | 117 ----
 .../forge/api/create/zip/ZipCreateController.java  | 196 -------
 .../forge/api/create/zip/ZipCreateOperation.java   |  69 ---
 .../org/grails/forge/api/diff/DiffController.java  | 228 --------
 .../org/grails/forge/api/diff/DiffOperations.java  |  92 ---
 .../api/options/ApplicationTypeSelectOptions.java  |  42 --
 .../options/DevelopmentReloadingSelectOptions.java |  42 --
 .../forge/api/options/JdkVersionSelectOptions.java |  42 --
 .../forge/api/options/LanguageSelectOptions.java   |  42 --
 .../forge/api/options/SelectOptionsController.java |  60 --
 .../forge/api/options/SelectOptionsOperations.java |  27 -
 .../api/options/ServletImplSelectOptions.java      |  42 --
 .../forge/api/preview/PreviewController.java       | 120 ----
 .../forge/api/preview/PreviewOperations.java       |  61 --
 .../grails-forge-api/reflect-config.json           |  52 --
 .../grails-forge-api/resource-config.json          |  11 -
 .../src/main/resources/application.yml             |   5 -
 .../src/main/resources/select_options.properties   |   1 -
 .../forge/api/ApplicationControllerSpec.groovy     | 111 ----
 .../grails/forge/api/ApplicationTypeClient.groovy  |  42 --
 .../org/grails/forge/api/CreateClient.groovy       |  57 --
 .../groovy/org/grails/forge/api/DiffClient.groovy  |  56 --
 .../org/grails/forge/api/DiffControllerSpec.groovy |  85 ---
 .../grails/forge/api/FeatureControllerSpec.groovy  | 211 -------
 .../org/grails/forge/api/PreviewClient.groovy      |  42 --
 .../grails/forge/api/PreviewControllerSpec.groovy  |  62 ---
 .../forge/api/ZipCreateControllerSpec.groovy       | 145 -----
 .../src/test/resources/features_es.properties      |   4 -
 .../src/test/resources/logback.xml                 |  17 -
 grails-forge/grails-forge-cli/build.gradle         | 109 ++--
 .../grails-app/conf/application.yml                |  28 +
 .../init/org/grails/forge/cli/Application.groovy   |  84 +++
 .../forge/cli/command/templates/controller.gsp}    |  23 +-
 .../cli/command/templates/controllerSpec.gsp}      |  25 +-
 .../views/forge/cli/command/templates/domain.gsp}  |  25 +-
 .../forge/cli/command/templates/domainSpec.gsp}    |  27 +-
 .../forge/cli/command/templates/interceptor.gsp}   |  25 +-
 .../cli/command/templates/interceptorSpec.gsp}     |  27 +-
 .../views/forge/cli/command/templates/job.gsp}     |  23 +-
 .../views/forge/cli/command/templates/service.gsp} |  27 +-
 .../forge/cli/command/templates/serviceSpec.gsp}   |  25 +-
 .../views/forge/cli/command/templates/taglib.gsp}  |  23 +-
 .../forge/cli/command/templates/taglibSpec.gsp}    |  25 +-
 .../org/grails/forge/cli/CodeGenConfig.groovy      | 189 +++++++
 .../grails/forge/cli/CommonOptionsMixin.groovy}    |  28 +-
 .../groovy/org/grails/forge/cli/ForgeCli.groovy    | 133 +++++
 .../org/grails/forge/cli/ForgeCommand.groovy       |  67 +++
 .../grails/forge/cli/GrailsPicocliFactory.groovy   |  59 ++
 .../org/grails/forge/cli/InteractiveShell.groovy}  | 107 ++--
 .../forge/cli/command/AddPropertyCommand.groovy    | 169 ++++++
 .../grails/forge/cli/command/BaseCommand.groovy    |  88 +++
 .../grails/forge/cli/command/CodeGenCommand.groovy | 118 ++++
 .../forge/cli/command/CreateAppCommand.groovy}     |  45 +-
 .../grails/forge/cli/command/CreateCommand.groovy  | 126 +++++
 .../cli/command/CreateControllerCommand.groovy     |  84 +++
 .../cli/command/CreateDomainClassCommand.groovy    |  84 +++
 .../cli/command/CreateInterceptorCommand.groovy    |  84 +++
 .../forge/cli/command/CreateJobCommand.groovy      |  85 +++
 .../forge/cli/command/CreatePluginCommand.groovy}  |  45 +-
 .../forge/cli/command/CreateRestApiCommand.groovy} |  45 +-
 .../forge/cli/command/CreateServiceCommand.groovy  |  84 +++
 .../forge/cli/command/CreateTagLibCommand.groovy   |  84 +++
 .../cli/command/CreateWebPluginCommand.groovy}     |  45 +-
 .../forge/cli/command/CreateWebappCommand.groovy}  |  45 +-
 .../command/DevelopmentReloadingCandidates.groovy} |  18 +-
 .../command/DevelopmentReloadingConverter.groovy}  |  20 +-
 .../forge/cli/command/GormImplCandidates.groovy}   |  17 +-
 .../forge/cli/command/GormImplConverter.groovy}    |  22 +-
 .../forge/cli/command/LanguageCandidates.groovy}   |  17 +-
 .../forge/cli/command/LanguageConverter.groovy}    |  18 +-
 .../grails/forge/cli/command/ListFeatures.groovy   | 106 ++++
 .../cli/command/ServletImplCandidates.groovy}      |  17 +-
 .../forge/cli/command/ServletImplConverter.groovy} |  20 +-
 .../forge/cli/util/GrailsVersionProvider.groovy}   |  28 +-
 .../java/org/grails/forge/cli/Application.java     | 128 -----
 .../java/org/grails/forge/cli/CodeGenConfig.java   | 180 ------
 .../org/grails/forge/cli/GrailsPicocliFactory.java |  57 --
 .../forge/cli/command/AddPropertyCommand.java      | 181 ------
 .../org/grails/forge/cli/command/BaseCommand.java  |  92 ---
 .../grails/forge/cli/command/CodeGenCommand.java   | 123 -----
 .../grails/forge/cli/command/CreateCommand.java    | 137 -----
 .../forge/cli/command/CreateControllerCommand.java |  88 ---
 .../cli/command/CreateDomainClassCommand.java      |  88 ---
 .../cli/command/CreateInterceptorCommand.java      |  88 ---
 .../grails/forge/cli/command/CreateJobCommand.java |  87 ---
 .../forge/cli/command/CreateServiceCommand.java    |  88 ---
 .../forge/cli/command/CreateTagLibCommand.java     |  88 ---
 .../org/grails/forge/cli/command/ListFeatures.java | 111 ----
 .../grails-forge-cli/native-image.properties       |   2 -
 .../grails-forge-cli/resource-config.json          |   7 -
 .../src/main/resources/simplelogger.properties     |  23 +
 .../org/grails/forge/cli/ApplicationSpec.groovy    | 110 ++++
 .../CodeGenConfigDevelopmentReloadingSpec.groovy   |  24 +-
 .../org/grails/forge/cli/CommandFixture.groovy     |   6 +-
 .../groovy/org/grails/forge/cli/CommandSpec.groovy |   8 +
 .../org/grails/forge/cli/ForgeCliSpec.groovy}      |  41 +-
 .../cli/command/ApplicationCommandSpec.groovy      |  18 +-
 .../forge/cli/command/CodeGenCommandSpec.groovy    |  21 +-
 .../forge/cli/command/CreateAppCommandSpec.groovy  |  34 +-
 .../cli/command/CreateControllerCommandSpec.groovy |   8 -
 .../command/CreateDomainClassCommandSpec.groovy    |   7 -
 .../command/CreateInterceptorCommandSpec.groovy    |   9 -
 .../forge/cli/command/CreateJobCommandSpec.groovy  |   8 -
 .../cli/command/CreateServiceCommandSpec.groovy    |   8 -
 .../cli/command/CreateTagLibCommandSpec.groovy     |  12 -
 .../groovy/org/grails/forge/cli/CliRunner.groovy}  |  25 +-
 grails-forge/grails-forge-core/build.gradle        |  80 +--
 .../asciidoctor/template/asciidocGradle.gsp}       |  17 +-
 .../feature/asciidoctor/template/indexAdoc.gsp}    |   8 +-
 .../views/forge/feature/build/gitignore.gsp}       |   6 +-
 .../feature/build/gradle/templates/buildGradle.gsp | 140 +++++
 .../gradle/templates/buildSrcBuildGradle.gsp}      |  56 +-
 .../build/gradle/templates/dependencies.gsp}       |  34 +-
 .../build/gradle/templates/gradleProperties.gsp}   |  38 +-
 .../gradle/templates/gradleWrapperProperties.gsp}  |  35 +-
 .../build/gradle/templates/settingsGradle.gsp}     |  43 +-
 .../grails-app/views/forge/feature/cli.gsp         |  43 ++
 .../plain/templates/plainGithubWorkflow.gsp}       |  27 +-
 .../github/workflows/templates/javaSetup.gsp}      |  24 +-
 .../grails/templates/applicationController.gsp}    |  14 +-
 .../forge/feature/grails/templates/plugin.gsp}     |  41 +-
 .../feature/grails/templates/urlMappings.gsp}      |  29 +-
 .../feature/lang/groovy/templates/application.gsp} |  58 +-
 .../feature/lang/groovy/templates/bootStrap.gsp}   |  37 +-
 .../forge/feature/logging/template/logback.gsp}    |  12 +-
 .../migration/templates/dbMigrationGradle.gsp}     |  11 +-
 .../forge/feature/other/template/maindocs.gsp}     |  23 +-
 .../forge/feature/other/template/markdownLink.gsp} |  11 +-
 .../views/forge/feature/other/template/readme.gsp} |  38 +-
 .../forge/feature/security/template/role.gsp}      |  18 +-
 .../template/securityApplicationGroovy.gsp}        |  31 +-
 .../forge/feature/security/template/user.gsp}      |  26 +-
 .../feature/security/template/userClassic.gsp}     |  28 +-
 .../security/template/userClassicService.gsp}      |  16 +-
 .../feature/security/template/userClassicSpec.gsp} |  14 +-
 .../feature/security/template/userController.gsp}  |  16 +-
 .../forge/feature/security/template/userRole.gsp}  |  20 +-
 .../feature/security/template/userService.gsp}     |  20 +-
 .../forge/feature/security/template/userSpec.gsp}  |  14 +-
 .../feature/spring/template/springResources.gsp}   |   6 +-
 .../feature/test/template/containerGebSpec.gsp}    |  25 +-
 .../forge/feature/test/template/gebConfig.gsp}     |  14 +-
 .../views/forge/feature/test/template/gebSpec.gsp} |  25 +-
 .../forge/feature/view/json/templates/_errors.gsp} |   6 +-
 .../forge/feature/view/json/templates/_object.gsp} |   8 +-
 .../forge/feature/view/json/templates/error.gsp}   |   6 +-
 .../forge/feature/view/json/templates/index.gsp}   |   6 +-
 .../feature/view/json/templates/notFound.gsp}      |   6 +-
 .../feature/view/markup/templates/_errors.gsp}     |   6 +-
 .../feature/view/markup/templates/_object.gsp}     |   8 +-
 .../forge/feature/view/markup/templates/error.gsp} |   6 +-
 .../forge/feature/view/markup/templates/index.gsp} |   6 +-
 .../feature/view/markup/templates/notFound.gsp}    |   6 +-
 .../views/forge/template/api/grailsForgeApi.gsp}   |  37 +-
 .../org/grails/forge/ForgeCoreConfiguration.groovy |  50 ++
 .../org/grails/forge/ForgeGrailsPlugin.groovy      |  49 ++
 .../forge/application/ApplicationType.groovy}      |  44 +-
 .../forge/application/ContextFactory.groovy}       | 131 +++--
 .../forge/application/OperatingSystem.groovy}      |  27 +-
 .../application/PluginAvailableFeatures.groovy}    |  23 +-
 .../org/grails/forge/application/Project.groovy    |  93 ++++
 .../forge/application/ProjectIdentifier.groovy}    |  28 +-
 .../application/RestApiAvailableFeatures.groovy}   |  23 +-
 .../forge/application/WebAvailableFeatures.groovy} |  20 +-
 .../application/WebPluginAvailableFeatures.groovy} |  29 +-
 .../generator/DefaultProjectGenerator.groovy}      | 103 ++--
 .../application/generator/GeneratorContext.groovy  | 397 +++++++++++++
 .../application/generator/ProjectGenerator.groovy} |  30 +-
 .../org/grails/forge/build/BuildPlugin.groovy}     |  28 +-
 .../org/grails/forge/build/BuildProperties.groovy} |  36 +-
 .../org/grails/forge/build/Comment.groovy}         |  15 +-
 .../org/grails/forge/build/Property.groovy}        |  15 +-
 .../forge/build/dependencies/Coordinate.groovy}    |  45 +-
 .../build/dependencies/CoordinateResolver.groovy}  |  10 +-
 .../dependencies/DefaultCoordinateResolver.groovy} |  32 +-
 .../forge/build/dependencies/Dependency.groovy     | 393 +++++++++++++
 .../build/dependencies/DependencyContext.groovy}   |  41 +-
 .../build/dependencies/DependencyCoordinate.groovy | 120 ++++
 .../dependencies/LookupFailedException.groovy}     |  12 +-
 .../grails/forge/build/dependencies/Phase.groovy}  |   8 +-
 .../PomDependencyVersionResolver.groovy            | 150 +++++
 .../grails/forge/build/dependencies/Scope.groovy}  |  97 ++--
 .../grails/forge/build/dependencies/Source.groovy} |   8 +-
 .../build/gradle/DefaultGradleRepository.groovy    | 141 +++++
 .../grails/forge/build/gradle/GradleBuild.groovy   | 162 ++++++
 .../forge/build/gradle/GradleBuildCreator.groovy}  |  58 +-
 .../forge/build/gradle/GradleConfiguration.groovy} | 134 ++---
 .../forge/build/gradle/GradleDependency.groovy     | 123 +++++
 .../grails/forge/build/gradle/GradleDsl.groovy}    |   8 +-
 .../grails/forge/build/gradle/GradlePlugin.groovy  | 256 +++++++++
 .../forge/build/gradle/GradleRepository.groovy}    |  97 ++--
 .../build/gradle/MavenCentralRepository.groovy}    |  25 +-
 .../build/gradle/MavenLocalRepository.groovy}      |  25 +-
 .../build/gradle/VersionRegexRepoFilter.groovy     |  56 ++
 .../grails/forge/build/gradle/VersionType.groovy}  |   8 +-
 .../grails/forge/defaults/HasDefaultBuild.groovy}  |  11 +-
 .../HasDefaultDevelopmentReloading.groovy}         |  12 +-
 .../grails/forge/defaults/IncludesDefaults.groovy} |  10 +-
 .../grails/forge/defaults/LanguageDefaults.groovy} |  32 +-
 .../org/grails/forge/diff/FeatureDiffer.groovy}    | 114 ++--
 .../forge/feature/ApplicationFeature.groovy}       |  14 +-
 .../grails/forge/feature/AvailableFeatures.groovy} |  20 +-
 .../forge/feature/BaseAvailableFeatures.groovy     |  88 +++
 .../org/grails/forge/feature/Category.groovy       |  65 +++
 .../grails/forge/feature/DefaultFeature.groovy}    |  14 +-
 .../org/grails/forge/feature/Feature.groovy}       |  50 +-
 .../org/grails/forge/feature/FeatureContext.groovy | 133 +++++
 .../org/grails/forge/feature/FeaturePhase.groovy}  |  17 +-
 .../grails/forge/feature/FeaturePredicate.groovy}  |  11 +-
 .../grails/forge/feature/FeatureRegistry.groovy    |  94 ++++
 .../org/grails/forge/feature/Features.groovy       | 134 +++++
 .../org/grails/forge/feature/OneOfFeature.groovy}  |  10 +-
 .../grails/forge/feature/ai/GrailsSpringAi.groovy  |  87 +++
 .../forge/feature/ai/SpringAiAnthropic.groovy      |  62 +++
 .../grails/forge/feature/ai/SpringAiOllama.groovy  |  68 +++
 .../grails/forge/feature/ai/SpringAiOpenAi.groovy  |  62 +++
 .../feature/ai/SpringAiProviderFeature.groovy      |  90 +++
 .../org/grails/forge/feature/api/OpenApi.groovy    |  87 +++
 .../forge/feature/asciidoctor/Asciidoctor.groovy   |  83 +++
 .../feature/assetPipeline/AssetPipeline.groovy     | 159 ++++++
 .../forge/feature/build/BuildFeature.groovy}       |  18 +-
 .../forge/feature/build/gradle/Dockerfile.groovy   |  85 +++
 .../forge/feature/build/gradle/Gradle.groovy       | 100 ++++
 .../feature/build/gradle/GradleBuildSrc.groovy     |  77 +++
 .../build/gradle/GradleBuildSrcFeature.groovy}     |  22 +-
 .../feature/build/gradle/GradleSettingsFile.groovy |  81 +++
 .../build/gradle/GradleSettingsFileFeature.groovy} |  22 +-
 .../forge/feature/cache/CacheFeature.groovy}       |  18 +-
 .../org/grails/forge/feature/cache/EHCache.groovy  |  67 +++
 .../grails/forge/feature/cache/GrailsCache.groovy  |  76 +++
 .../config/ApplicationConfiguration.groovy}        |  38 +-
 .../feature/config/BootstrapConfiguration.groovy}  |  24 +-
 .../forge/feature/config/Configuration.groovy}     | 157 +++---
 .../feature/config/ConfigurationFeature.groovy}    |  39 +-
 .../grails/forge/feature/config/Properties.groovy} |  47 +-
 .../org/grails/forge/feature/config/Yaml.groovy}   |  54 +-
 .../forge/feature/database/AsyncGorm.groovy}       |  68 +--
 .../DatabaseDriverConfigurationFeature.groovy}     |  57 +-
 .../feature/database/DatabaseDriverFeature.groovy  |  88 +++
 .../forge/feature/database/GormFeature.groovy}     |  26 +-
 .../feature/database/GormOneOfFeature.groovy}      |  12 +-
 .../feature/database/GrailsDataHibernate5.groovy   | 128 +++++
 .../feature/database/GrailsDataHibernate7.groovy   | 124 +++++
 .../database/GrailsDataHibernateValidator.groovy}  |  35 +-
 .../feature/database/GrailsDataMongoDB.groovy}     |  91 ++-
 .../forge/feature/database/GraphqlGorm.groovy}     |  68 +--
 .../org/grails/forge/feature/database/H2.groovy    | 106 ++++
 .../forge/feature/database/JpaFeature.groovy}      |   8 +-
 .../feature/database/MongoDBTestingSupport.groovy  |  78 +++
 .../MongoDBTestingSupportValidator.groovy}         |  28 +-
 .../forge/feature/database/MongoFeature.groovy}    |  30 +-
 .../grails/forge/feature/database/MongoSync.groovy |  87 +++
 .../org/grails/forge/feature/database/MySQL.groovy |  98 ++++
 .../grails/forge/feature/database/Neo4jGorm.groovy |  77 +++
 .../forge/feature/database/PostgreSQL.groovy       |  99 ++++
 .../grails/forge/feature/database/SQLServer.groovy |  98 ++++
 .../forge/feature/database/TestContainers.groovy   | 134 +++++
 .../github/workflows/GitHubWorkflowFeature.groovy} |  33 +-
 .../forge/feature/github/workflows/Secret.groovy}  |  37 +-
 .../plain/PlainGithubWorkflowFeature.groovy        |  59 ++
 .../grails/forge/feature/grails/GrailsBase.groovy  | 117 ++++
 .../feature/grails/GrailsCompileStatic.groovy}     |  38 +-
 .../feature/grails/GrailsDefaultPlugins.groovy     |  91 +++
 .../forge/feature/grails/GrailsGradlePlugin.groovy |  82 +++
 .../forge/feature/grails/GrailsUrlMappings.groovy  |  63 +++
 .../forge/feature/grails/GrailsWebConsole.groovy   |  74 +++
 .../feature/grailsProfiles/GrailsProfiles.groovy   |  79 +++
 .../feature/grailsWrapper/GrailsWrapper.groovy     |  81 +++
 .../forge/feature/lang/LanguageFeature.groovy}     |  22 +-
 .../feature/lang/groovy/GrailsApplication.groovy   |  88 +++
 .../lang/groovy/GrailsApplicationFeature.groovy}   |  10 +-
 .../grails/forge/feature/logging/Logback.groovy}   |  56 +-
 .../forge/feature/logging/LogbackConfig.groovy}    |  56 +-
 .../forge/feature/logging/LoggingFeature.groovy}   |  18 +-
 .../forge/feature/micronaut/GrailsMicronaut.groovy | 103 ++++
 .../micronaut/GrailsMicronautValidator.groovy}     |  29 +-
 .../feature/micronaut/MicronautHttpClient.groovy   | 117 ++++
 .../migration/DatabaseMigrationPlugin.groovy       |  80 +++
 .../feature/migration/MigrationFeature.groovy}     |  18 +-
 .../org/grails/forge/feature/other/AppName.groovy  |  66 +++
 .../grails/forge/feature/other/GrailsQuartz.groovy |  74 +++
 .../feature/other/GrailsStartupProgress.groovy     |  79 +++
 .../forge/feature/other/HibernateValidator.groovy  |  70 +++
 .../org/grails/forge/feature/other/Readme.groovy   |  94 ++++
 .../grails/forge/feature/other/ShadePlugin.groovy  |  77 +++
 .../grails/forge/feature/reloading/Jrebel.groovy   |  74 +++
 .../feature/reloading/ReloadingFeature.groovy}     |  26 +-
 .../feature/reloading/SpringBootDevTools.groovy    |  93 ++++
 .../feature/security/GrailsSpringSecurity.groovy   |  90 +++
 .../feature/security/GrailsSpringSecurityUi.groovy |  97 ++++
 .../security/PrimarySecurityFeature.groovy}        |  10 +-
 .../forge/feature/security/SecurityFeature.groovy  |  87 +++
 .../security/SpringBootStarterSecurity.groovy      |  86 +++
 .../forge/feature/sitemesh3/Sitemesh3.groovy}      |  54 +-
 .../feature/spring/SpringBootAutoconfigure.groovy  |  67 +++
 .../spring/SpringBootEmbeddedServlet.groovy}       |  22 +-
 .../feature/spring/SpringBootJettyFeature.groovy   |  63 +++
 .../feature/spring/SpringBootStarterFeature.groovy |  76 +++
 .../feature/spring/SpringBootTomcatFeature.groovy} |  60 +-
 .../spring/SpringBootUndertowFeature.groovy}       |  54 +-
 .../spring/SpringBootVirtualThreads.groovy}        |  46 +-
 .../forge/feature/spring/SpringResources.groovy    |  65 +++
 .../feature/spring/SpringThreadingFeature.groovy}  |  18 +-
 .../grails/forge/feature/test/GebFeature.groovy}   |  22 +-
 .../forge/feature/test/GebWithLocalBrowsers.groovy | 124 +++++
 .../feature/test/GebWithTestcontainers.groovy      | 106 ++++
 .../forge/feature/test/GormTestingSupport.groovy   |  67 +++
 .../feature/test/GrailsWebTestingSupport.groovy    |  67 +++
 .../org/grails/forge/feature/test/Mockito.groovy   |  77 +++
 .../forge/feature/test/MockitoValidator.groovy}    |  25 +-
 .../org/grails/forge/feature/test/Spock.groovy     |  73 +++
 .../feature/test/ViewsJsonTestingSupport.groovy    |  67 +++
 .../validation/CompositeFeatureValidator.groovy}   |  35 +-
 .../feature/validation/FeatureValidator.groovy}    |  18 +-
 .../validation/OneOfFeatureValidator.groovy}       |  39 +-
 .../org/grails/forge/feature/view/GrailsGsp.groovy | 106 ++++
 .../grails/forge/feature/view/GrailsLayout.groovy} |  34 +-
 .../grails/forge/feature/view/GrailsViews.groovy   |  72 +++
 .../grails/forge/feature/view/GspLayout.groovy}    |  24 +-
 .../grails/forge/feature/view/Scaffolding.groovy   |  88 +++
 .../grails/forge/feature/view/json/ViewJson.groovy |  93 ++++
 .../forge/feature/view/markup/ViewMarkup.groovy    |  77 +++
 .../org/grails/forge/feature/web/GrailsWeb.groovy} |  36 +-
 .../org/grails/forge/io/ConsoleOutput.groovy}      |  37 +-
 .../grails/forge/io/FileSystemOutputHandler.groovy | 144 +++++
 .../org/grails/forge/io/MapOutputHandler.groovy}   |  45 +-
 .../org/grails/forge/io/OutputHandler.groovy}      |  17 +-
 .../org/grails/forge/io/OutputUtils.groovy}        |  43 +-
 .../org/grails/forge/io/ZipOutputHandler.groovy    | 146 +++++
 .../org/grails/forge/options/BuildTool.groovy      |  78 +++
 .../forge/options/DefaultTestViewProvider.groovy}  |  19 +-
 .../forge/options/DevelopmentReloading.groovy}     |  48 +-
 .../org/grails/forge/options/FeatureFilter.groovy} |  59 +-
 .../org/grails/forge/options/GormImpl.groovy}      |  52 +-
 .../org/grails/forge/options/JdkVersion.groovy}    |  29 +-
 .../org/grails/forge/options/Language.groovy       |  99 ++++
 .../groovy/org/grails/forge/options/Options.groovy | 128 +++++
 .../org/grails/forge/options/ServletImpl.groovy}   |  38 +-
 .../org/grails/forge/options/TestFramework.groovy} |  53 +-
 .../grails/forge/options/TestViewProvider.groovy}  |  22 +-
 .../grails/forge/template/BinaryTemplate.groovy}   |  19 +-
 .../grails/forge/template/Config4kTemplate.groovy} |  43 +-
 .../forge/template/DefaultTemplateRenderer.groovy} |  63 ++-
 .../org/grails/forge/template/ForgePages.groovy    | 109 ++++
 .../org/grails/forge/template/GspTemplate.groovy}  |  46 +-
 .../org/grails/forge/template/GspView.groovy       |  69 +++
 .../forge/template/PropertiesTemplate.groovy}      |  65 +--
 .../org/grails/forge/template/RenderResult.groovy} |  69 +--
 .../grails/forge/template/StringTemplate.groovy}   |  28 +-
 .../org/grails/forge/template/Template.groovy}     |  13 +-
 .../grails/forge/template/TemplateModel.groovy}    |   8 +-
 .../grails/forge/template/TemplateRenderer.groovy} |  22 +-
 .../org/grails/forge/template/URLTemplate.groovy}  |  45 +-
 .../org/grails/forge/template/Writable.groovy}     |   9 +-
 .../org/grails/forge/template/YamlTemplate.groovy  |  89 +++
 .../org/grails/forge/util/IOFeatureUtil.groovy}    |  42 +-
 .../org/grails/forge/util/NameUtils.groovy}        | 471 ++++++++--------
 .../org/grails/forge/util/ThrowingSupplier.groovy} |  10 +-
 .../org/grails/forge/util/VersionInfo.groovy       | 188 +++++++
 .../org/grails/forge/util/ZipUtil.groovy}          |  72 ++-
 .../java/org/grails/forge/analytics/Generated.java | 112 ----
 .../grails/forge/analytics/SelectedFeature.java    |  38 --
 .../forge/application/PluginAvailableFeatures.java |  35 --
 .../java/org/grails/forge/application/Project.java |  94 ----
 .../application/RestApiAvailableFeatures.java      |  34 --
 .../forge/application/WebAvailableFeatures.java    |  35 --
 .../application/WebPluginAvailableFeatures.java    |  34 --
 .../application/generator/GeneratorContext.java    | 387 -------------
 .../forge/build/dependencies/Dependency.java       | 393 -------------
 .../build/dependencies/DependencyCoordinate.java   | 121 ----
 .../build/dependencies/LookupFailedException.java  |  26 -
 .../dependencies/PomDependencyVersionResolver.java | 136 -----
 .../build/gradle/DefaultGradleRepository.java      | 142 -----
 .../org/grails/forge/build/gradle/GradleBuild.java | 167 ------
 .../forge/build/gradle/GradleDependency.java       | 125 -----
 .../grails/forge/build/gradle/GradlePlugin.java    | 256 ---------
 .../forge/build/gradle/VersionRegexRepoFilter.java |  22 -
 .../grails/forge/defaults/IncludesDefaults.java    |  23 -
 .../forge/feature/BaseAvailableFeatures.java       |  86 ---
 .../java/org/grails/forge/feature/Category.java    |  60 --
 .../org/grails/forge/feature/FeatureContext.java   | 133 -----
 .../java/org/grails/forge/feature/Features.java    | 137 -----
 .../java/org/grails/forge/feature/api/OpenApi.java |  87 ---
 .../forge/feature/asciidoctor/Asciidoctor.java     |  82 ---
 .../forge/feature/assetPipeline/AssetPipeline.java | 160 ------
 .../forge/feature/build/gradle/Dockerfile.java     |  85 ---
 .../grails/forge/feature/build/gradle/Gradle.java  | 109 ----
 .../forge/feature/build/gradle/GradleBuildSrc.java |  81 ---
 .../feature/build/gradle/GradleSettingsFile.java   |  80 ---
 .../build/gradle/templates/buildGradle.rocker.raw  | 156 ------
 .../gradle/templates/gradleProperties.rocker.raw   |  33 --
 .../gradle/templates/settingsGradle.rocker.raw     |  35 --
 .../org/grails/forge/feature/cache/EHCache.java    |  67 ---
 .../grails/forge/feature/cache/GrailsCache.java    |  76 ---
 .../java/org/grails/forge/feature/cli.rocker.raw   |  48 --
 .../feature/config/ApplicationConfiguration.java   |  40 --
 .../feature/database/DatabaseDriverFeature.java    |  89 ---
 .../feature/database/GrailsDataHibernate5.java     | 129 -----
 .../feature/database/GrailsDataHibernate7.java     | 125 -----
 .../java/org/grails/forge/feature/database/H2.java | 106 ----
 .../feature/database/MongoDBTestingSupport.java    |  76 ---
 .../grails/forge/feature/database/MongoSync.java   |  85 ---
 .../org/grails/forge/feature/database/MySQL.java   |  96 ----
 .../grails/forge/feature/database/Neo4jGorm.java   |  78 ---
 .../grails/forge/feature/database/PostgreSQL.java  |  97 ----
 .../grails/forge/feature/database/SQLServer.java   |  96 ----
 .../forge/feature/database/TestContainers.java     | 134 -----
 .../plain/PlainGithubWorkflowFeature.java          |  57 --
 .../grails/forge/feature/grails/GrailsBase.java    | 117 ----
 .../forge/feature/grails/GrailsDefaultPlugins.java |  91 ---
 .../forge/feature/grails/GrailsGradlePlugin.java   |  82 ---
 .../forge/feature/grails/GrailsUrlMappings.java    |  63 ---
 .../forge/feature/grails/GrailsWebConsole.java     |  74 ---
 .../feature/grailsProfiles/GrailsProfiles.java     |  80 ---
 .../forge/feature/grailsWrapper/GrailsWrapper.java |  81 ---
 .../feature/lang/groovy/GrailsApplication.java     |  89 ---
 .../forge/feature/micronaut/GrailsMicronaut.java   | 103 ----
 .../feature/micronaut/MicronautHttpClient.java     | 117 ----
 .../feature/migration/DatabaseMigrationPlugin.java |  79 ---
 .../org/grails/forge/feature/other/AppName.java    |  67 ---
 .../grails/forge/feature/other/GrailsQuartz.java   |  72 ---
 .../forge/feature/other/GrailsStartupProgress.java |  78 ---
 .../forge/feature/other/HibernateValidator.java    |  68 ---
 .../org/grails/forge/feature/other/Readme.java     |  99 ----
 .../grails/forge/feature/other/ShadePlugin.java    |  75 ---
 .../forge/feature/other/template/readme.rocker.raw |  41 --
 .../org/grails/forge/feature/reloading/Jrebel.java |  74 ---
 .../feature/reloading/SpringBootDevTools.java      |  94 ----
 .../feature/security/GrailsSpringSecurity.java     |  91 ---
 .../feature/security/GrailsSpringSecurityUi.java   |  98 ----
 .../forge/feature/security/SecurityFeature.java    |  88 ---
 .../security/SpringBootStarterSecurity.java        |  88 ---
 .../feature/spring/SpringBootAutoconfigure.java    |  66 ---
 .../feature/spring/SpringBootJettyFeature.java     |  63 ---
 .../feature/spring/SpringBootStarterFeature.java   |  76 ---
 .../forge/feature/spring/SpringResources.java      |  64 ---
 .../forge/feature/test/GebWithLocalBrowsers.java   | 124 -----
 .../forge/feature/test/GebWithTestcontainers.java  | 106 ----
 .../forge/feature/test/GormTestingSupport.java     |  66 ---
 .../feature/test/GrailsWebTestingSupport.java      |  66 ---
 .../org/grails/forge/feature/test/Mockito.java     |  77 ---
 .../java/org/grails/forge/feature/test/Spock.java  |  73 ---
 .../feature/test/ViewsJsonTestingSupport.java      |  66 ---
 .../org/grails/forge/feature/view/GrailsGsp.java   | 107 ----
 .../org/grails/forge/feature/view/GrailsViews.java |  70 ---
 .../org/grails/forge/feature/view/Scaffolding.java |  88 ---
 .../grails/forge/feature/view/json/ViewJson.java   |  93 ----
 .../forge/feature/view/markup/ViewMarkup.java      |  75 ---
 .../grails/forge/io/FileSystemOutputHandler.java   | 149 -----
 .../java/org/grails/forge/io/ZipOutputHandler.java | 133 -----
 .../java/org/grails/forge/options/BuildTool.java   |  79 ---
 .../org/grails/forge/options/FeatureFilter.java    |  66 ---
 .../forge/options/GormImplTypeConverter.java       |  47 --
 .../java/org/grails/forge/options/Language.java    | 100 ----
 .../java/org/grails/forge/options/Options.java     | 158 ------
 .../org/grails/forge/template/RockerWritable.java  |  39 --
 .../org/grails/forge/template/TemplateModel.java   |  22 -
 .../org/grails/forge/template/YamlTemplate.java    |  93 ----
 .../java/org/grails/forge/util/VersionInfo.java    | 196 -------
 .../grails-forge-core/resource-config.json         |  14 -
 ...rk.boot.autoconfigure.AutoConfiguration.imports |   1 +
 .../org/grails/forge/ApplicationContextSpec.groovy |   8 +-
 .../groovy/org/grails/forge/BuildBuilder.groovy    |  12 +-
 ...tionContextSpec.groovy => ForgeContexts.groovy} |  30 +-
 ...ec.groovy => ForgeCoreConfigurationSpec.groovy} |  18 +-
 .../org/grails/forge/ForgeGrailsPluginSpec.groovy  | 134 +++++
 .../PomDependencyVersionResolverSpec.groovy        |  10 +-
 .../forge/build/gradle/GradleRepositorySpec.groovy |  16 +
 .../grails/forge/build/gradle/GradleSpec.groovy    |   5 +-
 .../forge/feature/BaseAvailableFeaturesSpec.groovy |   6 +-
 .../forge/feature/ai/GrailsSpringAiSpec.groovy     | 147 +++++
 .../grails/forge/feature/cache/CacheSpec.groovy    |   4 +-
 .../forge/feature/config/PropertiesSpec.groovy     |   4 +-
 .../grails/forge/feature/config/YamlSpec.groovy    |   4 +-
 .../feature/database/GrailsDataMongoDBSpec.groovy  |   2 +-
 .../forge/feature/database/MongoSyncSpec.groovy    |  16 +
 .../grails/forge/feature/database/MySQLSpec.groovy |   2 +-
 .../forge/feature/database/Neo4JGormSpec.groovy    |   2 +-
 .../forge/feature/database/PostgresSpec.groovy     |   2 +-
 .../forge/feature/database/SQLServerSpec.groovy    |   2 +-
 .../feature/database/TestContainersSpec.groovy     |   6 +-
 .../workflows/PlainGithubWorkflowSpec.groovy       |   4 +-
 .../forge/feature/grails/GrailsBaseSpec.groovy     |   4 +-
 .../feature/grails/GrailsGradlePluginSpec.groovy   |   4 +-
 .../feature/grails/GrailsWebConsoleSpec.groovy     |   4 +-
 .../feature/lang/GrailsApplicationSpec.groovy      |   4 +-
 .../feature/micronaut/GrailsMicronautSpec.groovy   |   4 +-
 .../micronaut/MicronautHttpClientSpec.groovy       |   4 +-
 .../forge/feature/spring/SpringBootSpec.groovy     |   4 +-
 .../spring/SpringBootVirtualThreadsSpec.groovy     |   4 +-
 .../forge/fixture/CommandOutputFixture.groovy      |   4 +-
 .../org/grails/forge/fixture/ContextFixture.groovy |   9 +-
 .../org/grails/forge/options/GormImplSpec.groovy   |   1 +
 ...iderSpec.groovy => TestViewProviderSpec.groovy} |  10 +-
 .../plugintest/ForgePluginTestApplication.groovy}  |  46 +-
 .../org/grails/forge/util/VersionInfoSpec.groovy   |   6 +-
 grails-forge/grails-forge-web-netty/build.gradle   | 156 ------
 .../java/org/grails/forge/netty/Application.java   |  41 --
 .../forge/netty/analytics/AnalyticsClient.java     |  43 --
 .../grails-forge-web-netty/native-image.properties |  18 -
 .../grails-forge-web-netty/resource-config.json    |   8 -
 .../src/main/resources/application-dev.yml         |   5 -
 .../src/main/resources/application.yml             |  37 --
 .../src/main/resources/logback.xml                 |  15 -
 .../aws/.platform/nginx/conf.d/proxy.conf          |   0
 .../aws/Procfile                                   |   0
 .../aws/start.sh                                   |   4 +-
 grails-forge/grails-forge-web/build.gradle         | 124 +++++
 .../grails-app/conf/application.yml                |  45 ++
 .../grails-app/conf/logback.xml}                   |  24 +-
 .../grails-app/conf/openapi-base.yml               |  16 +-
 .../org/grails/forge/web/DiffController.groovy     | 142 +++++
 .../forge/web/ForgeApplicationController.groovy    | 146 +++++
 .../org/grails/forge/web/PreviewController.groovy  | 102 ++++
 .../forge/web/SelectOptionsController.groovy       |  52 ++
 .../org/grails/forge/web/UrlMappings.groovy        |  37 ++
 .../grails/forge/web/ZipCreateController.groovy    | 132 +++++
 .../grails-app/i18n/messages.properties            |  19 +
 .../init/org/grails/forge/web/Application.groovy}  |  44 +-
 .../forge/web/ForgeApiIntegrationSpec.groovy       | 615 +++++++++++++++++++++
 .../resources/api-test-messages_fr.properties}     |   9 +-
 .../org/grails/forge/api/ApplicationTypeDTO.groovy | 112 ++++
 .../grails/forge/api/ApplicationTypeList.groovy}   |  30 +-
 .../forge/api/ApplicationTypeOperations.groovy}    |  24 +-
 .../forge/api/DevelopmentReloadingDTO.groovy       |  90 +++
 .../groovy/org/grails/forge/api/FeatureDTO.groovy  | 136 +++++
 .../org/grails/forge/api/FeatureList.groovy}       |  30 +-
 .../org/grails/forge/api/FeatureOperations.groovy} |  22 +-
 .../org/grails/forge/api/FeatureService.groovy     |  81 +++
 .../forge/api/ForgeApplicationService.groovy       | 114 ++++
 .../org/grails/forge/api/ForgeMessages.groovy}     |  19 +-
 .../groovy/org/grails/forge/api/GormImplDTO.groovy |  98 ++++
 .../forge/api/GrailsForgeConfiguration.groovy}     |  78 ++-
 .../org/grails/forge/api/JdkVersionDTO.groovy      |  97 ++++
 .../groovy/org/grails/forge/api/LanguageDTO.groovy | 109 ++++
 .../groovy/org/grails/forge/api/LinkDTO.groovy}    |  40 +-
 .../groovy/org/grails/forge/api/Linkable.groovy}   |  34 +-
 .../org/grails/forge/api/Relationship.groovy}      |  35 +-
 .../groovy/org/grails/forge/api/RequestInfo.groovy |  78 +++
 .../org/grails/forge/api/SelectOptionDTO.groovy}   |  39 +-
 .../org/grails/forge/api/SelectOptionsDTO.groovy}  | 150 +++--
 .../groovy/org/grails/forge/api/Selectable.groovy} |  14 +-
 .../org/grails/forge/api/ServletImplDTO.groovy     |  86 +++
 .../org/grails/forge/api/UserAgentParser.groovy}   |  39 +-
 .../groovy/org/grails/forge/api/VersionDTO.groovy} |  34 +-
 .../forge/api/create/CreateProjectService.groovy   |  88 +++
 .../options/ApplicationTypeSelectOptions.groovy}   |  25 +-
 .../DevelopmentReloadingSelectOptions.groovy}      |  25 +-
 .../api/options/GormImplSelectOptions.groovy}      |  25 +-
 .../api/options/JdkVersionSelectOptions.groovy}    |  25 +-
 .../api/options/LanguageSelectOptions.groovy}      |  25 +-
 .../api/options/SelectOptionsOperations.groovy}    |  14 +-
 .../api/options/ServletImplSelectOptions.groovy}   |  25 +-
 .../grails/forge/api/preview/PreviewDTO.groovy}    |  33 +-
 .../grails/forge/web/ForgeRequestSupport.groovy    | 187 +++++++
 .../grails/forge/web/GroovyObjectJsonMixin.groovy} |  14 +-
 .../forge/web/ForgeRequestSupportSpec.groovy       | 162 ++++++
 .../forge/web/GrailsForgeConfigurationSpec.groovy  |  72 +++
 grails-forge/grailsforgearchitecture.jpeg          | Bin 218395 -> 0 bytes
 grails-forge/infrastructure/README.md              |   2 +-
 grails-forge/infrastructure/environment.yaml       |   9 -
 grails-forge/infrastructure/shared.yaml            |   2 +-
 grails-forge/sam-local.yml                         |  43 --
 grails-forge/settings.gradle                       |  12 +-
 grails-forge/test-core/build.gradle                |  39 +-
 .../forge/cli/command/CreateControllerSpec.groovy  |   6 +-
 .../forge/cli/command/CreateInterceptorSpec.groovy |   6 +-
 .../forge/cli/command/CreateServiceSpec.groovy     |   6 +-
 .../forge/cli/command/CreateTagLibSpec.groovy      |   6 +-
 .../org/grails/forge/utils/CommandSpec.groovy      |  13 +-
 grails-geb/README.md                               |  18 +
 grails-gradle/gradle/wrapper/gradle-wrapper.jar    | Bin 47623 -> 48749 bytes
 .../gradle/wrapper/gradle-wrapper.properties       |   4 +-
 .../plugin/core/GrailsPluginGradlePlugin.groovy    |  11 +-
 ...GrailsPluginGradlePluginNative2AsciiSpec.groovy |  43 ++
 .../plugin-native2ascii-off/build.gradle           |   8 +
 .../gradle.properties                              |   0
 .../grails-app/conf/application.yml                |   0
 .../plugin-native2ascii-off/settings.gradle        |   1 +
 .../resources/templates/messages_ru.properties     |  19 +
 grails-gradle/settings.gradle                      |   4 +-
 .../grails/gsp/compiler/GroovyPageParser.groovy    |  17 +-
 .../org/grails/gsp/compiler/LogicLineTrimmer.java  | 234 ++++++++
 .../org/grails/gsp/GspTrimLogicLinesSpec.groovy    | 299 ++++++++++
 .../skeleton/gradle/wrapper/gradle-wrapper.jar     | Bin 47623 -> 48749 bytes
 .../gradle/wrapper/gradle-wrapper.properties       |   4 +-
 .../skeleton/gradle/wrapper/gradle-wrapper.jar     | Bin 47623 -> 48749 bytes
 .../gradle/wrapper/gradle-wrapper.properties       |   4 +-
 .../gradle/wrapper/gradle-wrapper.jar              | Bin 47623 -> 48749 bytes
 .../gradle/wrapper/gradle-wrapper.properties       |   2 +-
 grails-skills/ai/build.gradle                      |  34 ++
 .../ai/skills/grails-ai-developer/SKILL.md         | 270 +++++++++
 .../developer/skills/grails-developer/SKILL.md     |   3 +
 .../skills/grails-8-upgrade/SKILL.md               |   2 +-
 grails-spring-ai/build.gradle                      |  96 ++++
 .../grails-app/conf/plugin.yml                     |  36 +-
 .../apache/grails/ai/SpringAiGrailsPlugin.groovy   |  57 ++
 .../ai/async/ChatResponseStreamItemRenderer.groovy |  68 +++
 ...rk.boot.autoconfigure.AutoConfiguration.imports |   1 +
 .../grails/ai/SpringAiAutoConfigurationSpec.groovy |  74 +++
 .../grails/ai/SpringAiPluginDefaultsSpec.groovy    |  57 ++
 .../grails/ai/SpringAiPromptLoggingSpec.groovy     |  89 +++
 .../ChatResponseStreamItemRendererSpec.groovy      |  75 +++
 grails-spring-security/acl/plugin/build.gradle     |   8 +-
 grails-spring-security/plugin/build.gradle         | 159 +++---
 .../grails/startup/StartupProgressSpec.groovy      |  40 +-
 grails-test-examples/{latency => ai}/build.gradle  |  18 +-
 .../ai/grails-app/conf/application.yml             |  39 +-
 .../{latency => ai}/grails-app/conf/logback.xml    |   0
 .../controllers/aiapp/ChatController.groovy        |  28 +-
 .../controllers/aiapp/StreamController.groovy      |  71 +++
 .../controllers/aiapp/UrlMappings.groovy           |  12 +-
 .../ai/grails-app/init/aiapp/Application.groovy    |  16 +-
 .../grails-app/services/aiapp/AnswerService.groovy |  42 +-
 .../groovy/aiapp/AiDefaultsSpec.groovy             |  80 +++
 .../groovy/aiapp/ChatFunctionalSpec.groovy         |  79 +++
 .../groovy/aiapp/OwnChatModelFunctionalSpec.groovy |  60 ++
 .../groovy/aiapp/OwnModelApplication.groovy        |  56 ++
 .../groovy/aiapp/StreamingFunctionalSpec.groovy    |  84 +++
 .../src/test/groovy/aiapp/AnswerServiceSpec.groovy |  35 +-
 grails-test-examples/app1/build.gradle             |   1 +
 .../AppBenchInterceptorDemoSpec.groovy             |  40 +-
 grails-test-examples/benchmarks/README.adoc        |  35 ++
 grails-test-examples/benchmarks/build.gradle       |  25 +
 .../grails/benchmarks/report/AppIndyBench.groovy   | 340 ++++++++++++
 .../benchmarks/report/AppIndyBenchSpec.groovy      | 279 ++++++++++
 .../externalconfig/ExternalConfigSpec.groovy       |  31 ++
 grails-test-examples/gsp-layout/build.gradle       |   2 +
 .../layout/AppBenchDemoRenderTextSpec.groovy       |  41 +-
 grails-test-examples/latency/build.gradle          |   1 +
 .../groovy/latencyapp/AppBenchFastPingSpec.groovy  |  41 +-
 .../build.gradle                                   |  42 +-
 .../groovy/grails/testing/ai/AiUnitTest.groovy     | 112 ++++
 .../ai/AiStubEnvironmentPostProcessor.groovy       | 115 ++++
 .../grails/testing/ai/AiStubProperties.groovy      |  49 ++
 .../apache/grails/testing/ai/AiTestBeans.groovy    |  96 ++++
 .../testing/ai/AiTestingAutoConfiguration.groovy   |  70 +++
 .../AiTestingVectorStoreAutoConfiguration.groovy   |  67 +++
 .../testing/ai/ResettableSimpleVectorStore.groovy  |  34 +-
 .../grails/testing/ai/ScriptedChatModel.groovy     | 165 ++++++
 .../testing/ai/SimpleVectorStoreBeans.groovy       |  59 ++
 .../grails/testing/ai/StubEmbeddingModel.groovy    | 129 +++++
 .../testing/ai/spock/AiSetupInterceptor.groovy     |  55 ++
 .../testing/ai/spock/AiSetupSpecInterceptor.groovy |  46 ++
 .../ai/spock/AiTestingSupportExtension.groovy      |  47 ++
 .../additional-spring-configuration-metadata.json  |  21 +
 ...ockframework.runtime.extension.IGlobalExtension |   1 +
 .../src/main/resources/META-INF/spring.factories   |  13 +-
 ...rk.boot.autoconfigure.AutoConfiguration.imports |   2 +
 .../testing/ai/AiUnitTestConfiguredSpec.groovy     |  85 +++
 .../testing/ai/AiUnitTestOwnBeansSpec.groovy       |  97 ++++
 .../groovy/grails/testing/ai/AiUnitTestSpec.groovy | 113 ++++
 .../groovy/grails/testing/ai/AnswerService.groovy  |  18 +-
 .../ai/AiStubEnvironmentPostProcessorSpec.groovy   | 162 ++++++
 .../ai/AiTestingAutoConfigurationSpec.groovy       | 222 ++++++++
 .../grails/testing/ai/ScriptedChatModelSpec.groovy | 216 ++++++++
 .../testing/ai/StubEmbeddingModelSpec.groovy       | 154 ++++++
 grails-testing-support-http-client/build.gradle    |   4 +
 .../http/client/bench/AppHttpBenchSpec.groovy      | 211 +++++++
 .../testing/http/client/bench/AppHttpBench.groovy  | 352 ++++++++++++
 settings.gradle                                    |  16 +-
 threat-model.yaml                                  |   4 +-
 903 files changed, 32355 insertions(+), 23118 deletions(-)
 create mode 120000 .agents/skills/grails-ai-developer
 create mode 100644 .github/actions/gradle-cache-policy/action.yml
 create mode 100644 build-logic/plugins/src/main/groovy/org/apache/grails/buildsrc/BomDependencyGraph.groovy
 rename {grails-forge/buildSrc => build-logic/plugins}/src/main/groovy/org/apache/grails/buildsrc/WriteGrailsVersionInfoTask.groovy (89%)
 rename {grails-forge/buildSrc => build-logic/plugins}/src/main/groovy/org/apache/grails/forge/buildlogic/shadowjar/GrailsGroovyExtensionTransformer.groovy (79%)
 rename {grails-forge/buildSrc => build-logic/plugins}/src/main/groovy/org/apache/grails/forge/buildlogic/shadowjar/GrailsShadowLicenseTransform.groovy (100%)
 rename {grails-forge/buildSrc => build-logic/plugins}/src/main/groovy/org/apache/grails/forge/buildlogic/shadowjar/GrailsShadowNoticeTransform.groovy (100%)
 rename {grails-forge/buildSrc => build-logic/plugins}/src/main/groovy/org/grails/forge/internal/tasks/GenerateManpageAsciidoc.java (100%)
 rename {grails-forge/buildSrc => build-logic/plugins}/src/main/groovy/org/grails/forge/internal/tasks/PicocliBuildCompletionTask.java (100%)
 copy grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/options/GormImplSpec.groovy => build-logic/plugins/src/test/groovy/org/apache/grails/buildsrc/BomDependencyGraphSpec.groovy (51%)
 create mode 100644 build-logic/plugins/src/test/groovy/org/apache/grails/buildsrc/WriteGrailsVersionInfoTaskSpec.groovy
 create mode 100644 build-logic/plugins/src/test/groovy/org/apache/grails/forge/buildlogic/shadowjar/GrailsGroovyExtensionTransformerSpec.groovy
 copy grails-async/{plugin => groovy-concurrent}/build.gradle (62%)
 create mode 100644 grails-async/groovy-concurrent/src/main/groovy/org/grails/async/factory/groovy/AwaitablePromise.groovy
 create mode 100644 grails-async/groovy-concurrent/src/main/groovy/org/grails/async/factory/groovy/AwaitablePromiseFactory.groovy
 create mode 100644 grails-async/groovy-concurrent/src/main/resources/META-INF/services/grails.async.PromiseFactory
 create mode 100644 grails-async/groovy-concurrent/src/test/groovy/org/grails/async/factory/groovy/AwaitablePromiseFactorySpec.groovy
 create mode 100644 grails-async/plugin/src/main/groovy/grails/async/web/StreamItemRenderer.groovy
 copy grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/github/workflows/GitHubWorkflowFeature.java => grails-async/plugin/src/main/groovy/org/grails/plugins/web/async/mvc/DefaultStreamItemRenderer.groovy (51%)
 create mode 100644 grails-async/plugin/src/main/groovy/org/grails/plugins/web/async/mvc/JacksonStreamItemRenderer.groovy
 create mode 100644 grails-async/plugin/src/main/groovy/org/grails/plugins/web/async/mvc/PublisherActionResultTransformer.groovy
 create mode 100644 grails-async/plugin/src/main/groovy/org/grails/plugins/web/async/mvc/ServerSentEventFormatter.groovy
 create mode 100644 grails-async/plugin/src/main/groovy/org/grails/plugins/web/async/mvc/ServerSentEventSubscriber.groovy
 create mode 100644 grails-async/plugin/src/main/groovy/org/grails/plugins/web/async/mvc/SingleValueSubscriber.groovy
 create mode 100644 grails-async/plugin/src/main/resources/META-INF/additional-spring-configuration-metadata.json
 create mode 100644 grails-async/plugin/src/test/groovy/org/grails/plugins/web/async/mvc/PublisherActionResultTransformerSpec.groovy
 create mode 100644 grails-async/plugin/src/test/groovy/org/grails/plugins/web/async/mvc/ServerSentEventFormatterSpec.groovy
 delete mode 100644 grails-bootstrap/src/test/groovy/grails/config/SpringProfileExcludeSpec.groovy
 create mode 100644 grails-cache/src/test/groovy/grails/plugin/cache/GrailsConcurrentLinkedMapCacheManagerSpec.groovy
 delete mode 100644 grails-cache/src/test/groovy/grails/plugin/cache/GrailsConcurrentLinkedMapCacheManagerTests.groovy
 create mode 100644 grails-cache/src/test/groovy/grails/plugin/cache/GrailsConcurrentMapCacheManagerSpec.groovy
 delete mode 100644 grails-cache/src/test/groovy/grails/plugin/cache/GrailsConcurrentMapCacheManagerTests.groovy
 create mode 100644 grails-core/src/test/groovy/grails/boot/GrailsAppYamlProfileSpec.groovy
 create mode 100644 grails-core/src/test/groovy/org/grails/config/PropertySourcesConfigReloadSpec.groovy
 create mode 100644 grails-core/src/test/groovy/org/grails/config/YamlSpringProfileSpec.groovy
 create mode 100644 grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/CompositeForeignKeySecondPass.java
 create mode 100644 grails-data-hibernate7/core/src/test/groovy/grails/gorm/tests/EmbeddedEntityCollectionKindsSpec.groovy
 create mode 100644 grails-data-hibernate7/core/src/test/groovy/grails/gorm/tests/UniqueGroupEnumAndCollectionSpec.groovy
 create mode 100644 grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CompositeForeignKeyColumnTypesSpec.groovy
 create mode 100644 grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CompositeForeignKeyRegistrationOrderSpec.groovy
 create mode 100644 grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ForeignKeyPairs.groovy
 create mode 100644 grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/InverseHasManyCompositeIdentifierOrderSpec.groovy
 create mode 100644 grails-doc/src/en/guide/async/asyncStreaming.adoc
 create mode 100644 grails-doc/src/en/guide/upgrading/upgrading81x.adoc
 create mode 100644 grails-doc/src/en/guide/upgrading/upgrading90x.adoc
 create mode 100644 grails-doc/src/en/guide/usingAi.adoc
 create mode 100644 grails-doc/src/en/guide/usingAi/aiChatClient.adoc
 create mode 100644 grails-doc/src/en/guide/usingAi/aiConfiguration.adoc
 create mode 100644 grails-doc/src/en/guide/usingAi/aiInstallation.adoc
 create mode 100644 grails-doc/src/en/guide/usingAi/aiProviders.adoc
 create mode 100644 grails-doc/src/en/guide/usingAi/aiStreaming.adoc
 create mode 100644 grails-doc/src/en/guide/usingAi/aiTesting.adoc
 copy {grails-async/plugin => grails-events/groovy-concurrent}/build.gradle (62%)
 create mode 100644 grails-events/groovy-concurrent/src/main/groovy/org/grails/events/groovy/ActorEventBus.groovy
 create mode 100644 grails-events/groovy-concurrent/src/main/resources/META-INF/services/grails.events.bus.EventBus
 create mode 100644 grails-events/groovy-concurrent/src/test/groovy/org/grails/events/groovy/ActorEventBusSpec.groovy
 delete mode 100644 grails-forge/.gitattributes
 delete mode 100644 grails-forge/.gitignore
 delete mode 100644 grails-forge/buildSrc/build.gradle
 delete mode 100644 grails-forge/buildSrc/settings.gradle
 delete mode 100644 grails-forge/buildSrc/src/main/java/org/grails/forge/rocker/plugin/JavaGeneratorRunnable.java
 delete mode 100644 grails-forge/buildSrc/src/main/java/org/grails/forge/rocker/plugin/RockerConfiguration.java
 delete mode 100644 grails-forge/buildSrc/src/main/java/org/grails/forge/rocker/plugin/RockerPlugin.java
 delete mode 100644 grails-forge/buildSrc/src/main/java/org/grails/forge/rocker/plugin/RockerSourceSetProperty.java
 delete mode 100644 grails-forge/buildSrc/src/main/java/org/grails/forge/rocker/plugin/RockerTask.java
 delete mode 100644 grails-forge/buildSrc/src/main/java/org/grails/forge/rocker/plugin/TemplateDirectorySet.java
 delete mode 100644 grails-forge/buildSrc/src/main/java/org/grails/forge/rocker/plugin/WhitespaceProcessor.java
 delete mode 100644 grails-forge/config/checkstyle/checkstyle.xml
 delete mode 100644 grails-forge/config/spotless.license.java
 delete mode 100644 grails-forge/docs/choose-postgresql.png
 delete mode 100644 grails-forge/docs/cloud_sql_create_intance.png
 delete mode 100644 grails-forge/docs/create-database.png
 delete mode 100644 grails-forge/docs/create-two-databases.png
 delete mode 100644 grails-forge/docs/dbinstance-options.png
 delete mode 100644 grails-forge/docs/enable-cloud-sql-admin-api.png
 delete mode 100644 grails-forge/docs/enable-compute-engine-api.png
 delete mode 100755 grails-forge/etc/bin/generate-build-artifact-hashes.groovy
 delete mode 100755 grails-forge/etc/bin/test-reproducible-builds.sh
 delete mode 100644 grails-forge/gradle/code-style-config.gradle
 delete mode 100644 grails-forge/gradle/groovy-version-pin.gradle
 delete mode 100644 grails-forge/gradle/micronaut-openapi-config.gradle
 delete mode 100644 grails-forge/grails-forge-analytics-postgres/build.gradle
 delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/main/java/org/grails/forge/analytics/postgres/AnalyticsController.java
 delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/main/java/org/grails/forge/analytics/postgres/Application.java
 delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/main/java/org/grails/forge/analytics/postgres/ApplicationRepository.java
 delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/main/java/org/grails/forge/analytics/postgres/Feature.java
 delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/main/java/org/grails/forge/analytics/postgres/FeatureRepository.java
 delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/main/java/org/grails/forge/analytics/postgres/Main.java
 delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/main/java/org/grails/forge/analytics/postgres/gcp/GoogleCloudSqlSetup.java
 delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/main/resources/META-INF/native-image/io.micronaut.starter/micronaut-starter-analytics-postgres/native-image.properties
 delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/main/resources/application-dev.yml
 delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/main/resources/application.yml
 delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/main/resources/databasemigrations/V1__schema.sql
 delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/main/resources/logback.xml
 delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/test/groovy/org/grails/forge/analytics/postgres/StoreGeneratedProjectStatsSpec.groovy
 delete mode 100644 grails-forge/grails-forge-api/build.gradle
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/ApplicationController.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/ApplicationTypeDTO.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/ApplicationTypeOperations.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/DevelopmentReloading.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/DevelopmentReloadingDTO.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/FeatureDTO.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/FeatureService.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/GormImplDTO.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/JdkVersionDTO.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/LanguageDTO.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/LinkDTO.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/RequestInfo.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/SelectOptionDTO.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/ServletImplDTO.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/analytics/GenerationListener.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/bind/RequestInfoArgumentBinder.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/create/AbstractCreateController.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/create/zip/ZipCreateController.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/create/zip/ZipCreateOperation.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/diff/DiffController.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/diff/DiffOperations.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/options/ApplicationTypeSelectOptions.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/options/DevelopmentReloadingSelectOptions.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/options/JdkVersionSelectOptions.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/options/LanguageSelectOptions.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/options/SelectOptionsController.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/options/SelectOptionsOperations.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/options/ServletImplSelectOptions.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/preview/PreviewController.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/preview/PreviewOperations.java
 delete mode 100644 grails-forge/grails-forge-api/src/main/resources/META-INF/native-image/org.grails.forge.api/grails-forge-api/reflect-config.json
 delete mode 100644 grails-forge/grails-forge-api/src/main/resources/META-INF/native-image/org.grails.forge.api/grails-forge-api/resource-config.json
 delete mode 100644 grails-forge/grails-forge-api/src/main/resources/application.yml
 delete mode 100644 grails-forge/grails-forge-api/src/main/resources/select_options.properties
 delete mode 100644 grails-forge/grails-forge-api/src/test/groovy/org/grails/forge/api/ApplicationControllerSpec.groovy
 delete mode 100644 grails-forge/grails-forge-api/src/test/groovy/org/grails/forge/api/ApplicationTypeClient.groovy
 delete mode 100644 grails-forge/grails-forge-api/src/test/groovy/org/grails/forge/api/CreateClient.groovy
 delete mode 100644 grails-forge/grails-forge-api/src/test/groovy/org/grails/forge/api/DiffClient.groovy
 delete mode 100644 grails-forge/grails-forge-api/src/test/groovy/org/grails/forge/api/DiffControllerSpec.groovy
 delete mode 100644 grails-forge/grails-forge-api/src/test/groovy/org/grails/forge/api/FeatureControllerSpec.groovy
 delete mode 100644 grails-forge/grails-forge-api/src/test/groovy/org/grails/forge/api/PreviewClient.groovy
 delete mode 100644 grails-forge/grails-forge-api/src/test/groovy/org/grails/forge/api/PreviewControllerSpec.groovy
 delete mode 100644 grails-forge/grails-forge-api/src/test/groovy/org/grails/forge/api/ZipCreateControllerSpec.groovy
 delete mode 100644 grails-forge/grails-forge-api/src/test/resources/features_es.properties
 delete mode 100644 grails-forge/grails-forge-api/src/test/resources/logback.xml
 create mode 100644 grails-forge/grails-forge-cli/grails-app/conf/application.yml
 create mode 100644 grails-forge/grails-forge-cli/grails-app/init/org/grails/forge/cli/Application.groovy
 copy grails-forge/grails-forge-cli/{src/main/java/org/grails/forge/cli/command/templates/controller.rocker.raw => grails-app/views/forge/cli/command/templates/controller.gsp} (72%)
 copy grails-forge/grails-forge-cli/{src/main/java/org/grails/forge/cli/command/templates/controllerSpec.rocker.raw => grails-app/views/forge/cli/command/templates/controllerSpec.gsp} (71%)
 rename grails-forge/grails-forge-cli/{src/main/java/org/grails/forge/cli/command/templates/domain.rocker.raw => grails-app/views/forge/cli/command/templates/domain.gsp} (73%)
 rename grails-forge/grails-forge-cli/{src/main/java/org/grails/forge/cli/command/templates/domainSpec.rocker.raw => grails-app/views/forge/cli/command/templates/domainSpec.gsp} (69%)
 copy grails-forge/grails-forge-cli/{src/main/java/org/grails/forge/cli/command/templates/interceptor.rocker.raw => grails-app/views/forge/cli/command/templates/interceptor.gsp} (74%)
 rename grails-forge/grails-forge-cli/{src/main/java/org/grails/forge/cli/command/templates/interceptorSpec.rocker.raw => grails-app/views/forge/cli/command/templates/interceptorSpec.gsp} (67%)
 rename grails-forge/grails-forge-cli/{src/main/java/org/grails/forge/cli/command/templates/job.rocker.raw => grails-app/views/forge/cli/command/templates/job.gsp} (76%)
 rename grails-forge/grails-forge-cli/{src/main/java/org/grails/forge/cli/command/templates/service.rocker.raw => grails-app/views/forge/cli/command/templates/service.gsp} (73%)
 rename grails-forge/grails-forge-cli/{src/main/java/org/grails/forge/cli/command/templates/serviceSpec.rocker.raw => grails-app/views/forge/cli/command/templates/serviceSpec.gsp} (71%)
 rename grails-forge/grails-forge-cli/{src/main/java/org/grails/forge/cli/command/templates/taglib.rocker.raw => grails-app/views/forge/cli/command/templates/taglib.gsp} (73%)
 rename grails-forge/grails-forge-cli/{src/main/java/org/grails/forge/cli/command/templates/taglibSpec.rocker.raw => grails-app/views/forge/cli/command/templates/taglibSpec.gsp} (71%)
 create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/CodeGenConfig.groovy
 rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/CommonOptionsMixin.java => groovy/org/grails/forge/cli/CommonOptionsMixin.groovy} (64%)
 create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/ForgeCli.groovy
 create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/ForgeCommand.groovy
 create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/GrailsPicocliFactory.groovy
 rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/InteractiveShell.java => groovy/org/grails/forge/cli/InteractiveShell.groovy} (60%)
 create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/command/AddPropertyCommand.groovy
 create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/command/BaseCommand.groovy
 create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/command/CodeGenCommand.groovy
 rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/CreateAppCommand.java => groovy/org/grails/forge/cli/command/CreateAppCommand.groovy} (52%)
 create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/command/CreateCommand.groovy
 create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/command/CreateControllerCommand.groovy
 create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/command/CreateDomainClassCommand.groovy
 create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/command/CreateInterceptorCommand.groovy
 create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/command/CreateJobCommand.groovy
 rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/CreatePluginCommand.java => groovy/org/grails/forge/cli/command/CreatePluginCommand.groovy} (51%)
 rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/CreateRestApiCommand.java => groovy/org/grails/forge/cli/command/CreateRestApiCommand.groovy} (51%)
 create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/command/CreateServiceCommand.groovy
 create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/command/CreateTagLibCommand.groovy
 rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/CreateWebPluginCommand.java => groovy/org/grails/forge/cli/command/CreateWebPluginCommand.groovy} (51%)
 rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/CreateWebappCommand.java => groovy/org/grails/forge/cli/command/CreateWebappCommand.groovy} (52%)
 rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/DevelopmentReloadingCandidates.java => groovy/org/grails/forge/cli/command/DevelopmentReloadingCandidates.groovy} (74%)
 rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/DevelopmentReloadingConverter.java => groovy/org/grails/forge/cli/command/DevelopmentReloadingConverter.groovy} (70%)
 rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/GormImplCandidates.java => groovy/org/grails/forge/cli/command/GormImplCandidates.groovy} (73%)
 rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/GormImplConverter.java => groovy/org/grails/forge/cli/command/GormImplConverter.groovy} (63%)
 rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/LanguageCandidates.java => groovy/org/grails/forge/cli/command/LanguageCandidates.groovy} (73%)
 rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/LanguageConverter.java => groovy/org/grails/forge/cli/command/LanguageConverter.groovy} (69%)
 create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/command/ListFeatures.groovy
 rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/ServletImplCandidates.java => groovy/org/grails/forge/cli/command/ServletImplCandidates.groovy} (72%)
 rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/ServletImplConverter.java => groovy/org/grails/forge/cli/command/ServletImplConverter.groovy} (67%)
 rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/util/GrailsVersionProvider.java => groovy/org/grails/forge/cli/util/GrailsVersionProvider.groovy} (72%)
 delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/Application.java
 delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/CodeGenConfig.java
 delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/GrailsPicocliFactory.java
 delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/AddPropertyCommand.java
 delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/BaseCommand.java
 delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/CodeGenCommand.java
 delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/CreateCommand.java
 delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/CreateControllerCommand.java
 delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/CreateDomainClassCommand.java
 delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/CreateInterceptorCommand.java
 delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/CreateJobCommand.java
 delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/CreateServiceCommand.java
 delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/CreateTagLibCommand.java
 delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/ListFeatures.java
 delete mode 100644 grails-forge/grails-forge-cli/src/main/resources/META-INF/native-image/org.grails.forge.cli/grails-forge-cli/native-image.properties
 delete mode 100644 grails-forge/grails-forge-cli/src/main/resources/META-INF/native-image/org.grails.forge.cli/grails-forge-cli/resource-config.json
 create mode 100644 grails-forge/grails-forge-cli/src/main/resources/simplelogger.properties
 create mode 100644 grails-forge/grails-forge-cli/src/test/groovy/org/grails/forge/cli/ApplicationSpec.groovy
 copy grails-forge/{grails-forge-api/src/test/groovy/org/grails/forge/api/GrailsForgeConfigurationSpec.groovy => grails-forge-cli/src/test/groovy/org/grails/forge/cli/ForgeCliSpec.groovy} (50%)
 rename grails-forge/{grails-forge-core/src/main/java/org/grails/forge/application/ProjectIdentifier.java => grails-forge-cli/src/testFixtures/groovy/org/grails/forge/cli/CliRunner.groovy} (60%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/asciidoctor/template/asciidocGradle.rocker.raw => grails-app/views/forge/feature/asciidoctor/template/asciidocGradle.gsp} (86%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/asciidoctor/template/indexAdoc.rocker.raw => grails-app/views/forge/feature/asciidoctor/template/indexAdoc.gsp} (94%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/build/gitignore.rocker.raw => grails-app/views/forge/feature/build/gitignore.gsp} (95%)
 create mode 100644 grails-forge/grails-forge-core/grails-app/views/forge/feature/build/gradle/templates/buildGradle.gsp
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/build/gradle/templates/buildSrcBuildGradle.rocker.raw => grails-app/views/forge/feature/build/gradle/templates/buildSrcBuildGradle.gsp} (56%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/build/gradle/templates/dependencies.rocker.raw => grails-app/views/forge/feature/build/gradle/templates/dependencies.gsp} (54%)
 rename grails-forge/{grails-forge-cli/src/main/java/org/grails/forge/cli/command/templates/interceptor.rocker.raw => grails-forge-core/grails-app/views/forge/feature/build/gradle/templates/gradleProperties.gsp} (67%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/build/gradle/templates/gradleWrapperProperties.rocker.raw => grails-app/views/forge/feature/build/gradle/templates/gradleWrapperProperties.gsp} (54%)
 rename grails-forge/{grails-forge-cli/src/main/java/org/grails/forge/cli/command/templates/controllerSpec.rocker.raw => grails-forge-core/grails-app/views/forge/feature/build/gradle/templates/settingsGradle.gsp} (50%)
 create mode 100644 grails-forge/grails-forge-core/grails-app/views/forge/feature/cli.gsp
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/github/workflows/plain/templates/plainGithubWorkflow.rocker.raw => grails-app/views/forge/feature/github/workflows/plain/templates/plainGithubWorkflow.gsp} (77%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/github/workflows/templates/javaSetup.rocker.raw => grails-app/views/forge/feature/github/workflows/templates/javaSetup.gsp} (66%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/grails/templates/applicationController.rocker.raw => grails-app/views/forge/feature/grails/templates/applicationController.gsp} (85%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/grails/templates/plugin.rocker.raw => grails-app/views/forge/feature/grails/templates/plugin.gsp} (73%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/grails/templates/urlMappings.rocker.raw => grails-app/views/forge/feature/grails/templates/urlMappings.gsp} (73%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/lang/groovy/application.rocker.raw => grails-app/views/forge/feature/lang/groovy/templates/application.gsp} (67%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/lang/groovy/bootStrap.rocker.raw => grails-app/views/forge/feature/lang/groovy/templates/bootStrap.gsp} (78%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/logging/template/logback.rocker.raw => grails-app/views/forge/feature/logging/template/logback.gsp} (89%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/migration/templates/dbMigrationGradle.rocker.raw => grails-app/views/forge/feature/migration/templates/dbMigrationGradle.gsp} (85%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/other/template/maindocs.rocker.raw => grails-app/views/forge/feature/other/template/maindocs.gsp} (66%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/other/template/markdownLink.rocker.raw => grails-app/views/forge/feature/other/template/markdownLink.gsp} (84%)
 rename grails-forge/{grails-forge-cli/src/main/java/org/grails/forge/cli/command/templates/controller.rocker.raw => grails-forge-core/grails-app/views/forge/feature/other/template/readme.gsp} (54%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/security/template/role.rocker.raw => grails-app/views/forge/feature/security/template/role.gsp} (78%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/security/template/securityApplicationGroovy.rocker.raw => grails-app/views/forge/feature/security/template/securityApplicationGroovy.gsp} (80%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/security/template/user.rocker.raw => grails-app/views/forge/feature/security/template/user.gsp} (77%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/security/template/userClassic.rocker.raw => grails-app/views/forge/feature/security/template/userClassic.gsp} (74%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/security/template/userClassicService.rocker.raw => grails-app/views/forge/feature/security/template/userClassicService.gsp} (79%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/security/template/userClassicSpec.rocker.raw => grails-app/views/forge/feature/security/template/userClassicSpec.gsp} (88%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/security/template/userController.rocker.raw => grails-app/views/forge/feature/security/template/userController.gsp} (79%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/security/template/userRole.rocker.raw => grails-app/views/forge/feature/security/template/userRole.gsp} (91%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/security/template/userService.rocker.raw => grails-app/views/forge/feature/security/template/userService.gsp} (83%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/security/template/userSpec.rocker.raw => grails-app/views/forge/feature/security/template/userSpec.gsp} (91%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/spring/template/springResources.rocker.raw => grails-app/views/forge/feature/spring/template/springResources.gsp} (92%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/test/template/containerGebSpec.rocker.raw => grails-app/views/forge/feature/test/template/containerGebSpec.gsp} (79%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/test/template/gebConfig.rocker.raw => grails-app/views/forge/feature/test/template/gebConfig.gsp} (92%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/test/template/gebSpec.rocker.raw => grails-app/views/forge/feature/test/template/gebSpec.gsp} (80%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/view/json/templates/_errors.rocker.raw => grails-app/views/forge/feature/view/json/templates/_errors.gsp} (96%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/view/json/templates/_object.rocker.raw => grails-app/views/forge/feature/view/json/templates/_object.gsp} (90%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/view/json/templates/error.rocker.raw => grails-app/views/forge/feature/view/json/templates/error.gsp} (92%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/view/json/templates/index.rocker.raw => grails-app/views/forge/feature/view/json/templates/index.gsp} (96%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/view/json/templates/notFound.rocker.raw => grails-app/views/forge/feature/view/json/templates/notFound.gsp} (92%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/view/markup/templates/_errors.rocker.raw => grails-app/views/forge/feature/view/markup/templates/_errors.gsp} (96%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/view/markup/templates/_object.rocker.raw => grails-app/views/forge/feature/view/markup/templates/_object.gsp} (90%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/view/markup/templates/error.rocker.raw => grails-app/views/forge/feature/view/markup/templates/error.gsp} (92%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/view/markup/templates/index.rocker.raw => grails-app/views/forge/feature/view/markup/templates/index.gsp} (97%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/view/markup/templates/notFound.rocker.raw => grails-app/views/forge/feature/view/markup/templates/notFound.gsp} (92%)
 rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/template/api/grailsForgeApi.rocker.raw => grails-app/views/forge/template/api/grailsForgeApi.gsp} (72%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/ForgeCoreConfiguration.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/ForgeGrailsPlugin.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/application/ApplicationType.java => groovy/org/grails/forge/application/ApplicationType.groovy} (54%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/application/ContextFactory.java => groovy/org/grails/forge/application/ContextFactory.groovy} (51%)
 copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/application/OperatingSystem.java => groovy/org/grails/forge/application/OperatingSystem.groovy} (74%)
 copy grails-forge/{grails-forge-api/src/test/groovy/org/grails/forge/api/MyEventListener.groovy => grails-forge-core/src/main/groovy/org/grails/forge/application/PluginAvailableFeatures.groovy} (64%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/application/Project.groovy
 copy grails-forge/{grails-forge-analytics-postgres/src/main/java/org/grails/forge/analytics/postgres/TotalDTO.java => grails-forge-core/src/main/groovy/org/grails/forge/application/ProjectIdentifier.groovy} (67%)
 copy grails-forge/{grails-forge-api/src/test/groovy/org/grails/forge/api/MyEventListener.groovy => grails-forge-core/src/main/groovy/org/grails/forge/application/RestApiAvailableFeatures.groovy} (64%)
 rename grails-forge/{grails-forge-api/src/test/groovy/org/grails/forge/api/SpanishResourceBundleMessageSource.groovy => grails-forge-core/src/main/groovy/org/grails/forge/application/WebAvailableFeatures.groovy} (65%)
 rename grails-forge/{grails-forge-analytics-postgres/src/main/java/org/grails/forge/analytics/postgres/TotalDTO.java => grails-forge-core/src/main/groovy/org/grails/forge/application/WebPluginAvailableFeatures.groovy} (64%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/application/generator/DefaultProjectGenerator.java => groovy/org/grails/forge/application/generator/DefaultProjectGenerator.groovy} (50%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/application/generator/GeneratorContext.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/application/generator/ProjectGenerator.java => groovy/org/grails/forge/application/generator/ProjectGenerator.groovy} (67%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/BuildPlugin.java => groovy/org/grails/forge/build/BuildPlugin.groovy} (60%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/BuildProperties.java => groovy/org/grails/forge/build/BuildProperties.groovy} (62%)
 copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/Comment.java => groovy/org/grails/forge/build/Comment.groovy} (82%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/Property.java => groovy/org/grails/forge/build/Property.groovy} (81%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/dependencies/Coordinate.java => groovy/org/grails/forge/build/dependencies/Coordinate.groovy} (59%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/defaults/HasDefaultDevelopmentReloading.java => groovy/org/grails/forge/build/dependencies/CoordinateResolver.groovy} (82%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/dependencies/DefaultCoordinateResolver.java => groovy/org/grails/forge/build/dependencies/DefaultCoordinateResolver.groovy} (58%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/build/dependencies/Dependency.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/dependencies/DependencyContext.java => groovy/org/grails/forge/build/dependencies/DependencyContext.groovy} (51%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/build/dependencies/DependencyCoordinate.groovy
 copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/database/GormOneOfFeature.java => groovy/org/grails/forge/build/dependencies/LookupFailedException.groovy} (75%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/dependencies/Phase.java => groovy/org/grails/forge/build/dependencies/Phase.groovy} (90%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/build/dependencies/PomDependencyVersionResolver.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/dependencies/Scope.java => groovy/org/grails/forge/build/dependencies/Scope.groovy} (58%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/dependencies/Source.java => groovy/org/grails/forge/build/dependencies/Source.groovy} (88%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/build/gradle/DefaultGradleRepository.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/build/gradle/GradleBuild.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/gradle/GradleBuildCreator.java => groovy/org/grails/forge/build/gradle/GradleBuildCreator.groovy} (62%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/gradle/GradleConfiguration.java => groovy/org/grails/forge/build/gradle/GradleConfiguration.groovy} (61%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/build/gradle/GradleDependency.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/gradle/GradleDsl.java => groovy/org/grails/forge/build/gradle/GradleDsl.groovy} (88%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/build/gradle/GradlePlugin.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/gradle/GradleRepository.java => groovy/org/grails/forge/build/gradle/GradleRepository.groovy} (68%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/gradle/MavenCentralRepository.java => groovy/org/grails/forge/build/gradle/MavenCentralRepository.groovy} (67%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/gradle/MavenLocalRepository.java => groovy/org/grails/forge/build/gradle/MavenLocalRepository.groovy} (68%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/build/gradle/VersionRegexRepoFilter.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/gradle/VersionType.java => groovy/org/grails/forge/build/gradle/VersionType.groovy} (88%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/template/Writable.java => groovy/org/grails/forge/defaults/HasDefaultBuild.groovy} (81%)
 copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/database/JpaFeature.java => groovy/org/grails/forge/defaults/HasDefaultDevelopmentReloading.groovy} (78%)
 copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/defaults/HasDefaultBuild.java => groovy/org/grails/forge/defaults/IncludesDefaults.groovy} (85%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/defaults/LanguageDefaults.java => groovy/org/grails/forge/defaults/LanguageDefaults.groovy} (58%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/diff/FeatureDiffer.java => groovy/org/grails/forge/diff/FeatureDiffer.groovy} (66%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/ApplicationFeature.java => groovy/org/grails/forge/feature/ApplicationFeature.groovy} (74%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/AvailableFeatures.java => groovy/org/grails/forge/feature/AvailableFeatures.groovy} (66%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/BaseAvailableFeatures.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/Category.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/DefaultFeature.java => groovy/org/grails/forge/feature/DefaultFeature.groovy} (86%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/Feature.java => groovy/org/grails/forge/feature/Feature.groovy} (84%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/FeatureContext.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/FeaturePhase.java => groovy/org/grails/forge/feature/FeaturePhase.groovy} (81%)
 copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/FeaturePredicate.java => groovy/org/grails/forge/feature/FeaturePredicate.groovy} (80%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/FeatureRegistry.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/Features.groovy
 copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/defaults/HasDefaultBuild.java => groovy/org/grails/forge/feature/OneOfFeature.groovy} (83%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/ai/GrailsSpringAi.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/ai/SpringAiAnthropic.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/ai/SpringAiOllama.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/ai/SpringAiOpenAi.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/ai/SpringAiProviderFeature.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/api/OpenApi.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/asciidoctor/Asciidoctor.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/assetPipeline/AssetPipeline.groovy
 copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/build/BuildFeature.java => groovy/org/grails/forge/feature/build/BuildFeature.groovy} (73%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/build/gradle/Dockerfile.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/build/gradle/Gradle.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/build/gradle/GradleBuildSrc.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/build/gradle/GradleBuildSrcFeature.java => groovy/org/grails/forge/feature/build/gradle/GradleBuildSrcFeature.groovy} (69%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/build/gradle/GradleSettingsFile.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/build/gradle/GradleSettingsFileFeature.java => groovy/org/grails/forge/feature/build/gradle/GradleSettingsFileFeature.groovy} (69%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/spring/SpringThreadingFeature.java => groovy/org/grails/forge/feature/cache/CacheFeature.groovy} (74%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/cache/EHCache.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/cache/GrailsCache.groovy
 copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/github/workflows/Secret.java => groovy/org/grails/forge/feature/config/ApplicationConfiguration.groovy} (55%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/config/BootstrapConfiguration.java => groovy/org/grails/forge/feature/config/BootstrapConfiguration.groovy} (56%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/config/Configuration.java => groovy/org/grails/forge/feature/config/Configuration.groovy} (50%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/config/ConfigurationFeature.java => groovy/org/grails/forge/feature/config/ConfigurationFeature.groovy} (62%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/config/Properties.java => groovy/org/grails/forge/feature/config/Properties.groovy} (52%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/config/Yaml.java => groovy/org/grails/forge/feature/config/Yaml.groovy} (50%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/database/AsyncGorm.java => groovy/org/grails/forge/feature/database/AsyncGorm.groovy} (52%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/database/DatabaseDriverConfigurationFeature.java => groovy/org/grails/forge/feature/database/DatabaseDriverConfigurationFeature.groovy} (57%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/database/DatabaseDriverFeature.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/database/GormFeature.java => groovy/org/grails/forge/feature/database/GormFeature.groovy} (67%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/database/GormOneOfFeature.java => groovy/org/grails/forge/feature/database/GormOneOfFeature.groovy} (74%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/database/GrailsDataHibernate5.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/database/GrailsDataHibernate7.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/database/GrailsDataHibernateValidator.java => groovy/org/grails/forge/feature/database/GrailsDataHibernateValidator.groovy} (51%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/database/GrailsDataMongoDB.java => groovy/org/grails/forge/feature/database/GrailsDataMongoDB.groovy} (50%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/database/GraphqlGorm.java => groovy/org/grails/forge/feature/database/GraphqlGorm.groovy} (52%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/database/H2.groovy
 copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/database/JpaFeature.java => groovy/org/grails/forge/feature/database/JpaFeature.groovy} (83%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/database/MongoDBTestingSupport.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/database/MongoDBTestingSupportValidator.java => groovy/org/grails/forge/feature/database/MongoDBTestingSupportValidator.groovy} (61%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/database/MongoFeature.java => groovy/org/grails/forge/feature/database/MongoFeature.groovy} (67%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/database/MongoSync.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/database/MySQL.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/database/Neo4jGorm.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/database/PostgreSQL.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/database/SQLServer.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/database/TestContainers.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/github/workflows/GitHubWorkflowFeature.java => groovy/org/grails/forge/feature/github/workflows/GitHubWorkflowFeature.groovy} (58%)
 copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/github/workflows/Secret.java => groovy/org/grails/forge/feature/github/workflows/Secret.groovy} (60%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/github/workflows/plain/PlainGithubWorkflowFeature.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/grails/GrailsBase.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/grails/GrailsCompileStatic.java => groovy/org/grails/forge/feature/grails/GrailsCompileStatic.groovy} (65%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/grails/GrailsDefaultPlugins.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/grails/GrailsGradlePlugin.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/grails/GrailsUrlMappings.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/grails/GrailsWebConsole.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/grailsProfiles/GrailsProfiles.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/grailsWrapper/GrailsWrapper.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/lang/LanguageFeature.java => groovy/org/grails/forge/feature/lang/LanguageFeature.groovy} (72%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/lang/groovy/GrailsApplication.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/defaults/HasDefaultBuild.java => groovy/org/grails/forge/feature/lang/groovy/GrailsApplicationFeature.groovy} (79%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/logging/Logback.java => groovy/org/grails/forge/feature/logging/Logback.groovy} (57%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/logging/LogbackConfig.java => groovy/org/grails/forge/feature/logging/LogbackConfig.groovy} (62%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/cache/CacheFeature.java => groovy/org/grails/forge/feature/logging/LoggingFeature.groovy} (73%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/micronaut/GrailsMicronaut.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/micronaut/GrailsMicronautValidator.java => groovy/org/grails/forge/feature/micronaut/GrailsMicronautValidator.groovy} (59%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/micronaut/MicronautHttpClient.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/migration/DatabaseMigrationPlugin.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/migration/MigrationFeature.java => groovy/org/grails/forge/feature/migration/MigrationFeature.groovy} (73%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/other/AppName.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/other/GrailsQuartz.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/other/GrailsStartupProgress.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/other/HibernateValidator.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/other/Readme.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/other/ShadePlugin.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/reloading/Jrebel.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/reloading/ReloadingFeature.java => groovy/org/grails/forge/feature/reloading/ReloadingFeature.groovy} (66%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/reloading/SpringBootDevTools.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/security/GrailsSpringSecurity.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/security/GrailsSpringSecurityUi.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/security/PrimarySecurityFeature.java => groovy/org/grails/forge/feature/security/PrimarySecurityFeature.groovy} (84%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/security/SecurityFeature.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/security/SpringBootStarterSecurity.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/sitemesh3/Sitemesh3.java => groovy/org/grails/forge/feature/sitemesh3/Sitemesh3.groovy} (54%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/spring/SpringBootAutoconfigure.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/spring/SpringBootEmbeddedServlet.java => groovy/org/grails/forge/feature/spring/SpringBootEmbeddedServlet.groovy} (70%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/spring/SpringBootJettyFeature.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/spring/SpringBootStarterFeature.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/spring/SpringBootTomcatFeature.java => groovy/org/grails/forge/feature/spring/SpringBootTomcatFeature.groovy} (50%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/spring/SpringBootUndertowFeature.java => groovy/org/grails/forge/feature/spring/SpringBootUndertowFeature.groovy} (52%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/spring/SpringBootVirtualThreads.java => groovy/org/grails/forge/feature/spring/SpringBootVirtualThreads.groovy} (53%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/spring/SpringResources.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/logging/LoggingFeature.java => groovy/org/grails/forge/feature/spring/SpringThreadingFeature.groovy} (73%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/test/GebFeature.java => groovy/org/grails/forge/feature/test/GebFeature.groovy} (71%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/test/GebWithLocalBrowsers.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/test/GebWithTestcontainers.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/test/GormTestingSupport.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/test/GrailsWebTestingSupport.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/test/Mockito.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/test/MockitoValidator.java => groovy/org/grails/forge/feature/test/MockitoValidator.groovy} (59%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/test/Spock.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/test/ViewsJsonTestingSupport.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/validation/CompositeFeatureValidator.java => groovy/org/grails/forge/feature/validation/CompositeFeatureValidator.groovy} (57%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/validation/FeatureValidator.java => groovy/org/grails/forge/feature/validation/FeatureValidator.groovy} (73%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/validation/OneOfFeatureValidator.java => groovy/org/grails/forge/feature/validation/OneOfFeatureValidator.groovy} (61%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/view/GrailsGsp.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/view/GrailsLayout.java => groovy/org/grails/forge/feature/view/GrailsLayout.groovy} (61%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/view/GrailsViews.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/view/GspLayout.java => groovy/org/grails/forge/feature/view/GspLayout.groovy} (72%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/view/Scaffolding.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/view/json/ViewJson.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/view/markup/ViewMarkup.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/web/GrailsWeb.java => groovy/org/grails/forge/feature/web/GrailsWeb.groovy} (57%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/io/ConsoleOutput.java => groovy/org/grails/forge/io/ConsoleOutput.groovy} (67%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/io/FileSystemOutputHandler.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/io/MapOutputHandler.java => groovy/org/grails/forge/io/MapOutputHandler.groovy} (56%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/io/OutputHandler.java => groovy/org/grails/forge/io/OutputHandler.groovy} (78%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/io/OutputUtils.java => groovy/org/grails/forge/io/OutputUtils.groovy} (53%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/io/ZipOutputHandler.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/options/BuildTool.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/options/DefaultTestRockerModelProvider.java => groovy/org/grails/forge/options/DefaultTestViewProvider.groovy} (71%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/options/DevelopmentReloading.java => groovy/org/grails/forge/options/DevelopmentReloading.groovy} (57%)
 copy grails-forge/grails-forge-core/src/{test/groovy/org/grails/forge/options/GormImplSpec.groovy => main/groovy/org/grails/forge/options/FeatureFilter.groovy} (52%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/options/GormImpl.java => groovy/org/grails/forge/options/GormImpl.groovy} (63%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/options/JdkVersion.java => groovy/org/grails/forge/options/JdkVersion.groovy} (73%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/options/Language.groovy
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/options/Options.groovy
 copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/options/ServletImpl.java => groovy/org/grails/forge/options/ServletImpl.groovy} (61%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/options/TestFramework.java => groovy/org/grails/forge/options/TestFramework.groovy} (54%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/options/TestRockerModelProvider.java => groovy/org/grails/forge/options/TestViewProvider.groovy} (66%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/template/BinaryTemplate.java => groovy/org/grails/forge/template/BinaryTemplate.groovy} (71%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/template/Config4kTemplate.java => groovy/org/grails/forge/template/Config4kTemplate.groovy} (59%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/template/DefaultTemplateRenderer.java => groovy/org/grails/forge/template/DefaultTemplateRenderer.groovy} (51%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/template/ForgePages.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/template/RockerTemplate.java => groovy/org/grails/forge/template/GspTemplate.groovy} (53%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/template/GspView.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/template/PropertiesTemplate.java => groovy/org/grails/forge/template/PropertiesTemplate.groovy} (50%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/template/RenderResult.java => groovy/org/grails/forge/template/RenderResult.groovy} (60%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/template/StringTemplate.java => groovy/org/grails/forge/template/StringTemplate.groovy} (65%)
 copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/template/Template.java => groovy/org/grails/forge/template/Template.groovy} (82%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/OneOfFeature.java => groovy/org/grails/forge/template/TemplateModel.groovy} (87%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/template/TemplateRenderer.java => groovy/org/grails/forge/template/TemplateRenderer.groovy} (78%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/template/URLTemplate.java => groovy/org/grails/forge/template/URLTemplate.groovy} (53%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/lang/groovy/GrailsApplicationFeature.java => groovy/org/grails/forge/template/Writable.groovy} (82%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/template/YamlTemplate.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/util/IOFeatureUtil.java => groovy/org/grails/forge/util/IOFeatureUtil.groovy} (72%)
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/util/NameUtils.java => groovy/org/grails/forge/util/NameUtils.groovy} (64%)
 copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/dependencies/CoordinateResolver.java => groovy/org/grails/forge/util/ThrowingSupplier.groovy} (82%)
 create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/util/VersionInfo.groovy
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/util/ZipUtil.java => groovy/org/grails/forge/util/ZipUtil.groovy} (59%)
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/analytics/Generated.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/analytics/SelectedFeature.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/application/PluginAvailableFeatures.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/application/Project.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/application/RestApiAvailableFeatures.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/application/WebAvailableFeatures.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/application/WebPluginAvailableFeatures.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/application/generator/GeneratorContext.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/build/dependencies/Dependency.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/build/dependencies/DependencyCoordinate.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/build/dependencies/LookupFailedException.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/build/dependencies/PomDependencyVersionResolver.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/build/gradle/DefaultGradleRepository.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/build/gradle/GradleBuild.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/build/gradle/GradleDependency.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/build/gradle/GradlePlugin.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/build/gradle/VersionRegexRepoFilter.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/defaults/IncludesDefaults.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/BaseAvailableFeatures.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/Category.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/FeatureContext.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/Features.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/api/OpenApi.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/asciidoctor/Asciidoctor.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/assetPipeline/AssetPipeline.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/Dockerfile.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/Gradle.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/GradleBuildSrc.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/GradleSettingsFile.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/templates/buildGradle.rocker.raw
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/templates/gradleProperties.rocker.raw
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/templates/settingsGradle.rocker.raw
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/cache/EHCache.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/cache/GrailsCache.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/cli.rocker.raw
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/config/ApplicationConfiguration.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/DatabaseDriverFeature.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernate5.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernate7.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/H2.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/MongoDBTestingSupport.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/MongoSync.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/MySQL.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/Neo4jGorm.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/PostgreSQL.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/SQLServer.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/TestContainers.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/github/workflows/plain/PlainGithubWorkflowFeature.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/grails/GrailsBase.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/grails/GrailsDefaultPlugins.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/grails/GrailsGradlePlugin.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/grails/GrailsUrlMappings.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/grails/GrailsWebConsole.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/grailsProfiles/GrailsProfiles.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/grailsWrapper/GrailsWrapper.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/lang/groovy/GrailsApplication.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/micronaut/GrailsMicronaut.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/micronaut/MicronautHttpClient.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/migration/DatabaseMigrationPlugin.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/other/AppName.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/other/GrailsQuartz.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/other/GrailsStartupProgress.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/other/HibernateValidator.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/other/Readme.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/other/ShadePlugin.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/other/template/readme.rocker.raw
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/reloading/Jrebel.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/reloading/SpringBootDevTools.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/security/GrailsSpringSecurity.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/security/GrailsSpringSecurityUi.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/security/SecurityFeature.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/security/SpringBootStarterSecurity.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/spring/SpringBootAutoconfigure.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/spring/SpringBootJettyFeature.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/spring/SpringBootStarterFeature.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/spring/SpringResources.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/test/GebWithLocalBrowsers.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/test/GebWithTestcontainers.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/test/GormTestingSupport.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/test/GrailsWebTestingSupport.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/test/Mockito.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/test/Spock.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/test/ViewsJsonTestingSupport.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/view/GrailsGsp.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/view/GrailsViews.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/view/Scaffolding.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/view/json/ViewJson.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/view/markup/ViewMarkup.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/io/FileSystemOutputHandler.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/io/ZipOutputHandler.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/BuildTool.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/FeatureFilter.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImplTypeConverter.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/Language.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/Options.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/template/RockerWritable.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/template/TemplateModel.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/template/YamlTemplate.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/util/VersionInfo.java
 delete mode 100644 grails-forge/grails-forge-core/src/main/resources/META-INF/native-image/org.grails.forge/grails-forge-core/resource-config.json
 create mode 100644 grails-forge/grails-forge-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
 copy grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/{ApplicationContextSpec.groovy => ForgeContexts.groovy} (54%)
 rename grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/{BeanContextSpec.groovy => ForgeCoreConfigurationSpec.groovy} (63%)
 create mode 100644 grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/ForgeGrailsPluginSpec.groovy
 create mode 100644 grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/feature/ai/GrailsSpringAiSpec.groovy
 copy grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/options/{TestRockerModelProviderSpec.groovy => TestViewProviderSpec.groovy} (83%)
 rename grails-forge/grails-forge-core/src/{main/java/org/grails/forge/feature/github/workflows/Secret.java => test/groovy/org/grails/forge/plugintest/ForgePluginTestApplication.groovy} (54%)
 delete mode 100644 grails-forge/grails-forge-web-netty/build.gradle
 delete mode 100644 grails-forge/grails-forge-web-netty/src/main/java/org/grails/forge/netty/Application.java
 delete mode 100644 grails-forge/grails-forge-web-netty/src/main/java/org/grails/forge/netty/analytics/AnalyticsClient.java
 delete mode 100644 grails-forge/grails-forge-web-netty/src/main/resources/META-INF/native-image/org.grails.forge/grails-forge-web-netty/native-image.properties
 delete mode 100644 grails-forge/grails-forge-web-netty/src/main/resources/META-INF/native-image/org.grails.forge/grails-forge-web-netty/resource-config.json
 delete mode 100644 grails-forge/grails-forge-web-netty/src/main/resources/application-dev.yml
 delete mode 100644 grails-forge/grails-forge-web-netty/src/main/resources/application.yml
 delete mode 100644 grails-forge/grails-forge-web-netty/src/main/resources/logback.xml
 copy grails-forge/{grails-forge-web-netty => grails-forge-web}/aws/.platform/nginx/conf.d/proxy.conf (100%)
 rename grails-forge/{grails-forge-web-netty => grails-forge-web}/aws/Procfile (100%)
 copy grails-forge/{grails-forge-web-netty => grails-forge-web}/aws/start.sh (93%)
 create mode 100644 grails-forge/grails-forge-web/build.gradle
 create mode 100644 grails-forge/grails-forge-web/grails-app/conf/application.yml
 rename grails-forge/{config/checkstyle/checkstyle-suppressions.xml => grails-forge-web/grails-app/conf/logback.xml} (60%)
 copy grails-shell-cli/src/test/resources/gradle-sample/gradle/wrapper/gradle-wrapper.properties => grails-forge/grails-forge-web/grails-app/conf/openapi-base.yml (75%)
 create mode 100644 grails-forge/grails-forge-web/grails-app/controllers/org/grails/forge/web/DiffController.groovy
 create mode 100644 grails-forge/grails-forge-web/grails-app/controllers/org/grails/forge/web/ForgeApplicationController.groovy
 create mode 100644 grails-forge/grails-forge-web/grails-app/controllers/org/grails/forge/web/PreviewController.groovy
 create mode 100644 grails-forge/grails-forge-web/grails-app/controllers/org/grails/forge/web/SelectOptionsController.groovy
 create mode 100644 grails-forge/grails-forge-web/grails-app/controllers/org/grails/forge/web/UrlMappings.groovy
 create mode 100644 grails-forge/grails-forge-web/grails-app/controllers/org/grails/forge/web/ZipCreateController.groovy
 create mode 100644 grails-forge/grails-forge-web/grails-app/i18n/messages.properties
 rename grails-forge/{grails-forge-core/src/main/java/org/grails/forge/options/ServletImpl.java => grails-forge-web/grails-app/init/org/grails/forge/web/Application.groovy} (52%)
 create mode 100644 grails-forge/grails-forge-web/src/integration-test/groovy/org/grails/forge/web/ForgeApiIntegrationSpec.groovy
 copy grails-forge/{grails-forge-web-netty/aws/.platform/nginx/conf.d/proxy.conf => grails-forge-web/src/integration-test/resources/api-test-messages_fr.properties} (79%)
 create mode 100644 grails-forge/grails-forge-web/src/main/groovy/org/grails/forge/api/ApplicationTypeDTO.groovy
 rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/ApplicationTypeList.java => grails-forge-web/src/main/groovy/org/grails/forge/api/ApplicationTypeList.groovy} (64%)
 copy grails-forge/{grails-forge-api/src/test/groovy/org/grails/forge/api/FeatureOperationsSpec.groovy => grails-forge-web/src/main/groovy/org/grails/forge/api/ApplicationTypeOperations.groovy} (61%)
 create mode 100644 grails-forge/grails-forge-web/src/main/groovy/org/grails/forge/api/DevelopmentReloadingDTO.groovy
 create mode 100644 grails-forge/grails-forge-web/src/main/groovy/org/grails/forge/api/FeatureDTO.groovy
 rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/FeatureList.java => grails-forge-web/src/main/groovy/org/grails/forge/api/FeatureList.groovy} (65%)
 rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/FeatureOperations.java => grails-forge-web/src/main/groovy/org/grails/forge/api/FeatureOperations.groovy} (83%)
 create mode 100644 grails-forge/grails-forge-web/src/main/groovy/org/grails/forge/api/FeatureService.groovy
 create mode 100644 grails-forge/grails-forge-web/src/main/groovy/org/grails/forge/api/ForgeApplicationService.groovy
 rename grails-forge/{grails-forge-api/src/test/groovy/org/grails/forge/api/MyEventListener.groovy => grails-forge-web/src/main/groovy/org/grails/forge/api/ForgeMessages.groovy} (69%)
 create mode 100644 grails-forge/grails-forge-web/src/main/groovy/org/grails/forge/api/GormImplDTO.groovy
 rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/GrailsForgeConfiguration.java => grails-forge-web/src/main/groovy/org/grails/forge/api/GrailsForgeConfiguration.groovy} (52%)
 create mode 100644 grails-forge/grails-forge-web/src/main/groovy/org/grails/forge/api/JdkVersionDTO.groovy
 create mode 100644 grails-forge/grails-forge-web/src/main/groovy/org/grails/forge/api/LanguageDTO.groovy
 rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/analytics/AnalyticsOperations.java => grails-forge-web/src/main/groovy/org/grails/forge/api/LinkDTO.groovy} (61%)
 rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/Linkable.java => grails-forge-web/src/main/groovy/org/grails/forge/api/Linkable.groovy} (64%)
 rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/Relationship.java => grails-forge-web/src/main/groovy/org/grails/forge/api/Relationship.groovy} (62%)
 create mode 100644 grails-forge/grails-forge-web/src/main/groovy/org/grails/forge/api/RequestInfo.groovy
 rename grails-forge/{grails-forge-api/src/test/groovy/org/grails/forge/api/FeatureOperationsSpec.groovy => grails-forge-web/src/main/groovy/org/grails/forge/api/SelectOptionDTO.groovy} (61%)
 rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/SelectOptionsDTO.java => grails-forge-web/src/main/groovy/org/grails/forge/api/SelectOptionsDTO.groovy} (51%)
 rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/Selectable.java => grails-forge-web/src/main/groovy/org/grails/forge/api/Selectable.groovy} (85%)
 create mode 100644 grails-forge/grails-forge-web/src/main/groovy/org/grails/forge/api/ServletImplDTO.groovy
 rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/UserAgentParser.java => grails-forge-web/src/main/groovy/org/grails/forge/api/UserAgentParser.groovy} (50%)
 rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/VersionDTO.java => grails-forge-web/src/main/groovy/org/grails/forge/api/VersionDTO.groovy} (61%)
 create mode 100644 grails-forge/grails-forge-web/src/main/groovy/org/grails/forge/api/create/CreateProjectService.groovy
 copy grails-forge/{grails-forge-core/src/main/java/org/grails/forge/build/Comment.java => grails-forge-web/src/main/groovy/org/grails/forge/api/options/ApplicationTypeSelectOptions.groovy} (60%)
 rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/options/GormImplSelectOptions.java => grails-forge-web/src/main/groovy/org/grails/forge/api/options/DevelopmentReloadingSelectOptions.groovy} (59%)
 copy grails-forge/{grails-forge-core/src/main/java/org/grails/forge/feature/build/BuildFeature.java => grails-forge-web/src/main/groovy/org/grails/forge/api/options/GormImplSelectOptions.groovy} (63%)
 copy grails-forge/{grails-forge-core/src/main/java/org/grails/forge/feature/build/BuildFeature.java => grails-forge-web/src/main/groovy/org/grails/forge/api/options/JdkVersionSelectOptions.groovy} (62%)
 copy grails-forge/{grails-forge-core/src/main/java/org/grails/forge/feature/build/BuildFeature.java => grails-forge-web/src/main/groovy/org/grails/forge/api/options/LanguageSelectOptions.groovy} (63%)
 rename grails-forge/{grails-forge-core/src/main/java/org/grails/forge/feature/FeaturePredicate.java => grails-forge-web/src/main/groovy/org/grails/forge/api/options/SelectOptionsOperations.groovy} (75%)
 rename grails-forge/{grails-forge-core/src/main/java/org/grails/forge/feature/build/BuildFeature.java => grails-forge-web/src/main/groovy/org/grails/forge/api/options/ServletImplSelectOptions.groovy} (62%)
 rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/preview/PreviewDTO.java => grails-forge-web/src/main/groovy/org/grails/forge/api/preview/PreviewDTO.groovy} (59%)
 create mode 100644 grails-forge/grails-forge-web/src/main/groovy/org/grails/forge/web/ForgeRequestSupport.groovy
 rename grails-forge/{grails-forge-core/src/main/java/org/grails/forge/feature/database/JpaFeature.java => grails-forge-web/src/main/groovy/org/grails/forge/web/GroovyObjectJsonMixin.groovy} (66%)
 create mode 100644 grails-forge/grails-forge-web/src/test/groovy/org/grails/forge/web/ForgeRequestSupportSpec.groovy
 create mode 100644 grails-forge/grails-forge-web/src/test/groovy/org/grails/forge/web/GrailsForgeConfigurationSpec.groovy
 delete mode 100644 grails-forge/grailsforgearchitecture.jpeg
 delete mode 100644 grails-forge/sam-local.yml
 create mode 100644 grails-gradle/plugins/src/test/groovy/org/grails/gradle/plugin/core/GrailsPluginGradlePluginNative2AsciiSpec.groovy
 create mode 100644 grails-gradle/plugins/src/test/resources/test-projects/plugin-native2ascii-off/build.gradle
 copy grails-gradle/plugins/src/test/resources/test-projects/{auto-apply-bom-disabled => plugin-native2ascii-off}/gradle.properties (100%)
 copy grails-gradle/plugins/src/test/resources/test-projects/{boot-run-pid-web => plugin-native2ascii-off}/grails-app/conf/application.yml (100%)
 create mode 100644 grails-gradle/plugins/src/test/resources/test-projects/plugin-native2ascii-off/settings.gradle
 create mode 100644 grails-gradle/plugins/src/test/resources/test-projects/plugin-native2ascii-off/src/main/resources/templates/messages_ru.properties
 create mode 100644 grails-gsp/core/src/main/groovy/org/grails/gsp/compiler/LogicLineTrimmer.java
 create mode 100644 grails-gsp/core/src/test/groovy/org/grails/gsp/GspTrimLogicLinesSpec.groovy
 create mode 100644 grails-skills/ai/build.gradle
 create mode 100644 grails-skills/ai/skills/grails-ai-developer/SKILL.md
 create mode 100644 grails-spring-ai/build.gradle
 copy grails-forge/grails-forge-web-netty/aws/start.sh => grails-spring-ai/grails-app/conf/plugin.yml (51%)
 create mode 100644 grails-spring-ai/src/main/groovy/org/apache/grails/ai/SpringAiGrailsPlugin.groovy
 create mode 100644 grails-spring-ai/src/main/groovy/org/apache/grails/ai/async/ChatResponseStreamItemRenderer.groovy
 create mode 100644 grails-spring-ai/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
 create mode 100644 grails-spring-ai/src/test/groovy/org/apache/grails/ai/SpringAiAutoConfigurationSpec.groovy
 create mode 100644 grails-spring-ai/src/test/groovy/org/apache/grails/ai/SpringAiPluginDefaultsSpec.groovy
 create mode 100644 grails-spring-ai/src/test/groovy/org/apache/grails/ai/SpringAiPromptLoggingSpec.groovy
 create mode 100644 grails-spring-ai/src/test/groovy/org/apache/grails/ai/async/ChatResponseStreamItemRendererSpec.groovy
 copy grails-test-examples/{latency => ai}/build.gradle (71%)
 rename grails-forge/grails-forge-web-netty/aws/start.sh => grails-test-examples/ai/grails-app/conf/application.yml (57%)
 copy grails-test-examples/{latency => ai}/grails-app/conf/logback.xml (100%)
 rename grails-forge/grails-forge-core/src/main/java/org/grails/forge/build/Comment.java => grails-test-examples/ai/grails-app/controllers/aiapp/ChatController.groovy (69%)
 create mode 100644 grails-test-examples/ai/grails-app/controllers/aiapp/StreamController.groovy
 rename grails-forge/grails-forge-core/src/main/java/org/grails/forge/build/dependencies/CoordinateResolver.java => grails-test-examples/ai/grails-app/controllers/aiapp/UrlMappings.groovy (83%)
 rename grails-forge/grails-forge-core/src/main/java/org/grails/forge/template/Template.java => grails-test-examples/ai/grails-app/init/aiapp/Application.groovy (75%)
 rename grails-forge/grails-forge-core/src/main/java/org/grails/forge/application/OperatingSystem.java => grails-test-examples/ai/grails-app/services/aiapp/AnswerService.groovy (51%)
 create mode 100644 grails-test-examples/ai/src/integration-test/groovy/aiapp/AiDefaultsSpec.groovy
 create mode 100644 grails-test-examples/ai/src/integration-test/groovy/aiapp/ChatFunctionalSpec.groovy
 create mode 100644 grails-test-examples/ai/src/integration-test/groovy/aiapp/OwnChatModelFunctionalSpec.groovy
 create mode 100644 grails-test-examples/ai/src/integration-test/groovy/aiapp/OwnModelApplication.groovy
 create mode 100644 grails-test-examples/ai/src/integration-test/groovy/aiapp/StreamingFunctionalSpec.groovy
 rename grails-forge/grails-forge-api/src/test/groovy/org/grails/forge/api/GrailsForgeConfigurationSpec.groovy => grails-test-examples/ai/src/test/groovy/aiapp/AnswerServiceSpec.groovy (55%)
 copy grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/options/TestRockerModelProviderSpec.groovy => grails-test-examples/app1/src/integration-test/groovy/functionaltests/AppBenchInterceptorDemoSpec.groovy (51%)
 create mode 100644 grails-test-examples/benchmarks/src/report/groovy/org/apache/grails/benchmarks/report/AppIndyBench.groovy
 create mode 100644 grails-test-examples/benchmarks/src/reportTest/groovy/org/apache/grails/benchmarks/report/AppIndyBenchSpec.groovy
 copy grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/options/TestRockerModelProviderSpec.groovy => grails-test-examples/gsp-layout/src/integration-test/groovy/org/example/grails/layout/AppBenchDemoRenderTextSpec.groovy (51%)
 rename grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/options/TestRockerModelProviderSpec.groovy => grails-test-examples/latency/src/integration-test/groovy/latencyapp/AppBenchFastPingSpec.groovy (53%)
 copy {grails-async/plugin => grails-testing-support-ai}/build.gradle (51%)
 create mode 100644 grails-testing-support-ai/src/main/groovy/grails/testing/ai/AiUnitTest.groovy
 create mode 100644 grails-testing-support-ai/src/main/groovy/org/apache/grails/testing/ai/AiStubEnvironmentPostProcessor.groovy
 create mode 100644 grails-testing-support-ai/src/main/groovy/org/apache/grails/testing/ai/AiStubProperties.groovy
 create mode 100644 grails-testing-support-ai/src/main/groovy/org/apache/grails/testing/ai/AiTestBeans.groovy
 create mode 100644 grails-testing-support-ai/src/main/groovy/org/apache/grails/testing/ai/AiTestingAutoConfiguration.groovy
 create mode 100644 grails-testing-support-ai/src/main/groovy/org/apache/grails/testing/ai/AiTestingVectorStoreAutoConfiguration.groovy
 rename grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/event/ApplicationGeneratingEvent.java => grails-testing-support-ai/src/main/groovy/org/apache/grails/testing/ai/ResettableSimpleVectorStore.groovy (55%)
 create mode 100644 grails-testing-support-ai/src/main/groovy/org/apache/grails/testing/ai/ScriptedChatModel.groovy
 create mode 100644 grails-testing-support-ai/src/main/groovy/org/apache/grails/testing/ai/SimpleVectorStoreBeans.groovy
 create mode 100644 grails-testing-support-ai/src/main/groovy/org/apache/grails/testing/ai/StubEmbeddingModel.groovy
 create mode 100644 grails-testing-support-ai/src/main/groovy/org/apache/grails/testing/ai/spock/AiSetupInterceptor.groovy
 create mode 100644 grails-testing-support-ai/src/main/groovy/org/apache/grails/testing/ai/spock/AiSetupSpecInterceptor.groovy
 create mode 100644 grails-testing-support-ai/src/main/groovy/org/apache/grails/testing/ai/spock/AiTestingSupportExtension.groovy
 create mode 100644 grails-testing-support-ai/src/main/resources/META-INF/additional-spring-configuration-metadata.json
 create mode 100644 grails-testing-support-ai/src/main/resources/META-INF/services/org.spockframework.runtime.extension.IGlobalExtension
 rename grails-forge/grails-forge-web-netty/aws/.platform/nginx/conf.d/proxy.conf => grails-testing-support-ai/src/main/resources/META-INF/spring.factories (67%)
 create mode 100644 grails-testing-support-ai/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
 create mode 100644 grails-testing-support-ai/src/test/groovy/grails/testing/ai/AiUnitTestConfiguredSpec.groovy
 create mode 100644 grails-testing-support-ai/src/test/groovy/grails/testing/ai/AiUnitTestOwnBeansSpec.groovy
 create mode 100644 grails-testing-support-ai/src/test/groovy/grails/testing/ai/AiUnitTestSpec.groovy
 rename grails-forge/buildSrc/src/main/java/org/grails/forge/rocker/plugin/RockerGradleException.java => grails-testing-support-ai/src/test/groovy/grails/testing/ai/AnswerService.groovy (71%)
 create mode 100644 grails-testing-support-ai/src/test/groovy/org/apache/grails/testing/ai/AiStubEnvironmentPostProcessorSpec.groovy
 create mode 100644 grails-testing-support-ai/src/test/groovy/org/apache/grails/testing/ai/AiTestingAutoConfigurationSpec.groovy
 create mode 100644 grails-testing-support-ai/src/test/groovy/org/apache/grails/testing/ai/ScriptedChatModelSpec.groovy
 create mode 100644 grails-testing-support-ai/src/test/groovy/org/apache/grails/testing/ai/StubEmbeddingModelSpec.groovy
 create mode 100644 grails-testing-support-http-client/src/test/groovy/org/apache/grails/testing/http/client/bench/AppHttpBenchSpec.groovy
 create mode 100644 grails-testing-support-http-client/src/testFixtures/groovy/org/apache/grails/testing/http/client/bench/AppHttpBench.groovy