)]}'
{
  "log": [
    {
      "commit": "4d76b78b4b97e0ecc129b1034c64878b9d69b489",
      "tree": "3134ca96869d5eaea2a2c1db4fb94a4e8e7080b4",
      "parents": [
        "5669ddd703cf9813d5f577d517410fdc254c7008",
        "d787e098092a59366d8a2d490e1c73ae6d066386"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Thu Sep 03 11:17:12 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 11:17:12 2026 -0400"
      },
      "message": "Merge pull request #178 from apache/chore/update-dependencies\n\nUpdate dependencies to latest available versions"
    },
    {
      "commit": "d787e098092a59366d8a2d490e1c73ae6d066386",
      "tree": "3134ca96869d5eaea2a2c1db4fb94a4e8e7080b4",
      "parents": [
        "164d5fcfe2fddd35cb68ec66b8d02d0d170d00e5",
        "d14c1e580e6e4016557ce515e74f5ac70c06fb25"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Thu Sep 03 10:55:25 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 10:55:25 2026 -0400"
      },
      "message": "Merge pull request #179 from apache/feature/sorted-versions\n\nSort versions"
    },
    {
      "commit": "d14c1e580e6e4016557ce515e74f5ac70c06fb25",
      "tree": "3134ca96869d5eaea2a2c1db4fb94a4e8e7080b4",
      "parents": [
        "164d5fcfe2fddd35cb68ec66b8d02d0d170d00e5"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Thu Sep 03 00:05:01 2026 -0400"
      },
      "committer": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Thu Sep 03 00:05:01 2026 -0400"
      },
      "message": "Sort versions\n"
    },
    {
      "commit": "164d5fcfe2fddd35cb68ec66b8d02d0d170d00e5",
      "tree": "723be809d6be95dfae2af4c6606f41f49a398269",
      "parents": [
        "5669ddd703cf9813d5f577d517410fdc254c7008"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Wed Sep 02 23:53:33 2026 -0400"
      },
      "committer": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Wed Sep 02 23:53:33 2026 -0400"
      },
      "message": "Update dependencies to latest available versions\n\napp/launch:\n- @mui/material, @mui/icons-material 9.2.0 -\u003e 9.4.0; @mui/x-tree-view 9.0.4 -\u003e 9.12.0\n- react, react-dom -\u003e 19.2.8; zustand -\u003e 5.0.15\n- vite 8.1.4 -\u003e 8.2.2; vitest -\u003e 4.1.11; @vitejs/plugin-react 6.0.3 -\u003e 6.1.1\n- @testing-library/jest-dom 6 -\u003e 7; jsdom 29 -\u003e 30; @testing-library/react -\u003e 16.3.3\n- prettier, globals, baseline-browser-mapping to latest\n\nRegenerated app/launch/package-lock.json so transitive packages resolve\nfresh. This clears four high-severity advisories (brace-expansion,\nbrowserslist, js-yaml, undici); npm audit is now clean.\n\nESLint stays on 9.x: eslint-plugin-import and eslint-plugin-react are both\nat their latest releases and neither declares an ESLint 10 peer range yet.\n\ndev-proxy-server: axios 1.16.0 -\u003e 1.20.0, cors 2.8.5 -\u003e 2.8.6, plus\ntransitive body-parser and qs advisory fixes.\n\nBuild:\n- Gradle wrapper 9.5.1 -\u003e 9.7.1\n- develocity plugin 4.1.1 -\u003e 4.5.0; common-custom-user-data 2.3 -\u003e 2.8.0\n- .nvmrc 24.16.0 -\u003e 24.20.0 (current Krypton LTS)\n- actions/checkout v7.0.0 -\u003e v7.0.1, actions/setup-java v5.6.0 -\u003e v6.0.0,\n  gradle/actions/setup-gradle v6.2.0 -\u003e v6.3.0\n\nVerified with ./gradlew clean build, npm run lint, and npm test.\n"
    },
    {
      "commit": "5669ddd703cf9813d5f577d517410fdc254c7008",
      "tree": "91718c061d4d4dbf17d46db8b83cc7b3e967c33b",
      "parents": [
        "9958755db022492d5b217f38995b0ea332ae7e59",
        "956f7586e669e04f484b50e717c2f1f38df81de9"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Wed Sep 02 23:45:36 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 23:45:36 2026 -0400"
      },
      "message": "Merge pull request #159 from apache/chore/remove-dead-github-create-residue\n\nRemove dead GitHub create residue from Launch UI"
    },
    {
      "commit": "9958755db022492d5b217f38995b0ea332ae7e59",
      "tree": "93bca1e8b0d91bebc9f8d2a35f94bcf857f9453c",
      "parents": [
        "72797491556aa7d5f1760b222347a03db838de39",
        "57b2f3de2cbb27b6a82d2960942108171a94fb3f"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Wed Sep 02 23:42:34 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 23:42:34 2026 -0400"
      },
      "message": "Merge pull request #169 from apache/footer-copyright-update\n\nUpdate copyright year and text in footer"
    },
    {
      "commit": "72797491556aa7d5f1760b222347a03db838de39",
      "tree": "cf2e52aad8d015d3bbec86829a3b1992a07c8072",
      "parents": [
        "b149883b3736df720a41973610ddf740f81eae2d",
        "bdca32c1b07477ed4f6dc6a2e6b6fd16a2eb84ab"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Wed Sep 02 20:50:38 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 20:50:38 2026 -0400"
      },
      "message": "Merge pull request #175 from apache/drop-publish-concurrency-queue\n\nKeep local publish queue; rely on deploy-github-pages@asf for cross-repo races"
    },
    {
      "commit": "bdca32c1b07477ed4f6dc6a2e6b6fd16a2eb84ab",
      "tree": "cf2e52aad8d015d3bbec86829a3b1992a07c8072",
      "parents": [
        "b149883b3736df720a41973610ddf740f81eae2d"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Wed Sep 02 20:48:29 2026 -0400"
      },
      "committer": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Wed Sep 02 20:48:29 2026 -0400"
      },
      "message": "Clarify why Forge UI keeps a local publish queue\n\nEvery publish rewrites /start, so same-repo serialization stays. Cross-repo\nraces on grails-website are handled by deploy-github-pages@asf after\napache/grails-github-actions#110.\n\nAssisted-by: Cursor:Grok-4.6\n"
    },
    {
      "commit": "b149883b3736df720a41973610ddf740f81eae2d",
      "tree": "22f00fe64d24d2505b5deb6160724c2a99e6d16f",
      "parents": [
        "1f13161941c64cb83681bb9d837b126796f62b4a"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Wed Sep 02 20:02:27 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 20:02:27 2026 -0400"
      },
      "message": "Update SNAPSHOT key and order in grails-version-feed.json"
    },
    {
      "commit": "1f13161941c64cb83681bb9d837b126796f62b4a",
      "tree": "080ec79e678ea6a8845379add4c7299cb60e64f5",
      "parents": [
        "14147f0bec0c8a092aaf875f830a4c62ccd860c0",
        "e16dc811625630114c968c06495aa6cd2e3c04a8"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Tue Sep 01 09:52:34 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 09:52:34 2026 -0400"
      },
      "message": "Merge pull request #174 from apache/fix-readme-start-redirect\n\nDocument that start.grails.org redirects to /start/"
    },
    {
      "commit": "e16dc811625630114c968c06495aa6cd2e3c04a8",
      "tree": "080ec79e678ea6a8845379add4c7299cb60e64f5",
      "parents": [
        "14147f0bec0c8a092aaf875f830a4c62ccd860c0"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Mon Aug 31 21:45:31 2026 -0400"
      },
      "committer": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Mon Aug 31 21:45:31 2026 -0400"
      },
      "message": "Document that start.grails.org redirects to /start/\n\nGitHub Pages now serves a client redirect, not the old SPA.\n\nAssisted-by: Cursor:Grok-4.6\n"
    },
    {
      "commit": "14147f0bec0c8a092aaf875f830a4c62ccd860c0",
      "tree": "26520c0b06df82f7b7eb1f2d21822c42ad5b4482",
      "parents": [
        "86f6376a649f772ebb2d099612b5f45bf868a94b",
        "8db4247afb25eaa880b265156fbf7e19887dae27"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Mon Aug 31 19:34:04 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 19:34:04 2026 -0400"
      },
      "message": "Merge pull request #173 from apache/stop-gh-pages-auto-redirect\n\nStop auto-redirecting start.grails.org on publish"
    },
    {
      "commit": "8db4247afb25eaa880b265156fbf7e19887dae27",
      "tree": "26520c0b06df82f7b7eb1f2d21822c42ad5b4482",
      "parents": [
        "86f6376a649f772ebb2d099612b5f45bf868a94b"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Mon Aug 31 19:30:55 2026 -0400"
      },
      "committer": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Mon Aug 31 19:30:55 2026 -0400"
      },
      "message": "Stop auto-redirecting start.grails.org on publish\n\nThe Publish workflow replaced gh-pages with a client redirect after\nevery main push. start.grails.org has been restored to the last working\nSPA; stop overwriting it until grails.apache.org/start/ is ready.\n\nAssisted-by: Cursor:Grok-4.6\n"
    },
    {
      "commit": "86f6376a649f772ebb2d099612b5f45bf868a94b",
      "tree": "54c1f9d63ac46d78658babccd42eaf7780b31ece",
      "parents": [
        "090c804d01e2314000c74e8955946755aef98048",
        "6860041a63d2c7ee6ebc2162705e72d97bc5d0aa"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Mon Aug 31 17:41:20 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 17:41:20 2026 -0400"
      },
      "message": "Merge pull request #172 from apache/fix/csp-start-directory\n\nStop loading Google Fonts blocked by grails.apache.org CSP"
    },
    {
      "commit": "6860041a63d2c7ee6ebc2162705e72d97bc5d0aa",
      "tree": "54c1f9d63ac46d78658babccd42eaf7780b31ece",
      "parents": [
        "3afc9f74b5a6a3a0c48c2ebdd0f50e57f736bdaf"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Mon Aug 31 17:32:54 2026 -0400"
      },
      "committer": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Mon Aug 31 17:32:54 2026 -0400"
      },
      "message": "Host Fira Sans locally instead of dropping it\n\nVendor mozilla/Fira weights 300/400/500 under public/fonts so the\nForge UI at /start/ keeps Fira Sans without loading Google Fonts,\nwhich grails.apache.org CSP blocks.\n\nAssisted-by: Cursor:Grok-4.6\n"
    },
    {
      "commit": "3afc9f74b5a6a3a0c48c2ebdd0f50e57f736bdaf",
      "tree": "4260e8e9770c268e80559054de1a477e25b92bee",
      "parents": [
        "090c804d01e2314000c74e8955946755aef98048"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Mon Aug 31 13:31:40 2026 -0400"
      },
      "committer": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Mon Aug 31 13:31:40 2026 -0400"
      },
      "message": "Stop loading Google Fonts blocked by grails.apache.org CSP\n\nThe Forge UI now lives under grails.apache.org/start/, whose Content-Security-Policy\ndoes not allow fonts.googleapis.com. Use the existing system sans-serif stack instead.\n\nAssisted-by: Cursor:Grok-4.6\n"
    },
    {
      "commit": "090c804d01e2314000c74e8955946755aef98048",
      "tree": "ec9b831cceb56e2934f4ff449b31d5f516a7c25f",
      "parents": [
        "cd8104de73bd4f3619bb8c6ff8aa44318232c97c",
        "61b0def1a8acb7920b316014d1f14d5ed67fae08"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Mon Aug 31 12:51:06 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 12:51:06 2026 -0400"
      },
      "message": "Merge pull request #171 from apache/publish-to-grails-apache-org\n\nPublish Forge UI to grails.apache.org/start"
    },
    {
      "commit": "61b0def1a8acb7920b316014d1f14d5ed67fae08",
      "tree": "ec9b831cceb56e2934f4ff449b31d5f516a7c25f",
      "parents": [
        "cd8104de73bd4f3619bb8c6ff8aa44318232c97c"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Mon Aug 31 12:47:15 2026 -0400"
      },
      "committer": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Mon Aug 31 12:47:15 2026 -0400"
      },
      "message": "Publish Forge UI to grails.apache.org/start and redirect start.grails.org\n\nThe UI is copied into apache/grails-website asf-site-production/start via\ndeploy-github-pages, then gh-pages becomes a domain-preserving redirect.\n\nAssisted-by: Cursor:Grok-4.6\n"
    },
    {
      "commit": "57b2f3de2cbb27b6a82d2960942108171a94fb3f",
      "tree": "d1461234c4ec61e0c92e23ed31b19ef65cf0df62",
      "parents": [
        "cd8104de73bd4f3619bb8c6ff8aa44318232c97c"
      ],
      "author": {
        "name": "Mattias Reichel",
        "email": "mattias.reichel@gmail.com",
        "time": "Thu Aug 27 11:49:03 2026 +0200"
      },
      "committer": {
        "name": "Mattias Reichel",
        "email": "mattias.reichel@gmail.com",
        "time": "Thu Aug 27 11:49:03 2026 +0200"
      },
      "message": "fix: update copyright year and text in footer\n"
    },
    {
      "commit": "cd8104de73bd4f3619bb8c6ff8aa44318232c97c",
      "tree": "a1ea05836c61f680c231842f7e25b9a6cf67062e",
      "parents": [
        "ef7e686049258b3ec1cf1ee6243f9ae02e433713",
        "116dbaf463acd4b2a4c9e77d3762c1a10eab6bd2"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Wed Jul 29 22:47:12 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 29 22:47:12 2026 -0400"
      },
      "message": "Merge pull request #148 from apache/deps/batch-updates\n\nNext round of dependency updates."
    },
    {
      "commit": "956f7586e669e04f484b50e717c2f1f38df81de9",
      "tree": "a272d0f1ef579eeb23cc6731f2d68849180495ac",
      "parents": [
        "ef7e686049258b3ec1cf1ee6243f9ae02e433713"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Wed Jul 29 18:47:17 2026 -0400"
      },
      "committer": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Wed Jul 29 18:47:17 2026 -0400"
      },
      "message": "Remove dead GitHub create residue from Launch UI\n\nPush to GitHub was removed in #61 and the Forge API no longer\nexposes create-on-GitHub OAuth endpoints (apache/grails-core#15812).\nDelete leftover helpers, OAuth callback routing, clone NextSteps,\nand the createRepo tooltip so the UI matches the server.\n\nKeep footer/marketing GitHub org links.\n\nAssisted-by: Sisyphus:xai/grok-4.5\n"
    },
    {
      "commit": "116dbaf463acd4b2a4c9e77d3762c1a10eab6bd2",
      "tree": "431887098b1e5b1486bf20585339179cbfc8f148",
      "parents": [
        "e234f57c761fb581285881d548411dbfe3b2d90c"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Sat Jul 18 23:17:06 2026 -0400"
      },
      "committer": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Sat Jul 18 23:17:06 2026 -0400"
      },
      "message": "Batch dependency updates\n\nnpm (app/launch):\n- @mui/material 7.3.10 -\u003e 9.2.0\n- @mui/icons-material 7.3.10 -\u003e 9.2.0 (bumped together; shared peer major)\n- react-dom 19.2.5 -\u003e 19.2.7\n- zustand 5.0.12 -\u003e 5.0.14\n- @vitejs/plugin-react 6.0.1 -\u003e 6.0.3\n- globals 17.6.0 -\u003e 17.7.0\n- prettier 3.8.3 -\u003e 3.9.5\n- vite ^8.0.8 -\u003e ^8.1.4\n- vitest 4.1.4 -\u003e 4.1.10\n\nGitHub Actions:\n- actions/setup-node v4/v6.4.0 -\u003e v7.0.0\n- actions/setup-java v5.4.0 -\u003e v5.6.0\n- gradle/actions/setup-gradle v6.1.0 -\u003e v6.2.0\n\nExcludes eslint 10: blocked by eslint-plugin-react, which has no\neslint-10-compatible release yet.\n\nVerified in app/launch: npm install clean (0 vulnerabilities),\nlint clean, 30/30 tests pass, build succeeds.\n"
    },
    {
      "commit": "ef7e686049258b3ec1cf1ee6243f9ae02e433713",
      "tree": "0705418c9ffc44f993ac8ad0f40b9d3272b76bea",
      "parents": [
        "e234f57c761fb581285881d548411dbfe3b2d90c",
        "601fa4ea4e8548d6b7687c5db8b7d3644afe1ff2"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Sat Jul 18 23:08:34 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 18 23:08:34 2026 -0400"
      },
      "message": "Merge pull request #146 from apache/feat/feature-relationship-metadata\n\nAct on the Forge API\u0027s feature relationship metadata"
    },
    {
      "commit": "601fa4ea4e8548d6b7687c5db8b7d3644afe1ff2",
      "tree": "0705418c9ffc44f993ac8ad0f40b9d3272b76bea",
      "parents": [
        "e234f57c761fb581285881d548411dbfe3b2d90c"
      ],
      "author": {
        "name": "Scott Murphy Heiberg",
        "email": "scott@alwaysvip.com",
        "time": "Sat Jul 18 18:45:36 2026 -0700"
      },
      "committer": {
        "name": "Scott Murphy Heiberg",
        "email": "scott@alwaysvip.com",
        "time": "Sat Jul 18 19:01:05 2026 -0700"
      },
      "message": "Act on the Forge API\u0027s feature relationship metadata\n\nThe Forge API now reports two relationship fields per feature:\ndependentFeatures (features a selection adds automatically server-side)\nand oneOfGroup (features sharing a group are mutually exclusive). The\nfeature selector previously showed neither: implied features were\ninvisible in the selection, and conflicting features could be selected\ntogether only to fail at generation time.\n\nA featureRelations helper expands a selection transitively, and the\nselector now:\n\n- labels implied feature cards \u0027included automatically by \u003cfeature\u003e\u0027\n  and makes them non-toggleable\n- greys out and disables cards whose selection - directly or through\n  anything they would add automatically - would land in a one-of group\n  already occupied, labelled \u0027unavailable with \u003cfeature\u003e\u0027\n- appends non-removable \u0027(included)\u0027 chips for implied features to the\n  Additional Selected Features row\n\nFeatures without the new metadata behave exactly as before.\n"
    },
    {
      "commit": "e234f57c761fb581285881d548411dbfe3b2d90c",
      "tree": "3fff9471c768c91f39641f8ca090dd42c35e0d9c",
      "parents": [
        "7450088d5fb514486ae9f254414f7d89e0e8e427",
        "f56a97e803bd68882a60a4e0c62134c46c3f662b"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Thu Jul 09 11:31:20 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 11:31:20 2026 -0400"
      },
      "message": "Merge pull request #132 from apache/fix/publish-no-changes\n\nSkip gh-pages commit when build output is unchanged"
    },
    {
      "commit": "f56a97e803bd68882a60a4e0c62134c46c3f662b",
      "tree": "5a326a4b1b70585c2d3dbadd4e796f668e901f81",
      "parents": [
        "634209f12ba7e22524c9e468cf7b3f56b2804950"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Thu Jul 09 11:30:02 2026 -0400"
      },
      "committer": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Thu Jul 09 11:30:02 2026 -0400"
      },
      "message": "Skip gh-pages commit when build output is unchanged\n\nWith set -e, \u0027git commit\u0027 failing on an empty diff (e.g. after merges\nthat only touch workflow files) aborted the Publish run with exit 1.\nRestore the no-changes guard, checking the staged diff after \u0027git add -A\u0027\nso new files are also detected.\n"
    },
    {
      "commit": "7450088d5fb514486ae9f254414f7d89e0e8e427",
      "tree": "f0731c72952b6bd530a039d33c456efcd27de247",
      "parents": [
        "bcb03299bc6111aab6d86f161f7386c396ec496c",
        "6dfa82a715cf0bc58007844659686f2c65904f34"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Thu Jul 09 11:21:24 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 11:21:24 2026 -0400"
      },
      "message": "Merge pull request #128 from apache/dependabot/github_actions/actions/setup-java-5.4.0\n\nBump actions/setup-java from 5.2.0 to 5.4.0"
    },
    {
      "commit": "bcb03299bc6111aab6d86f161f7386c396ec496c",
      "tree": "fcaae2354c8119c993e80ae838db636b4b9a399a",
      "parents": [
        "6b186e7676ece5fc7fce7288919a14e47e5debbe",
        "073acc623d8b59d420d8d093d31908079caac2e3"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Thu Jul 09 11:20:07 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 11:20:07 2026 -0400"
      },
      "message": "Merge pull request #125 from apache/dependabot/github_actions/actions/checkout-7.0.0\n\nBump actions/checkout from 6.0.2 to 7.0.0"
    },
    {
      "commit": "6b186e7676ece5fc7fce7288919a14e47e5debbe",
      "tree": "ddad28660a7646d5dd4d161470c2a278f5acc550",
      "parents": [
        "634209f12ba7e22524c9e468cf7b3f56b2804950",
        "c54a0b1511e303635715ab854290ff613c06a64a"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Thu Jul 09 10:47:56 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 10:47:56 2026 -0400"
      },
      "message": "Merge pull request #130 from apache/dependency-security-patches\n\nPatch dependencies to non-vulnerable versions"
    },
    {
      "commit": "c54a0b1511e303635715ab854290ff613c06a64a",
      "tree": "ddad28660a7646d5dd4d161470c2a278f5acc550",
      "parents": [
        "634209f12ba7e22524c9e468cf7b3f56b2804950"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Tue Jul 07 16:18:32 2026 -0400"
      },
      "committer": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Tue Jul 07 16:18:32 2026 -0400"
      },
      "message": "Patch dependencies to non-vulnerable versions\n\nResolves all npm audit findings:\n- app/launch: vite, undici, js-yaml, @babel/core\n- dev-proxy-server: form-data, qs\n\nAll fixes within existing semver ranges; only lockfiles changed.\n"
    },
    {
      "commit": "6dfa82a715cf0bc58007844659686f2c65904f34",
      "tree": "7837cd383a945cee3d378bb64adc918d585ec367",
      "parents": [
        "634209f12ba7e22524c9e468cf7b3f56b2804950"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Jun 26 22:23:14 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 26 22:23:14 2026 +0000"
      },
      "message": "Bump actions/setup-java from 5.2.0 to 5.4.0\n\nBumps [actions/setup-java](https://github.com/actions/setup-java) from 5.2.0 to 5.4.0.\n- [Release notes](https://github.com/actions/setup-java/releases)\n- [Commits](https://github.com/actions/setup-java/compare/be666c2fcd27ec809703dec50e508c2fdc7f6654...1bcf9fb12cf4aa7d266a90ae39939e61372fe520)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-java\n  dependency-version: 5.4.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "073acc623d8b59d420d8d093d31908079caac2e3",
      "tree": "221d394b28d9aa4b57929e4f9ec67d064b4a04b8",
      "parents": [
        "634209f12ba7e22524c9e468cf7b3f56b2804950"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Jun 19 22:23:34 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 19 22:23:34 2026 +0000"
      },
      "message": "Bump actions/checkout from 6.0.2 to 7.0.0\n\nBumps [actions/checkout](https://github.com/actions/checkout) from 6.0.2 to 7.0.0.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/de0fac2e4500dabe0009e67214ff5f5447ce83dd...9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0)\n\n---\nupdated-dependencies:\n- dependency-name: actions/checkout\n  dependency-version: 7.0.0\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "634209f12ba7e22524c9e468cf7b3f56b2804950",
      "tree": "b1ddbcd346a9a579e6a8d733df2d5e04e98a29fe",
      "parents": [
        "e73ca1b8a44581c2b23d1bdc8dd90e70adf33bf2",
        "da8395c1ae56aaca380b9ba10c42ec1d95921b6e"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Tue Jun 16 17:39:43 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 17:39:43 2026 -0400"
      },
      "message": "Merge pull request #111 from apache/forge-ui-updates"
    },
    {
      "commit": "da8395c1ae56aaca380b9ba10c42ec1d95921b6e",
      "tree": "f61dd63344b6cf6b4a3ce97280782921689b79f3",
      "parents": [
        "79c84ef1fb5b750475f0c82e0a31479eaee193f6",
        "c3e90c9abb76c0b9253d7da31dbead792c5807d1"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Tue Jun 16 08:43:51 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 08:43:51 2026 -0400"
      },
      "message": "Merge pull request #119 from apache/fix/pr-111-restore-launch-ui\n\nRestore launch UI state loading"
    },
    {
      "commit": "c3e90c9abb76c0b9253d7da31dbead792c5807d1",
      "tree": "f61dd63344b6cf6b4a3ce97280782921689b79f3",
      "parents": [
        "3622295fb5d906a85a9fcb0c38da1df844b071bf"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Thu Jun 11 08:16:17 2026 -0400"
      },
      "committer": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Thu Jun 11 08:16:17 2026 -0400"
      },
      "message": "Restore launch form visual parity\n\nKeep the launch form children hidden until the Zustand store has been initialized, restore production-style standard selects, and preserve the form row spacing used by start.grails.org.\n\nAssisted-by: opencode:gpt-5.5\n"
    },
    {
      "commit": "3622295fb5d906a85a9fcb0c38da1df844b071bf",
      "tree": "55693d2c49888bdf937b069f64f5cc274c63a0b0",
      "parents": [
        "144a62d307d3e3228a1a4bd92ec686f4bbb2825e"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Thu Jun 11 07:53:08 2026 -0400"
      },
      "committer": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Thu Jun 11 07:53:08 2026 -0400"
      },
      "message": "Fix launch tooling and local proxy\n\nMake local launch scripts cross-platform, wire the React hooks lint plugin, and update the Express 5 version feed route used by local browser QA.\n\nAssisted-by: opencode:gpt-5.5\n"
    },
    {
      "commit": "144a62d307d3e3228a1a4bd92ec686f4bbb2825e",
      "tree": "b866857453aa07029e92907ba57a0d8aa5d9b4d9",
      "parents": [
        "433bef3932d2239b4779689d2853789026642188"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Thu Jun 11 07:52:14 2026 -0400"
      },
      "committer": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Thu Jun 11 07:52:14 2026 -0400"
      },
      "message": "Clean component lint issues\n\nReorder MUI imports and memoize the feature modal keyboard handler factory result so lint can run cleanly.\n\nAssisted-by: opencode:gpt-5.5\n"
    },
    {
      "commit": "433bef3932d2239b4779689d2853789026642188",
      "tree": "b1eab6debd26dc7277084e5c99ef8e234636b152",
      "parents": [
        "0435934429517fe1f34912a75fbb3a8460f87856"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Thu Jun 11 07:51:12 2026 -0400"
      },
      "committer": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Thu Jun 11 07:51:12 2026 -0400"
      },
      "message": "Strengthen application launch smoke test\n\nAssert that the launch form and action row render instead of only checking for a defined test container.\n\nAssisted-by: opencode:gpt-5.5\n"
    },
    {
      "commit": "0435934429517fe1f34912a75fbb3a8460f87856",
      "tree": "899a14159f063e8b0165e670d4c787e64f6082e4",
      "parents": [
        "79c84ef1fb5b750475f0c82e0a31479eaee193f6"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Thu Jun 11 07:50:17 2026 -0400"
      },
      "committer": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Thu Jun 11 07:50:17 2026 -0400"
      },
      "message": "Restore Zustand launch state loading\n\nInitialize the Zustand store before paint, reload feature data when feature-query fields change, ignore stale async loader responses, and keep reset defaults safe when option buckets are missing.\n\nAssisted-by: opencode:gpt-5.5\n"
    },
    {
      "commit": "79c84ef1fb5b750475f0c82e0a31479eaee193f6",
      "tree": "618be448c2c9edfe2f13f651bd439955fd23995b",
      "parents": [
        "a9e41a32d521ec01e85e5199c0a8417f229fac6f"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Wed Jun 10 14:56:47 2026 -0400"
      },
      "committer": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Wed Jun 10 14:56:47 2026 -0400"
      },
      "message": "Remove diagnostic code\n"
    },
    {
      "commit": "a9e41a32d521ec01e85e5199c0a8417f229fac6f",
      "tree": "4cdc2c2ab0514790baa88bfd705153e545a235b6",
      "parents": [
        "ac9a1abb3f4f7fbfbc0a1719c7b254c30d57ab08"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Wed Jun 10 14:54:56 2026 -0400"
      },
      "committer": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Wed Jun 10 14:54:56 2026 -0400"
      },
      "message": "Always run tests\n"
    },
    {
      "commit": "ac9a1abb3f4f7fbfbc0a1719c7b254c30d57ab08",
      "tree": "9446f4427e7ac0a564c7aa945a56a6d2552e3192",
      "parents": [
        "7868038759ff57b913c77690ea4425a6e9a49212"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Sun May 03 17:05:24 2026 -0400"
      },
      "committer": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Wed Jun 10 14:53:03 2026 -0400"
      },
      "message": "Upgrade all dependencies to latest major versions\nMigrate React 17→19 (createRoot API), replace @material-ui/core v4 with\n@mui/material v7 (new Grid v2 API, slotProps, @mui/x-tree-view), replace\ndeprecated Recoil with Zustand 5 for state management, convert ESLint 8\nlegacy config to ESLint 9 flat config, upgrade Prettier 2→3, jsdom 28→29,\nand Express 4→5 in dev-proxy-server.\nReplace react-test-renderer (removed in React 19) with @testing-library/react. Gradle to 9.5.1.\n"
    },
    {
      "commit": "e73ca1b8a44581c2b23d1bdc8dd90e70adf33bf2",
      "tree": "a9f038cc032537371d7a736fa81265b2988ff04a",
      "parents": [
        "7868038759ff57b913c77690ea4425a6e9a49212",
        "92d816167da5db24645254402f333d43764fd7fd"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Sat May 30 11:45:54 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 30 11:45:54 2026 -0400"
      },
      "message": "Merge pull request #115 from apache/ci/setup-gradle-v6-basic-cache\n\nci: audit and update GitHub Actions to ASF-approved versions"
    },
    {
      "commit": "92d816167da5db24645254402f333d43764fd7fd",
      "tree": "a9f038cc032537371d7a736fa81265b2988ff04a",
      "parents": [
        "7868038759ff57b913c77690ea4425a6e9a49212"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Fri May 29 13:09:12 2026 -0400"
      },
      "committer": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Fri May 29 13:09:12 2026 -0400"
      },
      "message": "ci: audit and update GitHub Actions to ASF-approved versions\n\nPin every external GitHub Action to a full commit SHA from the ASF\napproved actions allow-list, with a trailing comment naming the version\nit resolves to. Mirrors the grails-core audit in apache/grails-core#15690.\n\n- actions/checkout -\u003e de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 (was v6)\n- actions/setup-java -\u003e be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 (was v5)\n- gradle/actions/setup-gradle -\u003e 50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0 (was 0723195856401067f7a2779048b490ace7a47d7c # v5.2.0)\n- actions/setup-node -\u003e 48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 (was v4)\n\nAdd cache-provider: basic to all 2 setup-gradle steps so caching\nstays on the MIT-licensed provider rather than the proprietary enhanced\nprovider introduced in gradle/actions v6 (Gradle commercial Terms of Use).\n\nFirst-party apache/grails-github-actions/* and local ./.github/actions/*\nreferences are intentionally left unchanged.\n\nAssisted-by: claude-code:claude-4.8-opus\n"
    },
    {
      "commit": "7868038759ff57b913c77690ea4425a6e9a49212",
      "tree": "124c593a680fa178b59e180c11514af9dace3e38",
      "parents": [
        "572e375e0c907fd7b6f4d2834ac3ef6a53c349f3",
        "89f034f7277a4c2a4b2db80170437ddaf5b85ad7"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Thu Apr 23 07:50:13 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 23 07:50:13 2026 -0400"
      },
      "message": "Merge pull request #110 from apache/cleanup\n\nUpdate gradle action version to an approved ASF version"
    },
    {
      "commit": "89f034f7277a4c2a4b2db80170437ddaf5b85ad7",
      "tree": "124c593a680fa178b59e180c11514af9dace3e38",
      "parents": [
        "40aff8be30e8a92d664009f7f6ff7ecb99c2ab36"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Thu Apr 23 07:49:35 2026 -0400"
      },
      "committer": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Thu Apr 23 07:49:35 2026 -0400"
      },
      "message": "Update gradle action version to an approved ASF version\n"
    },
    {
      "commit": "572e375e0c907fd7b6f4d2834ac3ef6a53c349f3",
      "tree": "1671cbfef9b654c703882a734fbc59726e6345ca",
      "parents": [
        "bb0ec9ec985c77198eda5857118520035bd18f8c",
        "40aff8be30e8a92d664009f7f6ff7ecb99c2ab36"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Wed Apr 22 21:34:21 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 22 21:34:21 2026 -0400"
      },
      "message": "Merge pull request #97 from apache/cleanup"
    },
    {
      "commit": "40aff8be30e8a92d664009f7f6ff7ecb99c2ab36",
      "tree": "1671cbfef9b654c703882a734fbc59726e6345ca",
      "parents": [
        "bb0ec9ec985c77198eda5857118520035bd18f8c"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Wed Apr 15 21:40:37 2026 -0400"
      },
      "committer": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Wed Apr 22 08:35:55 2026 -0400"
      },
      "message": "Updating to non-vulnerable versions \u0026 changing \"Gorm\" to \"Grails Data\"\n"
    },
    {
      "commit": "bb0ec9ec985c77198eda5857118520035bd18f8c",
      "tree": "fc27a1738f0824b30dbab70a184e40aea1d821b1",
      "parents": [
        "c2af4d4cb0b427a8c208eeaa88846d543c03c8a3",
        "60bc1bfbb1d0e3ea004f6eb346383651bf2e8d6c"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Mon Mar 02 07:26:55 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 07:26:55 2026 -0500"
      },
      "message": "Merge pull request #88 from apache/fixVulnerabilitiesAndModernize\n\nRestore CI Action \u0026 run on PRs"
    },
    {
      "commit": "60bc1bfbb1d0e3ea004f6eb346383651bf2e8d6c",
      "tree": "fc27a1738f0824b30dbab70a184e40aea1d821b1",
      "parents": [
        "9375d36bbcd39ba3f133ef89acd66327d8b5b007"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Mon Mar 02 07:23:33 2026 -0500"
      },
      "committer": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Mon Mar 02 07:25:10 2026 -0500"
      },
      "message": "Restore CI Action \u0026 run on PRs\n"
    },
    {
      "commit": "c2af4d4cb0b427a8c208eeaa88846d543c03c8a3",
      "tree": "ce63712b615d2c408fa4c33a0c7d6c3aaa70cdca",
      "parents": [
        "52dec2cf0f2aa2f7f00ae2960f04b766ce9709d8",
        "9375d36bbcd39ba3f133ef89acd66327d8b5b007"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Mon Mar 02 07:09:54 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 07:09:54 2026 -0500"
      },
      "message": "Merge pull request #86 from apache/fixVulnerabilitiesAndModernize\n\n"
    },
    {
      "commit": "9375d36bbcd39ba3f133ef89acd66327d8b5b007",
      "tree": "ce63712b615d2c408fa4c33a0c7d6c3aaa70cdca",
      "parents": [
        "4956894278ba0b09cf69ec25f6b3dba979378785",
        "1be9e0e68fdffa8b156f81064b61829b486e6274"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Sun Mar 01 12:03:31 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Mar 01 12:03:31 2026 -0500"
      },
      "message": "Merge pull request #87 from jamesfredley/fix/pr-86-review-fixes\n\nFix bugs, lint errors, and build issues from PR #86 review"
    },
    {
      "commit": "1be9e0e68fdffa8b156f81064b61829b486e6274",
      "tree": "ce63712b615d2c408fa4c33a0c7d6c3aaa70cdca",
      "parents": [
        "ceae6c4b876d7012c530c9f28d6ccd70c56b4f11"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Sun Mar 01 11:18:28 2026 -0500"
      },
      "committer": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Sun Mar 01 11:18:28 2026 -0500"
      },
      "message": "Revert to absolute URLs, use function-form manualChunks\n\nRevert index.html and vite base from relative (./) to absolute (/) paths\nto match codebase convention - the app is served from root.\n\nSwitch manualChunks from object form to function form that matches on\nid.includes(\u0027@material-ui/\u0027) to reliably catch all deep imports. This\npulls ~2.6KB more MUI code into the vendor chunk.\n"
    },
    {
      "commit": "ceae6c4b876d7012c530c9f28d6ccd70c56b4f11",
      "tree": "bbc0a2671863f45d6dc1cb1268ebf7f4ee2ba132",
      "parents": [
        "21d283171adb7fb6f786dd31da395d0ecd29a60a"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Sun Mar 01 08:14:01 2026 -0500"
      },
      "committer": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Sun Mar 01 08:14:01 2026 -0500"
      },
      "message": "Guard keyboard handler against editable elements, remove empty vendor chunk\n\nSkip arrow/page key handling when focus is inside INPUT, TEXTAREA, or SELECT\nelements so the search field in FeatureSelector works normally.\n\nRemove the react/react-dom manualChunks entry that produced an empty vendor\nchunk - React is already bundled into the main index chunk by Rollup.\n"
    },
    {
      "commit": "21d283171adb7fb6f786dd31da395d0ecd29a60a",
      "tree": "73cc18ac778b39d5311f92b7bf2107a0d4ccf3e1",
      "parents": [
        "da4d7c1cead16d1034deef90130f9fa2d2c828ad"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Sun Mar 01 08:09:48 2026 -0500"
      },
      "committer": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Sun Mar 01 08:09:48 2026 -0500"
      },
      "message": "Complete keyboard navigation for feature selector modal\n\nFix and modernize ModalKeyboardHandler:\n- Fix typo (confin -\u003e config)\n- Replace deprecated keyCode with event.key\n- Fix removeEventListener memory leak (mismatched function refs)\n- Replace Materialize onOpenEnd/onCloseEnd with createKeyDownHandler()\n  that works with any scrollable container via getter function\n\nWire up in FeatureSelector:\n- Arrow Up/Down scrolls feature list by 50px\n- Arrow Left/Right jumps between category groups\n- Page Up/Down scrolls by page\n- Uses MUI Dialog onKeyDown + DialogContent ref\n"
    },
    {
      "commit": "da4d7c1cead16d1034deef90130f9fa2d2c828ad",
      "tree": "838d896a0452989ed92cbe33899672237e9ea93f",
      "parents": [
        "4956894278ba0b09cf69ec25f6b3dba979378785"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Sun Mar 01 07:59:14 2026 -0500"
      },
      "committer": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Sun Mar 01 07:59:14 2026 -0500"
      },
      "message": "Fix bugs, lint errors, and build issues from PR #86 review\n\nBugs fixed:\n- Fix __dirname undefined in ESM vite.config.js (use fileURLToPath)\n- Fix typeof match (undefined variable) in CodePreview.jsx loop\n- Fix false CSS class rendered on unselected feature cards\n- Fix folder click in code preview showing \u0027cannot be previewed\u0027\n\nBuild/lint fixes:\n- ESLint config: disable react-in-jsx-scope (React 17 auto-transform),\n  disable prop-types, add test env overrides, lint *.jsx files\n- Fix all unused variable warnings (prefix with _)\n- Fix import order in CodePreview.jsx and Diff.jsx\n- Fix unescaped apostrophes in NextSteps and ShareModal\n- Wrap case-block declarations in braces (no-case-declarations)\n- Remove dead process.env shim and unused ModalKeyboardHandler\n\nOther improvements:\n- Use relative URLs in index.html (consistent with base: \u0027./\u0027)\n- Remove duplicate manifest link (leftover from CRA)\n- Add manualChunks to split MUI into separate vendor chunk\n"
    },
    {
      "commit": "4956894278ba0b09cf69ec25f6b3dba979378785",
      "tree": "42acc534be057e06a44584e6e5de7c9c7e3e716b",
      "parents": [
        "19f939ea72d3df66ae048a851271c94ba7279693"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Sun Mar 01 01:51:52 2026 -0500"
      },
      "committer": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Sun Mar 01 01:51:52 2026 -0500"
      },
      "message": "test updates \u0026 fixing various styling mismatches\n"
    },
    {
      "commit": "19f939ea72d3df66ae048a851271c94ba7279693",
      "tree": "7b6aaefcce6d08598af781fc7a3d9d8140593785",
      "parents": [
        "561d199bc7f72134d2f84276134ae05253e4108b"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Sun Mar 01 01:34:13 2026 -0500"
      },
      "committer": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Sun Mar 01 01:34:13 2026 -0500"
      },
      "message": "Fix renamed state key and regenerate stale snapshots\n"
    },
    {
      "commit": "561d199bc7f72134d2f84276134ae05253e4108b",
      "tree": "6c48e4df7a1f5416138ab6f4055c0afa4f1a3b1a",
      "parents": [
        "f8aa8321c56e88bb51c5ffc5f3687d580eb82bf6"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Sun Mar 01 01:29:36 2026 -0500"
      },
      "committer": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Sun Mar 01 01:29:36 2026 -0500"
      },
      "message": "Adjust diff modal to be larger\n"
    },
    {
      "commit": "f8aa8321c56e88bb51c5ffc5f3687d580eb82bf6",
      "tree": "f578b58b408c31a97c9602b2b97db00aa550dde0",
      "parents": [
        "fcffc4cf0afdaaaded20c0113a1b96228968e6a9"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Sun Mar 01 01:29:28 2026 -0500"
      },
      "committer": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Sun Mar 01 01:29:28 2026 -0500"
      },
      "message": "Adjust modal to be larger \u0026 fix title\n"
    },
    {
      "commit": "fcffc4cf0afdaaaded20c0113a1b96228968e6a9",
      "tree": "17a28e3f6db6466547bb01fe2de828f55d5ff50d",
      "parents": [
        "5d21acd1b7780b959685ee1f5cd8c5c313fb7b62"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Sun Mar 01 01:24:29 2026 -0500"
      },
      "committer": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Sun Mar 01 01:24:29 2026 -0500"
      },
      "message": "Fix files with no content, fix files that are not previewable (null), fix selection on initial dialog load\n"
    },
    {
      "commit": "5d21acd1b7780b959685ee1f5cd8c5c313fb7b62",
      "tree": "3f994149870ac6e8fcb88ed441e2461c9092fdff",
      "parents": [
        "52dec2cf0f2aa2f7f00ae2960f04b766ce9709d8"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Fri Feb 27 21:53:58 2026 -0500"
      },
      "committer": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Sun Mar 01 01:08:03 2026 -0500"
      },
      "message": "Remove all code vulnerabilities and adapt theme to newer materialize library\n"
    },
    {
      "commit": "52dec2cf0f2aa2f7f00ae2960f04b766ce9709d8",
      "tree": "e3c8171ea1f24e2de1f378ae19451024c755d1ea",
      "parents": [
        "f675a1cc30438046c74260ebad5eef59e64d75bc"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Fri Feb 27 21:18:09 2026 -0500"
      },
      "committer": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Fri Feb 27 21:18:09 2026 -0500"
      },
      "message": "Fix compile failures from older scripts\n"
    },
    {
      "commit": "f675a1cc30438046c74260ebad5eef59e64d75bc",
      "tree": "3d1be46cf290c93abc0e0b982adac825eb52791c",
      "parents": [
        "7261f8b2fcf26d67d797e1e81c3f3fb1c10d3345"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Fri Feb 27 21:12:21 2026 -0500"
      },
      "committer": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Fri Feb 27 21:12:21 2026 -0500"
      },
      "message": "Fix typo\n"
    },
    {
      "commit": "7261f8b2fcf26d67d797e1e81c3f3fb1c10d3345",
      "tree": "41932505a66fd149a147fd95fa4f04bd908f8002",
      "parents": [
        "1733969cb8bdaedda194dfe9ba7041918ec60db6",
        "cf9098265400dd36fc4eb03b623f5acb5635c0a2"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Fri Feb 27 21:10:32 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 27 21:10:32 2026 -0500"
      },
      "message": "Merge pull request #84 from jdaugherty/main\n\nSwitch from test framework to reloading as an option in forge"
    },
    {
      "commit": "1733969cb8bdaedda194dfe9ba7041918ec60db6",
      "tree": "4ad0c537031d18e4e04ff686b3297345e7932e6c",
      "parents": [
        "eac8e1e9735f5fb648e1b498381684a13a7370bb",
        "9bf756b8d17f8aacc5b08ecdf3e832d7e2f8bda1"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Sat Jan 31 10:06:39 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jan 31 10:06:39 2026 -0500"
      },
      "message": "Merge pull request #79 from apache/develocity-apache-org\n\nUpdate Develocity server URL in settings.gradle"
    },
    {
      "commit": "9bf756b8d17f8aacc5b08ecdf3e832d7e2f8bda1",
      "tree": "4ad0c537031d18e4e04ff686b3297345e7932e6c",
      "parents": [
        "11126a7366457c635787742e6328d36bf5fa987f"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Thu Jan 29 14:25:47 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 29 14:25:47 2026 -0500"
      },
      "message": "Remove trailing slash from Develocity server URL"
    },
    {
      "commit": "11126a7366457c635787742e6328d36bf5fa987f",
      "tree": "208a1234dd11878f0de710c72d017869d64fc2d1",
      "parents": [
        "eac8e1e9735f5fb648e1b498381684a13a7370bb"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Thu Jan 29 14:25:14 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 29 14:25:14 2026 -0500"
      },
      "message": "Update Develocity server URL in settings.gradle"
    },
    {
      "commit": "cf9098265400dd36fc4eb03b623f5acb5635c0a2",
      "tree": "446c053229c9e2849750009b4506fd2e2fb327c4",
      "parents": [
        "b148eb48607934b47cd14dcafa785528079c61ba",
        "47a85395fbeafc2375f3f300a030426d9b345ee4"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Thu Nov 20 11:56:10 2025 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 20 11:56:10 2025 -0500"
      },
      "message": "Merge pull request #2 from jdaugherty/reloadingSelectDefault\n\n"
    },
    {
      "commit": "47a85395fbeafc2375f3f300a030426d9b345ee4",
      "tree": "446c053229c9e2849750009b4506fd2e2fb327c4",
      "parents": [
        "b148eb48607934b47cd14dcafa785528079c61ba"
      ],
      "author": {
        "name": "Kenneth Carroll",
        "email": "kenneth.james.carrolL@gmail.com",
        "time": "Thu Nov 20 11:29:39 2025 -0500"
      },
      "committer": {
        "name": "Kenneth Carroll",
        "email": "kenneth.james.carrolL@gmail.com",
        "time": "Thu Nov 20 11:31:05 2025 -0500"
      },
      "message": "Added default select for reloading hook\n"
    },
    {
      "commit": "b148eb48607934b47cd14dcafa785528079c61ba",
      "tree": "e80db01129285c4af06089eb8e3c226825242e01",
      "parents": [
        "7cbcebe8a74dc436d981314f5e4786b4e245ef4c"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Thu Nov 20 09:15:09 2025 -0500"
      },
      "committer": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Thu Nov 20 09:25:56 2025 -0500"
      },
      "message": "Modernizing build setup\n"
    },
    {
      "commit": "7cbcebe8a74dc436d981314f5e4786b4e245ef4c",
      "tree": "e765262d7d4ac22e6aa08bff9f0381207b99720d",
      "parents": [
        "1ab7f2a7df25aa8f66251dab87d788cce936cab9"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Thu Nov 20 09:11:49 2025 -0500"
      },
      "committer": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Thu Nov 20 09:11:49 2025 -0500"
      },
      "message": "react-scripts requires type script 3 or 4; support for 5 is not yet available\n"
    },
    {
      "commit": "1ab7f2a7df25aa8f66251dab87d788cce936cab9",
      "tree": "b6622cdb082110f5c22c02f9ba385dbdfb992ed0",
      "parents": [
        "2f9cf1d998df8910f01b9ed15a35a90f761e81a7",
        "6ebdccdb262714cf6ac32103dd8cd76705f6eb49"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Thu Nov 20 08:56:49 2025 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 20 08:56:49 2025 -0500"
      },
      "message": "Merge pull request #1 from jdaugherty/dependency-changes\n\nDependency changes"
    },
    {
      "commit": "6ebdccdb262714cf6ac32103dd8cd76705f6eb49",
      "tree": "b6622cdb082110f5c22c02f9ba385dbdfb992ed0",
      "parents": [
        "2f9cf1d998df8910f01b9ed15a35a90f761e81a7"
      ],
      "author": {
        "name": "Kenneth Carroll",
        "email": "kenneth.james.carrolL@gmail.com",
        "time": "Wed Nov 19 16:01:20 2025 -0500"
      },
      "committer": {
        "name": "Kenneth Carroll",
        "email": "kenneth.james.carrolL@gmail.com",
        "time": "Wed Nov 19 16:02:49 2025 -0500"
      },
      "message": "Updating react-scripts dependency, start:local command, and readme\n"
    },
    {
      "commit": "2f9cf1d998df8910f01b9ed15a35a90f761e81a7",
      "tree": "b5b2a52d3d77c8f6ab46ef6dd53aa90ccd1a9c55",
      "parents": [
        "eac8e1e9735f5fb648e1b498381684a13a7370bb"
      ],
      "author": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Wed Nov 19 13:40:10 2025 -0500"
      },
      "committer": {
        "name": "James Daugherty",
        "email": "jdaugherty@jdresources.net",
        "time": "Wed Nov 19 13:40:10 2025 -0500"
      },
      "message": "Initial work for test -\u003e reloading\n"
    },
    {
      "commit": "eac8e1e9735f5fb648e1b498381684a13a7370bb",
      "tree": "19aabc326c9918f72b6349630e8ab5f003aff712",
      "parents": [
        "4770d29b4468559816c1434bf5b53e31b2d9dc4e",
        "7d8000f3c61bc057b1cbabe553ad52dac1565e2b"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Mon Oct 27 17:40:55 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 27 17:40:55 2025 -0400"
      },
      "message": "Merge pull request #71 from apache/localize-external-resources\n\nLocalize external resources"
    },
    {
      "commit": "7d8000f3c61bc057b1cbabe553ad52dac1565e2b",
      "tree": "19aabc326c9918f72b6349630e8ab5f003aff712",
      "parents": [
        "bc9235ad638946e4657bf9075a055b99e17bb0d1"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Fri Oct 24 08:24:03 2025 -0400"
      },
      "committer": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Fri Oct 24 08:24:03 2025 -0400"
      },
      "message": "Update homepage field so it will work in dev and within a directory\n\nChanged the homepage field from a URL to a relative path (\u0027.\u0027) in package.json to adjust deployment or build settings.\n"
    },
    {
      "commit": "bc9235ad638946e4657bf9075a055b99e17bb0d1",
      "tree": "46360f5783a7fb1096fdcf6ac1905e3d635858ca",
      "parents": [
        "4770d29b4468559816c1434bf5b53e31b2d9dc4e"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Fri Oct 24 08:22:44 2025 -0400"
      },
      "committer": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Fri Oct 24 08:22:44 2025 -0400"
      },
      "message": "Move Materialize CSS and Material Icons to launch app directly\n\nAdded Materialize CSS framework and Material Icons font to the app/launch/public directory, including CSS, JS, and font files. Updated index.html to include the new styles and scripts, enabling Materialize UI components and icon support.  These were referenced from external locations which will not work with ASF CSP restrictions\n"
    },
    {
      "commit": "4770d29b4468559816c1434bf5b53e31b2d9dc4e",
      "tree": "ef9d65ba7a17d8b5102a4ebc93d4a224e4e57728",
      "parents": [
        "2792068ecd5a23a490a0997d522c7207f1336b39"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Thu Oct 23 20:07:18 2025 -0400"
      },
      "committer": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Thu Oct 23 20:07:18 2025 -0400"
      },
      "message": "Revert publishing changes\n"
    },
    {
      "commit": "2792068ecd5a23a490a0997d522c7207f1336b39",
      "tree": "5c4a53d60449fc77d9e57e59186ea0fd83464002",
      "parents": [
        "6636922f1560aabbf8c2c0f43fc8b3a5028f67f3"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Thu Oct 23 19:55:53 2025 -0400"
      },
      "committer": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Thu Oct 23 19:55:53 2025 -0400"
      },
      "message": "Add Gradle build step to publish workflow\n\nIntroduces a dedicated Gradle build step in the GitHub Actions publish workflow, utilizing secrets for Gradle Enterprise integration. This ensures the project is built before deploying the Grails Forge UI.\n"
    },
    {
      "commit": "6636922f1560aabbf8c2c0f43fc8b3a5028f67f3",
      "tree": "35bd2025f4e647c799135810a41d77ae32cb6f0e",
      "parents": [
        "3b2ae6a34e30770d0c86697f88b96d0f3e647a47"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Thu Oct 23 19:44:41 2025 -0400"
      },
      "committer": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Thu Oct 23 19:44:41 2025 -0400"
      },
      "message": "Add step to maximize build space in CI workflow\n\nIntroduced a step using easimon/maximize-build-space to free up disk space in the GitHub Actions publish workflow by removing unused SDKs and tools, adjusting swap size, and reserving root filesystem space. This helps prevent build failures due to insufficient disk space.\n"
    },
    {
      "commit": "3b2ae6a34e30770d0c86697f88b96d0f3e647a47",
      "tree": "378e27484c681dcffb7ecf29156ce06e4bb6473e",
      "parents": [
        "ef7a93ec9b5a080d4b9f54f64ddd6af7feadcb1e"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Thu Oct 23 19:39:17 2025 -0400"
      },
      "committer": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Thu Oct 23 19:39:17 2025 -0400"
      },
      "message": "Update publish workflow to use deploy-github-pages action\n\nReplaces the custom publish script with the apache/grails-github-actions/deploy-github-pages action. Updates environment variables to support deployment to the Grails website repository and sets relevant deployment parameters.\n"
    },
    {
      "commit": "ef7a93ec9b5a080d4b9f54f64ddd6af7feadcb1e",
      "tree": "ef9d65ba7a17d8b5102a4ebc93d4a224e4e57728",
      "parents": [
        "4bb735d83234f9580f2e7e79d20fcbd97117923b"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Sun Oct 19 16:39:26 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 19 16:39:26 2025 -0400"
      },
      "message": "Adjust order values for Grails version feed\n\nUpdated the order values for Grails versions in the JSON feed."
    },
    {
      "commit": "4bb735d83234f9580f2e7e79d20fcbd97117923b",
      "tree": "f514b06f3f3728ed7bf175376525816dddffd303",
      "parents": [
        "c222cfc2294cba66d6478637004a71d4fd32bb26"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Fri Sep 26 09:41:21 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 26 09:41:21 2025 -0400"
      },
      "message": "Remove incubating disclaimer from footer\n\nUpdate copy based on Apache Groovy Footer"
    },
    {
      "commit": "c222cfc2294cba66d6478637004a71d4fd32bb26",
      "tree": "09d68f3375ed30d6b18de7d903c6ae00adbed4c4",
      "parents": [
        "e74f622e21f109f6fd611f7d573d25265e78ca03",
        "a7a3d74852e7103f6b9472b87937cde2aeb9a285"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Sat Sep 20 09:48:28 2025 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 20 09:48:28 2025 -0500"
      },
      "message": "Merge pull request #69 from dauer/issue-60-apache-software-foundation-updates\n\nIssue 60 apache software foundation updates"
    },
    {
      "commit": "a7a3d74852e7103f6b9472b87937cde2aeb9a285",
      "tree": "09d68f3375ed30d6b18de7d903c6ae00adbed4c4",
      "parents": [
        "7dd58219e4f531804adf5edbd0452cb243c15de9"
      ],
      "author": {
        "name": "Thomas Rasmussen",
        "email": "thomas.bregentved@gmail.com",
        "time": "Thu Sep 18 15:22:53 2025 +0200"
      },
      "committer": {
        "name": "Thomas Rasmussen",
        "email": "thomas.bregentved@gmail.com",
        "time": "Thu Sep 18 15:22:53 2025 +0200"
      },
      "message": "Fixed markdown link syntax in README file\n"
    },
    {
      "commit": "7dd58219e4f531804adf5edbd0452cb243c15de9",
      "tree": "3503e144cb2a0132e66c37723b5fd2f9ffe81f31",
      "parents": [
        "85c11408d8b2afd0eb44914843ddf16eeb9ab7d1"
      ],
      "author": {
        "name": "Thomas Rasmussen",
        "email": "thomas.bregentved@gmail.com",
        "time": "Thu Sep 18 15:22:00 2025 +0200"
      },
      "committer": {
        "name": "Thomas Rasmussen",
        "email": "thomas.bregentved@gmail.com",
        "time": "Thu Sep 18 15:22:00 2025 +0200"
      },
      "message": "Code comment changed to say Grails not Micronaut\n"
    },
    {
      "commit": "85c11408d8b2afd0eb44914843ddf16eeb9ab7d1",
      "tree": "5a9cde1c0616cec9212e0dcb4b191168045ad37f",
      "parents": [
        "b9b60c325f2f4f067f2246a717808d5dfe013136"
      ],
      "author": {
        "name": "Thomas Rasmussen",
        "email": "thomas.bregentved@gmail.com",
        "time": "Thu Sep 18 14:48:25 2025 +0200"
      },
      "committer": {
        "name": "Thomas Rasmussen",
        "email": "thomas.bregentved@gmail.com",
        "time": "Thu Sep 18 14:48:25 2025 +0200"
      },
      "message": "Open Graph metadata updated\n"
    },
    {
      "commit": "b9b60c325f2f4f067f2246a717808d5dfe013136",
      "tree": "2dd43b77a036b4ba3492b3439d8af6451ea2f6b0",
      "parents": [
        "9bead300e7995d618baf5eded1345da009b52375"
      ],
      "author": {
        "name": "Thomas Rasmussen",
        "email": "thomas.bregentved@gmail.com",
        "time": "Thu Sep 18 14:41:52 2025 +0200"
      },
      "committer": {
        "name": "Thomas Rasmussen",
        "email": "thomas.bregentved@gmail.com",
        "time": "Thu Sep 18 14:41:52 2025 +0200"
      },
      "message": "Renamed image files from micronaut* to grails*\n\nThe images are grails logos, the filenames should be grails*.png|.svg\n"
    },
    {
      "commit": "9bead300e7995d618baf5eded1345da009b52375",
      "tree": "656bada674f1b1390df7540afd49eee0fbc56789",
      "parents": [
        "e74f622e21f109f6fd611f7d573d25265e78ca03"
      ],
      "author": {
        "name": "Thomas Rasmussen",
        "email": "thomas.bregentved@gmail.com",
        "time": "Thu Sep 18 13:27:52 2025 +0200"
      },
      "committer": {
        "name": "Thomas Rasmussen",
        "email": "thomas.bregentved@gmail.com",
        "time": "Thu Sep 18 13:27:52 2025 +0200"
      },
      "message": "Apache Software Foundation Updates - start.grails.org\n\nUpdate the Grails Forge website start.grails.org to reflect the\ntransition from Grails Foundation to Apache Software Foundation\n\nHeader and Footer updated with ASF logo and links to their Privacy, licenses\netc. pages\n\nGitHub links changed from\n  https://github.com/grails\nto\n  https://github.com/apache/grails-core\n"
    },
    {
      "commit": "e74f622e21f109f6fd611f7d573d25265e78ca03",
      "tree": "d564ac17bd83454881807a55445aa2249caef168",
      "parents": [
        "9d97a994c48298e740255901fda6cdd9b82f2545"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Fri Aug 15 17:43:56 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 15 17:43:56 2025 -0400"
      },
      "message": "Make 7.0.0-RCX first until the 7 release"
    },
    {
      "commit": "9d97a994c48298e740255901fda6cdd9b82f2545",
      "tree": "f7bf4cc625c6768d1af140555fa7378132ae9023",
      "parents": [
        "656ada276d1bfcf8d8d7ee1a8686425e98e5a15b",
        "e6e9615868150438d19f3d1afc932fb8adff184a"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Fri Jul 11 22:47:47 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 11 22:47:47 2025 -0400"
      },
      "message": "Merge pull request #62 from apache/update-forge-cli-command\n\nAdd -t forge to generate project -\u003e commands"
    },
    {
      "commit": "e6e9615868150438d19f3d1afc932fb8adff184a",
      "tree": "f7bf4cc625c6768d1af140555fa7378132ae9023",
      "parents": [
        "15182297e7270adb2b6841a39a82ee86d3d622fa"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Fri Jul 11 22:46:11 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 11 22:46:11 2025 -0400"
      },
      "message": "Use grails-forge-cli instead"
    },
    {
      "commit": "15182297e7270adb2b6841a39a82ee86d3d622fa",
      "tree": "45540522f877db0ac3e2a4a896771694d181cdaa",
      "parents": [
        "656ada276d1bfcf8d8d7ee1a8686425e98e5a15b"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Fri Jul 11 22:39:45 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 11 22:39:45 2025 -0400"
      },
      "message": "Add -t forge to generate project -\u003e commands"
    },
    {
      "commit": "656ada276d1bfcf8d8d7ee1a8686425e98e5a15b",
      "tree": "b3b6e1ee8a41e7d8c8278572ffb814fcbfd65051",
      "parents": [
        "a9237206a0f40901dd248c016db84425b9f31b6f",
        "422310fac9de81158a4bfa43a39f7dc06d6462d7"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Fri Jul 11 22:33:07 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 11 22:33:07 2025 -0400"
      },
      "message": "Merge pull request #61 from apache/push-to-gitHub\n\nremove Push to GitHub button"
    },
    {
      "commit": "422310fac9de81158a4bfa43a39f7dc06d6462d7",
      "tree": "b3b6e1ee8a41e7d8c8278572ffb814fcbfd65051",
      "parents": [
        "0da2a0ea9ecac3e567400aee98a789805ca68434"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Fri Jul 11 22:28:27 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 11 22:28:27 2025 -0400"
      },
      "message": "Update GenerateButtons.js"
    },
    {
      "commit": "0da2a0ea9ecac3e567400aee98a789805ca68434",
      "tree": "99fcc994953491e1be84cdc290b79e3285085590",
      "parents": [
        "e9ee82491b633284bff6903604dd5bbaaa91902c"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Fri Jul 11 22:25:31 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 11 22:25:31 2025 -0400"
      },
      "message": "remove more github variables"
    },
    {
      "commit": "e9ee82491b633284bff6903604dd5bbaaa91902c",
      "tree": "1ec16a2f0433ebb544867baf4974b30d45b4086e",
      "parents": [
        "a9237206a0f40901dd248c016db84425b9f31b6f"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Fri Jul 11 22:21:35 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 11 22:21:35 2025 -0400"
      },
      "message": "remove Push to GitHub button"
    },
    {
      "commit": "a9237206a0f40901dd248c016db84425b9f31b6f",
      "tree": "575cde30d1b760c2cd75e1ca08a0cebd1ed0aa91",
      "parents": [
        "f48239d66c41d23e47d52b3a68dba8cb89e55f0f",
        "958f13b72c590d629add03492ddbaa26efc4d541"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Mon Jun 30 23:05:08 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 30 23:05:08 2025 -0400"
      },
      "message": "Merge pull request #59 from apache/matomo-apache-analytics\n\nAdd matomo apache analytics"
    },
    {
      "commit": "958f13b72c590d629add03492ddbaa26efc4d541",
      "tree": "575cde30d1b760c2cd75e1ca08a0cebd1ed0aa91",
      "parents": [
        "f48239d66c41d23e47d52b3a68dba8cb89e55f0f"
      ],
      "author": {
        "name": "James Fredley",
        "email": "jamesfredley@users.noreply.github.com",
        "time": "Mon Jun 30 23:03:02 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 30 23:03:02 2025 -0400"
      },
      "message": "Add matomo apache analytics"
    }
  ],
  "next": "f48239d66c41d23e47d52b3a68dba8cb89e55f0f"
}
