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

(grails-core) branch feat/app-bench-ci updated (a3b5aa39df -> 27581b32f7)

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

jdaugherty pushed a change to branch feat/app-bench-ci
in repository https://gitbox.apache.org/repos/asf/grails-core.git


    from 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

No new revisions were added by this update.

Summary of changes:
 .agents/skills/README.md                           |   1 +
 .agents/skills/gradle-developer/SKILL.md           |   9 +-
 .agents/skills/grails-ai-developer                 |   1 +
 .github/dependency-graph/external-references.yml   |   1 +
 .github/workflows/forge-deploy-aws.yml             |   4 +-
 .gitignore                                         |   4 +
 AGENTS.md                                          |   5 +-
 RELEASE.md                                         |   4 +-
 THREAT_MODEL.md                                    |   6 +-
 .../gradle/wrapper/gradle-wrapper.properties       |   2 +-
 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.gradle                                       |  13 +-
 dependencies.gradle                                |  25 +
 end-to-end/agent-skills-plain-build/build.gradle   |   1 +
 end-to-end/agent-skills/build.gradle               |   1 +
 .../grails/e2e/skills/AgentSkillsSpec.groovy       |   1 +
 gradle.properties                                  |   4 +-
 gradle/docs-dependencies.gradle                    |   6 +
 gradle/publish-root-config.gradle                  |   2 +
 gradle/rat-root-config.gradle                      |   2 +-
 gradle/wrapper/gradle-wrapper.properties           |   2 +-
 grails-async/plugin/build.gradle                   |   6 +
 .../grails/async/web/StreamItemRenderer.groovy     |  41 ++
 .../web/async/ControllersAsyncGrailsPlugin.groovy  |  53 +-
 .../web/async/mvc/DefaultStreamItemRenderer.groovy |  52 +-
 .../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 +++++
 .../orm/hibernate/query/HqlQueryContext.java       |  97 +++-
 .../hibernate/HibernateGormStaticApiSpec.groovy    |  71 +++
 .../orm/hibernate/query/HqlQueryContextSpec.groovy |  94 ++++
 grails-doc/build.gradle                            |  14 +-
 grails-doc/src/en/guide/async/asyncStreaming.adoc  | 110 ++++
 .../guide/async/rxjava/asyncServerSentEvents.adoc  |   2 +
 .../src/en/guide/commandLine/creatingProject.adoc  |   2 +-
 .../src/en/guide/commandLine/interactiveMode.adoc  |  10 +-
 .../src/en/guide/gettingStarted/agentSkills.adoc   |   3 +
 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                    |  10 +
 .../src/en/guide/upgrading/upgrading81x.adoc       |  53 ++
 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 +
 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 +-
 .../gradle/wrapper/gradle-wrapper.properties       |   2 +-
 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}  |  21 +-
 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}  |  33 +-
 .../build/gradle/templates/settingsGradle.gsp      |  45 +-
 .../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} |  45 +-
 .../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}    |  20 +-
 .../org/grails/forge/application/Project.groovy    |  93 ++++
 .../forge/application/ProjectIdentifier.groovy}    |  26 +-
 .../application/RestApiAvailableFeatures.groovy}   |  20 +-
 .../forge/application/WebAvailableFeatures.groovy} |  23 +-
 .../application/WebPluginAvailableFeatures.groovy} |  20 +-
 .../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               |  22 +
 .../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}     |  16 +-
 .../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} |  30 +-
 .../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                       |   8 +-
 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 +
 .../gradle/wrapper/gradle-wrapper.properties       |   2 +-
 .../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 +
 .../org/grails/gsp/compiler/GroovyPageParser.java  |  18 +-
 .../org/grails/gsp/compiler/LogicLineTrimmer.java  | 234 ++++++++
 .../org/grails/gsp/GspTrimLogicLinesSpec.groovy    | 299 ++++++++++
 .../gradle/wrapper/gradle-wrapper.properties       |   2 +-
 .../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 +
 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-test-examples/ai/build.gradle               |  54 ++
 .../ai/grails-app/conf/application.yml             |  39 +-
 .../{latency => ai}/grails-app/conf/logback.xml    |   0
 .../controllers/aiapp/ChatController.groovy        |  23 +-
 .../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 +-
 .../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 ++++++
 settings.gradle                                    |   8 +
 threat-model.yaml                                  |   4 +-
 781 files changed, 26211 insertions(+), 22092 deletions(-)
 create mode 120000 .agents/skills/grails-ai-developer
 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
 create mode 100644 grails-async/plugin/src/main/groovy/grails/async/web/StreamItemRenderer.groovy
 copy grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/Relationship.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
 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/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
 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
 rename 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%)
 rename 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%)
 copy 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%)
 rename 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%)
 copy 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%)
 copy grails-forge/{buildSrc/src/main/java/org/grails/forge/rocker/plugin/RockerGradleException.java => grails-forge-cli/src/testFixtures/groovy/org/grails/forge/cli/CliRunner.groovy} (61%)
 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/job.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} (55%)
 copy grails-doc/src/en/guide/theWebLayer/gsp/GSPBasics/pageDirectives.adoc => grails-forge/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/domainSpec.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/SpanishResourceBundleMessageSource.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
 rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/application/ProjectIdentifier.java => groovy/org/grails/forge/application/ProjectIdentifier.groovy} (67%)
 copy grails-forge/{grails-forge-api/src/test/groovy/org/grails/forge/api/SpanishResourceBundleMessageSource.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/MyEventListener.groovy => grails-forge-core/src/main/groovy/org/grails/forge/application/WebAvailableFeatures.groovy} (65%)
 copy grails-forge/{grails-forge-api/src/test/groovy/org/grails/forge/api/SpanishResourceBundleMessageSource.groovy => 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
 rename 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/migration/MigrationFeature.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/cache/CacheFeature.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
 rename 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%)
 copy 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
 rename grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/options/{TestRockerModelProviderSpec.groovy => TestViewProviderSpec.groovy} (83%)
 copy 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%)
 create mode 100644 grails-forge/grails-forge-web/grails-app/conf/openapi-base.yml
 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/feature/github/workflows/Secret.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/SpanishResourceBundleMessageSource.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
 rename 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-analytics-postgres/src/main/java/org/grails/forge/analytics/postgres/TotalDTO.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
 create mode 100644 grails-test-examples/ai/build.gradle
 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/template/BinaryTemplate.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-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