)]}'
{
  "log": [
    {
      "commit": "e80d10c4d324638cef0e896b9ff44e0c87762633",
      "tree": "18fceb37ef212f137cdbf16e040fa7f1b70fa1ea",
      "parents": [
        "cc5c6a1223f55a13eaad85400037232e673f6671"
      ],
      "author": {
        "name": "Matt Casters",
        "email": "mattcasters@gmail.com",
        "time": "Thu Jul 30 21:07:54 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 30 21:07:54 2026 +0200"
      },
      "message": "issue #3539 : document JavaScript precision loss for large integers (#7698)"
    },
    {
      "commit": "cc5c6a1223f55a13eaad85400037232e673f6671",
      "tree": "be64be333f4af434f3d856b7571cb4a6dab09dac",
      "parents": [
        "8460b49c89780e17b2723210612a28e493b035a2"
      ],
      "author": {
        "name": "hma (Atol CD)",
        "email": "hma@atolcd.com",
        "time": "Thu Jul 30 16:54:47 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 30 16:54:47 2026 +0200"
      },
      "message": "Issue #2251 : Fix integer overflow in ParquetInput for files larger than 2GB (#7694)"
    },
    {
      "commit": "8460b49c89780e17b2723210612a28e493b035a2",
      "tree": "26f4de6f9dcca62fe78ee819e66d83a603b49fb5",
      "parents": [
        "373df0af67786f0b9b41eabede20a7974601043f"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Thu Jul 30 14:52:58 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 30 14:52:58 2026 +0200"
      },
      "message": "force recalculation of shell to place widgets correctly, fixes #7689 (#7690)"
    },
    {
      "commit": "373df0af67786f0b9b41eabede20a7974601043f",
      "tree": "4738f3a111303ec73fbdc60acc6aa503607ff05e",
      "parents": [
        "264259f34da859b568c73f1c89d2fd7bb9b1c634"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Thu Jul 30 11:48:06 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 30 11:48:06 2026 +0200"
      },
      "message": "fix some more missing depdencies for azure, fixes #7666 (#7687)"
    },
    {
      "commit": "264259f34da859b568c73f1c89d2fd7bb9b1c634",
      "tree": "fa9fc263bf3212c82c9ff0ca498ebb6f3e0185bc",
      "parents": [
        "b9ef3941f66d3db2231035698360e91ecc450f94"
      ],
      "author": {
        "name": "Wassim",
        "email": "114724151+Wassim67@users.noreply.github.com",
        "time": "Thu Jul 30 11:47:54 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 30 11:47:54 2026 +0200"
      },
      "message": "Support variables in Filter Rows values (#7686)"
    },
    {
      "commit": "b9ef3941f66d3db2231035698360e91ecc450f94",
      "tree": "31f204129a4a852de5b6ba9b37e3c7a111e22475",
      "parents": [
        "66f7306a34b89d2ae06efc41cfea76338155fc91"
      ],
      "author": {
        "name": "Wassim",
        "email": "114724151+Wassim67@users.noreply.github.com",
        "time": "Thu Jul 30 11:47:26 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 30 11:47:26 2026 +0200"
      },
      "message": "Resolve variables in Excel sheet regex patterns (#7683)"
    },
    {
      "commit": "66f7306a34b89d2ae06efc41cfea76338155fc91",
      "tree": "a43308b02192a52985ec715603b9e0648d45bfaa",
      "parents": [
        "70bd50a37999cea311ad102fd71ac16f80ea00a8"
      ],
      "author": {
        "name": "Bart Maertens",
        "email": "bart.maertens@know.bi",
        "time": "Thu Jul 30 10:50:05 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 30 10:50:05 2026 +0200"
      },
      "message": "Fix the error path in the Neo4j perspective, fixes #7662 (#7685)\n\nThe Error path tab never showed the action that actually failed:\n\n- The workflow logging wrote every counter of an action except the\n  error count, so a failed action never satisfied \"err.errors \u003e 0\".\n  The parameter was already being filled in, it just wasn\u0027t set on the\n  node. Pipelines and transforms already logged theirs.\n- The lookup used size() on a pattern expression, which Neo4j 5 removed,\n  so the query failed outright against Neo4j 5. Replaced with a pattern\n  predicate, which works on both Neo4j 4 and 5.\n\nAlso in the perspective:\n\n- Read strings through LoggingCore instead of Value.asString(), which\n  returns the literal text \"null\" for a property that isn\u0027t set and so\n  slipped past Const.NVL().\n- Tell the user what happened when Open finds no file behind an\n  execution, instead of leaving the button without any effect.\n\nAdds unit tests for the generated Cypher, an integration test which runs\nthe lookup against a Neo4j 5 container, and a Hop integration test under\nintegration-tests/neo4j. The container test is skipped automatically when\nno Docker daemon is available."
    },
    {
      "commit": "70bd50a37999cea311ad102fd71ac16f80ea00a8",
      "tree": "5c8666fb002cfd677c401b8cffe6ccf855048a95",
      "parents": [
        "edba6c89bb413eb1e8f12a6497aedd12b85579b8"
      ],
      "author": {
        "name": "kxs-mtalbi",
        "email": "mtalbi@kinaxis.com",
        "time": "Thu Jul 30 04:44:41 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 30 10:44:41 2026 +0200"
      },
      "message": "Enhance logging to include stack traces and associated throwables in log messages (#7682)"
    },
    {
      "commit": "edba6c89bb413eb1e8f12a6497aedd12b85579b8",
      "tree": "6981fbd47997a6c3d1aec13bcc46c0631bede0dd",
      "parents": [
        "08c03eb1e6e0aca778e957bddb48a3f1152bdf67"
      ],
      "author": {
        "name": "Bart Maertens",
        "email": "bart.maertens@know.bi",
        "time": "Wed Jul 29 21:06:24 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 29 21:06:24 2026 +0200"
      },
      "message": "enrich the Oracle database connection options, fixes #7676 (#7680)"
    },
    {
      "commit": "08c03eb1e6e0aca778e957bddb48a3f1152bdf67",
      "tree": "2919ebf4b00e17abd22c10ec4db1446402f29713",
      "parents": [
        "ec6be95fd854eea29eb8ada443110b9dbe427744"
      ],
      "author": {
        "name": "kxs-mtalbi",
        "email": "mtalbi@kinaxis.com",
        "time": "Wed Jul 29 15:02:39 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 29 21:02:39 2026 +0200"
      },
      "message": "refactor plugin to throw more detailed logs at debug level and user friendly errors (#7669)"
    },
    {
      "commit": "ec6be95fd854eea29eb8ada443110b9dbe427744",
      "tree": "11c9c1db678acfa0ec0204455cb6083624056b1b",
      "parents": [
        "3cb456822740f1a1e774de65075ba92973874257"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Wed Jul 29 16:38:03 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 29 16:38:03 2026 +0200"
      },
      "message": "Evaluate rows number in a table (ActionEvalTableContent) Dialog deletes db connection property on open, fixes  #7675 (#7678)"
    },
    {
      "commit": "3cb456822740f1a1e774de65075ba92973874257",
      "tree": "b1b62ff6c3e99ab8a16663cbde8f968f34c2470d",
      "parents": [
        "1a840514514d95a5702e38049536c25bd0018872"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Wed Jul 29 16:37:49 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 29 16:37:49 2026 +0200"
      },
      "message": "[SONAR] fix security issues (#7674)"
    },
    {
      "commit": "1a840514514d95a5702e38049536c25bd0018872",
      "tree": "e20f5cf4b687594cafe21bfbb501827a81af268e",
      "parents": [
        "884f74f22d3f4d9b4e8835c7ce3e04efecde7045"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Wed Jul 29 13:06:37 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 29 13:06:37 2026 +0200"
      },
      "message": "minor spark upgrade, fixes  #7672 (#7673)"
    },
    {
      "commit": "884f74f22d3f4d9b4e8835c7ce3e04efecde7045",
      "tree": "f9075a5a9aae7d7eb5aba4fd99d991d3370565f4",
      "parents": [
        "9965ad5a787d394824010f6b041f6e2a26b29d67"
      ],
      "author": {
        "name": "Matt Casters",
        "email": "mattcasters@gmail.com",
        "time": "Wed Jul 29 10:09:21 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 29 10:09:21 2026 +0200"
      },
      "message": "Document Table Input Limit size vs SQL LIMIT, fixes #7667 (#7671)\n\nClarify that Limit size uses JDBC setMaxRows (client-side) and may be\nignored by some drivers/engines such as Generic connections to Dremio,\nwhile a SQL LIMIT clause is applied server-side and is more reliable."
    },
    {
      "commit": "9965ad5a787d394824010f6b041f6e2a26b29d67",
      "tree": "54e90ce949914f3a4cdf275988158f086eed618b",
      "parents": [
        "dc1696b126a5a507899fddc3d142bdba48be34af"
      ],
      "author": {
        "name": "Lance",
        "email": "leehaut@gmail.com",
        "time": "Wed Jul 29 14:43:50 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 29 08:43:50 2026 +0200"
      },
      "message": "Improvement#2328  Make transform/action name casing consistent (sentence case) (#7663)\n\n* Make transform/action name casing consistent (sentence case)\n\nSigned-off-by: lance \u003cleehaut@gmail.com\u003e\n\n* Make transform/action name casing consistent (sentence case)\n\nSigned-off-by: lance \u003cleehaut@gmail.com\u003e\n\n* fix names in docs too\n\n* fix ui test\n\n---------\n\nSigned-off-by: lance \u003cleehaut@gmail.com\u003e\nCo-authored-by: Hans Van Akelyen \u003chans.van.akelyen@gmail.com\u003e"
    },
    {
      "commit": "dc1696b126a5a507899fddc3d142bdba48be34af",
      "tree": "be82ef15ebb320adb94cbd9b1e2ca23257b11dc8",
      "parents": [
        "635603cb886d3708bc4911836da37bf38697902a"
      ],
      "author": {
        "name": "Matt Casters",
        "email": "mattcasters@gmail.com",
        "time": "Wed Jul 29 08:42:57 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 29 08:42:57 2026 +0200"
      },
      "message": "issue #7666: install marketplace lib/core jars (sticky on uninstall) (#7668)\n\nPlugin zips place Maven provided-scope libraries under lib/core for the\nshared system classpath. Marketplace was skipping those paths, so optional\nplugins (e.g. Azure Key Vault SecretClient) failed after install.\n\nInstall now copies lib/core entries (with a log when replacing different\ncontent). Uninstall still leaves lib/core jars in place so shared stacks\nremain available to other plugins."
    },
    {
      "commit": "635603cb886d3708bc4911836da37bf38697902a",
      "tree": "256bbd5cf567bcf55ffa7544da62b6e157881fcb",
      "parents": [
        "daee12aa1b4ccf3b280ac096d689e2bdf8be0ee7"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Tue Jul 28 15:25:05 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 28 15:25:05 2026 +0200"
      },
      "message": "Allow to open multiple pipelines or workflows, fixes  #3132 (#7665)"
    },
    {
      "commit": "daee12aa1b4ccf3b280ac096d689e2bdf8be0ee7",
      "tree": "ca4f610c4cd9dc3e051ec8e4854ef31a50c1aa7c",
      "parents": [
        "8e293199893e6312212a54ccd127daa5fb9558c1"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Tue Jul 28 15:24:42 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 28 15:24:42 2026 +0200"
      },
      "message": "Checked \"Always log rows\" in \"Abort workflow\" action leads to wrong flow of execution, fixes  #5982 (#7664)"
    },
    {
      "commit": "8e293199893e6312212a54ccd127daa5fb9558c1",
      "tree": "c8dabe32fe0702de8ecf83bf1423df72cc12b445",
      "parents": [
        "aaa919ece89329b92c0fb1c9c4b38e314b0e38ca"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Tue Jul 28 14:14:22 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 28 14:14:22 2026 +0200"
      },
      "message": "do not block project load with invalid metadata objects, fixes #7655 (#7659)"
    },
    {
      "commit": "aaa919ece89329b92c0fb1c9c4b38e314b0e38ca",
      "tree": "247578a8d81674d9e37f9341cc073255420408ff",
      "parents": [
        "3e44e3b2b8cc70b2d2dc25a3e5d46f7f58fe46b3"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Tue Jul 28 12:08:11 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 28 12:08:11 2026 +0200"
      },
      "message": "some dependency fixes (#7661)"
    },
    {
      "commit": "3e44e3b2b8cc70b2d2dc25a3e5d46f7f58fe46b3",
      "tree": "7925041c2aa47edbaafdfcb1e60d5019195aecca",
      "parents": [
        "ef18118fe7d6eca03981f3e8ad83fb0958cd5c3d"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Tue Jul 28 11:37:49 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 28 11:37:49 2026 +0200"
      },
      "message": "fix google sheet IT test (#7660)"
    },
    {
      "commit": "ef18118fe7d6eca03981f3e8ad83fb0958cd5c3d",
      "tree": "63cc64d50884af84beab8f364e549114bc37560c",
      "parents": [
        "d6ddcca7176c714645bd16e619fc5495545306af"
      ],
      "author": {
        "name": "hop-weblate",
        "email": "123085071+hop-weblate@users.noreply.github.com",
        "time": "Tue Jul 28 11:37:33 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 28 11:37:33 2026 +0200"
      },
      "message": "Translated using Weblate (Portuguese (Brazil)) (#7658)\n\nCurrently translated at 97.2% (105 of 108 strings)\n\nTranslated using Weblate (Italian)\n\nCurrently translated at 55.5% (50 of 90 strings)\n\nTranslated using Weblate (French)\n\nCurrently translated at 58.8% (53 of 90 strings)\n\n\n\nTranslate-URL: https://translate.project-hop.org/projects/apache-hop/jsonoutput/fr/\nTranslate-URL: https://translate.project-hop.org/projects/apache-hop/jsonoutput/it/\nTranslate-URL: https://translate.project-hop.org/projects/apache-hop/jsonoutputenhanced/pt_BR/\nTranslation: Apache Hop/jsonoutput\nTranslation: Apache Hop/jsonoutputenhanced\n\nCo-authored-by: Weblate \u003cnoreply@weblate.org\u003e"
    },
    {
      "commit": "d6ddcca7176c714645bd16e619fc5495545306af",
      "tree": "f60fea59681c9aa25b1fff3fe27d862de1049907",
      "parents": [
        "d578273b83c6d36d0a17a068e98a261a55c665d0"
      ],
      "author": {
        "name": "Matt Casters",
        "email": "mattcasters@gmail.com",
        "time": "Tue Jul 28 11:37:11 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 28 11:37:11 2026 +0200"
      },
      "message": "issue #7656: load old lifecycle environments without marketplace env errors (#7657)\n\n* issue #7656: do not fail enabling environments without marketplace env\n\nOld lifecycle environments have no marketplace attributes. Runtime now\ntreats missing onEnable as off, and missing envFile as a silent skip so\nproject switches no longer error when hop-env.yaml is absent.\n\n* issue #7656: never block Hop GUI when enabling a lifecycle environment\n\nMarketplace onEnable checks only warn in the GUI (including enforce).\nAny failure is caught so project/environment open always succeeds;\nhard-fail remains for non-GUI runtimes only."
    },
    {
      "commit": "d578273b83c6d36d0a17a068e98a261a55c665d0",
      "tree": "7e5c109854556fcb07c7a4e94edbac146f37084c",
      "parents": [
        "6beb2c7559dbce6b66fba36ca035dfa9661ca5f1"
      ],
      "author": {
        "name": "Matt Casters",
        "email": "mattcasters@gmail.com",
        "time": "Tue Jul 28 09:25:47 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 28 09:25:47 2026 +0200"
      },
      "message": "issue #7652: skip Nexus browse for ASF/Central Maven group URLs (#7653)\n\nLive discovery only uses Nexus REST for …/repository/\u003cname\u003e/ bases. ASF\npublic and Maven Central remain install-only so marketplace refresh after\ninstall no longer logs a stack error for repository \u0027asf\u0027."
    },
    {
      "commit": "6beb2c7559dbce6b66fba36ca035dfa9661ca5f1",
      "tree": "4331036bc85163a5b24f2604c335196dda145629",
      "parents": [
        "51f7f4166865668f945d66775ea2df9e40a93710"
      ],
      "author": {
        "name": "Matt Casters",
        "email": "mattcasters@gmail.com",
        "time": "Tue Jul 28 09:25:31 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 28 09:25:31 2026 +0200"
      },
      "message": "issue #7583 : validate system resources on lifecycle environment enable (#7651)\n\nAdd optional JVM max memory, free disk space, and CPU core requirements\non lifecycle environments. Settings live in the resources attribute group\nand are edited on a new System resources tab. Checks run on environment\nenable (GUI, hop-run, hop-server) with off/warn/enforce policy."
    },
    {
      "commit": "51f7f4166865668f945d66775ea2df9e40a93710",
      "tree": "2425eba89080bb6cf4e079feb80b6e24a89e423f",
      "parents": [
        "996f30a2512f4a41bbdc9dc93dadecb68601d9c8"
      ],
      "author": {
        "name": "Gabriel Dutra",
        "email": "gvdutra@apache.org",
        "time": "Mon Jul 27 15:37:43 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 15:37:43 2026 -0700"
      },
      "message": "Fix catalog and schema identifier quoting (#7650)"
    },
    {
      "commit": "996f30a2512f4a41bbdc9dc93dadecb68601d9c8",
      "tree": "8dd31b18cca849a322e37eda2791c68c9e4e307e",
      "parents": [
        "7e6e998a55ef30325086d8212eca242e7070cc71"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Mon Jul 27 20:18:08 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 20:18:08 2026 +0200"
      },
      "message": "fix azure pom for the marketplace plugin, fixes #7636 (#7649)"
    },
    {
      "commit": "7e6e998a55ef30325086d8212eca242e7070cc71",
      "tree": "2125b3e3e0e3e7e927f4359363111db7d715de1d",
      "parents": [
        "1fa8c23d47b1aec5a7342555d65534f4d5b7a4ee"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Mon Jul 27 18:39:04 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 18:39:04 2026 +0200"
      },
      "message": "merge hop engine types for supported transforms, fixes #7643 (#7648)"
    },
    {
      "commit": "1fa8c23d47b1aec5a7342555d65534f4d5b7a4ee",
      "tree": "c2ac637213d7de7b3e5dd2a26d9d8458a1bcc1ad",
      "parents": [
        "b371c0646d77a5644c96cd322a4b58622a1ddf97"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Mon Jul 27 18:38:49 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 18:38:49 2026 +0200"
      },
      "message": "some non-blocking UI loading debug messages, fixes  #7646 (#7647)"
    },
    {
      "commit": "b371c0646d77a5644c96cd322a4b58622a1ddf97",
      "tree": "832c5854ea3f71333673e21b2f6cbceec92c55e3",
      "parents": [
        "c2c654ad807b1868dd9cc0774a5ab78516db8b62"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Mon Jul 27 17:20:13 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 17:20:13 2026 +0200"
      },
      "message": "add support for sh and cmd files to the text editor, fixes #7640 (#7645)"
    },
    {
      "commit": "c2c654ad807b1868dd9cc0774a5ab78516db8b62",
      "tree": "e7338b503bf166a4644d83f587144eb8f9b44811",
      "parents": [
        "5ac879b66615219ac6182ffaa63e0e3eedb45aee"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Mon Jul 27 17:19:51 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 17:19:51 2026 +0200"
      },
      "message": "Rest client improvements, fixes #7621 (#7644)"
    },
    {
      "commit": "5ac879b66615219ac6182ffaa63e0e3eedb45aee",
      "tree": "358f81ca8c5734f915264c88dad20cc2e3bb4582",
      "parents": [
        "9ff5e8017f0c38622ed38c023f9dde804cf9ef5a"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Mon Jul 27 17:19:27 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 17:19:27 2026 +0200"
      },
      "message": "IT and marketplace fixes, fixes #7641 (#7642)"
    },
    {
      "commit": "9ff5e8017f0c38622ed38c023f9dde804cf9ef5a",
      "tree": "a974b4feeaf277ec37c06cf9c8fe3354e1bd1260",
      "parents": [
        "adb079097c75d2e2323b9d4e4cdfecf8b6b98ccf"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Mon Jul 27 10:51:23 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 10:51:23 2026 +0200"
      },
      "message": "Add marketplace component, fixes #7635 (#7639)"
    },
    {
      "commit": "adb079097c75d2e2323b9d4e4cdfecf8b6b98ccf",
      "tree": "a0cdad62e20f1985a102cf1cb594b790d8916930",
      "parents": [
        "0c16330bc90d56bb36a36569477831e29809f0ee"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Mon Jul 27 10:51:10 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 10:51:10 2026 +0200"
      },
      "message": "change script to use loop in stead of mapfile, fixes #7637 (#7638)"
    },
    {
      "commit": "0c16330bc90d56bb36a36569477831e29809f0ee",
      "tree": "a5b6a161468efeb8708b27cc6770a3121bb8963a",
      "parents": [
        "35f71c893143c7050f72eac8ed1ff8b5c700b95b"
      ],
      "author": {
        "name": "Lance",
        "email": "leehaut@gmail.com",
        "time": "Mon Jul 27 15:42:52 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 09:42:52 2026 +0200"
      },
      "message": "Add YAML file type support in Explorer perspective (#7632)\n\nSigned-off-by: lance \u003cleehaut@gmail.com\u003e"
    },
    {
      "commit": "35f71c893143c7050f72eac8ed1ff8b5c700b95b",
      "tree": "738b53f5b7dade95783b9004e1572437226c4f65",
      "parents": [
        "7b4bbb88a29f4026fa6e98e4e8aeccda7dc856dd"
      ],
      "author": {
        "name": "Matt Casters",
        "email": "mattcasters@gmail.com",
        "time": "Sun Jul 26 18:23:33 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 26 18:23:33 2026 +0200"
      },
      "message": "issue #7547: a Hop marketplace (#7577)\n\n* issue #7547: marketplace plugin, lean client, optional Wave 1 plugins\n\nSplit heavy plugins out of the default client so ASF Artifactory stays\nunder the ~850MB package limit. Add a bundled marketplace plugin with\nCLI install/list/uninstall, keep lib/beam in core while making the Beam\nengine plugin optional, and add local Artifactory tooling plus a CI\nassembly size check.\n\n* issue #7547: marketplace GUI and Wave 1 plugins for IT/Docker\n\nAdd Tools → Marketplace dialog for install/uninstall of optional\nplugins, a Wave 1 catalog, and install-wave1-plugins.sh wired into\nJenkins and run-tests-docker so integration tests still get spark,\nbeam, cassandra, and other marketplace-only plugins.\n\n* issue #7547: hop-env.yaml apply/validate and hop-run drift check\n\nAdd declarative environment files for marketplace plugins and JDBC\ndependencies: apply (--prune), validate, sample hop-env.yaml, and an\noptional HopRunStart enforcement when enforceOnRun is set.\n\n* issue #7547: provide Artifactory master key for local marketplace stack\n\nGenerate and mount keys/master.key (openssl rand -hex 32, mode 600,\nowner 1030:1030) so JFrog Artifactory OSS no longer hangs at startup.\n\n* issue #7547: add Artifactory join.key so local stack can start\n\nSingle-node OSS still requires a join key; generate and mount both\nmaster.key and join.key (64-char hex, 600, 1030:1030) and point\nJF_SHARED_SECURITY_JOIN_KEY_FILE at the mount.\n\n* issue #7547: run Artifactory OSS with PostgreSQL and env keys\n\nModern Artifactory 7.x requires Postgres (no embedded DB). Add a\npostgres service, pass master/join keys via .env (not RO file mounts),\nfix master key size to AES-128 (hex-16), and add start.sh --reset.\n\n* issue #7547: Basic auth for marketplace downloads (Artifactory 401)\n\nSend HTTP Basic credentials when installing plugins so private Maven\nrepos work. Prefer HOP_MARKETPLACE_USERNAME/PASSWORD (or ARTIFACTORY_*)\nover storing secrets in hop-config.json.\n\n* issue #7547: configure Artifactory anonymous read for marketplace installs\n\nAdd configure-anonymous-read.sh and document the intended security model:\nadmin only for publish; anonymous read-only on hop-plugins-local for Hop\ndownloads (no admin credentials in hop-config).\n\n* issue #7547: Artifactory OSS anonymous setup via UI (no Pro REST)\n\nRepository create REST is Pro-only on Artifactory OSS. Rewrite\nconfigure-anonymous-read.sh to document UI steps and verify anonymous\nread instead of calling Pro APIs.\n\n* issue #7547: document Artifactory OSS UI-only repo/anonymous setup\n\nClarify that create-repository REST is Pro-only and point users at\nthe UI steps; keep configure-anonymous-read.sh as a verifier.\n\n* issue #7547: JFrog Platform UI guide with deep links for OSS setup\n\nDocument Administration module switching and deep links for\nrepositories, anonymous access (Security → General), and permissions.\nStop implying old \"User Management → Settings\" paths as primary.\n\n* issue #7547: replace JFrog local stack with Sonatype Nexus OSS\n\nAdd docker/marketplace-nexus with scripted bootstrap (anonymous read,\nhosted hop-plugins repo), publish Wave 1 zips, and SNAPSHOT resolution\nvia maven-metadata.xml. Remove docker/marketplace-artifactory entirely.\n\n* issue #7547: fix Hop home when HOP_HOME is a relative path\n\nRelative HOP_HOME values were resolved against the current directory,\ndoubling paths like assemblies/client/target/hop when already inside\nthe install. Prefer any candidate that contains plugins/, including cwd.\n\n* issue #7547: simplify marketplace install root and add Nexus smoke test\n\nResolve the client install from process cwd (hop launchers already cd there),\ndrop HOP_HOME/hop.home indirection, clarify hop-config is always under\nHOP_CONFIG_FOLDER, improve 401 auth errors, and add an anonymous Nexus CLI\nsmoke script for install/list/validate/apply/uninstall.\n\n* issue #7547: ASF primary repos, marketplace repo CLI/GUI, install fallback\n\nPre-configure repository.apache.org as primary with Maven Central fallback,\nadd hop marketplace repo commands and Manage Repositories dialog, try\nenabled repos in order on install, and report disabled IT projects as\nskipped instead of a false docker environment failure.\n\n* issue #7547: document marketplace, release plugin zips, and size gate\n\nAdd user-manual marketplace page, release-manager notes for deploying\noptional plugin zips to ASF Nexus, and packaging/size guidance for the\nlean hop-client.\n\n* issue #7547: document hop marketplace apply/validate and hop-env.yaml\n\nExpand the user-manual marketplace page with apply and validate options,\nfile discovery, hop-run enforcement, and a full hop-env.yaml field\nreference with examples.\n\n* issue #7547: ship full-client-env.yaml from optional-plugins registry\n\nAdd optional-plugins.yaml as the source of truth for marketplace-optional\nplugins, generate full-client-env.yaml at build time, package it at the Hop\ninstall root (and samples), load the GUI catalog from the registry, and\ndocument one-command restore of the previous full plugin set.\n\n* issue #7547: GUI Apply/Validate for hop-env environment files\n\nAdd environment file path, Browse, Validate, and Apply to the Marketplace\ndialog (with Prune and Strict options matching the CLI), pre-fill\nfull-client-env.yaml when present, and document the GUI flow.\n\n* issue #7547 : RAT\n\n* issue #7547: move Beam SDKs to plugins/engines/beam/lib-beam\n\nPackage Beam runners/libraries with the standard Beam marketplace plugin\nunder lib-beam instead of lib/beam. Slim client libs keep spark-client and\nshared lib/core extras. Launch scripts add lib-beam only when present.\nMaven profile -Pbeam bakes the full Beam plugin into hop-client for IT/dev.\n\n* issue #7547: add hop marketplace query for optional plugin catalog\n\nAdd CLI query FILTER to search the local optional-plugins registry by\ncase-insensitive substring across artifact id, name, category, description,\nand install path, with optional [installed] markers and docs.\n\n* issue #7547: document publishing third-party plugins to private Nexus\n\nAdd a developer-manual guide for packaging marketplace-compatible plugin\nzips, declaring Hop version and plugin dependencies, configuring Nexus,\nand automating releases with a template script for a specific plugin version.\n\n* issue #7547 : RAT\n\n* issue #7547: tabbed marketplace GUI, projects integration, and docs\n\nImprove the marketplace GUI with Plugins/Environment/Repositories tabs,\ninline repository and hop-env editors, search, and TableView lists.\nAdd AttributesContext and IAttributes-based lifecycle environment hooks so\nmarketplace can validate or enforce hop-env on project enable without a hard\ndependency between plugins. Include GUI screenshots, user manual updates,\n13 locale translations, and related tooling.\n\n* issue #7547 : spotless\n\n* issue #7547 : SNAPSHOT plugin zip publish path and CI confidence checks\n\nEnable Jenkins wagon upload of marketplace plugin zips, keep release\nplugin assemblies, and add scripts/docs to verify file:// deploy layout\nbefore merging to main.\n\n* Issue #7547 : marketplace improvements"
    },
    {
      "commit": "7b4bbb88a29f4026fa6e98e4e8aeccda7dc856dd",
      "tree": "0aeb8cc3929b5cfa25563262820239af0843b012",
      "parents": [
        "4d3bdd02a7271dc3c6966d16933806011db08613"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Fri Jul 24 18:30:33 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 18:30:33 2026 +0200"
      },
      "message": "value mapper dialog did not work correctly in hop web, fixes #4475 (#7629)"
    },
    {
      "commit": "4d3bdd02a7271dc3c6966d16933806011db08613",
      "tree": "4dd7b650afd52890a49e853c5de51d031c74a80d",
      "parents": [
        "c5414eced361e796c4a673391714542514d314e2"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Fri Jul 24 18:30:17 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 18:30:17 2026 +0200"
      },
      "message": "improve about dialog, fixes #2699 (#7628)"
    },
    {
      "commit": "c5414eced361e796c4a673391714542514d314e2",
      "tree": "7c1c9ef8e36aa632c47de29442cceeaac7b4d935",
      "parents": [
        "0b7e777c56df5cddc61efcaf38e68067c0c07205"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Fri Jul 24 17:43:57 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 17:43:57 2026 +0200"
      },
      "message": "Run Options variables in pipeline do not appear anymore, fixes  #2481 (#7627)"
    },
    {
      "commit": "0b7e777c56df5cddc61efcaf38e68067c0c07205",
      "tree": "c6a8356ce833e5fd03a7f35152d86f66f37f2cde",
      "parents": [
        "3ba4be3cf61fc7786fc12e76408a98437d108384"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Fri Jul 24 17:43:40 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 17:43:40 2026 +0200"
      },
      "message": "fix IllegalArgumentException in hop web, fixes #3508 (#7626)"
    },
    {
      "commit": "3ba4be3cf61fc7786fc12e76408a98437d108384",
      "tree": "13530169f62968edc375d295de419b9fe8f8813b",
      "parents": [
        "a131da15a5feb7d4a7d5e78d120cb89d9d5c49f8"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Fri Jul 24 17:25:38 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 17:25:38 2026 +0200"
      },
      "message": "unzip action wildcard support, fixes #5943 (#7625)"
    },
    {
      "commit": "a131da15a5feb7d4a7d5e78d120cb89d9d5c49f8",
      "tree": "8d58a3965c1604d22fff36dbbed9550d8dd982d5",
      "parents": [
        "98a913079a2b0c6806ba2668347f8e5cf422a2a8"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Fri Jul 24 17:25:23 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 17:25:23 2026 +0200"
      },
      "message": "improve variable dialog, fixes #7623 (#7624)"
    },
    {
      "commit": "98a913079a2b0c6806ba2668347f8e5cf422a2a8",
      "tree": "a80595128e20cfc74a170271d7738aa7191ccc8e",
      "parents": [
        "634494328264c742d0e023359315794808743025"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Fri Jul 24 17:25:07 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 17:25:07 2026 +0200"
      },
      "message": "Import of generic database connection does not include jdbc connection string, fixes  #5383 (#7622)"
    },
    {
      "commit": "634494328264c742d0e023359315794808743025",
      "tree": "49595dc3d76fe6aa20d6b01b37233e0c3450826e",
      "parents": [
        "00b2b67e9fdddbc89bbd1d9bc61c5d395a0de7fb"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Fri Jul 24 17:24:44 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 17:24:44 2026 +0200"
      },
      "message": "Add append support for GCS, fixes #7619 (#7620)"
    },
    {
      "commit": "00b2b67e9fdddbc89bbd1d9bc61c5d395a0de7fb",
      "tree": "3b2c987a9cebe901375201e5bd72f01b2ad0c6ef",
      "parents": [
        "e60021c8e296c6cdcfa9eb9ec6f88d5c0464ddc8"
      ],
      "author": {
        "name": "Lance",
        "email": "leehaut@gmail.com",
        "time": "Fri Jul 24 20:21:58 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 14:21:58 2026 +0200"
      },
      "message": "Fix#7604  show variable picker icons in run configuration Variables tables (#7608)\n\n* Fix show variable picker icons in run configuration Variables tables\n\nSigned-off-by: lance \u003cleehaut@gmail.com\u003e\n\n* Fix show variable picker icons in run configuration Variables tables\n\nSigned-off-by: lance \u003cleehaut@gmail.com\u003e\n\n---------\n\nSigned-off-by: lance \u003cleehaut@gmail.com\u003e"
    },
    {
      "commit": "e60021c8e296c6cdcfa9eb9ec6f88d5c0464ddc8",
      "tree": "11893e63603ad5bf21d604eb826c2b369745cb9a",
      "parents": [
        "ccea73dee7fa20fdd9f88a87c5d6bb0856def2a7"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Fri Jul 24 13:08:42 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 13:08:42 2026 +0200"
      },
      "message": "add ability to select values in the showRowsDialog, fixes #7444 (#7618)"
    },
    {
      "commit": "ccea73dee7fa20fdd9f88a87c5d6bb0856def2a7",
      "tree": "2109af53e10136de5c0555fb01a0aa1c283afe84",
      "parents": [
        "749b9e47944cdd37776a32a056fcd2931ff4881e"
      ],
      "author": {
        "name": "Lance",
        "email": "leehaut@gmail.com",
        "time": "Fri Jul 24 18:16:23 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 12:16:23 2026 +0200"
      },
      "message": "Improve Reset/Clear button layout on General configuration tab (#7600)\n\nSigned-off-by: lance \u003cleehaut@gmail.com\u003e"
    },
    {
      "commit": "749b9e47944cdd37776a32a056fcd2931ff4881e",
      "tree": "70aee17e62d5c5305fac7e338b6e2daaf26f5fa3",
      "parents": [
        "4b40260151fe9bdbf769b5875120585bc0ad7348"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Fri Jul 24 10:23:22 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 10:23:22 2026 +0200"
      },
      "message": "expose ssh tunnel port, fixes #7450 (#7609)"
    },
    {
      "commit": "4b40260151fe9bdbf769b5875120585bc0ad7348",
      "tree": "2f92b44dc20cc95adf5446c2cb9b9fe44d81e9df",
      "parents": [
        "0ee1c6d27baa8c1f36ebb0fb266dfa0e11980668"
      ],
      "author": {
        "name": "Nicolas Adment",
        "email": "39568358+nadment@users.noreply.github.com",
        "time": "Fri Jul 24 09:38:12 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 09:38:12 2026 +0200"
      },
      "message": "Add keyboard shortcut to expand and collapse all in explore and metadata perspective #7601 (#7602)"
    },
    {
      "commit": "0ee1c6d27baa8c1f36ebb0fb266dfa0e11980668",
      "tree": "2da2d4b85c70704ef52bec1f00048e8a973b82ba",
      "parents": [
        "256a05d03b2667616fc0f2047871519dd3833a17"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Fri Jul 24 09:37:35 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 09:37:35 2026 +0200"
      },
      "message": "hardening on lineagehub, fixes #7605 (#7607)"
    },
    {
      "commit": "256a05d03b2667616fc0f2047871519dd3833a17",
      "tree": "462f356eb53fef2429363f9c82083ffe9a45115c",
      "parents": [
        "bb745a92b9700009cfe339c259c49a9c246d6d96"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Jul 24 09:35:06 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 09:35:06 2026 +0200"
      },
      "message": "Bump com.fasterxml.jackson.core:jackson-databind in /lib (#7617)\n\nBumps [com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson) from 2.21.4 to 2.21.5.\n- [Commits](https://github.com/FasterXML/jackson/commits)\n\n---\nupdated-dependencies:\n- dependency-name: com.fasterxml.jackson.core:jackson-databind\n  dependency-version: 2.21.5\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "bb745a92b9700009cfe339c259c49a9c246d6d96",
      "tree": "1833c1a790de9f0c4eb4d12f0e6986aae922e755",
      "parents": [
        "539f7dcd681774ca44ef7f428debc74120e11c15"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Jul 24 09:34:39 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 09:34:39 2026 +0200"
      },
      "message": "Bump org.eclipse.jetty:jetty-server from 12.1.9 to 12.1.10 in /lib (#7613)\n\nBumps org.eclipse.jetty:jetty-server from 12.1.9 to 12.1.10.\n\n---\nupdated-dependencies:\n- dependency-name: org.eclipse.jetty:jetty-server\n  dependency-version: 12.1.10\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "539f7dcd681774ca44ef7f428debc74120e11c15",
      "tree": "1833c1a790de9f0c4eb4d12f0e6986aae922e755",
      "parents": [
        "5032d6444b63d323fc306d63ccbccc43a5c4fcc9"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Jul 24 09:34:23 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 09:34:23 2026 +0200"
      },
      "message": "Bump org.eclipse.jetty:jetty-security from 12.1.9 to 12.1.10 in /lib (#7612)\n\nBumps org.eclipse.jetty:jetty-security from 12.1.9 to 12.1.10.\n\n---\nupdated-dependencies:\n- dependency-name: org.eclipse.jetty:jetty-security\n  dependency-version: 12.1.10\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "5032d6444b63d323fc306d63ccbccc43a5c4fcc9",
      "tree": "d6911f6b4b963cfaaec6d2bc2b98831ffcf2a772",
      "parents": [
        "6def82087b92cf43a229aafe1c18100b31c078c2"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Jul 24 09:32:19 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 09:32:19 2026 +0200"
      },
      "message": "Bump com.fasterxml.jackson.core:jackson-core from 2.21.1 to 2.21.4 (#7614)\n\nBumps [com.fasterxml.jackson.core:jackson-core](https://github.com/FasterXML/jackson-core) from 2.21.1 to 2.21.4.\n- [Commits](https://github.com/FasterXML/jackson-core/compare/jackson-core-2.21.1...jackson-core-2.21.4)\n\n---\nupdated-dependencies:\n- dependency-name: com.fasterxml.jackson.core:jackson-core\n  dependency-version: 2.21.4\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "6def82087b92cf43a229aafe1c18100b31c078c2",
      "tree": "8d7047070999921592e1a4840f45ff9e8887193e",
      "parents": [
        "72b68be2ebb2ec50655485b0207ef8fe02b35452"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Jul 24 09:32:03 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 09:32:03 2026 +0200"
      },
      "message": "Bump org.eclipse.jetty:jetty-util from 12.1.7 to 12.1.9 in /lib (#7615)\n\nBumps org.eclipse.jetty:jetty-util from 12.1.7 to 12.1.9.\n\n---\nupdated-dependencies:\n- dependency-name: org.eclipse.jetty:jetty-util\n  dependency-version: 12.1.9\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "72b68be2ebb2ec50655485b0207ef8fe02b35452",
      "tree": "bcedfa395a9aea9e24c3eeafadb466d9ff038612",
      "parents": [
        "1abc6530dfe6f43b920c098888cc7ab582b04a13"
      ],
      "author": {
        "name": "hma (Atol CD)",
        "email": "hma@atolcd.com",
        "time": "Thu Jul 23 20:06:00 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 20:06:00 2026 +0200"
      },
      "message": "issue #4366: Bug fix in transform Formula (#7606)\n\nThanks for the fix and the extra integration test @helorymarceau!"
    },
    {
      "commit": "1abc6530dfe6f43b920c098888cc7ab582b04a13",
      "tree": "0aebfcda7784d8cc03721854fe9e864dadd0a044",
      "parents": [
        "8441a1897ada1feb4b0eff7969265b8cc4f10309"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Jul 23 20:04:43 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 20:04:43 2026 +0200"
      },
      "message": "Bump org.postgresql:postgresql from 42.7.11 to 42.7.12 in /lib-jdbc (#7611)\n\nBumps [org.postgresql:postgresql](https://github.com/pgjdbc/pgjdbc) from 42.7.11 to 42.7.12.\n- [Release notes](https://github.com/pgjdbc/pgjdbc/releases)\n- [Changelog](https://github.com/pgjdbc/pgjdbc/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/pgjdbc/pgjdbc/compare/REL42.7.11...REL42.7.12)\n\n---\nupdated-dependencies:\n- dependency-name: org.postgresql:postgresql\n  dependency-version: 42.7.12\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "8441a1897ada1feb4b0eff7969265b8cc4f10309",
      "tree": "24aa62fc5c1ec1024e253848bd30ad3343d8f073",
      "parents": [
        "7b97a601fc3772e13d02bfee6d0d1e3c9373cc5b"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Thu Jul 23 16:50:18 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 16:50:18 2026 +0200"
      },
      "message": "small doc fix (#7610)"
    },
    {
      "commit": "7b97a601fc3772e13d02bfee6d0d1e3c9373cc5b",
      "tree": "10db6e1354e1ecab20eca9fa237075e952f01eae",
      "parents": [
        "029c173ae1c6338d996afc29816fa1726b441eb0"
      ],
      "author": {
        "name": "Matt Casters",
        "email": "mattcasters@gmail.com",
        "time": "Wed Jul 22 16:46:03 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 16:46:03 2026 +0200"
      },
      "message": "issue #3526 : add Favorites category for transforms and actions (#7598)"
    },
    {
      "commit": "029c173ae1c6338d996afc29816fa1726b441eb0",
      "tree": "da4a330383b97ea86fed62b77dfc2fcd7fa54b25",
      "parents": [
        "f43d55807d9e510538079280a31941148104aef4"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Wed Jul 22 15:59:12 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 15:59:12 2026 +0200"
      },
      "message": "small multi-line improvements, fixes #7462 (#7591)\n\n* small multi-line improvements, fixes #7462\n\n* fix hop web"
    },
    {
      "commit": "f43d55807d9e510538079280a31941148104aef4",
      "tree": "8e8f635ec4761d335b784cff31d6e6d529deff69",
      "parents": [
        "f10a47771495187401088c164a59db098f58259a"
      ],
      "author": {
        "name": "Matt Casters",
        "email": "mattcasters@gmail.com",
        "time": "Wed Jul 22 15:05:50 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 15:05:50 2026 +0200"
      },
      "message": "issue #3553 : auto-export project metadata to a single JSON file (#7597)\n\nOptionally write metadata.json (or a user-specified path) when a project\nis enabled or hop metadata is created, updated, or deleted. Opt-in per\nproject; reuses extension points and SerializableMetadataProvider."
    },
    {
      "commit": "f10a47771495187401088c164a59db098f58259a",
      "tree": "d836166a4df2dd7205c299dbf2ce761599ef5010",
      "parents": [
        "9177c6c362405ae5ecd7015a7899f171642ee5ae"
      ],
      "author": {
        "name": "Matt Casters",
        "email": "mattcasters@gmail.com",
        "time": "Wed Jul 22 15:02:24 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 15:02:24 2026 +0200"
      },
      "message": "issue #3137 : sample target hops and show data preview icons on hop arrows (#7595)\n\nAdd IRowToListener so putRowTo destinations (Filter, Switch/Case, etc.) can\nbe sampled separately by hop. Draw clickable data-grid icons on hops near the\nsource transform for full pipeline transparency."
    },
    {
      "commit": "9177c6c362405ae5ecd7015a7899f171642ee5ae",
      "tree": "449b5f2c03737af0f7573a6b1ba73496d8ec536a",
      "parents": [
        "d98c6e73815414992ab63b3afa12fb63d75d78ee"
      ],
      "author": {
        "name": "Nicolas Adment",
        "email": "39568358+nadment@users.noreply.github.com",
        "time": "Tue Jul 21 22:14:48 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 22:14:48 2026 +0200"
      },
      "message": "Fix for the change made to metadata categories #7590 (#7596)"
    },
    {
      "commit": "d98c6e73815414992ab63b3afa12fb63d75d78ee",
      "tree": "04baffb38357e8f44cb52d454f4e6ce32fcdb29b",
      "parents": [
        "394947fbcb88981a494646ae03e8fb5cd37ece38"
      ],
      "author": {
        "name": "Nicolas Adment",
        "email": "39568358+nadment@users.noreply.github.com",
        "time": "Tue Jul 21 21:20:29 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 21:20:29 2026 +0200"
      },
      "message": "Small change to metadata categories #7590 (#7594)"
    },
    {
      "commit": "394947fbcb88981a494646ae03e8fb5cd37ece38",
      "tree": "a31b452bd713d91247638af85b5603a660d72fd6",
      "parents": [
        "6850757c34519a37502120d0b0090800ed6988a8"
      ],
      "author": {
        "name": "Matt Casters",
        "email": "mattcasters@gmail.com",
        "time": "Tue Jul 21 11:02:10 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 11:02:10 2026 +0200"
      },
      "message": "issues #7585, #7586, #7116 : Projects improvements (#7588)\n\n* issue #7585 : Open File dialog browse inside archives (zip/jar/tar)\n\nAdd a Drill into toolbar button on the VFS file browser so users can\nopen supported Commons VFS archives without hand-editing URIs.\n\n* issue #7586: read-only projects and as-is zip export (#7585)\n\nAdd a GUI option to open projects in read-only mode (no project-config.json\nwrites), auto-enabled for archive URIs, with validation that the config file\nexists. Export can write projects as-is to the zip root for that workflow.\n\nAlso extend VFS directory/file browsing so archives appear when choosing a\nfolder, double-click drills into zip/jar/tar, and OK still selects the archive\nas a file. Fixes FileTree checkbox cascade so export selection works.\n\nCloses #7586\nCloses #7585\n\n* Issue #7116 : improve project organization in Apache Hop Project Manager"
    },
    {
      "commit": "6850757c34519a37502120d0b0090800ed6988a8",
      "tree": "9ab456c0fd43774330587314940af0d4504ed64d",
      "parents": [
        "2dd7a87aa3d95eacea0afa11a7760ee8a11cc885"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Mon Jul 20 18:58:18 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 18:58:18 2026 +0200"
      },
      "message": "more options for splitting tabs and moving to external view, fixes #6708 (#7580)"
    },
    {
      "commit": "2dd7a87aa3d95eacea0afa11a7760ee8a11cc885",
      "tree": "43f09729b8cbccba8759da1e5da092415e8af3b4",
      "parents": [
        "ef9d6484e2e3e7afb1184b25132e29f85019b58d"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jul 20 17:34:24 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 17:34:24 2026 +0200"
      },
      "message": "Bump com.fasterxml.jackson.core:jackson-databind in /lib (#7561)\n\nBumps [com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson) from 2.21.1 to 2.21.5.\n- [Commits](https://github.com/FasterXML/jackson/commits)\n\n---\nupdated-dependencies:\n- dependency-name: com.fasterxml.jackson.core:jackson-databind\n  dependency-version: 2.21.5\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "ef9d6484e2e3e7afb1184b25132e29f85019b58d",
      "tree": "ca40135bbeece836291f4e497494a6eb2ecf3d16",
      "parents": [
        "70805d51dc94e5d19534170d0db66270ccec5a27"
      ],
      "author": {
        "name": "Matt Casters",
        "email": "mattcasters@gmail.com",
        "time": "Mon Jul 20 17:26:57 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 17:26:57 2026 +0200"
      },
      "message": "issue #7582 : fix IT write permissions and ExecProcess single-command exec (#7584)\n\n* issue #7582 : fix IT write permissions and ExecProcess single-command exec\n\nHarden integration-test Docker prep so project output/, files/, and roots\nare writable under the container UID, and move generated spreadsheet/MDI/\nparquet/http artifacts into world-writable output/ paths (with golden data\nand gitignore updates). Also restore Runtime.exec(String) for ExecProcess\nsingle-command mode so command lines are tokenized again (#7565 regression).\n\n* issue #7582 : adopt StringTokenizer-based ExecProcess fix from #7581\n\nUse explicit whitespace tokenization before Runtime.exec(String[]) for\nsingle-command mode (avoids the deprecated String overload), and add a\nunit test for tokenizeCommandLine. Credit: @leehaut in #7581."
    },
    {
      "commit": "70805d51dc94e5d19534170d0db66270ccec5a27",
      "tree": "37987c099e3aee71624e3e57a757816b5d41c4be",
      "parents": [
        "47054d4272a1965bef6dd6cd81274c1540c87ed7"
      ],
      "author": {
        "name": "Lance",
        "email": "leehaut@gmail.com",
        "time": "Mon Jul 20 23:25:50 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 17:25:50 2026 +0200"
      },
      "message": "Fix ExecProcess command-line tokenization after (#7581)\n\nSigned-off-by: lance \u003cleehaut@gmail.com\u003e"
    },
    {
      "commit": "47054d4272a1965bef6dd6cd81274c1540c87ed7",
      "tree": "bcedbaa44a38905565ba89afd6d935276bef3c40",
      "parents": [
        "3e21c0cd346002ae98b909f9b60cee7312fd3640"
      ],
      "author": {
        "name": "Lance",
        "email": "leehaut@gmail.com",
        "time": "Mon Jul 20 18:53:10 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 12:53:10 2026 +0200"
      },
      "message": "Add option to omit failed values from Data Validator log messages (#7570)\n\nSigned-off-by: lance \u003cleehaut@gmail.com\u003e"
    },
    {
      "commit": "3e21c0cd346002ae98b909f9b60cee7312fd3640",
      "tree": "5c994bcb5936c4c728ab1917b77602dedc9f16f5",
      "parents": [
        "775b7bd3159d6ea1f2187bd603d4d4767a1f37d6"
      ],
      "author": {
        "name": "Lance",
        "email": "leehaut@gmail.com",
        "time": "Mon Jul 20 18:52:36 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 12:52:36 2026 +0200"
      },
      "message": "Fix Database Lookup return type inference when Type is empty (#7574)\n\nSigned-off-by: lance \u003cleehaut@gmail.com\u003e"
    },
    {
      "commit": "775b7bd3159d6ea1f2187bd603d4d4767a1f37d6",
      "tree": "e5fcda998d53c8365ab4249a70597eed1aa789db",
      "parents": [
        "e734a122f0badcdf20bb510e7e5bdf893ec78487"
      ],
      "author": {
        "name": "Matt Casters",
        "email": "mattcasters@gmail.com",
        "time": "Mon Jul 20 12:52:13 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 12:52:13 2026 +0200"
      },
      "message": "issue #7567 : VFS support for Databricks UC Volumes (Files API) (#7575)\n\n* issue #7567 : VFS support for Databricks UC Volumes (Files API)\n\nAdd a named Databricks VFS connection (scheme \u003d metadata name, auth via\nDatabricks Connection, optional root path) and Commons VFS provider over\nthe workspace Files API for browse/read/write/list/mkdir/rename/delete.\nExtract RestDatabricksFilesClient for Jobs deploy and VFS; log Move Files\nexceptions with full stack; document Hop-side vs Spark path dialect.\n\n* issue #7567 : use Databricks logo for connection icon; drop unused SVGs\n\nReplace the simplified connection icon with the Databricks brand mark and\nremove unused job-run/job-wait/logo SVG duplicates.\n\n* Issue #7567 : VFS support for Databricks Unity Catalog Volumes\n\n* Issue #7567 : remote execution info on Databricks UC Volumes\n\nPublish MainSpark exported metadata for named VFS schemes, cache Files\nAPI last_modified on VFS children, and skip mtime pre-filter only when\nknown so Caching File locations on Volumes list correctly in the GUI.\n\nDocument the Caching File + db-volume pattern with screenshots and\ncross-links from VFS, execution location, and Execution Information."
    },
    {
      "commit": "e734a122f0badcdf20bb510e7e5bdf893ec78487",
      "tree": "5c078f08ac95486abecef55e6ca702e5ddf1c1ad",
      "parents": [
        "6dbab9a74046d042e87b93e7535af119f43b4296"
      ],
      "author": {
        "name": "Matt Casters",
        "email": "mattcasters@gmail.com",
        "time": "Mon Jul 20 12:45:53 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 12:45:53 2026 +0200"
      },
      "message": "Issue #2742 : multi-transform unit test tweaks and editor support (#7573)\n\nApply Bypass/Remove/Include unit-test tweak actions to all selected\ntransforms, not only the right-clicked one. Rework PipelineUnitTestEditor\ninto General, Database, Parameters \u0026 Variables, and Tweaks tabs so stored\ntweaks are visible and editable in metadata."
    },
    {
      "commit": "6dbab9a74046d042e87b93e7535af119f43b4296",
      "tree": "8d82a3ebd5f9ee44bea563562807cacc6face521",
      "parents": [
        "1f54fa024e00fcde596f6b4b2e332abf5122eab4"
      ],
      "author": {
        "name": "Matt Casters",
        "email": "mattcasters@gmail.com",
        "time": "Mon Jul 20 12:43:37 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 12:43:37 2026 +0200"
      },
      "message": "issue #7549 : content editor toolbar/context menu (help for #7550) (#7576)\n\n* Add a context menu and missing capability to the text editor #7549\n\n* issue #7549 : fix content editor toolbar for RAP and Markdown preview\n\nUnblock PR #7550 by addressing the three gaps Nicolas hit:\n\n- RAP implements getLanguage() and builds the shared ContentEditor\n  toolbar so plugin actions (Markdown preview) appear in hop-web.\n- BaseGuiWidgets resolves static toolbar listeners with assignable\n  parameter types (interface/facade), so previewMarkdown(IContentEditorWidget)\n  works when the registered instance is ContentEditorWidget or RAP widgets.\n- Markdown preview is a static listener taking IContentEditorWidget;\n  dedupe content-editor i18n keys.\n\n* issue #7549 : shared content-editor toolbar actions for Hop Web\n\nMove ContentEditor-Toolbar @GuiToolbarElement handlers to a ui-module\nGuiPlugin (ContentEditorActions) so Hop Web registers undo/copy/etc.\nwithout loading hop-ui-rcp.\n\n- Extend IContentEditorWidget with cut/paste/undo/redo\n- RCP ContentEditorWidget keeps context menu + keyboard shortcuts\n- RAP implements new ops (Text cut/paste; Monaco no-ops for now)\n- Exclude hop-ui-rcp from Hop Web image (fixes Tomcat 404 startup)\n- Skip ContentEditorWidget GuiPlugin scan on web as defense in depth\n\n* issue #7549 : Markdown preview on Hop Web via in-app Browser dialog\n\nTemp file:// URLs open on the client browser, so server-side temp HTML\nnever displays in Hop Web. Use ShowBrowserDialog for the RAP case;\ndesktop keeps the system browser + temp file path.\n\nAlso surface InvocationTargetException from static toolbar listeners\ninstead of silently falling through to a failed instance-method path.\n\n* issue #7549 : Monaco dark theme for Hop Web content editors\n\nPass PropsUi dark mode into the Monaco remote widget as theme vs-dark\nor vs (same pattern as canvas themeId). monaco-editor.js honors the\ntheme property on create and via setTheme.\n\n---------\n\nCo-authored-by: Nicolas Adment \u003c39568358+nadment@users.noreply.github.com\u003e"
    },
    {
      "commit": "1f54fa024e00fcde596f6b4b2e332abf5122eab4",
      "tree": "1ca5cd9eb9e7566502c3261b253e576ccd29e0a1",
      "parents": [
        "9f499d2d9b9ef2f3f438021be59fdc85ff2b76ec"
      ],
      "author": {
        "name": "Matt Casters",
        "email": "mattcasters@gmail.com",
        "time": "Mon Jul 20 12:42:42 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 12:42:42 2026 +0200"
      },
      "message": "Reduce friction (#7572)\n\n* issue #2292 : Make the empty execution locations tree more welcoming\n\n* issue #2195 : Execution Information : Add a button to copy the folder URI to the clipboard\n\n* Issue #2069 : More Info Fields in Pipeline Execution Information\n\n* Issue #2637 : Allow Custom Logging dialog to accept a variable to define logging level\n\n* Issue #2400 : As a Developer I would like to be able to generate database connection parameters\n\n* Issue #2351 : execution information perspective tabs are not stored correctly with the project\n\n* Issue #2308 : environment Background Colour Configuration\n\n* Issue #2331 : Add variable PARENT_PROJECT_HOME\n\n* Issue #2596 : add parent project support to Docker basic image\n\nRegister an optional one-level parent project in the container via\nHOP_PARENT_PROJECT_NAME/FOLDER so child projects inherit parent\nmetadata. Preserve existing parentProjectName when keeping config files.\n\n* Issue #2931 : expanded integer notation for large count/size fields\n\nAdd Const.expandIntegerString / toIntExpanded / toLongExpanded so users can\nenter large integers with grouping separators (100,000,000), k/m/g/b suffixes\n(100m), and scientific forms (1e8, 1x10^8). Opt-in at row limits, sort/buffer\nsizes, commit/batch sizes, and related parse sites without changing strict\ntoInt/toLong.\n\nAdd a TextVar # indicator (next to $) with tooltip documenting the formats\non dialogs that use expanded parsing.\n\n* Issue #2710 : Provide a way to display and output variables a project depends on\n\n* issue #2597 : replace browsed paths with matching env/project path variables\n\nExpand HopGui file/directory browse replacement beyond PROJECT_HOME so the\nlongest matching path-like variable from the active project or environment\nconfiguration is rewritten (e.g. SOURCE_FILES).\n\n* Issue #2735 : default new environment name from project and purpose\n\nWhen creating a lifecycle environment, pre-fill the name with the\nproject name and append a purpose suffix (e.g. -development, -test)\nuntil the user edits the name manually.\n\n* issue #2195 : Execution Information : Add a button to copy the folder URI to the clipboard (properties file fix)\n\n* Issue #2400 : skip re-encoding values that already start with Encrypted\n\nAvoid nested encryption when Encode value is used twice in the\ndescribed variables dialog (PR review feedback)."
    },
    {
      "commit": "9f499d2d9b9ef2f3f438021be59fdc85ff2b76ec",
      "tree": "9f32da72aa9c10238fc9be7a77fa38f60190ad33",
      "parents": [
        "44bfa901988859395736d20c98e03ae39b35c1b9"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Mon Jul 20 10:57:43 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 10:57:43 2026 +0200"
      },
      "message": "harden unit tests, fixes #7578 (#7579)"
    },
    {
      "commit": "44bfa901988859395736d20c98e03ae39b35c1b9",
      "tree": "9b6f3d5e4dcc0b8485f8731e791ce61aa5016165",
      "parents": [
        "dc1fc09de9d916ff15f35dd0a972b5e94306d96d"
      ],
      "author": {
        "name": "Lance",
        "email": "leehaut@gmail.com",
        "time": "Mon Jul 20 16:07:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 10:07:12 2026 +0200"
      },
      "message": "Improve ExecProcess Lombok accessors and unit tests (#7565)\n\nSigned-off-by: lance \u003cleehaut@gmail.com\u003e"
    },
    {
      "commit": "dc1fc09de9d916ff15f35dd0a972b5e94306d96d",
      "tree": "22410f68d05fc799059c09a9fa22fdc76ed5ad8c",
      "parents": [
        "c84f65c4f69cb453beac789128ad4c27aedfac5b"
      ],
      "author": {
        "name": "Gabriel Dutra",
        "email": "gvdutra@gmail.com",
        "time": "Sun Jul 19 16:34:22 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 01:34:22 2026 +0200"
      },
      "message": "Fix REST parameter field dropdowns (#7566)\n\nCo-authored-by: gabrieldutra \u003cgdutra3@gatech.edu\u003e"
    },
    {
      "commit": "c84f65c4f69cb453beac789128ad4c27aedfac5b",
      "tree": "9cef31d0a17966106f872794d96df2e398646ee5",
      "parents": [
        "1d1105ef80745f0bfcfa13399c451390fc8edbee"
      ],
      "author": {
        "name": "Matt Casters",
        "email": "mattcasters@gmail.com",
        "time": "Sun Jul 19 09:31:26 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 19 09:31:26 2026 +0200"
      },
      "message": "issue #7486 : A dedicated Spark pipeline execution engine (#7539)\n\n* issue #7486 : A dedicated Spark pipeline execution engine\n\n* issue #7486 : A dedicated Spark pipeline execution engine (.gitignore)\n\n* issue #7486 : A dedicated Spark pipeline execution engine (execution information location)\n\n* issue #7486 : A dedicated Spark pipeline execution engine (extra integration tests)\n\n* issue #7486 : A dedicated Spark pipeline execution engine (info streams via side loading)\n\n* issue #7486 : A dedicated Spark pipeline execution engine (target streams, multi-input, docs)\n\nAdd target-stream fan-out for Filter Rows and Switch/Case, union of multiple\nprevious transforms with the same row layout, no-header CSV positional mapping,\nmetrics fix for leaf mapPartitions transforms, integration tests, and user-manual\ngetting-started documentation for the native Spark engine.\n\n* issue #7486 : A dedicated Spark pipeline execution engine (classic I/O, ITs, docs)\n\nSupport classic file I/O on mapPartitions (accept-filenames, partition-scoped\nInternal.Transform.*), active-graph collection for disabled hops, integration\ntests 0007/0008, and a full native Spark getting started guide with screenshots.\n\n* issue #7486 : A dedicated Spark pipeline execution engine (lakehouse Delta/Iceberg)\n\nAdd optional open table format support on the native Spark engine: Lake Table\nInput/Output/Merge/Maintenance, Spark Catalog metadata, connector probe and\nsession plan, Maven -Plakehouse tests, user docs, and sample walkthroughs.\nConnectors remain operator-installed (not in default assembly).\n\n* issue #7486 : A dedicated Spark pipeline execution engine (ship lakehouse connectors)\n\nEmbed Delta Lake 4.3.1 and Apache Iceberg 1.11.0 in the default engines-spark\nassembly under lib/delta and lib/iceberg. native-provided fat jars keep these\nconnectors; docs and probe messages updated for shipped packaging.\n\n* issue #7486 : A dedicated Spark pipeline execution engine (lake table MDI)\n\nEnable metadata injection on Spark Lake Table Input/Output/Merge/Maintenance\nso multi-table landings, CDC merges, and fleet maintenance can use template\npipelines. Add injection unit tests and document inject keys.\n\n* issue #7486 : A dedicated Spark pipeline execution engine (lakehouse/iceberg ITs)\n\nAdd integration-tests/lakehouse (Delta) and integration-tests/iceberg projects\nwith PATH Input/Output, overwrite + time travel (Delta VERSION 0), and MERGE\nupsert workflows. Wire Docker compose and docs cross-links.\n\n* issue #7486 : apache-rat : exclude empty .gitkeep files\n\n* issue #7486 : fix lakehouse/iceberg IT cleanup for Docker permissions\n\nUse /tmp/hop-it-{lakehouse,iceberg} for tables and extracts, and replace\nDELETE_FILES with a Shell cleanup that always exits 0. Avoids failures\ndeleting host-owned Spark .crc files on the mounted project volume.\n\n* issue #7486 : add GuiElementType.MULTI_LINE_TEXT for multi-line config fields\n\nIntroduce MULTI_LINE_TEXT with multiLineTextHeight (lines, default 1) on\n@GuiWidgetElement, wire creation/layout/bind in GuiCompositeWidgets, and use\nit for native Spark sparkConfigs (5 lines).\n\n* issue #7486 : Load configuration template for Native Spark run config\n\nAdd a Load configuration template button with Local, capped local,\nstandalone, spark-submit, Databricks, YARN, and lakehouse presets.\nWire PipelineRunConfigurationEditor button listener and refresh widgets\nafter button actions so form fields update.\n\n* issue #7486 : Load catalog template for Spark Catalog; rebind BUTTON widgets\n\nAdd Load catalog template presets (Iceberg Hadoop/REST, Hive, Glue, Nessie,\nUnity, Delta) with # docs: links in conf extra. Wire SparkCatalogEditor\nbutton flush/rebind, multi-line conf extra, and GuiCompositeWidgets\nafterButtonPressed refresh so form fields update after modal template apply.\nDocument templates in spark-catalog and cross-link from lakehouse/native Spark.\n\n* issue #7486 : Databricks Connection metadata and Job Run action\n\nAdd workspace connection (PAT) for the Jobs REST API, a RestDatabricksJobsClient\nwith WireMock tests, and a Big Data workflow action to run-now or one-time\nsubmit with wait/fire-and-forget and result variables. Document connection\nand action; nav and metadata index links.\n\n* issue #7486 : Databricks Job Run deploy mode (DBFS upload + MainSpark JAR)\n\nAdd Deploy \u0026 run: upload fat jar, pipeline, and metadata JSON to DBFS,\ncreate or update a JAR job (MainSpark) on an existing cluster, then\nrun-now. JobSpecFactory, HopSparkDeployHelper, client uploadToDbfs,\ndialog fields, tests, and docs.\n\n* issue #7486 : Databricks Job Wait action (poll runs/get)\n\nExtract shared DatabricksRunWaiter used by Job Run and new Job Wait.\nJob Wait polls by run id (default ${DatabricksRunId}) with timeout,\npoll interval, cancel-on-stop, and the same result variables. Docs and\nnav cross-links for fire-and-forget + wait orchestration.\n\n* issue #7486 : Clarify Hop VFS vs Spark/Hadoop path dialects\n\nDocument that Spark File/Lake paths use Hadoop URIs (s3a://, hdfs://),\nnot Hop VFS (s3://, named MinIO). Relabel UI fields, fix cluster examples,\nand append error hints via SparkPathDialect when known Hop-only schemes\nappear in Dataset I/O failures.\n\n* issue #7486 : Path scheme map for Spark File/Lake URIs\n\nAdd an optional from\u003dto path scheme map on the Native Spark run\nconfiguration so Dataset and Lake PATH I/O can rewrite schemes (e.g.\ns3\u003ds3a, minio\u003ds3a) after variable resolution. Classic Hop VFS is\nunchanged; FS credentials still come from Spark/Hadoop config.\n\n* issue #7486 : Spark project package for nested pipelines on cluster\n\nAdd a Native Spark project package (export via Tools menu and hop-conf\n--export-spark-project) so Simple Mapping and Pipeline Executor can resolve\n${PROJECT_HOME} children on workers. MainSpark accepts --HopProjectPackage;\nthe engine distributes the zip with SparkContext.addFile and mini-pipelines\nmaterialize PROJECT_HOME from SparkFiles on each executor.\n\n* issue #7486 : Docker walk-through for Native Spark mapping package\n\nAdd spark-mapping-demo sample project, Spark 4.1 compose cluster with\nshared data volume, prepare-dist and spark-submit-demo scripts, and a\nuser-manual walk-through so Simple Mapping under PROJECT_HOME can be\nverified on multi-node spark-submit with a project package.\n\n* issue #7486 : Fix Spark project package export without PROJECT_HOME\n\n--project/-p only names a managed project and does not set PROJECT_HOME.\nExport now accepts --export-spark-project-home and loads metadata from\nthat folder; prepare-dist.sh no longer requires registering the sample.\n\n* issue #7486 : Fix package extract on Spark workers and demo defaults\n\nOpen SparkFiles-local package zips via java.io (HopVfs misses bare\nabsolute paths). Default DIST_DIR to /tmp/spark-mapping-demo-dist.\nSpark 4 master uses --host instead of --ip.\n\n* issue #7486 : Shared-volume package path for Spark workers\n\nStop stashing SparkFiles userFiles paths in HOP_SPARK_PROJECT_PACKAGE\n(not valid on other JVMs). Resolve package from SparkFiles, then\n$HOP_DATA/packages/\u003czip\u003e, then the portable URI. Demo submit copies the\nzip onto the shared volume and passes --files as backup.\n\n* issue #7486 : apache-rat\n\n* issue #7486 : Spark run mode, nested pipelines, and expanded spark-demo\n\nAdd DISTRIBUTED/DRIVER_ONLY generic transform run mode with per-transform\noverride and canvas badge, nested Native Spark session reuse for Pipeline\nExecutor, Hop VFS-safe execution-info cache writes, and rename/expand the\ncluster sample to spark-demo (workflows, nested pipelines, host hop-data\nbind mount).\n\n* issue #7486 : bug fixing, hardening special cases\n\n* issue #7486 : bug fixing execution information locations\n\n* issue #7486 : transforms documentation updates and fixes\n\n* issue #7486 : pipeline engine capabilities alignment\n\n* issue #7486 : fix IT Excel/ODS write permissions and surefire summary paths\n\nWrite temp Excel/ODS outputs under project output/ (world-writable), align\ncontainer UID defaults with the ASF Jenkins agent identity, and fix relative\npath bugs when printing passed/failed test summaries from the repo root.\n\n* issue #7486 : fix PipelineExecutor sticky params, JsonOutput parent folders, hop_server rebuild\n\nClear empty field mappings on PipelineExecutor so child parameter defaults\napply (IT main-0003). Harden JsonOutput parent-folder creation and messages\nfor Beam 0005. Force docker compose --build for hop_server so remote export\nITs use a server image matching current assemblies.\n\n* issue #7486 : spark-native output cleanup, skip Google Sheets without GCP key\n\nWipe residual Spark output under project output/ (including other-UID files)\nbefore IT runs so delete-output steps succeed. Skip spreadsheet Google Sheets\nworkflows when GCP_KEY_FILE is missing or not a service-account JSON, and\nsurface a clear credentials error from GoogleSheetsCredentials.\n\n* issue #7486 : honor SKIP_GOOGLE_SHEETS under single-JVM suite runner\n\nThe Google Sheets skip only ran on the classic per-workflow path. Spreadsheet\nITs default to run-project-tests.hpl, so main-0009/0010 still executed with the\ndummy GCP key. Force the classic runner for the spreadsheet project when\nSKIP_GOOGLE_SHEETS\u003dtrue so those workflows are skipped.\n\n* issue #7486 : preserve .gitkeep when cleaning IT output dirs\n\nDo not delete tracked .gitkeep/.gitignore under project output/ when wiping\nresidual Spark/UID-mismatched files before integration tests.\n\n* issue #7486 : do not wipe tracked files under IT output/\n\nLDAP stores setup pipelines in ldap/output/*.hpl. The pre-test output cleanup\nwas deleting everything except .gitkeep/.gitignore, which broke main-ldap-tests.\nOnly remove untracked residuals (git clean) and Spark part-*/.crc artifacts.\n\n* issue #7486 : .gitignore\n\n* issue #7486 : getting Databricks to work\n\n* issue #7486 : getting Databricks to work Deploy \u0026 Run fixes, mappings\n\n* issue #7486 : Databricks package materialize, content-addressed fat jar, library-cache lesson\n\nStage UC Volume project packages to local disk for SparkFiles addFile so\nexecutors rematerialize PROJECT_HOME (mappings and nested pipelines).\nDeploy fat jars as hop-native-\u003csha12\u003e.jar so Dedicated clusters pick up new\nlibrary URIs after rebuilds; document overwrite-vs-classpath caching and\ncluster restart. MainSpark prints pkg-dist fingerprint for verification."
    },
    {
      "commit": "1d1105ef80745f0bfcfa13399c451390fc8edbee",
      "tree": "3cdcb35039f3d596ad198c97898cb6ef9c02f23d",
      "parents": [
        "cafbba67c4d499e20db3a923ca61b005d9cd178d"
      ],
      "author": {
        "name": "Sergio Ramazzina",
        "email": "sergio.ramazzina@serasoft.it",
        "time": "Sat Jul 18 21:08:36 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 18 21:08:36 2026 +0200"
      },
      "message": "Fix #6472: map SQLite column types by affinity, not driver JDBC type (#7564)"
    },
    {
      "commit": "cafbba67c4d499e20db3a923ca61b005d9cd178d",
      "tree": "41686e0ec68d04a342df32c9a28cf2a4962a5836",
      "parents": [
        "af41e3766c26c625e367038de97a37631f573bb8"
      ],
      "author": {
        "name": "Jeferson",
        "email": "jefersonnavarro@gmail.com",
        "time": "Sat Jul 18 16:07:26 2026 -0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 18 21:07:26 2026 +0200"
      },
      "message": "Brazilian portuguese translation (#7568)"
    },
    {
      "commit": "af41e3766c26c625e367038de97a37631f573bb8",
      "tree": "a5951d9e1713485d38e9e878436966cdb6c2e2dc",
      "parents": [
        "b49fc5e32da5051acb353fab82d4141efed66aed"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Fri Jul 17 19:06:31 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 19:06:31 2026 +0200"
      },
      "message": "Allow PATCH method when using rest connection, fixes #7558 (#7562)"
    },
    {
      "commit": "b49fc5e32da5051acb353fab82d4141efed66aed",
      "tree": "82675a2316ea03d2a62980cb6eecd3e41c5cba05",
      "parents": [
        "5bc9e9e999be497e92c405ef97fa8f4ba8a167bd"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Fri Jul 17 19:06:12 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 19:06:12 2026 +0200"
      },
      "message": "deprecate setCarteObjectId, fixes #4882 (#7560)"
    },
    {
      "commit": "5bc9e9e999be497e92c405ef97fa8f4ba8a167bd",
      "tree": "e842de41955e5905219aee3d502c99570ab8862d",
      "parents": [
        "d29469e959177816b54c54254a4111108cb7a99c"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Fri Jul 17 16:37:16 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 16:37:16 2026 +0200"
      },
      "message": "remove deprecated hop server classes, fixes #4560 (#7559)"
    },
    {
      "commit": "d29469e959177816b54c54254a4111108cb7a99c",
      "tree": "525de5c81767e950d1e3911bf568a0b1526cfcfd",
      "parents": [
        "9972e68e04bc6c39a3b2a728310e3baf2f48c86b"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Fri Jul 17 16:01:18 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 16:01:18 2026 +0200"
      },
      "message": "NullPointerException in hop/registerPipeline Rest API when log_file flag is enabled, fixes  #4677 (#7557)"
    },
    {
      "commit": "9972e68e04bc6c39a3b2a728310e3baf2f48c86b",
      "tree": "5963c1014941d1ec76ab05ed073918e90ba1213f",
      "parents": [
        "78de8bb91e86b0536d4e8c41091e793e919eae37"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Fri Jul 17 16:00:59 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 16:00:59 2026 +0200"
      },
      "message": "add encrypted passwords to the documentation, fixes #5097 (#7556)"
    },
    {
      "commit": "78de8bb91e86b0536d4e8c41091e793e919eae37",
      "tree": "756e73667730cbcceb54256de14c857238fb7ae6",
      "parents": [
        "057068f8f8f4b87572132efb1dab2fc9bc394469"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Fri Jul 17 16:00:31 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 16:00:31 2026 +0200"
      },
      "message": "harden self referencing remote run configurations, fixes #4086 (#7555)"
    },
    {
      "commit": "057068f8f8f4b87572132efb1dab2fc9bc394469",
      "tree": "ec3af52edb71c56acac3ecc19e10bf8a154e40af",
      "parents": [
        "f473ef9745deb6d3b8053ef00d62c7fe091fb674"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Fri Jul 17 14:20:07 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 14:20:07 2026 +0200"
      },
      "message": "Add a test button for hop-server to metadata item, fixes #2520 (#7554)"
    },
    {
      "commit": "f473ef9745deb6d3b8053ef00d62c7fe091fb674",
      "tree": "e1ca53265622907ac8498a1c0098ab8fd29c6162",
      "parents": [
        "7d9c3b0b166ec77ce2341ec5b2780260cc16631c"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Fri Jul 17 13:49:57 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 13:49:57 2026 +0200"
      },
      "message": "log and object cleanup was not working as expected, fixes #2796 (#7553)"
    },
    {
      "commit": "7d9c3b0b166ec77ce2341ec5b2780260cc16631c",
      "tree": "93e36637735b5189465a6db35b9a0a873f67ca60",
      "parents": [
        "7023f0ee7e1b0db37dc1f7fae32066fdf5466bae"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Fri Jul 17 13:49:25 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 13:49:25 2026 +0200"
      },
      "message": "update rest-api docs, fixes #4278 (#7552)"
    },
    {
      "commit": "7023f0ee7e1b0db37dc1f7fae32066fdf5466bae",
      "tree": "294b8b6a945bd1c114ba935644641475edcd169e",
      "parents": [
        "1d38a843eb458d84fdb772a8a78468e77a475474"
      ],
      "author": {
        "name": "Matt Casters",
        "email": "mattcasters@gmail.com",
        "time": "Fri Jul 17 13:48:59 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 13:48:59 2026 +0200"
      },
      "message": "issue #7393 : Merge Rows option to automatically line up input fields (#7540)\n\n* issue #7393 : Merge Rows option to automatically line up input fields\n\n* issue #7393 : restore integration tests, docs, and TEST_FILTER support\n\nBring over the pieces missed when re-creating the PR after the main merge:\nalign/align-off integration tests and golden data, mergerows docs, and\nTEST_FILTER support for the IT runner scripts (applied on top of current\nmain without clobbering Spark client / CLIENT_UNZIP changes).\n\n* issue #7393 : Merge Rows option to automatically line up input fields\n\n* issue #7393 : honor TEST_FILTER under default IT runner\n\nForce the classic per-workflow path when TEST_FILTER is set so filtered\nDocker integration tests actually run only matching main*.hwf files, and\ndocument the option for run-tests-docker.sh."
    },
    {
      "commit": "1d38a843eb458d84fdb772a8a78468e77a475474",
      "tree": "5bf142dc354b0a89f8ffc917d49a94013fc789da",
      "parents": [
        "08e800f359aecf7342a3cb76dbcfde7bb82087c9"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Thu Jul 16 22:13:01 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 16 22:13:01 2026 +0200"
      },
      "message": "log level is not correctly passed to remote server, fixes #3173 (#7546)"
    },
    {
      "commit": "08e800f359aecf7342a3cb76dbcfde7bb82087c9",
      "tree": "c1c7abf92fbba6532c96b9decc425801267997b2",
      "parents": [
        "1daf9988071660058426b6bc87056691231eddc2"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Thu Jul 16 22:12:20 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 16 22:12:20 2026 +0200"
      },
      "message": "Report the execution start and end date of a workflow, fixes #4052 (#7545)"
    },
    {
      "commit": "1daf9988071660058426b6bc87056691231eddc2",
      "tree": "229b0784abe0c6c3c4960f7c1235c87749a08b61",
      "parents": [
        "92c2a50fbe4a255f006b7a4253b97260ae7f2f01"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Thu Jul 16 17:19:02 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 16 17:19:02 2026 +0200"
      },
      "message": "Show the metrics of a workflow running on a server, fixes #3685 (#7543)"
    },
    {
      "commit": "92c2a50fbe4a255f006b7a4253b97260ae7f2f01",
      "tree": "cdcba174d97daf2c3157be5bad30e970e9ec6b3f",
      "parents": [
        "b8b863bb4ae27503aaa10f934df2cebc2ad80127"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Thu Jul 16 15:43:02 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 16 15:43:02 2026 +0200"
      },
      "message": "Keep the action name and plugin id when cloning, fixes #5644 (#7542)\n\nResource export clones every action before serializing it, so a copy\nconstructor that drops the name or plugin id corrupts the export:\n\n* ActionCheckFilesLocked delegated to this(), which reset the name to an\n  empty string. The exported workflow then held an empty \u003cname\u003e, and the\n  server failed with a NullPointerException from WorkflowMeta.findAction()\n  while resolving the hops.\n* ActionBase\u0027s copy constructor and ActionFtpPut used the two argument\n  super(), which dropped the plugin id. The exported action was written\n  without its \u003ctype\u003e, and the server failed to load the workflow with\n  \"Unable to load workflow info from XML node\".\n\nThe ActionBase fix covers the eleven other actions that delegate to it.\n\nAdds unit tests guarding the name/plugin id on clone, and integration test\n0010 which runs a workflow containing a Check Files Locked action on a\nremote server through the resource export. The test fails on both bugs\nbefore this change.\n\nCo-authored-by: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "b8b863bb4ae27503aaa10f934df2cebc2ad80127",
      "tree": "9b556586dfbea3ffc0190463439c14274554a8bb",
      "parents": [
        "52e0f2c0e72c1a56e6ed7310a26ca1a723f4b28c"
      ],
      "author": {
        "name": "Hans Van Akelyen",
        "email": "hans.van.akelyen@gmail.com",
        "time": "Thu Jul 16 14:46:02 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 16 14:46:02 2026 +0200"
      },
      "message": "Export pipelines/workflows referenced from metadata objects, fixes #3368 (#7541)"
    },
    {
      "commit": "52e0f2c0e72c1a56e6ed7310a26ca1a723f4b28c",
      "tree": "e8b0180f8506b5afea1deabdd21ac6ce0b1213ee",
      "parents": [
        "f332853553ad96f69a2635f31c49a2638777a290"
      ],
      "author": {
        "name": "hop-weblate",
        "email": "123085071+hop-weblate@users.noreply.github.com",
        "time": "Thu Jul 16 14:33:57 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 16 14:33:57 2026 +0200"
      },
      "message": "Translated using Weblate (Portuguese (Brazil)) (#7534)\n\nCurrently translated at 78.8% (67 of 85 strings)\n\nTranslated using Weblate (Portuguese (Brazil))\n\nCurrently translated at 100.0% (54 of 54 strings)\n\nTranslated using Weblate (Chinese (Simplified Han script))\n\nCurrently translated at 83.3% (15 of 18 strings)\n\nTranslated using Weblate (French)\n\nCurrently translated at 77.7% (14 of 18 strings)\n\nTranslated using Weblate (Spanish)\n\nCurrently translated at 83.3% (15 of 18 strings)\n\nTranslated using Weblate (Spanish (Argentina))\n\nCurrently translated at 72.2% (13 of 18 strings)\n\nTranslated using Weblate (Portuguese (Brazil))\n\nCurrently translated at 100.0% (16 of 16 strings)\n\nTranslated using Weblate (Portuguese (Brazil))\n\nCurrently translated at 100.0% (53 of 53 strings)\n\nTranslated using Weblate (Portuguese (Brazil))\n\nCurrently translated at 100.0% (58 of 58 strings)\n\nTranslated using Weblate (Portuguese (Brazil))\n\nCurrently translated at 100.0% (23 of 23 strings)\n\nTranslated using Weblate (Portuguese (Brazil))\n\nCurrently translated at 100.0% (24 of 24 strings)\n\nTranslated using Weblate (Portuguese (Brazil))\n\nCurrently translated at 100.0% (38 of 38 strings)\n\n\n\n\nTranslate-URL: https://translate.project-hop.org/projects/apache-hop/abort-1/pt_BR/\nTranslate-URL: https://translate.project-hop.org/projects/apache-hop/accessoutput/pt_BR/\nTranslate-URL: https://translate.project-hop.org/projects/apache-hop/addresultfilenames/pt_BR/\nTranslate-URL: https://translate.project-hop.org/projects/apache-hop/addsequence/pt_BR/\nTranslate-URL: https://translate.project-hop.org/projects/apache-hop/addsnowflakeid-1/pt_BR/\nTranslate-URL: https://translate.project-hop.org/projects/apache-hop/addxml/pt_BR/\nTranslate-URL: https://translate.project-hop.org/projects/apache-hop/bigtable/pt_BR/\nTranslate-URL: https://translate.project-hop.org/projects/apache-hop/metadata-6/pt_BR/\nTranslate-URL: https://translate.project-hop.org/projects/apache-hop/server-1/es/\nTranslate-URL: https://translate.project-hop.org/projects/apache-hop/server-1/es_AR/\nTranslate-URL: https://translate.project-hop.org/projects/apache-hop/server-1/fr/\nTranslate-URL: https://translate.project-hop.org/projects/apache-hop/server-1/zh_Hans/\nTranslation: Apache Hop/abort 1\nTranslation: Apache Hop/accessoutput\nTranslation: Apache Hop/addresultfilenames\nTranslation: Apache Hop/addsequence\nTranslation: Apache Hop/addsnowflakeid 1\nTranslation: Apache Hop/addxml\nTranslation: Apache Hop/bigtable\nTranslation: Apache Hop/metadata 6\nTranslation: Apache Hop/server 1\n\nCo-authored-by: Weblate \u003cnoreply@weblate.org\u003e\nCo-authored-by: Adriano Barbosa \u003cb.adrianobarbosa@gmail.com\u003e"
    },
    {
      "commit": "f332853553ad96f69a2635f31c49a2638777a290",
      "tree": "b2ab245e06cab1229209a6a82951b106efadcf2e",
      "parents": [
        "6e475d1eb77f1f7ce48db525c47a163c03c003c0"
      ],
      "author": {
        "name": "Matt Casters",
        "email": "mattcasters@gmail.com",
        "time": "Thu Jul 16 11:00:46 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 16 11:00:46 2026 +0200"
      },
      "message": "Issue #7067 : Kafka Consumer step fails when run inside async web service (#7538)\n\n* issue #7507 : restore empty-parameter defaults after single-JVM runner fix\n\n#7517 preferred any existing same-named variable over empty parameter\ndefaults and also copied parent variables into nested workflow parameters\nwhen pass_all_parameters\u003dY. That broke backbone IT main-0004/main-0006\n(and hop-run of those workflows alone), while empty defaults are intentional\nfor unset parameters.\n\nRefine activateParameters to prefer existing variables only when the\nparameter default is non-empty (HOSTNAME\u003dlocalhost clobber case). Revert\nActionWorkflow parent-variable fallback; formal parent parameters still\npass through. Add unit coverage. Ignore SSH samples that need a lab host.\n\nVerified: hop-run alone for main-0004 and main-0006 exits 0. Confirm on Jenkins.\n\n* issue #7519 : Kafka Consumer stop when idle\n\nAdd stopWhenIdle and maxIdleTimeMs options so the consumer can drain a\ntopic and exit after a configurable idle period (batch-style use cases).\n\n* issue #7519 : fix Kafka IT bootstrap and idle assignment race\n\nHarden BOOTSTRAP_SERVERS for the single-JVM runner, wait for Kafka\nhealth in docker, ignore idle time until partitions are assigned, and\nconvert basic/mapping ITs to stop-when-idle.\n\n* issue #7067 : Kafka Consumer step fails when run inside async web service"
    },
    {
      "commit": "6e475d1eb77f1f7ce48db525c47a163c03c003c0",
      "tree": "ec72c135c8cc5d3cafa19e3d2698773e10ca1234",
      "parents": [
        "9e1d456bf10ee9231a8b0a575536cdb3a4b4b292"
      ],
      "author": {
        "name": "Matt Casters",
        "email": "mattcasters@gmail.com",
        "time": "Thu Jul 16 10:57:25 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 16 10:57:25 2026 +0200"
      },
      "message": "issue #7520 : fix MissingObjectException when switching git projects (#7531)\n\nClear Git Perspective UI state before rebuild on root change, close the\nprevious JGit repository when opening another, and treat foreign commit\nids as not-in-branch instead of logging MissingObjectException."
    },
    {
      "commit": "9e1d456bf10ee9231a8b0a575536cdb3a4b4b292",
      "tree": "498cb1b9860550bec2600b0085398a63c0093c52",
      "parents": [
        "7deab6efe902b1e6e0cef0caaee1120ca79985eb"
      ],
      "author": {
        "name": "Lance",
        "email": "leehaut@gmail.com",
        "time": "Wed Jul 15 23:07:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 17:07:01 2026 +0200"
      },
      "message": "Fix Pipeline Executor parameter mapping NPE (#7537)\n\nSigned-off-by: lance \u003cleehaut@gmail.com\u003e"
    }
  ],
  "next": "7deab6efe902b1e6e0cef0caaee1120ca79985eb"
}
