)]}'
{
  "log": [
    {
      "commit": "ee0079ab32d4a80220c9369f899120a98db8db34",
      "tree": "1d7b2f7463c9519052fac0043c24d80b4690ed61",
      "parents": [
        "c44091702ac464f07ce77ba06a1c676f00030c76"
      ],
      "author": {
        "name": "Rasmus Rask",
        "email": "rask.misc@gmail.com",
        "time": "Sun Oct 18 08:13:31 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 14:13:31 2026 +0800"
      },
      "message": "fix(server): return 502 instead of passing through upstream 401 (#9231)\n\n* fix(server): return 502 instead of passing through upstream 401\n\n* refactor(config-ui): drop plugin test 401 exemption"
    },
    {
      "commit": "c44091702ac464f07ce77ba06a1c676f00030c76",
      "tree": "9a88e87ea4ea26e7ff558a8929430c37a23215f2",
      "parents": [
        "f5c90644f2cf99c93d1fa6a91331a760b99278f0"
      ],
      "author": {
        "name": "Rasmus Rask",
        "email": "rask.misc@gmail.com",
        "time": "Sun Oct 18 08:12:09 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 14:12:09 2026 +0800"
      },
      "message": "fix(github): backdate GitHub App JWT iat to tolerate clock drift (#9230)"
    },
    {
      "commit": "f5c90644f2cf99c93d1fa6a91331a760b99278f0",
      "tree": "cae2e68fea906fd9cb16406e4cd017fdb5afa06c",
      "parents": [
        "d5bdc15c018ec6a53bff292a8db4d61ada72972c"
      ],
      "author": {
        "name": "AwEi",
        "email": "chenwei791129@livemail.tw",
        "time": "Sun Oct 18 14:10:52 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 14:10:52 2026 +0800"
      },
      "message": "fix(project): validate metric plugin options when saving a project (#9228)\n\n* refactor(project): extract metric plugin plan generation into a helper\n\n* fix(project): validate metric plugin options when saving a project"
    },
    {
      "commit": "d5bdc15c018ec6a53bff292a8db4d61ada72972c",
      "tree": "a7374cc7c9abb2e36c5f15cc6aed3637beab3a78",
      "parents": [
        "e4e8ead260bc87ef698a2ba586ea99072d6c1e5a"
      ],
      "author": {
        "name": "AwEi",
        "email": "chenwei791129@livemail.tw",
        "time": "Sun Oct 18 13:03:16 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 13:03:16 2026 +0800"
      },
      "message": "feat(dora): filter pull requests by source branch pattern in lead time for changes (#9229)\n\n* feat(dora): filter pull requests by source branch pattern in lead time for changes\n\nAdd a project-level prHeadRefPattern option (Go RE2 regex) to the DORA\nmetric plugin. When set, calculateChangeLeadTime only writes\nproject_pr_metrics rows for merged pull requests whose head_ref matches\nthe pattern; the refs/heads/ prefix is ignored. A blank pattern keeps\nthe current behavior. Invalid patterns fail plan generation with a\nBadInput error.\n\nRefs #9222\n\n* feat(config-ui): add DORA source branch pattern to project settings\n\nRefs #9222\n\n* feat(config-ui): clarify that the DORA source branch pattern is optional\n\nRefs #9222"
    },
    {
      "commit": "e4e8ead260bc87ef698a2ba586ea99072d6c1e5a",
      "tree": "1467ba15826add8d91a5fa588fba803ae900da3f",
      "parents": [
        "ddd89e9134f79e9691255bbba9ed6ee1be6f3181"
      ],
      "author": {
        "name": "AwEi",
        "email": "chenwei791129@livemail.tw",
        "time": "Sun Oct 18 13:01:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 13:01:04 2026 +0800"
      },
      "message": "fix(grafana): exclude PRs without a metrics row from PR time panels (#9226)\n\nThe PR time panels of the Engineering Throughput and Cycle Time\ndashboards (and the team view) LEFT JOIN project_pr_metrics and\ncoalesce the metric to 0, so a merged PR without a project_pr_metrics\nrow was averaged in as 0 hours. Projects without DORA enabled showed a\nflat 0 h on every panel.\n\nInner join project_pr_metrics in the MySQL and PostgreSQL variants so\nthose PRs are excluded. Projects where every merged PR has a row get\nthe same values as before, and NULL sub-metrics within a row are still\ntreated as 0.\n\nCloses #9225"
    },
    {
      "commit": "ddd89e9134f79e9691255bbba9ed6ee1be6f3181",
      "tree": "3d6ecf90ef9a39e22507073d5b17e4e291307310",
      "parents": [
        "af87faade37f368732ce26c2793e6681a1ca0a5f"
      ],
      "author": {
        "name": "AwEi",
        "email": "chenwei791129@livemail.tw",
        "time": "Sun Oct 18 11:03:21 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 11:03:21 2026 +0800"
      },
      "message": "test(e2e): make plugin e2e tests pass on a fresh database (#9224)\n\nDataFlowTester runs no migrations, so a test only has the tables it\nflushes or imports. Several e2e tests ran subtasks that read or write\nother tables, which only existed because an earlier test (in the same\npackage or another plugin) had created them on the shared CI database.\n\nFlush the tables those subtasks touch, and import the existing snapshots\nwhere a test relied on data left by an earlier test. Give the DORA\nchange lead time test its own accounts fixture with a bot account, so\nthe bot exclusion for the first review is now covered."
    },
    {
      "commit": "af87faade37f368732ce26c2793e6681a1ca0a5f",
      "tree": "48612faf684bba979e3d38123be531fe849adab4",
      "parents": [
        "71dd14f75cd5e761a4d7a305a1d4ae7d7f137c00"
      ],
      "author": {
        "name": "Dirk",
        "email": "DoDiDev@proton.me",
        "time": "Sun Oct 18 04:51:26 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 10:51:26 2026 +0800"
      },
      "message": "feat(grafana): support managed PostgreSQL over TLS in the dashboard image (#9221)\n\nThe dashboard image could only talk to PostgreSQL with sslmode\u003ddisable\nin the compose setup, and verify-ca/verify-full failed against a private\nCA because the datasource never got a root certificate. While testing\nthis, a few related problems in the datasource provisioning showed up.\n\nTLS:\n- docker-compose-dev-postgresql.yml passes GRAFANA_DATABASE_SSL_MODE\n  (default disable) as DATABASE_SSL_MODE, documented in env.example\n- new optional DATABASE_SSL_ROOT_CERT, DATABASE_SSL_CERT and\n  DATABASE_SSL_KEY (file paths in the container) are written to the\n  datasource as sslRootCertFile/sslCertFile/sslKeyFile with\n  tlsConfigurationMethod\u003dfile-path; unreadable paths log a warning\n\nProvisioning:\n- the API calls use GF_SECURITY_ADMIN_USER instead of a hard-coded\n  \"admin\" and pass the credentials via --user, so a renamed admin or a\n  password containing characters such as @ / # no longer breaks them\n- a failing curl no longer ends the entrypoint (set -e) and with it the\n  container; 401/403 stop the retry loop with a hint, and a final error\n  is logged if the datasource could not be created\n- the clean slate deletes datasources by UID: Grafana 13 answers\n  \"Not found\" for deletion by numeric ID, so on every restart the old\n  datasource was kept (\"already exists\") together with its old settings\n  (e.g. a changed sslmode or password never took effect). Deletion by ID\n  is kept as a fallback for older Grafana versions\n- DATASOURCE_CLEAN_SLATE\u003dfalse (default true) replaces only the DevLake\n  datasource and keeps all other datasources, for a Grafana state that is\n  shared with other teams or replicas\n\nDefaults are unchanged.\n\nSigned-off-by: DoDiODev \u003cDoDiDev@proton.me\u003e"
    },
    {
      "commit": "71dd14f75cd5e761a4d7a305a1d4ae7d7f137c00",
      "tree": "2fd8edef564de484043422f944a223e8e0818ebc",
      "parents": [
        "4ad2f66df042386888cbcd7a0b585c4a2c13f90a"
      ],
      "author": {
        "name": "Dirk",
        "email": "DoDiDev@proton.me",
        "time": "Sun Oct 18 04:50:40 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 10:50:40 2026 +0800"
      },
      "message": "fix(gitextractor): disable git auto gc/maintenance while cloning (#9218)\n\ngit fetch ends with `git maintenance run --auto` (older git: `git gc\n--auto`), which runs detached by default. During an incremental\ncollection the last fetch can leave a background repack running while\nlibgit2 already scans objects/pack/, so a temporary\n.tmp-\u003cpid\u003e-pack-*.idx disappears under it and Collect Commits fails\nintermittently with \"could not find ... to open\".\n\nPass -c gc.auto\u003d0 -c gc.autoDetach\u003dfalse -c maintenance.auto\u003dfalse to\nevery git command run by GitcliCloner. The clone is a temporary\ndirectory, so automatic housekeeping has no benefit there; the\nexplicit `git repack -d` in deepen() still runs synchronously.\n\nAdd a regression test that traces an incremental clone with GIT_TRACE\nand asserts that git starts neither `maintenance run` nor `gc --auto`.\n\nSigned-off-by: DoDiODev \u003cDoDiDev@proton.me\u003e"
    },
    {
      "commit": "4ad2f66df042386888cbcd7a0b585c4a2c13f90a",
      "tree": "ee7b1591bb043fc84832639c9c4ade9fed94720e",
      "parents": [
        "9b111a0f23a5b928a71d341cfa404fcf7af0dbde"
      ],
      "author": {
        "name": "Itai Spiegel",
        "email": "itai.spiegel@gmail.com",
        "time": "Wed Oct 14 09:59:22 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 14:59:22 2026 +0800"
      },
      "message": "feat(config-ui): add a Teams page for org data management (#9205)\n\nDevLake\u0027s team dashboards (DORA by Team, Engineering Throughput - Team\nView, Copilot by Team) join through `teams`, `team_users` and\n`user_accounts`, but config-ui offered no way to populate them: the org\nplugin\u0027s four CSV endpoints were reachable only by hand-crafting a\nmultipart upload. On a fresh install those tables stay empty and every\nteam dashboard renders blank.\n\nAdds a Teams page with three tabs backed by the existing org endpoints,\nso no backend change is required:\n\n- Teams: id, name, alias, sorting index, and parent team as a select of\n  the other teams rather than a raw id.\n- Members: id, name, email, and team membership as a multi-select that\n  serialises back to the `;`-delimited TeamIds cell.\n- Account Mapping: every collected tool account, with its identity\n  columns read-only and a select to map it to a member. Rows cannot be\n  added or removed here because accounts come from data collection.\n\nEach tab round-trips a whole CSV file, matching the endpoints\u0027 existing\ndelete-all-then-save semantics; the page says so in an alert, since a\nsave overwrites rows added elsewhere since the page loaded. Columns the\nUI does not edit (AvatarUrl, CreatedDate, Status) are preserved by\nkeeping the server\u0027s header order and writing back untouched cells.\n\nThe CSV helpers cover the subset of RFC 4180 that gocsv emits - quoted\ndelimiters, doubled quotes, embedded newlines, CRLF - and are unit\ntested for round-trip stability.\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "9b111a0f23a5b928a71d341cfa404fcf7af0dbde",
      "tree": "4b1fe09b0c595542b693871b4666da4c9b62e38a",
      "parents": [
        "df76866ee2fc9895889d2e2acdbf2fc204d5fc92"
      ],
      "author": {
        "name": "Dirk",
        "email": "DoDiDev@proton.me",
        "time": "Wed Oct 14 08:57:10 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 14:57:10 2026 +0800"
      },
      "message": "build(compose): make grafana port, root URL and datasource configurable (#9207)\n\nFollow-up to #9090, same `${VAR:-default}` pattern. The grafana service in\n`docker-compose-dev-{mysql,postgresql}.yml` hard-codes its host port, its\npublic root URL and the database it reads from, so running both stacks\nside by side, putting Grafana behind a different proxy URL, or pointing\nthe dashboards at an existing database requires editing tracked files.\n\n- `GRAFANA_HOST_PORT` (default 3001 / 3002) for the published port.\n- `GRAFANA_ROOT_URL` for `GF_SERVER_ROOT_URL`.\n- `GRAFANA_DATABASE_{TYPE,HOST,PORT,NAME,USER,PASSWORD}` for the\n  `DATABASE_*` variables read by `grafana/scripts/entrypoint.sh`.\n- The legacy `MYSQL_*` / `POSTGRES_*` variables are derived from the same\n  values so dashboard images that predate the `DATABASE_*` entrypoint\n  (e.g. an older tag pulled via `DEVLAKE_IMAGE_REGISTRY`) get a\n  consistent datasource. The current entrypoint overwrites them from\n  `DATABASE_*`, so they are inert there.\n- `env.example` documents the variables, commented out like\n  `DEVLAKE_IMAGE_REGISTRY`, because the services read `.env` via\n  `env_file`.\n\nWith none of the variables set, `docker compose config` renders the same\nvalues as before; the only addition is the four legacy variables.\n\nSigned-off-by: DoDiODev \u003cDoDiDev@proton.me\u003e"
    },
    {
      "commit": "df76866ee2fc9895889d2e2acdbf2fc204d5fc92",
      "tree": "bf131c5844f835d7c5c0f00936e00acea7cbff50",
      "parents": [
        "9faa2208588bbf6a053f1dfd98a93c5edfccccb0"
      ],
      "author": {
        "name": "Dirk",
        "email": "DoDiDev@proton.me",
        "time": "Wed Oct 14 08:56:19 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 14:56:19 2026 +0800"
      },
      "message": "build(backend): bump Go to 1.26.9 and mockery to 3.8.1 (#9208)\n\nUpdate the patch-level toolchain pins with new SHA256 checksums:\n\n- Go 1.26.6 -\u003e 1.26.9 in install-go.sh and the lake-builder image\n- mockery 3.7.4 -\u003e 3.8.1 in install-mockery.sh, backend/Makefile,\n  both backend Dockerfiles and the lake-builder image\n- workflow step labels follow the new versions\n\ngolangci-lint stays at v2.12.2: v2.14.0 changes the SA1019 message\nformat and flags RawDataSubTaskArgs.Params, which needs its own change.\n\nSigned-off-by: DoDiODev \u003cDoDiDev@proton.me\u003e"
    },
    {
      "commit": "9faa2208588bbf6a053f1dfd98a93c5edfccccb0",
      "tree": "3a170c0cd6ebb735f19caba909945079086d2016",
      "parents": [
        "7395ce49fe8da689729135756f942a1d95e8517b"
      ],
      "author": {
        "name": "Dirk",
        "email": "DoDiDev@proton.me",
        "time": "Wed Oct 14 08:55:28 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 14:55:28 2026 +0800"
      },
      "message": "build(backend): bump golangci-lint to v2.14.0 (#9210)\n\n- golangci-lint v2.12.2 -\u003e v2.14.0 in backend/Makefile and the\n  golangci-lint workflow\n- staticcheck v0.8.1 reports the aws-sdk-go v1 SA1019 message without\n  quotes; let the kiro exclusion match both forms\n- staticcheck v0.8.1 newly reports 201 uses of the deprecated\n  RawDataSubTaskArgs.Params across ~40 plugins. Exclude that single\n  message centrally: switching to Options changes the stored\n  _raw_data_params and needs a per-plugin data migration\n- fix two go vet findings in tests (unused fmt.Sprintf result, unkeyed\n  CommitUrlPattern literals)\n\nSigned-off-by: DoDiODev \u003cDoDiDev@proton.me\u003e"
    },
    {
      "commit": "7395ce49fe8da689729135756f942a1d95e8517b",
      "tree": "7990b712e9508f924e821ec1eeb54b86dec7effc",
      "parents": [
        "228a743c05dadb326147a5c9ad6b2097d948a4a7"
      ],
      "author": {
        "name": "tpam28",
        "email": "tpam28@gmail.com",
        "time": "Wed Oct 14 11:54:46 2026 +0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 14:54:46 2026 +0800"
      },
      "message": "fix(migrationhelper): keep the primary key while changing its column type (#9215)\n\nChangePrimaryKeyColumnsType dropped the primary key before copying data\ninto the new column. MySQL Group Replication rejects DML on tables without\na primary key, so the copy failed with error 3098 and left the table\nwithout one. Keep the key on the renamed column during the copy and move\nit to the new column with a single ALTER TABLE. Restore a missing key\nbefore copying data.\n\nCloses #9194"
    },
    {
      "commit": "228a743c05dadb326147a5c9ad6b2097d948a4a7",
      "tree": "733e437128416404a9cad9c29dcbb5506d155c3b",
      "parents": [
        "9337b8241e6a378eb071e4f460874d1312a56e65"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Oct 14 10:59:58 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 10:59:58 2026 +0800"
      },
      "message": "build(deps): bump the go-minor-patch group in /backend with 2 updates (#9212)\n\nBumps the go-minor-patch group in /backend with 2 updates: [github.com/go-playground/validator/v10](https://github.com/go-playground/validator) and [golang.org/x/sync](https://github.com/golang/sync).\n\n\nUpdates `github.com/go-playground/validator/v10` from 10.30.1 to 10.30.5\n- [Release notes](https://github.com/go-playground/validator/releases)\n- [Commits](https://github.com/go-playground/validator/compare/v10.30.1...v10.30.5)\n\nUpdates `golang.org/x/sync` from 0.23.0 to 0.24.0\n- [Commits](https://github.com/golang/sync/compare/v0.23.0...v0.24.0)\n\n---\nupdated-dependencies:\n- dependency-name: github.com/go-playground/validator/v10\n  dependency-version: 10.30.5\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: go-minor-patch\n- dependency-name: golang.org/x/sync\n  dependency-version: 0.24.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-minor-patch\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": "9337b8241e6a378eb071e4f460874d1312a56e65",
      "tree": "1a0755c3a9f5687997991382ee735ca604e5cb4e",
      "parents": [
        "ba4487e54f1eb0ea59b602cb3db715b51170b26b"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Oct 14 10:59:31 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 10:59:31 2026 +0800"
      },
      "message": "build(deps): bump @playwright/test in /e2e in the e2e-minor-patch group (#9213)\n\nBumps the e2e-minor-patch group in /e2e with 1 update: [@playwright/test](https://github.com/microsoft/playwright).\n\n\nUpdates `@playwright/test` from 1.63.0 to 1.64.0\n- [Release notes](https://github.com/microsoft/playwright/releases)\n- [Commits](https://github.com/microsoft/playwright/compare/v1.63.0...v1.64.0)\n\n---\nupdated-dependencies:\n- dependency-name: \"@playwright/test\"\n  dependency-version: 1.64.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: e2e-minor-patch\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": "ba4487e54f1eb0ea59b602cb3db715b51170b26b",
      "tree": "0760275faef36c868f7a7729db02cb591d527584",
      "parents": [
        "0ce8f281b5a1e41221a0977896a376e573d1cdf0"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Oct 14 10:59:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 10:59:12 2026 +0800"
      },
      "message": "build(deps): bump the js-minor-patch group in /config-ui with 5 updates (#9214)\n\nBumps the js-minor-patch group in /config-ui with 5 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [cron-parser](https://github.com/harrisiirak/cron-parser) | `5.10.1` | `5.10.2` |\n| [@types/lodash](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash) | `4.17.25` | `4.17.26` |\n| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `26.6.4` | `26.6.5` |\n| [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.71.0` | `8.71.1` |\n| [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) | `8.3.2` | `8.3.4` |\n\n\nUpdates `cron-parser` from 5.10.1 to 5.10.2\n- [Release notes](https://github.com/harrisiirak/cron-parser/releases)\n- [Changelog](https://github.com/harrisiirak/cron-parser/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/harrisiirak/cron-parser/compare/v5.10.1...v5.10.2)\n\nUpdates `@types/lodash` from 4.17.25 to 4.17.26\n- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)\n- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/lodash)\n\nUpdates `@types/node` from 26.6.4 to 26.6.5\n- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)\n- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)\n\nUpdates `typescript-eslint` from 8.71.0 to 8.71.1\n- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)\n- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)\n- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.71.1/packages/typescript-eslint)\n\nUpdates `vite` from 8.3.2 to 8.3.4\n- [Release notes](https://github.com/vitejs/vite/releases)\n- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)\n- [Commits](https://github.com/vitejs/vite/commits/v8.3.4/packages/vite)\n\n---\nupdated-dependencies:\n- dependency-name: cron-parser\n  dependency-version: 5.10.2\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: js-minor-patch\n- dependency-name: \"@types/lodash\"\n  dependency-version: 4.17.26\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: js-minor-patch\n- dependency-name: \"@types/node\"\n  dependency-version: 26.6.5\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: js-minor-patch\n- dependency-name: typescript-eslint\n  dependency-version: 8.71.1\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: js-minor-patch\n- dependency-name: vite\n  dependency-version: 8.3.4\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: js-minor-patch\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": "0ce8f281b5a1e41221a0977896a376e573d1cdf0",
      "tree": "bc115b307d18336b851051ddf4bb518b0c1f8c35",
      "parents": [
        "5f937f91ffb8e2ec4862c5e90d071a4365423455"
      ],
      "author": {
        "name": "Dirk",
        "email": "DoDiDev@proton.me",
        "time": "Sun Oct 11 15:16:52 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 11 21:16:52 2026 +0800"
      },
      "message": "build(builder): make the lake-builder image rebuildable (#9203)\n\nThe image behind `mericodev/lake-builder:latest` can no longer be built:\n\n- Debian 11 (bullseye) left LTS on 2026-08-31 and `bullseye-security`\n  now returns 404, so `apt -y upgrade` fails in all three stages.\n- The Go toolchain was installed through a `git.io` short link, which\n  GitHub shut down in 2022.\n\nMove the libgit2 cross-build stages to `debian:bookworm` and the final\nstage to `python:3.11-slim-bookworm` (same line as backend/Dockerfile).\nInstall Go 1.26.6 from go.dev with the SHA-256 used by\nbackend/scripts/install-go.sh, and align swag with backend/Makefile\n(v1.16.6)."
    },
    {
      "commit": "5f937f91ffb8e2ec4862c5e90d071a4365423455",
      "tree": "58774246962cdf2a396289d2f7f709a3750f0b35",
      "parents": [
        "2c69dd722895e278e312dda244e21318f0d3afa0"
      ],
      "author": {
        "name": "Eyal4D",
        "email": "34816498+eyal4D@users.noreply.github.com",
        "time": "Sun Oct 11 16:16:15 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 11 21:16:15 2026 +0800"
      },
      "message": "Plugin for per-sub-project DORA metrics in a monorepo (#9037)\n\n* feat(monorepo): add plugin for per-sub-project DORA metrics in a monorepo\n\nRepos containing multiple logically separate projects (each deployed by\nits own CI job, PRs tagged by label) previously collapsed into a single\nset of DORA numbers, since DevLake\u0027s scope model is one-scope-per-repo.\n\nAdds a new metric plugin, monorepo, that runs after dora and attributes\ndeployments (by CI job name) and merged pull requests (by label) to a\nconfigured sub-project, writing per-sub-project deployment and change\nlead time metrics to two new tables. Nothing existing is modified: dora\nand the core scope model are untouched, and PR coding/pickup/review\ntime are reused from dora\u0027s own project_pr_metrics rather than\nrecomputed.\n\nIncludes unit tests, an e2e test with fixtures, and Grafana dashboards\n(mysql + postgresql) to view the output.\n\n* feat(monorepo): add config-ui panel for editing sub-project settings\n\nAdds a Project Settings panel for the monorepo plugin, letting users\ndefine sub-projects (name, PR labels, deploy job pattern) directly in\nconfig-ui rather than only via the raw API, following the existing\npattern used for the linker plugin\u0027s fields.\n\n* fix(monorepo): enforce dora-before-monorepo pipeline ordering\n\nRunAfter() is advisory-only: core\u0027s blueprint plan builder\n(GeneratePlanJsonV200) merges every enabled metric plugin\u0027s plan with\nParallelizePipelinePlans, which zips stages together by index and never\nconsults RunAfter. With dora and monorepo both enabled on a project,\nmonorepo\u0027s single stage ran concurrently with dora\u0027s first stage\ninstead of after dora\u0027s third stage, where project_pr_metrics and\ncicd_deployment_commits actually get written — silently producing\nnil coding/pickup/review times with no error.\n\nPads monorepo\u0027s plan with empty stages so its real work lands strictly\nafter dora\u0027s plan completes. This is a workaround for the unenforced\nRunAfter contract, not a true fix; it\u0027s coupled to dora\u0027s current\n3-stage plan (documented in the code). Adds a regression test locking\nin the padded shape, and corrects the RunAfter doc comment which\npreviously claimed ordering was guaranteed.\n\nVerified: fresh blueprint plan generation on the rebuilt binary shows\norg -\u003e dora(x3) -\u003e [empty x3] -\u003e monorepo; migration and e2e tests\npass on both MySQL and a real Postgres instance.\n\n* feat(core): add sub_project columns and cicd_deployment_subprojects table\n\nAdds the core schema for unified monorepo support (design §2): a nullable\nsub_project column on pull_requests, pull_request_commits and\nproject_pr_metrics, and a new cicd_deployment_subprojects mapping table\nfor the many-to-many relationship between a deployment and the\nsub-project(s) it deployed. Three migrations register the new\ncolumns/table and backfill sub_project from the monorepo plugin\u0027s\nexisting compat tables for projects already using it; the backfill is\nwritten with portable correlated-subquery SQL (no MySQL-only JOIN or\nPostgres-only FROM forms) and skips cleanly when the monorepo plugin\u0027s\ntables don\u0027t exist on this install.\n\nCo-Authored-By: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\n\n* fix(gitlab): extract MR commits before converting them\n\nConvertApiMrCommitsMeta.Dependencies was missing ExtractApiMrCommitsMeta,\nso commit conversion could race ahead of extraction and silently convert\nzero or partial commits from _tool_gitlab_mr_commits. This was one of two\npreviously opened-and-closed fix MRs folded into the monorepo design doc\n(Fix 1).\n\nCo-Authored-By: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\n\n* refactor(monorepo): split attribution from metrics, add includeUnattributed\n\nRewrites the monorepo plugin\u0027s subtask split per the design doc\u0027s §3.3\nredesign:\n\n- attributeDeployments now also writes the core cicd_deployment_subprojects\n  mapping table (dual-writing monorepo_subproject_deployments for one\n  release, for backward compatibility), and writes \u0027unattributed\u0027 rows for\n  monorepo deployments that match no configured sub-project.\n- attributePullRequests is attribution-only: it tags pull_requests.sub_project\n  (and, from there, pull_request_commits.sub_project) for every pull request\n  regardless of merge status, removing the pr.merged_date IS NOT NULL filter\n  (Fix 2) and the old merge-date-nearest-deployment heuristic\n  (firstDeploymentAfter/loadSubProjectDeployments/loadDoraPrMetrics) along\n  with the coding/pickup/review/deploy/cycle-time computation it used to do\n  inline.\n- A new third subtask, updateProjectPrMetricsSubProject, tags\n  project_pr_metrics.sub_project from pull_requests.sub_project, cross-checks\n  it against the deployment DORA attributed the PR to via\n  project_pr_metrics.deployment_commit_id (logging - not failing on -\n  disagreements as a config hygiene signal), and backfills\n  monorepo_subproject_pr_metrics using DORA\u0027s already-computed numbers\n  instead of recomputing them. This is a correction: existing monorepo users\n  will see deploy_time/cycle_time change on upgrade.\n- MonorepoOptions gains includeUnattributed (design decision 3, default\n  true): when false, unmatched PRs/deployments are left unclassified\n  instead of getting the \u0027unattributed\u0027 sentinel, matching the pre-existing\n  behaviour.\n- NewSubProjectMatcher now rejects \u0027unattributed\u0027/\u0027All\u0027 as sub-project\n  names and rejects empty prLabels entries.\n- impl.go registers all three subtasks and threads includeUnattributed\n  through to task options.\n\nTest coverage: unit tests for the new validation and the attribution\ndecision logic (resolveSubProject); an e2e dataflow test covering all\nthree subtasks including the label/deploy-pattern mismatch case (both the\n\"noise\" case from a multi-sub-project deployment and a genuine\nmisconfiguration) and the includeUnattributed\u003dfalse path; and two new\nmigration tests (TestMigrationAddsSubProjectColumnsAndTable,\nTestBackfillSubProjectFromMonorepo) that run the real registered core +\nmonorepo migrations against an isolated database and verify the backfill\nis idempotent.\n\nCo-Authored-By: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\n\n* feat(config-ui): reject reserved monorepo sub-project names\n\nMirrors the backend validation in NewSubProjectMatcher\n(backend/plugins/monorepo/tasks/task_data.go): a sub-project cannot be\nnamed \u0027unattributed\u0027 or \u0027All\u0027, since those collide with the sentinel\nvalues the monorepo plugin and dashboards use for unmatched/ungrouped\nrows. Shows an inline warning and disables Save while any configured\nsub-project uses a reserved name, instead of only finding out after the\nbackend rejects the blueprint plan.\n\nCo-Authored-By: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\n\n* feat(dashboards): migrate monorepo-subprojects dashboard to core tables\n\nRewrites all 6 panels of monorepo-subprojects.json (MySQL and PostgreSQL)\nto read from the new core tables (cicd_deployment_commits joined through\ncicd_deployment_subprojects, and project_pr_metrics) instead of the\ndeprecated monorepo_subproject_deployments/monorepo_subproject_pr_metrics\ncompat tables, per design §5.2\u0027s recommendation to migrate this dashboard\nrather than keep it on the compat tables. Deployment/PR-count panels use\nCOALESCE(sub_project, \u0027All\u0027) so single-repo (non-monorepo) projects still\nrender a sensible group. The \"Unattributed merged PRs\" panel simplifies\nto a direct pull_requests.sub_project \u003d \u0027unattributed\u0027 filter now that\nattribution lives on the PR row itself. The \"Attributed Deployments\"\ndetail table drops its CI-job-name column, since that information isn\u0027t\nreconstructable from the mapping table alone without re-deriving the\nregex match in SQL; its description is updated to say so.\n\nNote: this is the one dashboard fully migrated in this change. The\nbroader dashboard file list in design §5.2 (Gitlab.json, dora-details-*,\nengineering-throughput-and-cycle-time*, engineering-overview.json,\ndora-by-team.json) was surveyed but deliberately NOT modified - see the\nimplementation report for why.\n\nCo-Authored-By: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\n\n* feat(dashboards): add sub_project grouping to single-metric PR time series\n\nApplies the mechanical COALESCE(sub_project, \u0027All\u0027) transform (design\n§5.1/§5.3) to every panel across Gitlab.json, engineering-overview.json\nand engineering-throughput-and-cycle-time.json (MySQL + PostgreSQL) that\nis safely convertible: a time series with exactly one time column and one\nnumeric value column, which Grafana\u0027s long-format convention already\nrenders as a single line and will now render as one line per sub-project\nonce a text grouping column is added. sub_project is inserted as the\nsecond SELECT column (matching the design doc\u0027s own example) and added\nto GROUP BY; original value column names/aliases are preserved.\n\nPanels deliberately left untouched, and why:\n- Grafana \"stat\" panels (single KPI tiles): their reduceOptions is\n  configured with values:false, meaning they collapse all returned rows\n  into one number via \"last non-null\". Adding a GROUP BY would silently\n  make the tile show an arbitrary single sub-project\u0027s value instead of\n  the whole-project total - fixing that needs a reduceOptions change too,\n  which needs Grafana to verify renders correctly.\n- Wide-format time series with multiple value columns (e.g. \"PRs\n  Opened/Merged\" - two metric columns in one row) and barchart/table\n  panels already grouping by something else (e.g. \"Top 20 Contributors\n  by Merged PRs\" groups by author) - adding sub_project would multiply\n  or reshape the series in ways that need a Grafana-side call, not a\n  mechanical SQL edit.\n- Every dora-details-*.json and dora-by-team.json panel, and most of\n  engineering-throughput-and-cycle-time-team-view.json: multi-CTE queries\n  with window functions (percent_rank, row_number, calendar-generation\n  CTEs for medians). Retrofitting a grouping dimension into these\n  correctly means restructuring most of the CTEs, which is real\n  engineering work that needs a live Grafana instance to verify - not\n  safe to do blind.\n\nCo-Authored-By: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\n\n* fix(monorepo): freeze migration script models to satisfy migration linter\n\nMigration scripts must not import live model packages (core/migration/linter\ncore/migration/linter/main.go enforces this so migrations stay immutable).\n20260809_add_init_tables.go and 20260810_add_cicd_deployment_subprojects.go\nimported plugins/monorepo/models and core/models/domainlayer/devops\nrespectively; replace with version-frozen local snapshot structs matching\nthe existing convention (see 20260426_add_auth_sessions.go).\n\nCo-Authored-By: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\n\n* fix(monorepo): suppress staticcheck SA1019 for intentional deprecated-table writes\n\ngolangci-lint\u0027s staticcheck flagged four internal uses of\nmodels.SubProjectDeployment/SubProjectPrMetric as deprecated. These are the\nplugin\u0027s own writers that must keep populating those tables during the\ndocumented one-release backward-compat window, so the warning is expected;\nscope a //nolint:staticcheck to just those call sites rather than touching\nthe deprecation notice or the shared golangci-lint config.\n\nCo-Authored-By: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\n\n* test: register monorepo plugin in table-info and schema-drift test suites\n\nTest_GetPluginTablesInfo (plugins/table_info_test.go) and\nTestAllGoPluginsListed/TestMigrationSchemaMatchesModels\n(plugins/schema_e2e/migration_schema_test.go) both maintain an explicit list\nof every built-in Go plugin and assert it stays in sync with the plugin\ndirectories on disk. The new monorepo plugin was never added to either list,\nso both were failing with a directory-count/registered-count mismatch.\n\nCo-Authored-By: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\n\n* fix(migrations): use CURRENT_TIMESTAMP for cicd_deployment_subprojects backfill on Postgres\n\nThe backfill migration bound a Go time.Time as a bare parameter in a\nSELECT list (INSERT ... SELECT DISTINCT ..., ?, ? FROM ...). Postgres\u0027s\nextended query protocol can\u0027t infer a type for a parameter that isn\u0027t\ncompared against a typed column, defaults it to text, and then rejects the\ninsert into the timestamptz created_at/updated_at columns with \"column is\nof type timestamp with time zone but expression is of type text\"\n(SQLSTATE 42804). MySQL is lenient about the same coercion, so this only\nfailed under e2e-postgres.\n\nReplacing the two bound parameters with the SQL-standard CURRENT_TIMESTAMP\nsidesteps the parameter-typing problem entirely and keeps the statement\nidentical across both supported databases, preserving the migration\u0027s\nexisting MySQL/Postgres-portable design. Verified locally against real\npostgres:18.4 and mysql:8.0 containers.\n\nCo-Authored-By: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\n\n* fix(dashboards): join pull_request_commits on full PK in PR Details panel\n\nThe \"2. PR Details\" panel on the DORA Details - Lead Time for Changes\ndashboard joined pull_request_commits on commit_sha alone. Since\npull_request_commits\u0027 primary key is (commit_sha, pull_request_id), a\ncommit shared across multiple PRs (e.g. cherry-picks) causes this join\nto fan out to multiple rows, forcing a DISTINCT over a larger result\nset and contributing to the slow/504 query reported for this panel.\n\nAdd the pull_request_id \u003d pr.id predicate so the join goes through the\nfull primary key instead of just its leading column, restoring a\none-row-per-PR lookup for both the MySQL and PostgreSQL dashboards.\n\nCo-Authored-By: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\n\n* chore(monorepo): update import paths after module rename to github.com/apache/devlake\n\nCo-Authored-By: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e\n\n---------\n\nCo-authored-by: Uriah Rokach \u003curiahrokach@gmail.com\u003e\nCo-authored-by: Yotam Soudry \u003cyotamsoudry@gmail.com\u003e\nCo-authored-by: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\nCo-authored-by: Itai Spiegel \u003citai.spiegel@gmail.com\u003e"
    },
    {
      "commit": "2c69dd722895e278e312dda244e21318f0d3afa0",
      "tree": "b65ad89dbc4ad0c0ba87c076fa055393e900c2c3",
      "parents": [
        "bc4485b23c08afc14033c324065b631ee86517c5"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sun Oct 11 20:47:38 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 11 20:47:38 2026 +0800"
      },
      "message": "build(deps): bump the go-minor-patch group across 1 directory with 27 updates (#9201)\n\nBumps the go-minor-patch group with 27 updates in the /backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [github.com/aws/aws-sdk-go](https://github.com/aws/aws-sdk-go) | `1.55.6` | `1.55.8` |\n| [github.com/cockroachdb/errors](https://github.com/cockroachdb/errors) | `1.11.1` | `1.14.0` |\n| [github.com/gin-gonic/gin](https://github.com/gin-gonic/gin) | `1.9.1` | `1.12.0` |\n| [github.com/go-git/go-git/v5](https://github.com/go-git/go-git) | `5.19.2` | `5.19.3` |\n| [github.com/go-playground/validator/v10](https://github.com/go-playground/validator) | `10.19.0` | `10.30.1` |\n| [github.com/google/uuid](https://github.com/google/uuid) | `1.3.0` | `1.6.0` |\n| [github.com/jackc/pgx/v5](https://github.com/jackc/pgx) | `5.10.0` | `5.11.0` |\n| [github.com/magiconair/properties](https://github.com/magiconair/properties) | `1.8.5` | `1.18.12` |\n| [github.com/panjf2000/ants/v2](https://github.com/panjf2000/ants) | `2.4.6` | `2.12.1` |\n| [github.com/robfig/cron/v3](https://github.com/robfig/cron) | `3.0.0` | `3.0.1` |\n| [github.com/sirupsen/logrus](https://github.com/sirupsen/logrus) | `1.10.0` | `1.10.2` |\n| [github.com/spf13/cast](https://github.com/spf13/cast) | `1.5.1` | `1.10.0` |\n| [github.com/spf13/cobra](https://github.com/spf13/cobra) | `1.5.0` | `1.10.2` |\n| [github.com/spf13/viper](https://github.com/spf13/viper) | `1.8.1` | `1.21.0` |\n| [github.com/stretchr/testify](https://github.com/stretchr/testify) | `1.11.1` | `1.12.1` |\n| [github.com/swaggo/gin-swagger](https://github.com/swaggo/gin-swagger) | `1.6.0` | `1.6.1` |\n| [github.com/swaggo/swag](https://github.com/swaggo/swag) | `1.16.1` | `1.16.6` |\n| [github.com/tidwall/gjson](https://github.com/tidwall/gjson) | `1.14.3` | `1.20.0` |\n| [github.com/viant/afs](https://github.com/viant/afs) | `1.16.0` | `1.30.0` |\n| [golang.org/x/oauth2](https://github.com/golang/oauth2) | `0.36.0` | `0.37.0` |\n| [golang.org/x/sync](https://github.com/golang/sync) | `0.22.0` | `0.23.0` |\n| [gorm.io/datatypes](https://github.com/go-gorm/datatypes) | `1.0.1` | `1.2.7` |\n| [gorm.io/driver/postgres](https://github.com/go-gorm/postgres) | `1.6.2` | `1.6.3` |\n| [github.com/coreos/go-oidc/v3](https://github.com/coreos/go-oidc) | `3.20.0` | `3.21.0` |\n| [github.com/go-sql-driver/mysql](https://github.com/go-sql-driver/mysql) | `1.8.1` | `1.10.1` |\n| [github.com/rogpeppe/go-internal](https://github.com/rogpeppe/go-internal) | `1.14.1` | `1.16.0` |\n| [golang.org/x/mod](https://github.com/golang/mod) | `0.40.0` | `0.41.0` |\n\n\n\nUpdates `github.com/aws/aws-sdk-go` from 1.55.6 to 1.55.8\n- [Release notes](https://github.com/aws/aws-sdk-go/releases)\n- [Changelog](https://github.com/aws/aws-sdk-go/blob/main/CHANGELOG_PENDING.md)\n- [Commits](https://github.com/aws/aws-sdk-go/compare/v1.55.6...v1.55.8)\n\nUpdates `github.com/cockroachdb/errors` from 1.11.1 to 1.14.0\n- [Release notes](https://github.com/cockroachdb/errors/releases)\n- [Commits](https://github.com/cockroachdb/errors/compare/v1.11.1...v1.14.0)\n\nUpdates `github.com/gin-gonic/gin` from 1.9.1 to 1.12.0\n- [Release notes](https://github.com/gin-gonic/gin/releases)\n- [Changelog](https://github.com/gin-gonic/gin/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/gin-gonic/gin/compare/v1.9.1...v1.12.0)\n\nUpdates `github.com/go-git/go-git/v5` from 5.19.2 to 5.19.3\n- [Release notes](https://github.com/go-git/go-git/releases)\n- [Changelog](https://github.com/go-git/go-git/blob/main/HISTORY.md)\n- [Commits](https://github.com/go-git/go-git/compare/v5.19.2...v5.19.3)\n\nUpdates `github.com/go-playground/validator/v10` from 10.19.0 to 10.30.1\n- [Release notes](https://github.com/go-playground/validator/releases)\n- [Commits](https://github.com/go-playground/validator/compare/v10.19.0...v10.30.1)\n\nUpdates `github.com/google/uuid` from 1.3.0 to 1.6.0\n- [Release notes](https://github.com/google/uuid/releases)\n- [Changelog](https://github.com/google/uuid/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/google/uuid/compare/v1.3.0...v1.6.0)\n\nUpdates `github.com/jackc/pgx/v5` from 5.10.0 to 5.11.0\n- [Release notes](https://github.com/jackc/pgx/releases)\n- [Changelog](https://github.com/jackc/pgx/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/jackc/pgx/compare/v5.10.0...v5.11.0)\n\nUpdates `github.com/magiconair/properties` from 1.8.5 to 1.18.12\n- [Release notes](https://github.com/magiconair/properties/releases)\n- [Commits](https://github.com/magiconair/properties/compare/v1.8.5...v1.18.12)\n\nUpdates `github.com/panjf2000/ants/v2` from 2.4.6 to 2.12.1\n- [Release notes](https://github.com/panjf2000/ants/releases)\n- [Commits](https://github.com/panjf2000/ants/compare/v2.4.6...v2.12.1)\n\nUpdates `github.com/robfig/cron/v3` from 3.0.0 to 3.0.1\n- [Commits](https://github.com/robfig/cron/compare/v3.0.0...v3.0.1)\n\nUpdates `github.com/sirupsen/logrus` from 1.10.0 to 1.10.2\n- [Release notes](https://github.com/sirupsen/logrus/releases)\n- [Changelog](https://github.com/sirupsen/logrus/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/sirupsen/logrus/compare/v1.10.0...v1.10.2)\n\nUpdates `github.com/spf13/cast` from 1.5.1 to 1.10.0\n- [Release notes](https://github.com/spf13/cast/releases)\n- [Commits](https://github.com/spf13/cast/compare/v1.5.1...v1.10.0)\n\nUpdates `github.com/spf13/cobra` from 1.5.0 to 1.10.2\n- [Release notes](https://github.com/spf13/cobra/releases)\n- [Commits](https://github.com/spf13/cobra/compare/v1.5.0...v1.10.2)\n\nUpdates `github.com/spf13/viper` from 1.8.1 to 1.21.0\n- [Release notes](https://github.com/spf13/viper/releases)\n- [Commits](https://github.com/spf13/viper/compare/v1.8.1...v1.21.0)\n\nUpdates `github.com/stretchr/testify` from 1.11.1 to 1.12.1\n- [Release notes](https://github.com/stretchr/testify/releases)\n- [Commits](https://github.com/stretchr/testify/compare/v1.11.1...v1.12.1)\n\nUpdates `github.com/swaggo/gin-swagger` from 1.6.0 to 1.6.1\n- [Release notes](https://github.com/swaggo/gin-swagger/releases)\n- [Commits](https://github.com/swaggo/gin-swagger/compare/v1.6.0...v1.6.1)\n\nUpdates `github.com/swaggo/swag` from 1.16.1 to 1.16.6\n- [Release notes](https://github.com/swaggo/swag/releases)\n- [Commits](https://github.com/swaggo/swag/compare/v1.16.1...v1.16.6)\n\nUpdates `github.com/tidwall/gjson` from 1.14.3 to 1.20.0\n- [Commits](https://github.com/tidwall/gjson/compare/v1.14.3...v1.20.0)\n\nUpdates `github.com/viant/afs` from 1.16.0 to 1.30.0\n- [Release notes](https://github.com/viant/afs/releases)\n- [Changelog](https://github.com/viant/afs/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/viant/afs/compare/v1.16.0...v1.30.0)\n\nUpdates `golang.org/x/oauth2` from 0.36.0 to 0.37.0\n- [Commits](https://github.com/golang/oauth2/compare/v0.36.0...v0.37.0)\n\nUpdates `golang.org/x/sync` from 0.22.0 to 0.23.0\n- [Commits](https://github.com/golang/sync/compare/v0.22.0...v0.23.0)\n\nUpdates `gorm.io/datatypes` from 1.0.1 to 1.2.7\n- [Release notes](https://github.com/go-gorm/datatypes/releases)\n- [Commits](https://github.com/go-gorm/datatypes/compare/v1.0.1...v1.2.7)\n\nUpdates `gorm.io/driver/postgres` from 1.6.2 to 1.6.3\n- [Commits](https://github.com/go-gorm/postgres/compare/v1.6.2...v1.6.3)\n\nUpdates `github.com/coreos/go-oidc/v3` from 3.20.0 to 3.21.0\n- [Release notes](https://github.com/coreos/go-oidc/releases)\n- [Commits](https://github.com/coreos/go-oidc/compare/v3.20.0...v3.21.0)\n\nUpdates `github.com/go-sql-driver/mysql` from 1.8.1 to 1.10.1\n- [Release notes](https://github.com/go-sql-driver/mysql/releases)\n- [Changelog](https://github.com/go-sql-driver/mysql/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/go-sql-driver/mysql/compare/v1.8.1...v1.10.1)\n\nUpdates `github.com/rogpeppe/go-internal` from 1.14.1 to 1.16.0\n- [Release notes](https://github.com/rogpeppe/go-internal/releases)\n- [Commits](https://github.com/rogpeppe/go-internal/compare/v1.14.1...v1.16.0)\n\nUpdates `golang.org/x/mod` from 0.40.0 to 0.41.0\n- [Commits](https://github.com/golang/mod/compare/v0.40.0...v0.41.0)\n\n---\nupdated-dependencies:\n- dependency-name: github.com/aws/aws-sdk-go\n  dependency-version: 1.55.8\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: go-minor-patch\n- dependency-name: github.com/cockroachdb/errors\n  dependency-version: 1.14.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-minor-patch\n- dependency-name: github.com/gin-gonic/gin\n  dependency-version: 1.12.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-minor-patch\n- dependency-name: github.com/go-git/go-git/v5\n  dependency-version: 5.19.3\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: go-minor-patch\n- dependency-name: github.com/go-playground/validator/v10\n  dependency-version: 10.30.1\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-minor-patch\n- dependency-name: github.com/google/uuid\n  dependency-version: 1.6.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-minor-patch\n- dependency-name: github.com/jackc/pgx/v5\n  dependency-version: 5.11.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-minor-patch\n- dependency-name: github.com/magiconair/properties\n  dependency-version: 1.18.12\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-minor-patch\n- dependency-name: github.com/panjf2000/ants/v2\n  dependency-version: 2.12.1\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-minor-patch\n- dependency-name: github.com/robfig/cron/v3\n  dependency-version: 3.0.1\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: go-minor-patch\n- dependency-name: github.com/sirupsen/logrus\n  dependency-version: 1.10.2\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: go-minor-patch\n- dependency-name: github.com/spf13/cast\n  dependency-version: 1.10.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-minor-patch\n- dependency-name: github.com/spf13/cobra\n  dependency-version: 1.10.2\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-minor-patch\n- dependency-name: github.com/spf13/viper\n  dependency-version: 1.21.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-minor-patch\n- dependency-name: github.com/stretchr/testify\n  dependency-version: 1.12.1\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-minor-patch\n- dependency-name: github.com/swaggo/gin-swagger\n  dependency-version: 1.6.1\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: go-minor-patch\n- dependency-name: github.com/swaggo/swag\n  dependency-version: 1.16.6\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: go-minor-patch\n- dependency-name: github.com/tidwall/gjson\n  dependency-version: 1.20.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-minor-patch\n- dependency-name: github.com/viant/afs\n  dependency-version: 1.30.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-minor-patch\n- dependency-name: golang.org/x/oauth2\n  dependency-version: 0.37.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-minor-patch\n- dependency-name: golang.org/x/sync\n  dependency-version: 0.23.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-minor-patch\n- dependency-name: gorm.io/datatypes\n  dependency-version: 1.2.7\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-minor-patch\n- dependency-name: gorm.io/driver/postgres\n  dependency-version: 1.6.3\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: go-minor-patch\n- dependency-name: github.com/coreos/go-oidc/v3\n  dependency-version: 3.21.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-minor-patch\n- dependency-name: github.com/go-sql-driver/mysql\n  dependency-version: 1.10.1\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-minor-patch\n- dependency-name: github.com/rogpeppe/go-internal\n  dependency-version: 1.16.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-minor-patch\n- dependency-name: golang.org/x/mod\n  dependency-version: 0.41.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-minor-patch\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": "bc4485b23c08afc14033c324065b631ee86517c5",
      "tree": "6c86b50916a6887e148d2bf0cbb6af96e571678b",
      "parents": [
        "d33cb2d0faddb898ca0f98c22098df4e81c3bda2"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sun Oct 11 19:43:51 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 11 19:43:51 2026 +0800"
      },
      "message": "build(deps): bump the js-minor-patch group across 1 directory with 12 updates (#9202)\n\nBumps the js-minor-patch group with 12 updates in the /config-ui directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [@reduxjs/toolkit](https://github.com/reduxjs/redux-toolkit) | `2.12.0` | `2.13.0` |\n| [antd](https://github.com/ant-design/ant-design) | `6.6.4` | `6.6.5` |\n| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `26.6.1` | `26.6.4` |\n| [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) | `6.1.1` | `6.1.2` |\n| [eslint](https://github.com/eslint/eslint) | `10.10.0` | `10.12.0` |\n| [globals](https://github.com/sindresorhus/globals) | `17.12.0` | `17.13.0` |\n| [jsdom](https://github.com/jsdom/jsdom) | `30.1.0` | `30.1.2` |\n| [lint-staged](https://github.com/lint-staged/lint-staged) | `17.5.1` | `17.6.0` |\n| [prettier](https://github.com/prettier/prettier) | `3.9.8` | `3.9.9` |\n| [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.70.0` | `8.71.0` |\n| [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) | `8.3.0` | `8.3.2` |\n| [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) | `5.0.1` | `5.0.3` |\n\n\n\nUpdates `@reduxjs/toolkit` from 2.12.0 to 2.13.0\n- [Release notes](https://github.com/reduxjs/redux-toolkit/releases)\n- [Commits](https://github.com/reduxjs/redux-toolkit/compare/v2.12.0...v2.13.0)\n\nUpdates `antd` from 6.6.4 to 6.6.5\n- [Release notes](https://github.com/ant-design/ant-design/releases)\n- [Changelog](https://github.com/ant-design/ant-design/blob/master/CHANGELOG.en-US.md)\n- [Commits](https://github.com/ant-design/ant-design/compare/6.6.4...6.6.5)\n\nUpdates `@types/node` from 26.6.1 to 26.6.4\n- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)\n- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)\n\nUpdates `@vitejs/plugin-react` from 6.1.1 to 6.1.2\n- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)\n- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)\n- [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@6.1.2/packages/plugin-react)\n\nUpdates `eslint` from 10.10.0 to 10.12.0\n- [Release notes](https://github.com/eslint/eslint/releases)\n- [Commits](https://github.com/eslint/eslint/compare/v10.10.0...v10.12.0)\n\nUpdates `globals` from 17.12.0 to 17.13.0\n- [Release notes](https://github.com/sindresorhus/globals/releases)\n- [Commits](https://github.com/sindresorhus/globals/compare/v17.12.0...v17.13.0)\n\nUpdates `jsdom` from 30.1.0 to 30.1.2\n- [Release notes](https://github.com/jsdom/jsdom/releases)\n- [Commits](https://github.com/jsdom/jsdom/compare/v30.1.0...v30.1.2)\n\nUpdates `lint-staged` from 17.5.1 to 17.6.0\n- [Release notes](https://github.com/lint-staged/lint-staged/releases)\n- [Changelog](https://github.com/lint-staged/lint-staged/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/lint-staged/lint-staged/compare/v17.5.1...v17.6.0)\n\nUpdates `prettier` from 3.9.8 to 3.9.9\n- [Release notes](https://github.com/prettier/prettier/releases)\n- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/prettier/prettier/compare/3.9.8...3.9.9)\n\nUpdates `typescript-eslint` from 8.70.0 to 8.71.0\n- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)\n- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)\n- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.71.0/packages/typescript-eslint)\n\nUpdates `vite` from 8.3.0 to 8.3.2\n- [Release notes](https://github.com/vitejs/vite/releases)\n- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)\n- [Commits](https://github.com/vitejs/vite/commits/v8.3.2/packages/vite)\n\nUpdates `vitest` from 5.0.1 to 5.0.3\n- [Release notes](https://github.com/vitest-dev/vitest/releases)\n- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md)\n- [Commits](https://github.com/vitest-dev/vitest/commits/v5.0.3/packages/vitest)\n\n---\nupdated-dependencies:\n- dependency-name: \"@reduxjs/toolkit\"\n  dependency-version: 2.13.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: js-minor-patch\n- dependency-name: antd\n  dependency-version: 6.6.5\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: js-minor-patch\n- dependency-name: \"@types/node\"\n  dependency-version: 26.6.4\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: js-minor-patch\n- dependency-name: \"@vitejs/plugin-react\"\n  dependency-version: 6.1.2\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: js-minor-patch\n- dependency-name: eslint\n  dependency-version: 10.12.0\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: js-minor-patch\n- dependency-name: globals\n  dependency-version: 17.13.0\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: js-minor-patch\n- dependency-name: jsdom\n  dependency-version: 30.1.2\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: js-minor-patch\n- dependency-name: lint-staged\n  dependency-version: 17.6.0\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: js-minor-patch\n- dependency-name: prettier\n  dependency-version: 3.9.9\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: js-minor-patch\n- dependency-name: typescript-eslint\n  dependency-version: 8.71.0\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: js-minor-patch\n- dependency-name: vite\n  dependency-version: 8.3.2\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: js-minor-patch\n- dependency-name: vitest\n  dependency-version: 5.0.3\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: js-minor-patch\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": "d33cb2d0faddb898ca0f98c22098df4e81c3bda2",
      "tree": "67d1d15acb6c8830e6ed07866c023d1c79e893a4",
      "parents": [
        "7137326f663f75380f43aeb70fdb6c702518dcf5"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sun Oct 11 19:42:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 11 19:42:37 2026 +0800"
      },
      "message": "build(deps): bump grafana/grafana (#9191)\n\nBumps the docker-patch group with 1 update in the /grafana directory: grafana/grafana.\n\n\nUpdates `grafana/grafana` from 13.2.2 to 13.2.3\n\n---\nupdated-dependencies:\n- dependency-name: grafana/grafana\n  dependency-version: 13.2.3\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: docker-patch\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": "7137326f663f75380f43aeb70fdb6c702518dcf5",
      "tree": "7e7132b0f5b25155e6393e928e0e8ab4329bad29",
      "parents": [
        "4cf8bf3a53668acb2e738beec135a36a5b81430f"
      ],
      "author": {
        "name": "Pablo BC",
        "email": "pabbalca@gmail.com",
        "time": "Thu Oct 08 16:55:35 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 08 22:55:35 2026 +0800"
      },
      "message": "fix(tempo): send \"to\" with \"from\" when collecting worklogs (#9200)\n\nSince #9164 a full sync asks Tempo for worklogs from timeAfter with no end\ndate. Tempo rejects that period on every page:\n  {\"errors\":[{\"message\":\"Non valid period, from \u00272026-01-28\u0027 to \u0027null\u0027\"}]} (400)\nso full syncs (and the first run of each team after upgrading to beta18,\nwhose collector state starts fresh) fail in collect_worklogs.\n\nWhenever the query has \"from\" and no \"to\", set \"to\" to the date the\ncollection started (one value for every page). Incremental runs keep using\nupdatedFrom, which Tempo accepts on its own."
    },
    {
      "commit": "4cf8bf3a53668acb2e738beec135a36a5b81430f",
      "tree": "2921a73d9f29fa54b36c5afbcc3e8b6a2fe119ee",
      "parents": [
        "9b71603fd3ed9de630875295feb30c28769af1ce"
      ],
      "author": {
        "name": "Dirk",
        "email": "DoDiDev@proton.me",
        "time": "Thu Oct 08 15:15:12 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 08 21:15:12 2026 +0800"
      },
      "message": "build(e2e): commit package-lock.json for the Playwright suite (#9199)\n\n`e2e/` has been a Dependabot `npm` directory since #9089 but ships only a\n`package.json` with a caret range. Without a lockfile every install\nresolves whatever Playwright release is current, and Dependabot has to\nguess the \"from\" version (#9098 was titled \"1.63.0 -\u003e 1.62.1\" while it\nactually raised the range from ^1.58.2).\n\n- Add `e2e/package-lock.json` (lockfileVersion 3, public npm registry),\n  resolving `@playwright/test` ^1.63.0 to 1.63.0. `package.json` is the\n  npm-init scaffold and declares no `packageManager`, so npm is the\n  natural tool; `**/*.json` is already excluded in `.licenserc.yaml`.\n- Update the `/e2e` comment in `.github/dependabot.yml`: the directory\n  now has a lockfile. `versioning-strategy: increase` stays, so the\n  declared range and the locked version move together.\n\nSigned-off-by: DoDiODev \u003cDoDiDev@proton.me\u003e"
    },
    {
      "commit": "9b71603fd3ed9de630875295feb30c28769af1ce",
      "tree": "435a7dda7a09adb484a558d3c946e29af403a24f",
      "parents": [
        "c0e103e6b54a7f35f386405d4aa33f69fff49151"
      ],
      "author": {
        "name": "Dirk",
        "email": "DoDiDev@proton.me",
        "time": "Thu Oct 08 15:14:21 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 08 21:14:21 2026 +0800"
      },
      "message": "build(deps): bump postgres 18.4 -\u003e 18.6 and oauth2-proxy to v7.15.5 (#9198)\n\nDependabot (#9099) already moved the remote e2e compose file to\n`postgres:18.6-alpine`, but it cannot see the remaining pins:\n`docker-compose-dev-*.yml` does not match its compose filename pattern\nand the `github-actions` ecosystem ignores workflow `services:` images.\n\n- `postgres` 18.4 -\u003e 18.6 in `docker-compose-dev-postgresql.yml` and the\n  `e2e-postgres` service of `.github/workflows/test-e2e.yml`.\n- `oauth2-proxy` v7.15.3 -\u003e v7.15.5 (`-amd64` tag kept) in both dev\n  compose files. v7.15.5 fixes two critical authentication bypasses\n  (GHSA-63jm-59jj-478j, GHSA-wr5q-7wxw-x568) and a moderate credential\n  disclosure (GHSA-hhqp-vx7f-5c6m)."
    },
    {
      "commit": "c0e103e6b54a7f35f386405d4aa33f69fff49151",
      "tree": "967028b547b8a38fe3b3445ce54324955d0b2107",
      "parents": [
        "02dab0cda304298a2a47737ada4a616921b7c914"
      ],
      "author": {
        "name": "Dirk",
        "email": "DoDiDev@proton.me",
        "time": "Thu Oct 08 15:13:53 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 08 21:13:53 2026 +0800"
      },
      "message": "fix(ci): make Dependabot gomod PRs tested and lint-clean (#9197)\n\n* fix(ci): run unit and e2e tests when backend/go.mod, go.sum or Makefile change\n\nThe pull_request paths filters of test.yml and test-e2e.yml list\n\u0027go.mod\u0027, \u0027go.sum\u0027 and \u0027Makefile\u0027 without a directory prefix. GitHub\nmatches these patterns against the repository root only, so changes to\nbackend/go.mod, backend/go.sum or backend/Makefile never trigger the\nunit-test and e2e jobs. Dependabot gomod PRs (e.g. #9192) therefore\nbecome mergeable without a single compile or test run, and the go.mod\ntidiness guard added in #9179 is skipped exactly where it matters.\n\nPrefix the patterns with \u0027**/\u0027 so they match at any depth, including\nthe repository root.\n\n* build(lint): tolerate the aws-sdk-go v1 deprecation in the kiro plugin\n\naws-sdk-go v1 reached end-of-support on 2025-07-31. Its final release,\nv1.55.8, marks every package as deprecated, so staticcheck reports\nSA1019 for each import in plugins/kiro. This turns the lint job red for\nthe Dependabot go-minor-patch group (#9192) and for every future gomod\nupdate, although nothing in the code changed.\n\nExclude exactly this finding (SA1019 for aws-sdk-go, only under\nplugins/kiro/) instead of pinning the dependency or adding nolint\ncomments, so the remaining technical debt stays visible in one place.\nThe exclusion is meant to be removed once the plugin is migrated to\naws-sdk-go-v2 (tracked in a separate issue)."
    },
    {
      "commit": "02dab0cda304298a2a47737ada4a616921b7c914",
      "tree": "8e4e99b43991708ee79f3656e10528896d9ad2fe",
      "parents": [
        "789989032fa7ab1706473126a47602fa251ebcf6"
      ],
      "author": {
        "name": "AwEi",
        "email": "chenwei791129@livemail.tw",
        "time": "Sun Oct 04 23:14:33 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 04 23:14:33 2026 +0800"
      },
      "message": "fix(gitextractor): keep deepening shallow clones past merge boundaries (#9190)\n\n--shallow-since makes a merge commit shallow when any of its parents is\nolder than since, which hides newer commits on its other parent. A single\n--deepen\u003d1 can leave them without their first parent, so the collectors\nskip them and later incremental runs never fetch them again.\n\nAfter --deepen\u003d1, keep deepening (1, 2, 4, ... generations, at most 10\nextra rounds) while the newest shallow boundary commit is newer than\nsince. Boundary commits that were not fetched are filtered with\ncat-file, lazy fetches are disabled where git supports\nGIT_NO_LAZY_FETCH, and failures are only logged as warnings.\n\nCloses #9189"
    },
    {
      "commit": "789989032fa7ab1706473126a47602fa251ebcf6",
      "tree": "4167019570d41bd8ebcf24e6e46c502bd804c308",
      "parents": [
        "43e4eb76241cf022349abc5cdce9d0fa013c8a15"
      ],
      "author": {
        "name": "Pranav",
        "email": "blueelvisrocks@gmail.com",
        "time": "Sun Oct 04 20:36:39 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 04 23:06:39 2026 +0800"
      },
      "message": "update nginx to 1.31.6 to fix libc (#9188)"
    },
    {
      "commit": "43e4eb76241cf022349abc5cdce9d0fa013c8a15",
      "tree": "d408ab1a5807d1f8252be290a6c460ecf33dd63d",
      "parents": [
        "7e680b371816e48a69a4392664bf4ccdeab4aa1b"
      ],
      "author": {
        "name": "breken",
        "email": "support@brekfuz.com",
        "time": "Sun Oct 04 10:06:01 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 04 23:06:01 2026 +0800"
      },
      "message": "fix(core): parse timestamps with any number of fractional-second digits (#9186)\n\nConvertStringToTime and ConvertStringToTimeInLoc matched timestamps with a\n`+hh:mm` offset against fixed-width layouts (\".000\" and \".000000\"). Any\nother precision failed: .NET\u0027s round-trip format (7 digits, e.g. PowerShell\n`Get-Date -Format o`), Go\u0027s RFC3339Nano (up to 9 digits, trailing zeros\ntrimmed) and trimmed 4/5-digit values all returned a parse error.\n\nThis parser backs the mapstructure decode hook, so a webhook deployment or\nincident posted with such a timestamp was rejected with 400 and never\ncounted, and an Iso8601Time field in an extractor failed the subtask.\n\nReplace the two fixed-width entries with one entry that accepts any\nfraction length through the \".999999999\" layout.\n\nGenerated-by: Claude Code (Claude Opus 5.5)\n\nCo-authored-by: breken-ai \u003c312387581+breken-ai@users.noreply.github.com\u003e"
    },
    {
      "commit": "7e680b371816e48a69a4392664bf4ccdeab4aa1b",
      "tree": "abb7df334898824b9e5d31da4a5861fe73bf0d5d",
      "parents": [
        "9eae337c35f2e06224522befd5c6855e745ba78d"
      ],
      "author": {
        "name": "Amir Nazary",
        "email": "49793253+ahnazary@users.noreply.github.com",
        "time": "Sun Oct 04 17:04:18 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 04 23:04:18 2026 +0800"
      },
      "message": "docs: remove dead grafana-lake.demo.devlake.io link (#9185)\n\nThat subdomain no longer resolves (NXDOMAIN); the live DORA dashboard\nis already linked via devlake.apache.org/livedemo.\n\nCo-authored-by: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "9eae337c35f2e06224522befd5c6855e745ba78d",
      "tree": "b9653dabfba7918c08ffa79672b6695d898aaaf6",
      "parents": [
        "5d23ae8ae83f1e073626e5e93fb8df3feef1ada0"
      ],
      "author": {
        "name": "AwEi",
        "email": "chenwei791129@livemail.tw",
        "time": "Sun Oct 04 18:29:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 04 18:29:14 2026 +0800"
      },
      "message": "fix(refdiff): stop recalculating deployments without a previous success (#9183)\n\ncalculateDeploymentCommitsDiff skips pairs already recorded in\n_tool_refdiff_finished_commits_diffs. For a deployment commit without a\nprevious successful deployment, the LEFT JOIN yields p.commit_sha \u003d NULL,\nwhile the finished pair is stored with an empty old_commit_sha. The guard\ncompared \u0027\u0027 \u003d NULL, which is never true, so every such pair was selected\nand recalculated against the full commit history on every run.\n\nCompare against COALESCE(p.commit_sha, \u0027\u0027) and extend the e2e test with a\nsecond run that must not recalculate any finished pair.\n\nCloses #9182\n\nSigned-off-by: Chen-Wei Sun \u003cchenwei791129@livemail.tw\u003e"
    },
    {
      "commit": "5d23ae8ae83f1e073626e5e93fb8df3feef1ada0",
      "tree": "2db1f56398571dfa3d7826d0ff89276021b8f00c",
      "parents": [
        "b28f8502d7fbbf9597d5a9d2b67ac6e9a1b72230"
      ],
      "author": {
        "name": "Dirk",
        "email": "DoDiDev@proton.me",
        "time": "Sun Oct 04 12:27:43 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 04 18:27:43 2026 +0800"
      },
      "message": "build(ci): bump github/super-linter to v7 and fix yaml-lint config (#9184)\n\n- disable MULTI_STATUS so no GITHUB_TOKEN is required (v7 aborts otherwise)\n- restrict to yamllint via VALIDATE_YAML\n- fix FILTER_REGEX_INCLUDE, which matched no files since the repo layout changed\n- fetch full history as recommended by super-linter\n\nSigned-off-by: DoDiODev \u003cDoDiDev@proton.me\u003e"
    },
    {
      "commit": "b28f8502d7fbbf9597d5a9d2b67ac6e9a1b72230",
      "tree": "a8ef6742d10b11b1ab74e303b888df32448b0960",
      "parents": [
        "12c0128af8c64f2c6432ce6cfdea85624dd39970"
      ],
      "author": {
        "name": "tpam28",
        "email": "tpam28@gmail.com",
        "time": "Sun Oct 04 15:19:09 2026 +0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 04 18:19:09 2026 +0800"
      },
      "message": "feat(youtrack): add YouTrack plugin (#9169)\n\n* feat(youtrack): add plugin skeleton, init migration, and connection API\n\nNew youtrack plugin:\n\n- 9 _tool_youtrack_* models (connection, project scope,\n  scope config with 6 field-name slots + flat name-keyed mappings,\n  account, issue, issue_comment, issue_label, workflow_state,\n  issue_changelog), all on common.NoPKModel with literal TableName()\n- init migration over archived snapshots in GetTablesInfo() order,\n  with the ScopeConfig/Scope embeds hand-unrolled (archived helpers\n  don\u0027t carry them); schema_e2e gate passes against real MySQL\n- permanent-token connection (helper.AccessToken, Bearer perm:...),\n  token encdec-encrypted, Sanitize-masked, MergeFromRequest-preserving\n- endpoint hard-validated to end in /api at save and test time\n- test-connection diagnostic matrix: guest-fallback assertion (a 2xx\n  proves nothing), 401, InCloud /youtrack-prefix hint on 404, soft\n  warning on non-perm: token shape, best-effort version probe\n- registered in plugins/table_info_test.go and schema_e2e\n\nScope/scope-config/remote/proxy/blueprint APIs land in the next commit.\n\n* feat(youtrack): add scope, scope-config, blueprint APIs, and proxy\n\nScope and API layer of the YouTrack plugin:\n\n- remote-scopes lists the instance\u0027s projects via GET /admin/projects\n  with $top/$skip pagination, displaying \u0027shortName (name)\u0027 and\n  flagging archived projects\n- scopes GET/PUT and per-scope GET/PATCH/DELETE via the datasource\n  helper; attaching a project creates the _tool_youtrack_projects row\n- scope-config CRUD persists the six field-name slots and both JSON\n  mapping maps; Entities defaults to [TICKET, CROSS] on POST when the\n  body leaves it unset (handles both in-process []string and wire\n  []interface{} shapes)\n- singular un-nested scope-config/:scopeConfigId/projects route\n  (Linear asymmetry, copied verbatim)\n- GET connections/:id/proxy/rest/*path for config-ui field/bundle\n  discovery\n- blueprint v200 plan generation: scopes map to ticket.Board with ids\n  built from the internal project id (stable across shortName renames)\n- swagger annotations on the new endpoints\n\n* feat(youtrack): collect and convert issues with anonymised e2e fixtures\n\nAdd incremental issue and workflow-state collection, extraction and conversion for projects, accounts, issues and labels. Cover field mappings, retry behaviour and captured anonymised e2e fixtures.\n\n* feat(youtrack): add comments slice — collect, extract, convert issue comments\n\nCollect, Extract and Convert Comments subtasks, registered in\nimpl.go\u0027s SubTaskMetas order: per-issue comment collection\nbounded by the incremental bookmark (input \u003d tool issues with\nupdated \u003e\u003d since; all issues on full sync), extraction keeping the\ndeleted flag and deriving authors into accounts (CROSS-gated), and\nconversion into issue_comments with didgen ids — deleted comments never\nreach the domain layer.\n\nThe issues and comments endpoints now share one JSON-array response\nparser (parseJsonArrayResponse in shared.go).\n\nFixture: 68 anonymised live-captured comments on the staged issues,\n2 of them deleted; the issue_comments snapshot carries only the 66\nnon-deleted ones.\n\n* feat(youtrack): add changelogs slice — collect, extract, convert issue changelogs\n\nCollect, Extract and Convert Changelogs subtasks, registered in\nimpl.go\u0027s SubTaskMetas order: the activity feed flows into\nissue_changelogs. Collection walks each changed issue\u0027s activitiesPage\ncursor to hasAfter\u003dfalse (cursors URL-encoded via url.Values, all filter\nparams repeated per request, the five configured categories mandatory).\nExtraction lands one tool row per activity item with multi-value\nadded/removed JSON-encoded, deriving authors and assignee-change users\ninto accounts. Conversion maps state-field changes to std statuses via\nthe shared helper (mappings, else isResolved looked up from\n_tool_youtrack_workflow_states by project+name, cached per run),\nassignee changes to didgen account ids, everything else pass-through.\n\nThe comment collector\u0027s input bound is renamed to changedIssuesSince,\nnow shared by both per-issue collectors.\n\nFixture: 29 anonymised live-captured activity items covering all five\ncategories — State, Assignee and other custom-field changes, multi-value\nTags changes, Summary changes (text replaced with English filler), IssueCreated and\nIssueResolved items.\n\nE2e (changelog_test.go) covers these cases at the table seam plus a full-re-extract\nidempotency assertion (upsert by activity id). Unit seams: cursor-walk\nquery/termination, added/removed value encoding, std-status and didgen\nvalue conversion.\n\n* feat(youtrack): add config-ui plugin — connection form, scope picker, transformation widget\n\n* feat(youtrack): add MySQL and PostgreSQL Grafana dashboards\n\nProvision the YouTrack dashboards for both database engines with Kanban metrics.\n\n* fix(youtrack): preserve incremental state and replace stale data\n\nAlign changed-issue windows for comments and changelogs, keep only the latest issue and workflow-state snapshots on replay, and remove domain comments that were deleted upstream. Make API retries cancellation-aware with a single retry owner, and extend e2e scenarios and fixtures to cover these transitions.\n\nSkip 404s from the per-issue comment and activity endpoints so an issue deleted upstream no longer fails the subtask and freezes its bookmark. Delete the scope\u0027s domain issue labels and assignees before converting, so they are replaced even when a run emits none.\n\nCo-Authored-By: Claude Opus 5.5 (1M context) \u003cnoreply@anthropic.com\u003e\n\n* fix(youtrack): make e2e tests pass on a fresh MySQL and PostgreSQL database\n\nCI runs the e2e suite against an empty database, where three things\nfailed that a reused local database hid:\n\n- subtasks delete stale rows (labels, assignees, ...) before writing, so a\n  test that never created one of those tables failed with \"table does not\n  exist\"; newDataFlowTester now creates every table the subtasks touch\n- rows appended after ImportCsvIntoRawTable collided with the CSV ids on\n  PostgreSQL, whose sequence the explicit-id import leaves at 1; they now\n  get an explicit id past the imported ones\n- the mixed-language state-name check used MySQL-only REGEXP; it now runs\n  in Go\n\n---------\n\nCo-authored-by: Claude Opus 5.5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "12c0128af8c64f2c6432ce6cfdea85624dd39970",
      "tree": "cfdf9e0a66d0e7182706795d545a52253bba9f00",
      "parents": [
        "452029899c74502f83370b69698c6a5f5287e7e0"
      ],
      "author": {
        "name": "Dirk",
        "email": "DoDiDev@proton.me",
        "time": "Sun Oct 04 12:17:30 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 04 18:17:30 2026 +0800"
      },
      "message": "fix(build): make go mod tidy work on a fresh clone (#9179)\n\nbackend/mocks/ is git-ignored, but helpers/unithelper and 22 test files\nimport five of its packages. On a fresh clone those import paths do not\nexist inside the main module, so go mod tidy tries to resolve them as\nexternal modules and fails with \"no matching versions for query latest\".\nThis also keeps Dependabot\u0027s gomod updater from producing any update.\n\nTrack one doc.go placeholder (package mocks, no code) in each imported\nmock package, so the paths resolve locally. The generated mocks stay\ngit-ignored, and make mock now removes only the generated files instead\nof the whole directory.\n\nAdd a step to the unit-test workflow that runs go mod tidy on the fresh\ncheckout, before any mocks are generated, and fails on a diff. A new mock\nimport without a placeholder, or an untidy go.mod, is caught there.\n\nRefs #9088"
    },
    {
      "commit": "452029899c74502f83370b69698c6a5f5287e7e0",
      "tree": "cf4bc44c7bad15dd587c0916fd595db82b00a852",
      "parents": [
        "26ead99b35b63b54a3a7c8b485d3388f07e7c9a9"
      ],
      "author": {
        "name": "Dirk",
        "email": "DoDiDev@proton.me",
        "time": "Sun Oct 04 12:14:08 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 04 18:14:08 2026 +0800"
      },
      "message": "build(backend): pin mockery in one place and resolve it via go run (#9180)\n\n`backend/Dockerfile` still installed mockery v3.7.2 while the Makefile,\n`Dockerfile.local` and `scripts/install-mockery.sh` (used by CI) are on\nv3.7.4, so the generated mocks depended on which build path was used.\n\n- Bump the `backend/Dockerfile` pin to v3.7.4.\n- Introduce `MOCKERY_VERSION` (default v3.7.4) and\n  `MOCKERY ?\u003d GOOS\u003d GOARCH\u003d CGO_ENABLED\u003d0 go run\n  github.com/vektra/mockery/v3@$(MOCKERY_VERSION)` in the Makefile;\n  `make mock` and `make go-dep` use them. `make mock` thus no longer\n  depends on whatever `mockery` is on the PATH (the CI builder image\n  `mericodev/lake-builder:latest` ships mockery v2, which cannot read the\n  v3 YAML configuration). GOOS/GOARCH are cleared so the tool is built for\n  the host even when `backend/Dockerfile` cross-compiles `make all`.\n  `MOCKERY\u003dmockery make mock` keeps the old behaviour."
    },
    {
      "commit": "26ead99b35b63b54a3a7c8b485d3388f07e7c9a9",
      "tree": "7076b300224e552c25b3b6a8f8697be5aae89692",
      "parents": [
        "463b1629d78af4da2543fc1aff5342c2988b204e"
      ],
      "author": {
        "name": "Satyam Pandey",
        "email": "satyam53@tsecol.onmicrosoft.com",
        "time": "Sun Oct 04 15:42:42 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 04 18:12:42 2026 +0800"
      },
      "message": "fix(grafana): remove redundant root grafana-irm dashboard (#9175) (#9176)"
    },
    {
      "commit": "463b1629d78af4da2543fc1aff5342c2988b204e",
      "tree": "5f471bf5e6392da10c8354c456fb3899c1ef28dc",
      "parents": [
        "b0a75899620c9fc9f1d96f85fc35038c1e32393e"
      ],
      "author": {
        "name": "Keerthan Poojary",
        "email": "poojarykeerthan163@gmail.com",
        "time": "Sun Oct 04 15:41:04 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 04 18:11:04 2026 +0800"
      },
      "message": "feat(grafana): integrate Claude Code into Multi-AI Comparison dashboard (#9181)\n\n- Add Claude Code: Tool Actions panel to fill 12-column grid gap in Assistant Activity row\n- Add Claude Code active users series to Weekly Active Users Comparison\n- Add Claude Code LOC added to Kiro/Copilot/Cursor/Claude LOC time series\n- Add Claude Code tool acceptance rate to Acceptance Rate Availability gauge\n- Add claude_code_connection_id and claude_code_scope_id template variables\n- Add navigation link to Claude Code Adoption dashboard\n- Update Semantic Boundary documentation"
    },
    {
      "commit": "b0a75899620c9fc9f1d96f85fc35038c1e32393e",
      "tree": "7ae08015c8f9adfcf2ad2b2714e7562300525001",
      "parents": [
        "6502e549f58eb40c40ccbcd39aab9bc8eea6616f"
      ],
      "author": {
        "name": "Keerthan Poojary",
        "email": "poojarykeerthan163@gmail.com",
        "time": "Sun Sep 27 14:17:42 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 27 16:47:42 2026 +0800"
      },
      "message": "feat(grafana): add Cursor and Multi-AI dashboard parity for PostgreSQL (#9173)\n\n- Add missing cursor-usage.json for PostgreSQL with Grafana 13 datasource\n- Sync multi-ai-comparison.json with Cursor Tab Completions and LOC/acceptance queries\n- Sync ai-cost-efficiency.json with 7 missing Cursor cost and spend panels\n- Update convert-mysql-to-postgresql.py to output Grafana 13 datasource object and prevent quoting SQL keywords in SELECT column lists"
    },
    {
      "commit": "6502e549f58eb40c40ccbcd39aab9bc8eea6616f",
      "tree": "8c00226b5d6f805464df7b7ab462ce8ce0fbbc58",
      "parents": [
        "f3d8859fa4cc69cc60c5777e077f2e4cba5686a5"
      ],
      "author": {
        "name": "Keerthan Poojary",
        "email": "poojarykeerthan163@gmail.com",
        "time": "Sun Sep 27 08:01:57 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 27 10:31:57 2026 +0800"
      },
      "message": "Feature/grafana irm plugin(#9127) (#9160)\n\n* feat(grafana_irm): add Grafana IRM incident collection plugin\n\n* test(grafana_irm): add richer live-captured e2e/unit fixtures; implement TestConnection\n\n- Seed 2 more real (non-drill) incidents on the dev stack with a real role\n  assignment and multi-label data, closing gaps the original 2-incident\n  fixture never exercised (assignment mapping, per-scope label exclusion).\n- Add a second e2e scenario proving label-based scope filtering end-to-end.\n- Update the extractor unit test to use real captured incident data instead\n  of a drill incident\u0027s.\n- Implement TestConnection/TestExistingConnection via a cheap\n  IncidentsService.QueryIncidents call, verified live against the real API.\n\n* refactor(grafana_irm): revert to connection-wide scoping, drop label filtering\n\nThe originating feature request only asks for org-wide DORA correlation and\nnever mentions per-team scoping. The label-based per-scope filtering added\nearlier this session was real and tested, but solved a problem nobody asked\nfor, and config-ui has no generic manual-scope-entry component to build a UI\nfor it on top of. Revert GrafanaIrmScopeConfig/GrafanaIrmOptions/the\ncollector/converter to a single connection-wide scope with no filtering, same\nshape as incidentio/pagerduty. All incident labels are still collected and\nstored unconditionally, just no longer used to gate conversion.\n\nCo-Authored-By: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\n\n* feat(grafana_irm): add config-ui frontend and single-scope remote API\nBackend: add remote_api.go returning the one synthetic scope every\nconnection has (config-ui\u0027s data-scope picker has no manual-entry flow to\nfall back to, so this feeds the standard remote-picker UI a single \u0027All\nIncidents\u0027 entry instead), wired into impl.go\u0027s routes. Frontend: add config-ui/src/plugins/register/grafana_irm (connection form,\nicon, registration) mirroring incidentio\u0027s shape, using the Grafana logo\nalready vendored under grafana/img/. No custom scope-config UI is needed\nsince GrafanaIrmScopeConfig carries no extra fields (Option A). Verified\nwith tsc, eslint, and a production vite build - all clean.\n\n* fix(grafana_irm): fix error raised during testing\n\n* refactor(grafana_irm): collapse collect+refresh into one FinalizableApiCollector subtask\n\nThe two-subtask design (CollectIncidents + RefreshOpenIncidents) caused three\nreal bugs found via live pipeline testing: a panic, \"Re-transform Data\"\nsilently deleting resolved incidents, and a genuine full sync also losing\ndata because both subtasks independently wiped the raw table with no\ncoordination between them.\n\npagerduty solves the identical \"list new/changed, then refresh still-open\"\nneed with DevLake\u0027s own FinalizableApiCollector as a single subtask, which\nprevents these bugs by construction (the framework never builds the\n\"refresh\" half on a full sync, and there\u0027s only one subtask name for\nRe-transform Data\u0027s filter to strip). Migrated CollectIncidents to that\npattern; all existing collector logic (query building, change-detection via\na request-scoped header) preserved, just re-wired. Live-verified against a\nreal server: full sync restores all incidents correctly, incremental sync\nhas no regression, and Re-transform Data no longer drops resolved incidents.\n\nCo-Authored-By: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\n\n* feat(grafana_irm): add dedicated Grafana dashboard, docs, and domain board mapping\n\n- Add dedicated Grafana dashboards for MySQL and PostgreSQL dialects\n- Populate domain ticket.Board in ConvertIncidents to enable board filtering and joins\n- Update config-ui brand icon with official Grafana flame SVG\n- Add plugin documentation in backend/plugins/grafana_irm/README.md\n- Fix struct alignment formatting in models/incident.go\n\n* fix(grafana_irm): improve connection test error messages and add docs link\n\n* fix(grafana_irm): truncate timestamps to milliseconds and fix e2e postgres scope setup\n\n---------\n\nCo-authored-by: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "f3d8859fa4cc69cc60c5777e077f2e4cba5686a5",
      "tree": "45e001234d922cb1be63c111d696e883fb869d16",
      "parents": [
        "b3f18854ad58b5cf0e9a56c14266af17ae19894f"
      ],
      "author": {
        "name": "vbhanuchander-lang",
        "email": "v.bhanuchander@gmail.com",
        "time": "Sat Sep 26 22:31:07 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 27 10:31:07 2026 +0800"
      },
      "message": "fix(framework): keep the partial page when a parser signals ErrFinishCollect (#9172)\n\nCloses #9167.\n\nThe stateful collector\u0027s ResponseParser wrapper discarded the records a plugin\nparser returned whenever that parser signalled ErrFinishCollect:\n\n    items, err :\u003d args.CollectNewRecordsByList.ResponseParser(res)\n    if err !\u003d nil {\n        return nil, err\n    }\n\nPlugin parsers return the valid prefix of the page they stopped on together with\nthat signal, exactly as this file\u0027s own time filter does a few lines below\n(`return validItems, ErrFinishCollect`). fetchAsync persists whatever comes back\nand sets handler to nil to stop paginating, so returning nil throws away records\nthat are inside the requested window.\n\nThe result is a silent, page-aligned loss at the timeAfter boundary: the last\npage of a time-bounded collection is dropped in full. Nothing errors, the task\nreports TASK_COMPLETED, and the tool and domain tables agree with each other\nbecause both derive from the same truncated raw data, so the loss is only\nvisible against the upstream API.\n\nThe sibling collectors already get this right. api_collector.go\u0027s fetchAsync\nfalls through to the save after logging \"a fetch stop by parser\", and\ngraphql_collector.go saves its rows before checking for the signal. The stateful\nwrapper, sitting between the plugin parser and fetchAsync, was the only place\nthat dropped the page.\n\nThe wrapper is extracted to newStatefulResponseParser so the behaviour can be\ntested without a collector, an API client or a database. The move is mechanical;\nthe only behaviour change is preserving the prefix. Passing the prefix through\nthe time filter rather than returning it immediately keeps the incremental\ndedup guarantee for the records that are kept.\n\nSix tests: two fail on main with the records discarded, and four pin behaviour\nthat must not change - real errors still discard the page, an empty finished\npage still stops, a page with no signal passes through, and the time filter\nstill trims a page whose tail predates the last successful collection."
    },
    {
      "commit": "b3f18854ad58b5cf0e9a56c14266af17ae19894f",
      "tree": "741020fc39726f62b13fea4fd0fbfd098f5e39df",
      "parents": [
        "c5de4091fb28417c06dee994fd7d1f4513240d80"
      ],
      "author": {
        "name": "Keerthan Poojary",
        "email": "poojarykeerthan163@gmail.com",
        "time": "Thu Sep 24 21:06:08 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 23:36:08 2026 +0800"
      },
      "message": "fix(config-ui): make dev api proxy target configurable via VITE_DEVLAKE_URL (#9166)\n\nAllow overriding the Vite dev server /api proxy target using\nVITE_DEVLAKE_URL, defaulting to http://localhost:8080. This avoids\nmodifying the tracked vite.config.ts during local or dev container\ndevelopment."
    },
    {
      "commit": "c5de4091fb28417c06dee994fd7d1f4513240d80",
      "tree": "c830dc6634a77b7400fac86b2096c0c94e2808e2",
      "parents": [
        "603bac1a8fc7eb963b40cbe6317d44ab4560f890"
      ],
      "author": {
        "name": "Leif Roger Frøysaa",
        "email": "leif.roger.froysaa@akerbp.com",
        "time": "Thu Sep 24 15:33:44 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 21:33:44 2026 +0800"
      },
      "message": "fix(build): propagate errors out of the libgit2 cross-build loop (#9165)\n\nThe aarch64/x86_64 cross-build for-loop had no \u0027set -e\u0027, so a cmake/make\nfailure for one arch was silently swallowed and the loop moved on to the\nnext, leaving that arch\u0027s libgit2 missing from /usr/local/deps while the\nRUN step still exited 0.\n\nVerified both aarch64 and x86_64 libgit2 still build successfully after\nthis change (native arm64 build of the \u0027builder\u0027 stage)."
    },
    {
      "commit": "603bac1a8fc7eb963b40cbe6317d44ab4560f890",
      "tree": "734bad4c667467e2c83d119ecbe9f8266b0bfc84",
      "parents": [
        "48da53bb6db9f3e822f01c07186f942c4b443ea7"
      ],
      "author": {
        "name": "Dirk",
        "email": "DoDiDev@proton.me",
        "time": "Thu Sep 24 15:32:53 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 21:32:53 2026 +0800"
      },
      "message": "build(ci): pin Go in migration-script-lint like the other container jobs (#9096)\n\nThe job runs in mericodev/lake-builder:latest, which still ships Go 1.20.4,\nwhile go.mod declares go 1.26. test.yml, test-e2e.yml and golangci-lint.yml\nalready install the pinned toolchain via backend/scripts/install-go.sh; this\njob was the only container job left out.\nIt currently passes because Go \u003c\u003d 1.20 does not treat a higher go directive as\na hard error, but it compiles and runs the linter under a language version six\nmajor releases behind what the project declares.\nThe step is idempotent and costs 2.8 seconds when nothing is pre-installed, on\na job of roughly 45 seconds. libgit2 and mockery are not needed here."
    },
    {
      "commit": "48da53bb6db9f3e822f01c07186f942c4b443ea7",
      "tree": "d76818eb9e2b5183a003ce7e1606b771706dfcbf",
      "parents": [
        "6725d6f9b79493bcd723d27f4889eb20f92e8894"
      ],
      "author": {
        "name": "Pablo BC",
        "email": "pabbalca@gmail.com",
        "time": "Thu Sep 24 15:32:17 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 21:32:17 2026 +0800"
      },
      "message": "fix(tempo): paginate worklog collection, honour the sync range, and emit ids that join jira (#9164)\n\n* fix(tempo): paginate worklogs and honour the sync time range\n\nThe worklog collector computed the page count from metadata.total, which\nthe Tempo v4 API does not return (PageableMetadata only has count,\noffset, limit, next and previous). The page count was therefore always\nzero and only the first page (1000 worklogs) was ever collected. Per\nteam, the collector also ignored the sync policy and always asked for a\nrolling window of the last 90 days, so it kept re-fetching the oldest\n1000 worklogs of that window and never reached recent ones.\n\n- Drop GetTotalPages so pages are fetched until one comes back short.\n- Full sync starts at timeAfter; incremental runs use updatedFrom with\n  the last successful collection time; explicit fromDate/toDate options\n  still win. Same bounds for the team and the global endpoints.\n- Scope raw data and collector state per team (TeamId in the params, as\n  TempoTeam.GetParams already declares), so team scopes of the same\n  connection no longer share one incremental state; the extractor tags\n  worklogs with their team and the convertor converts one team at a time.\n\n* fix(tempo): emit worklog issue and author ids that join the jira domain\n\nThe convertor wrote issue ids as jira:JiraIssues:\u003cconn\u003e:\u003cid\u003e (plural)\nwhile the jira plugin generates jira:JiraIssue:\u003cconn\u003e:\u003cid\u003e, and stored\nthe author as the bare Atlassian account id instead of the\njira:JiraAccount:\u003cconn\u003e:\u003cid\u003e domain id. Tempo worklogs therefore never\njoined issues, accounts or the team/user mapping.\n\nGenerate both ids in the jira plugin\u0027s format. buildIssueIdMapping is\nremoved: both of its branches produced the same string, so the extra\nscan of _tool_jira_issues had no effect."
    },
    {
      "commit": "6725d6f9b79493bcd723d27f4889eb20f92e8894",
      "tree": "9a8748986f73b6076c0a3a7e7c7ddd939c15388d",
      "parents": [
        "54d4e91cf060787518b31f9d5b649f4192f94d9b"
      ],
      "author": {
        "name": "Keerthan Poojary",
        "email": "poojarykeerthan163@gmail.com",
        "time": "Thu Sep 24 18:32:23 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 21:02:23 2026 +0800"
      },
      "message": "fix(github): recheck in-progress workflow runs using low-water-mark lookback (#9162)\n\nPersist in-progress and queued workflow runs instead of skipping them,\n    and query the oldest unfinished run during incremental syncs to pull\n    windowStart back dynamically (capped by a 14-day max lookback) while\n    preserving the shared high-water mark."
    },
    {
      "commit": "54d4e91cf060787518b31f9d5b649f4192f94d9b",
      "tree": "e9d025d0de3bdef6293330e0f34052960bc61734",
      "parents": [
        "9abdf41b1d63362547d622e9ecb5475254ed56e0"
      ],
      "author": {
        "name": "Veet Moradiya",
        "email": "63164153+veetmoradiya3628@users.noreply.github.com",
        "time": "Thu Sep 24 18:31:49 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 21:01:49 2026 +0800"
      },
      "message": "fix(azuredevops_go) - consider runname for pipeline regex match (#9152)\n\n* fix(azuredevops_go) - consider runname for pipeline regex match\n\n* fix(lint): lint issue fix in azure devops extractor\n\n* fix(lint): migration file issue fix\n\n---------\n\nCo-authored-by: root \u003croot@inst-builder-debian-12-build-build-v4yxp.europe-west4-a.c.gce-image-builder.internal\u003e"
    },
    {
      "commit": "9abdf41b1d63362547d622e9ecb5475254ed56e0",
      "tree": "ae00374d465558376a8c878d573e7f0b6b7a38dd",
      "parents": [
        "64e12d62e3eca52e09e8623916f0ec7f941c0bc8"
      ],
      "author": {
        "name": "Francisc Munteanu",
        "email": "fmuntean@redhat.com",
        "time": "Wed Sep 23 14:29:30 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 23 20:29:30 2026 +0800"
      },
      "message": "feat(jira): add Cloud OAuth 2.0 client-credentials auth (#9159)\n\nService-account 2LO can mint 60-minute Bearer tokens and call the\nAtlassian API gateway, so Jira Cloud connections no longer require a\nuser API token.\n\nCo-authored-by: Cursor \u003ccursoragent@cursor.com\u003e"
    },
    {
      "commit": "64e12d62e3eca52e09e8623916f0ec7f941c0bc8",
      "tree": "5ba7695c0dec1d574bcb20a2df449ed32b7e8465",
      "parents": [
        "37220be9fe88c04e5e711dafa1c5d5025339d450"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Sep 23 16:16:50 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 23 16:16:50 2026 +0800"
      },
      "message": "build(deps): bump vitest from 4.1.10 to 5.0.1 in /config-ui (#9121)\n\nBumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 4.1.10 to 5.0.1.\n- [Release notes](https://github.com/vitest-dev/vitest/releases)\n- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md)\n- [Commits](https://github.com/vitest-dev/vitest/commits/v5.0.1/packages/vitest)\n\n---\nupdated-dependencies:\n- dependency-name: vitest\n  dependency-version: 5.0.0\n  dependency-type: direct:development\n  update-type: version-update:semver-major\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": "37220be9fe88c04e5e711dafa1c5d5025339d450",
      "tree": "3cbfc69d841674a2039d54a557a6717cffb7f4ab",
      "parents": [
        "12912dfe4f24af4cf545eb8e2b4c34f430c1e3d6"
      ],
      "author": {
        "name": "Keerthan Poojary",
        "email": "poojarykeerthan163@gmail.com",
        "time": "Tue Sep 22 09:22:20 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 22 11:52:20 2026 +0800"
      },
      "message": "fix(jira): include fields\u003d*all in Jira Server issue search query (#9149)"
    },
    {
      "commit": "12912dfe4f24af4cf545eb8e2b4c34f430c1e3d6",
      "tree": "0c31e2e00aaef430739d29ad7d5239ddd9b23ac9",
      "parents": [
        "062deb926881cfa78a1c364b02fa1faf25c02a1e"
      ],
      "author": {
        "name": "Veet Moradiya",
        "email": "63164153+veetmoradiya3628@users.noreply.github.com",
        "time": "Mon Sep 21 17:16:21 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 19:46:21 2026 +0800"
      },
      "message": "fix(gitlab) - fix added to get pathWithNamespace to render in UI (#9153)"
    },
    {
      "commit": "062deb926881cfa78a1c364b02fa1faf25c02a1e",
      "tree": "500565f65825dbe9c58c237ab6a68075ee121c0c",
      "parents": [
        "c78bc74ab7d881ecc596d03e80956379febf46f6"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Sep 21 19:24:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 19:24:37 2026 +0800"
      },
      "message": "build(deps): bump grafana/grafana (#9156)\n\nBumps the docker-patch group with 1 update in the /grafana directory: grafana/grafana.\n\n\nUpdates `grafana/grafana` from 13.2.1 to 13.2.2\n\n---\nupdated-dependencies:\n- dependency-name: grafana/grafana\n  dependency-version: 13.2.2\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: docker-patch\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": "c78bc74ab7d881ecc596d03e80956379febf46f6",
      "tree": "26135b4362cc5a5e150d7cd31450efa20c348cda",
      "parents": [
        "dbd4ade71c4e429954ed02012a768f72215a1643"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Sep 21 19:21:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 19:21:54 2026 +0800"
      },
      "message": "build(deps): bump the js-minor-patch group across 1 directory with 26 updates (#9158)\n\nBumps the js-minor-patch group with 26 updates in the /config-ui directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [@ant-design/icons](https://github.com/ant-design/ant-design-icons) | `6.3.2` | `6.3.4` |\n| [ahooks](https://github.com/alibaba/hooks) | `3.9.7` | `3.10.0` |\n| [antd](https://github.com/ant-design/ant-design) | `6.6.0` | `6.6.4` |\n| [axios](https://github.com/axios/axios) | `1.18.1` | `1.20.0` |\n| [cron-parser](https://github.com/harrisiirak/cron-parser) | `5.8.1` | `5.10.1` |\n| [dayjs](https://github.com/iamkun/dayjs) | `1.11.21` | `1.11.23` |\n| [react](https://github.com/react/react/tree/HEAD/packages/react) | `19.2.7` | `19.3.0` |\n| [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) | `19.2.17` | `19.3.0` |\n| [react-dom](https://github.com/react/react/tree/HEAD/packages/react-dom) | `19.2.7` | `19.3.0` |\n| [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom) | `19.2.3` | `19.3.0` |\n| [react-is](https://github.com/react/react/tree/HEAD/packages/react-is) | `19.2.7` | `19.3.0` |\n| [react-medium-image-zoom](https://github.com/rpearce/react-medium-image-zoom) | `5.4.8` | `5.4.9` |\n| [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) | `7.18.2` | `7.18.4` |\n| [styled-components](https://github.com/styled-components/styled-components) | `6.5.1` | `6.5.3` |\n| [@testing-library/dom](https://github.com/testing-library/dom-testing-library) | `10.4.1` | `10.4.2` |\n| [@testing-library/react](https://github.com/testing-library/react-testing-library) | `16.3.2` | `16.3.3` |\n| [@types/lodash](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash) | `4.17.24` | `4.17.25` |\n| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `26.4.1` | `26.6.1` |\n| [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) | `19.2.17` | `19.3.0` |\n| [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom) | `19.2.3` | `19.3.0` |\n| [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) | `6.0.3` | `6.1.1` |\n| [eslint](https://github.com/eslint/eslint) | `10.8.1` | `10.10.0` |\n| [globals](https://github.com/sindresorhus/globals) | `17.7.0` | `17.12.0` |\n| [jsdom](https://github.com/jsdom/jsdom) | `30.0.1` | `30.1.0` |\n| [lint-staged](https://github.com/lint-staged/lint-staged) | `17.0.8` | `17.5.1` |\n| [prettier](https://github.com/prettier/prettier) | `3.9.6` | `3.9.8` |\n| [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.62.0` | `8.70.0` |\n| [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) | `8.2.1` | `8.3.0` |\n\n\n\nUpdates `@ant-design/icons` from 6.3.2 to 6.3.4\n- [Commits](https://github.com/ant-design/ant-design-icons/commits)\n\nUpdates `ahooks` from 3.9.7 to 3.10.0\n- [Release notes](https://github.com/alibaba/hooks/releases)\n- [Commits](https://github.com/alibaba/hooks/compare/v3.9.7...v3.10.0)\n\nUpdates `antd` from 6.6.0 to 6.6.4\n- [Release notes](https://github.com/ant-design/ant-design/releases)\n- [Changelog](https://github.com/ant-design/ant-design/blob/master/CHANGELOG.en-US.md)\n- [Commits](https://github.com/ant-design/ant-design/compare/6.6.0...6.6.4)\n\nUpdates `axios` from 1.18.1 to 1.20.0\n- [Release notes](https://github.com/axios/axios/releases)\n- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)\n- [Commits](https://github.com/axios/axios/compare/v1.18.1...v1.20.0)\n\nUpdates `cron-parser` from 5.8.1 to 5.10.1\n- [Release notes](https://github.com/harrisiirak/cron-parser/releases)\n- [Changelog](https://github.com/harrisiirak/cron-parser/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/harrisiirak/cron-parser/compare/v5.8.1...v5.10.1)\n\nUpdates `dayjs` from 1.11.21 to 1.11.23\n- [Release notes](https://github.com/iamkun/dayjs/releases)\n- [Changelog](https://github.com/iamkun/dayjs/blob/v1.11.23/CHANGELOG.md)\n- [Commits](https://github.com/iamkun/dayjs/compare/v1.11.21...v1.11.23)\n\nUpdates `react` from 19.2.7 to 19.3.0\n- [Release notes](https://github.com/react/react/releases)\n- [Changelog](https://github.com/react/react/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/react/react/commits/v19.3.0/packages/react)\n\nUpdates `@types/react` from 19.2.17 to 19.3.0\n- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)\n- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)\n\nUpdates `react-dom` from 19.2.7 to 19.3.0\n- [Release notes](https://github.com/react/react/releases)\n- [Changelog](https://github.com/react/react/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/react/react/commits/v19.3.0/packages/react-dom)\n\nUpdates `@types/react-dom` from 19.2.3 to 19.3.0\n- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)\n- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom)\n\nUpdates `react-is` from 19.2.7 to 19.3.0\n- [Release notes](https://github.com/react/react/releases)\n- [Changelog](https://github.com/react/react/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/react/react/commits/v19.3.0/packages/react-is)\n\nUpdates `react-medium-image-zoom` from 5.4.8 to 5.4.9\n- [Release notes](https://github.com/rpearce/react-medium-image-zoom/releases)\n- [Changelog](https://github.com/rpearce/react-medium-image-zoom/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/rpearce/react-medium-image-zoom/compare/v5.4.8...v5.4.9)\n\nUpdates `react-router-dom` from 7.18.2 to 7.18.4\n- [Release notes](https://github.com/remix-run/react-router/releases)\n- [Changelog](https://github.com/remix-run/react-router/blob/react-router-dom@7.18.4/packages/react-router-dom/CHANGELOG.md)\n- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.18.4/packages/react-router-dom)\n\nUpdates `styled-components` from 6.5.1 to 6.5.3\n- [Release notes](https://github.com/styled-components/styled-components/releases)\n- [Commits](https://github.com/styled-components/styled-components/compare/styled-components@6.5.1...styled-components@6.5.3)\n\nUpdates `@testing-library/dom` from 10.4.1 to 10.4.2\n- [Release notes](https://github.com/testing-library/dom-testing-library/releases)\n- [Changelog](https://github.com/testing-library/dom-testing-library/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/testing-library/dom-testing-library/compare/v10.4.1...v10.4.2)\n\nUpdates `@testing-library/react` from 16.3.2 to 16.3.3\n- [Release notes](https://github.com/testing-library/react-testing-library/releases)\n- [Changelog](https://github.com/testing-library/react-testing-library/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/testing-library/react-testing-library/compare/v16.3.2...v16.3.3)\n\nUpdates `@types/lodash` from 4.17.24 to 4.17.25\n- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)\n- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/lodash)\n\nUpdates `@types/node` from 26.4.1 to 26.6.1\n- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)\n- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)\n\nUpdates `@types/react` from 19.2.17 to 19.3.0\n- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)\n- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)\n\nUpdates `@types/react-dom` from 19.2.3 to 19.3.0\n- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)\n- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom)\n\nUpdates `@vitejs/plugin-react` from 6.0.3 to 6.1.1\n- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)\n- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)\n- [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@6.1.1/packages/plugin-react)\n\nUpdates `eslint` from 10.8.1 to 10.10.0\n- [Release notes](https://github.com/eslint/eslint/releases)\n- [Commits](https://github.com/eslint/eslint/compare/v10.8.1...v10.10.0)\n\nUpdates `globals` from 17.7.0 to 17.12.0\n- [Release notes](https://github.com/sindresorhus/globals/releases)\n- [Commits](https://github.com/sindresorhus/globals/compare/v17.7.0...v17.12.0)\n\nUpdates `jsdom` from 30.0.1 to 30.1.0\n- [Release notes](https://github.com/jsdom/jsdom/releases)\n- [Commits](https://github.com/jsdom/jsdom/compare/v30.0.1...v30.1.0)\n\nUpdates `lint-staged` from 17.0.8 to 17.5.1\n- [Release notes](https://github.com/lint-staged/lint-staged/releases)\n- [Changelog](https://github.com/lint-staged/lint-staged/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/lint-staged/lint-staged/compare/v17.0.8...v17.5.1)\n\nUpdates `prettier` from 3.9.6 to 3.9.8\n- [Release notes](https://github.com/prettier/prettier/releases)\n- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/prettier/prettier/compare/3.9.6...3.9.8)\n\nUpdates `typescript-eslint` from 8.62.0 to 8.70.0\n- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)\n- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)\n- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.70.0/packages/typescript-eslint)\n\nUpdates `vite` from 8.2.1 to 8.3.0\n- [Release notes](https://github.com/vitejs/vite/releases)\n- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)\n- [Commits](https://github.com/vitejs/vite/commits/create-vite@8.3.0/packages/vite)\n\n---\nupdated-dependencies:\n- dependency-name: \"@ant-design/icons\"\n  dependency-version: 6.3.4\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: js-minor-patch\n- dependency-name: ahooks\n  dependency-version: 3.10.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: js-minor-patch\n- dependency-name: antd\n  dependency-version: 6.6.4\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: js-minor-patch\n- dependency-name: axios\n  dependency-version: 1.20.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: js-minor-patch\n- dependency-name: cron-parser\n  dependency-version: 5.10.1\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: js-minor-patch\n- dependency-name: dayjs\n  dependency-version: 1.11.23\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: js-minor-patch\n- dependency-name: react\n  dependency-version: 19.3.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: js-minor-patch\n- dependency-name: \"@types/react\"\n  dependency-version: 19.3.0\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: js-minor-patch\n- dependency-name: react-dom\n  dependency-version: 19.3.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: js-minor-patch\n- dependency-name: \"@types/react-dom\"\n  dependency-version: 19.3.0\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: js-minor-patch\n- dependency-name: react-is\n  dependency-version: 19.3.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: js-minor-patch\n- dependency-name: react-medium-image-zoom\n  dependency-version: 5.4.9\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: js-minor-patch\n- dependency-name: react-router-dom\n  dependency-version: 7.18.4\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: js-minor-patch\n- dependency-name: styled-components\n  dependency-version: 6.5.3\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: js-minor-patch\n- dependency-name: \"@testing-library/dom\"\n  dependency-version: 10.4.2\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: js-minor-patch\n- dependency-name: \"@testing-library/react\"\n  dependency-version: 16.3.3\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: js-minor-patch\n- dependency-name: \"@types/lodash\"\n  dependency-version: 4.17.25\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: js-minor-patch\n- dependency-name: \"@types/node\"\n  dependency-version: 26.6.1\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: js-minor-patch\n- dependency-name: \"@types/react\"\n  dependency-version: 19.3.0\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: js-minor-patch\n- dependency-name: \"@types/react-dom\"\n  dependency-version: 19.3.0\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: js-minor-patch\n- dependency-name: \"@vitejs/plugin-react\"\n  dependency-version: 6.1.1\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: js-minor-patch\n- dependency-name: eslint\n  dependency-version: 10.10.0\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: js-minor-patch\n- dependency-name: globals\n  dependency-version: 17.12.0\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: js-minor-patch\n- dependency-name: jsdom\n  dependency-version: 30.1.0\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: js-minor-patch\n- dependency-name: lint-staged\n  dependency-version: 17.5.1\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: js-minor-patch\n- dependency-name: prettier\n  dependency-version: 3.9.8\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: js-minor-patch\n- dependency-name: typescript-eslint\n  dependency-version: 8.70.0\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: js-minor-patch\n- dependency-name: vite\n  dependency-version: 8.3.0\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: js-minor-patch\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": "dbd4ade71c4e429954ed02012a768f72215a1643",
      "tree": "4822603961156029bf4156e5cbcb657ee3779db0",
      "parents": [
        "e744aefe04473062d1da46934da256aad8112add"
      ],
      "author": {
        "name": "Oleksii Milchenko",
        "email": "oleksii.milchenko@betterme.world",
        "time": "Sun Sep 20 10:25:37 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 20 15:25:37 2026 +0800"
      },
      "message": "fix(server): ignore Basic auth header when AUTH_ENABLED\u003dtrue (#9147)\n\nOAuth2ProxyAuthentication turns any \"Authorization: Basic user:pass\"\nheader into a user without checking the password. That was fine while\nnginx in config-ui verified the credentials against ADMIN_USER/ADMIN_PASS\nbefore proxying, and the lake only kept the username for audit fields.\n\n#8854 put auth.RequireAuth behind it. With AUTH_ENABLED\u003dtrue that gate now\naccepts the unverified Basic user, so any username:password pair reaches\nevery non-public endpoint (blueprints, connections, pipelines) on a lake\nthat is exposed directly. #8880 closed the same hole for X-Forwarded-User\nwith FORWARDED_USER_SECRET but left the Basic branch untouched.\n\nOnly consult the Basic header when AUTH_ENABLED is off, which is the\nlegacy nginx mode. With AUTH_ENABLED the lake authenticates callers\nitself: session cookie, API key, or forwarded headers with the shared\nsecret, exactly what auth.go already logs as the supported set.\n\nUpstream: not yet submitted."
    },
    {
      "commit": "e744aefe04473062d1da46934da256aad8112add",
      "tree": "1ef6e10fc10a1a7f8670fe6c7871a1a90c374401",
      "parents": [
        "40f2b0da7b1105bc317987e79752c95d31b5b50f"
      ],
      "author": {
        "name": "Keerthan Poojary",
        "email": "poojarykeerthan163@gmail.com",
        "time": "Fri Sep 18 12:10:05 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 14:40:05 2026 +0800"
      },
      "message": "fix(github): ignore 404 when collecting unfinished pull requests (#9140) (#9145)"
    },
    {
      "commit": "40f2b0da7b1105bc317987e79752c95d31b5b50f",
      "tree": "086e25c89eb69a8dea2da134625c4977b28690d7",
      "parents": [
        "a0cc75183badb3d7b370942c96ea563fba26bb7b"
      ],
      "author": {
        "name": "Veet Moradiya",
        "email": "63164153+veetmoradiya3628@users.noreply.github.com",
        "time": "Fri Sep 18 11:33:57 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 14:03:57 2026 +0800"
      },
      "message": "fix to encode URI compoent scopeId to make it consistent for get, post and delete path (#9135)\n\nCo-authored-by: Veet M \u003cveet@inst-builder-debian-12-build-build-v4yxp.europe-west4-a.c.gce-image-builder.internal\u003e"
    },
    {
      "commit": "a0cc75183badb3d7b370942c96ea563fba26bb7b",
      "tree": "8f9f636f241842bdd22104badf7f103581e17a83",
      "parents": [
        "4672ecbc7d24671cc35bf1f7bf954d5caef98cd2"
      ],
      "author": {
        "name": "Veet Moradiya",
        "email": "63164153+veetmoradiya3628@users.noreply.github.com",
        "time": "Fri Sep 18 08:40:52 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 11:10:52 2026 +0800"
      },
      "message": "fix(config-ui) - for plugin deprecation notice (#9144)"
    },
    {
      "commit": "4672ecbc7d24671cc35bf1f7bf954d5caef98cd2",
      "tree": "593e95212ab02a8e22d8672635da51e70425fdd7",
      "parents": [
        "74487a75c18703bdebeb3bcfd58f8865442eec16"
      ],
      "author": {
        "name": "Muhammad Muzamil kaleem",
        "email": "muzamilkaleem4@gmail.com",
        "time": "Thu Sep 17 08:06:52 2026 +0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 11:06:52 2026 +0800"
      },
      "message": "fix(project): add transactional plugin deletion lifecycle hook (#9081) (#9091)\n\nProject deletion deletes core DevLake records directly without exposing\na lifecycle hook for plugins that maintain project-scoped state.\nWhile project renames provide a lifecycle extension through\nProjectService.RenameProject, there was no equivalent hook for project\ndeletion.\n\nThis commit:\n- Introduces optional plugin.ProjectDeleteHook in core/plugin\n- Traverses registered plugins via plugin.TraversalPlugin during DeleteProject\n- Executes hooks, blueprint cleanup, and project deletion inside a single transaction\n- Provides BlueprintManager.DeleteBlueprintInTransaction to participate in caller transaction\n- Adds comprehensive unit tests covering hook dispatch, veto rollback, and atomic deletion\n\nCloses #9081\n\nSigned-off-by: Muzamil Kaleem \u003c113013457+muzamilkm@users.noreply.github.com\u003e"
    },
    {
      "commit": "74487a75c18703bdebeb3bcfd58f8865442eec16",
      "tree": "0838f9d6a5c4b8589d1262694b886f01328efa94",
      "parents": [
        "38e1914c48e4f08fca0ae7faa5e16ec04155f970"
      ],
      "author": {
        "name": "Keerthan Poojary",
        "email": "poojarykeerthan163@gmail.com",
        "time": "Wed Sep 16 17:59:39 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 20:29:39 2026 +0800"
      },
      "message": "fix(grafana): use IS TRUE for boolean comparisons in Copilot adoption dashboard (#9126) (#9133)"
    },
    {
      "commit": "38e1914c48e4f08fca0ae7faa5e16ec04155f970",
      "tree": "27871d57aad29be89e1635e06b1a73cf2cbe80af",
      "parents": [
        "9cb66d149fe23e9f11dc6e513080bed13ad057e9"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Sep 16 20:24:36 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 20:24:36 2026 +0800"
      },
      "message": "build(deps): update @playwright/test requirement in /e2e (#9138)\n\nUpdates the requirements on [@playwright/test](https://github.com/microsoft/playwright) to permit the latest version.\n- [Release notes](https://github.com/microsoft/playwright/releases)\n- [Commits](https://github.com/microsoft/playwright/compare/v1.62.1...v1.63.0)\n\n---\nupdated-dependencies:\n- dependency-name: \"@playwright/test\"\n  dependency-version: 1.63.0\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": "9cb66d149fe23e9f11dc6e513080bed13ad057e9",
      "tree": "fdd27a79e47ed32054b1343f0e619ab30ec29675",
      "parents": [
        "de9d3403d08b48072ac9aa70c25170516c813341"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Sep 16 20:24:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 20:24:14 2026 +0800"
      },
      "message": "build(deps): bump pydevd-pycharm in /backend/python/pydevlake (#9137)\n\nBumps [pydevd-pycharm](https://github.com/JetBrains/intellij-community) from 262.8665.186 to 263.3889.77.\n- [Release notes](https://github.com/JetBrains/intellij-community/releases)\n- [Commits](https://github.com/JetBrains/intellij-community/compare/pycharm/262.8665.186...pycharm/263.3889.77)\n\n---\nupdated-dependencies:\n- dependency-name: pydevd-pycharm\n  dependency-version: 263.3889.77\n  dependency-type: direct:production\n  update-type: version-update:semver-major\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": "de9d3403d08b48072ac9aa70c25170516c813341",
      "tree": "af01fc9ba2f2f83e76369c9cc6d2ee890bfb2626",
      "parents": [
        "05dad99c836c6e868da3fa00fa5704cdd5ef534a"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Sep 16 20:23:40 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 20:23:40 2026 +0800"
      },
      "message": "build(deps): bump psycopg2 (#9136)\n\nBumps the python-minor-patch group with 1 update in the /backend/python/pydevlake directory: [psycopg2](https://github.com/psycopg/psycopg2).\n\n\nUpdates `psycopg2` from 2.9.12 to 2.9.13\n- [Changelog](https://github.com/psycopg/psycopg2/blob/master/NEWS)\n- [Commits](https://github.com/psycopg/psycopg2/compare/2.9.12...2.9.13)\n\n---\nupdated-dependencies:\n- dependency-name: psycopg2\n  dependency-version: 2.9.13\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: python-minor-patch\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": "05dad99c836c6e868da3fa00fa5704cdd5ef534a",
      "tree": "94aa002d7cb679a28e81993eb049d128678de976",
      "parents": [
        "913f2081ebc43174e7f8e9ab3137dabd58105936"
      ],
      "author": {
        "name": "Ullrich Schäfer",
        "email": "hi+github@ullrich.is",
        "time": "Sat Sep 12 04:17:40 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 12 10:17:40 2026 +0800"
      },
      "message": "fix(build): use libgit2\u0027s bundled zlib so the image builds on arm64 hosts (#9132)\n\nBuilding the server image on an arm64 host fails while linking libgit2 for\nthe amd64 target:\n\n    /rootfs-amd64/usr/lib/x86_64-linux-gnu/libz.a(deflate.o): relocation\n    R_X86_64_PC32 against symbol `z_errmsg\u0027 can not be used when making a\n    shared object; recompile with -fPIC\n    ld: final link failed: bad value\n\nlibgit2 is built with BUILD_SHARED_LIBS\u003dON, but the staged cross sysroot\noffers only a static, non-PIC libz.a, which cannot go into a shared\nobject. Point libgit2 at its own bundled zlib for both cross targets; it\nis compiled as part of the shared library and so is position independent.\n\nVerified on an Apple Silicon host: `docker build --platform linux/amd64`\nnow links libgit2.so and proceeds to the Go build, where it failed before.\n\nGenerated-by: Claude Code (Claude Opus 5)\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "913f2081ebc43174e7f8e9ab3137dabd58105936",
      "tree": "35b18693b9ef83011222301203069cef126abee4",
      "parents": [
        "10c20d95167bde563245de8cef7d3451a844f676"
      ],
      "author": {
        "name": "Klesh Wong",
        "email": "klesh@qq.com",
        "time": "Fri Sep 11 23:13:47 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 11 23:13:47 2026 +0800"
      },
      "message": "chore: disable auto-cherrypick (#9131)"
    },
    {
      "commit": "10c20d95167bde563245de8cef7d3451a844f676",
      "tree": "ccef52e5185084f1f5c0f570868a735fa47bb0ba",
      "parents": [
        "43b5728b2ef153e1059efd0c1da8e290da21f003"
      ],
      "author": {
        "name": "Ullrich Schäfer",
        "email": "hi+github@ullrich.is",
        "time": "Fri Sep 11 15:55:02 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 11 21:55:02 2026 +0800"
      },
      "message": "fix(config-ui): group connections by name, not by list position (#9130)\n\nThe A-N and O-Z headings were produced by cutting the plugin list at the\nfirst plugin id starting with a letter from o to z. That agrees with the\nheadings only while each config\u0027s `sort` value runs alphabetically, and it\nstopped doing so as plugins were appended in the order they were added:\nAsana, Kiro, Linear and incident.io are all listed after Opsgenie, so all\nfour appeared under O-Z.\n\nGroup by the first letter of the displayed name instead, which is what a\nreader is matching against, and extract the decision into a pure function\nwith tests.\n\nGenerated-by: Claude Code (Claude Opus 5)\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "43b5728b2ef153e1059efd0c1da8e290da21f003",
      "tree": "d7925e951ece0a40a374f89d067a748060a8d762",
      "parents": [
        "8fe26f46c83a83864249cd0a4c228606e3960aec"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Sep 08 02:02:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 02:02:01 2026 +0800"
      },
      "message": "build(deps): bump sqlglot (#9117)\n\nBumps the python-minor-patch group with 1 update in the /grafana/scripts directory: [sqlglot](https://github.com/tobymao/sqlglot).\n\n\nUpdates `sqlglot` from 30.17.0 to 30.18.0\n- [Commits](https://github.com/tobymao/sqlglot/compare/v30.17.0...v30.18.0)\n\n---\nupdated-dependencies:\n- dependency-name: sqlglot\n  dependency-version: 30.18.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: python-minor-patch\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": "8fe26f46c83a83864249cd0a4c228606e3960aec",
      "tree": "9ebea6d644f970bdf48ebd1da00a824a807ec84b",
      "parents": [
        "e0436a08be94cd8b2830f5edaa050f00fc830746"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Sep 05 15:20:23 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 15:20:23 2026 +0800"
      },
      "message": "build(deps): bump inflect in /backend/python/pydevlake (#9108)\n\nBumps [inflect](https://github.com/jaraco/inflect) from 6.2.0 to 7.5.0.\n- [Release notes](https://github.com/jaraco/inflect/releases)\n- [Changelog](https://github.com/jaraco/inflect/blob/main/NEWS.rst)\n- [Commits](https://github.com/jaraco/inflect/compare/v6.2.0...v7.5.0)\n\n---\nupdated-dependencies:\n- dependency-name: inflect\n  dependency-version: 7.5.0\n  dependency-type: direct:production\n  update-type: version-update:semver-major\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": "e0436a08be94cd8b2830f5edaa050f00fc830746",
      "tree": "6aa9d023c25f64f4a04e98907eb3da17f8688589",
      "parents": [
        "3029f896ef23bb15259ab9f1c8a134721085250b"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Sep 05 15:15:57 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 15:15:57 2026 +0800"
      },
      "message": "build(deps): bump @playwright/test from 1.63.0 to 1.62.1 in /e2e (#9098)\n\nBumps [@playwright/test](https://github.com/microsoft/playwright) from 1.63.0 to 1.62.1.\n- [Release notes](https://github.com/microsoft/playwright/releases)\n- [Commits](https://github.com/microsoft/playwright/compare/v1.63.0...v1.62.1)\n\n---\nupdated-dependencies:\n- dependency-name: \"@playwright/test\"\n  dependency-version: 1.62.1\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: Klesh Wong \u003cklesh@qq.com\u003e"
    },
    {
      "commit": "3029f896ef23bb15259ab9f1c8a134721085250b",
      "tree": "fe5ee1bba08809cc17391343c349863af64c982c",
      "parents": [
        "f0241227e59360c5417d4f109a83700640b5d702"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Sep 05 15:15:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 15:15:28 2026 +0800"
      },
      "message": "build(deps): bump actions/stale from 10 to 11 (#9106)\n\nBumps [actions/stale](https://github.com/actions/stale) from 10 to 11.\n- [Release notes](https://github.com/actions/stale/releases)\n- [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/stale/compare/v10...v11)\n\n---\nupdated-dependencies:\n- dependency-name: actions/stale\n  dependency-version: \u002711\u0027\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: Klesh Wong \u003cklesh@qq.com\u003e"
    },
    {
      "commit": "f0241227e59360c5417d4f109a83700640b5d702",
      "tree": "77b454004e2fa28adf53ee1b62e5116309c44099",
      "parents": [
        "b50cbe6c4686f8567b403302d9bdd219426a1b74"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Sep 05 15:15:13 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 15:15:13 2026 +0800"
      },
      "message": "build(deps): bump actions/checkout from 6 to 7 (#9105)\n\nBumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v6...v7)\n\n---\nupdated-dependencies:\n- dependency-name: actions/checkout\n  dependency-version: \u00277\u0027\n  dependency-type: direct:production\n  update-type: version-update:semver-major\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": "b50cbe6c4686f8567b403302d9bdd219426a1b74",
      "tree": "00f7fd87d9ba2002055210345363afea267bb252",
      "parents": [
        "fb34c9fda508a1ef27c86de0157cbe0b869f9101"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Sep 05 15:14:15 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 15:14:15 2026 +0800"
      },
      "message": "build(deps): bump grafana/grafana from 13.1.3 to 13.2.1 in /grafana (#9103)\n\nBumps grafana/grafana from 13.1.3 to 13.2.1.\n\n---\nupdated-dependencies:\n- dependency-name: grafana/grafana\n  dependency-version: 13.2.1\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: Klesh Wong \u003cklesh@qq.com\u003e"
    },
    {
      "commit": "fb34c9fda508a1ef27c86de0157cbe0b869f9101",
      "tree": "a8fe6de93d91fba72eb7f957f5658d1d99dee23e",
      "parents": [
        "0578745ecb30dff3fef1a972c363c0c5d37aab3b"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Sep 05 15:06:53 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 15:06:53 2026 +0800"
      },
      "message": "build(deps): bump the python-minor-patch group across 2 directories with 2 updates (#9107)\n\nBumps the python-minor-patch group with 1 update in the /backend/python/pydevlake directory: [fire](https://github.com/google/python-fire).\nBumps the python-minor-patch group with 1 update in the /grafana/scripts directory: [sqlglot](https://github.com/tobymao/sqlglot).\n\n\nUpdates `fire` from 0.4.0 to 0.7.1\n- [Release notes](https://github.com/google/python-fire/releases)\n- [Commits](https://github.com/google/python-fire/compare/v0.4.0...v0.7.1)\n\nUpdates `sqlglot` from 30.12.0 to 30.17.0\n- [Commits](https://github.com/tobymao/sqlglot/compare/v30.12.0...v30.17.0)\n\n---\nupdated-dependencies:\n- dependency-name: fire\n  dependency-version: 0.7.1\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: python-minor-patch\n- dependency-name: sqlglot\n  dependency-version: 30.17.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: python-minor-patch\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": "0578745ecb30dff3fef1a972c363c0c5d37aab3b",
      "tree": "43657ae31e58d153315ead62abe8854bf1a6905c",
      "parents": [
        "37dd1c61480a35912d2b64b17b581878102daf83"
      ],
      "author": {
        "name": "Francisc Munteanu",
        "email": "fmuntean@redhat.com",
        "time": "Sat Sep 05 09:00:42 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 15:00:42 2026 +0800"
      },
      "message": "fix(ci): pin docker/* actions to current ASF allowlisted SHAs (#9095)\n\nBuild-Images-Push-Docker fails at startup because the docker/* SHAs\nfrom #8852 were dropped from the ASF allowlist, so v1.0.3-beta16\nimages were never published (#9094).\n\nCo-authored-by: Cursor Grok 4.6 \u003cnoreply@example.com\u003e\nCo-authored-by: Cursor \u003ccursoragent@cursor.com\u003e\nCo-authored-by: Klesh Wong \u003cklesh@qq.com\u003e"
    },
    {
      "commit": "37dd1c61480a35912d2b64b17b581878102daf83",
      "tree": "cfc02d10492968a86cc43979b33045720858562f",
      "parents": [
        "9de8a09a7c034b065622625d416ac3dd128e9bd0"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Sep 05 14:40:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 14:40:26 2026 +0800"
      },
      "message": "build(deps): bump pydevd-pycharm in /backend/python/pydevlake (#9109)\n\nBumps [pydevd-pycharm](https://github.com/JetBrains/intellij-community) from 231.9423.5 to 262.8665.186.\n- [Release notes](https://github.com/JetBrains/intellij-community/releases)\n- [Commits](https://github.com/JetBrains/intellij-community/compare/pycharm/231.9423.5...pycharm/262.8665.186)\n\n---\nupdated-dependencies:\n- dependency-name: pydevd-pycharm\n  dependency-version: 262.8665.186\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: Klesh Wong \u003cklesh@qq.com\u003e"
    },
    {
      "commit": "9de8a09a7c034b065622625d416ac3dd128e9bd0",
      "tree": "d3f1e7ee5febc8e3d22e57b8472cdf691c6d9604",
      "parents": [
        "939c8e7ed2aaf8ef848c00d547f715961383d179"
      ],
      "author": {
        "name": "sanscfs",
        "email": "39997588+sanscfs@users.noreply.github.com",
        "time": "Sat Sep 05 09:40:06 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 14:40:06 2026 +0800"
      },
      "message": "fix(argocd): add CICD DomainTypes to application collect/extract subtasks (#9080)\n\ncollectApplications and extractApplications had no DomainTypes, while the\nconvertApplications / *SyncOperations subtasks carry DomainTypes [CICD].\nBlueprint plan generation (MakePipelinePlanSubtasks) only includes a\nsubtask whose DomainTypes intersect the scope config\u0027s entities (typically\n[\"CICD\"]). With no DomainTypes, the application subtasks were never\ngenerated into the blueprint plan, so _tool_argocd_applications.dest_namespace\nwas never populated and detectEnvironment() classified every ArgoCD\ndeployment as TESTING instead of PRODUCTION.\n\nAdd DomainTypes: [CICD] so the application collect/extract subtasks are\ngenerated alongside the sync-operation ones, letting dest_namespace populate\nnatively.\n\nCo-authored-by: sanscfs \u003csanscfs@users.noreply.github.com\u003e\nCo-authored-by: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\nCo-authored-by: Klesh Wong \u003cklesh@qq.com\u003e"
    },
    {
      "commit": "939c8e7ed2aaf8ef848c00d547f715961383d179",
      "tree": "503a62f14321847f2baa5af76735e480bf492bbf",
      "parents": [
        "84c558100286842e605d3b68325e0506e6a352d5"
      ],
      "author": {
        "name": "Klesh Wong",
        "email": "klesh@qq.com",
        "time": "Sat Sep 05 13:40:45 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 13:40:45 2026 +0800"
      },
      "message": "fix: install libgit2 failed (#9115)"
    },
    {
      "commit": "84c558100286842e605d3b68325e0506e6a352d5",
      "tree": "cdda18f792ebcc53a00473fccfdd494c3aec5bb0",
      "parents": [
        "cc577f3128f0c8270393fad0fc8064384b39f352"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Sep 05 10:05:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 10:05:26 2026 +0800"
      },
      "message": "build(deps): bump actions/cache from 5 to 6 (#9102)\n\nBumps [actions/cache](https://github.com/actions/cache) from 5 to 6.\n- [Release notes](https://github.com/actions/cache/releases)\n- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)\n- [Commits](https://github.com/actions/cache/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/cache\n  dependency-version: \u00276\u0027\n  dependency-type: direct:production\n  update-type: version-update:semver-major\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": "cc577f3128f0c8270393fad0fc8064384b39f352",
      "tree": "e8c37ff284e0dc35d37ed6770a23c393a7007505",
      "parents": [
        "e1449ec2f4ea36a6c9d758ac370a4da983c1a088"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Sep 05 10:04:57 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 10:04:57 2026 +0800"
      },
      "message": "build(deps): bump nginxinc/nginx-unprivileged (#9100)\n\nBumps the docker-patch group with 1 update in the /config-ui directory: nginxinc/nginx-unprivileged.\n\n\nUpdates `nginxinc/nginx-unprivileged` from 1.31.3 to 1.31.5\n\n---\nupdated-dependencies:\n- dependency-name: nginxinc/nginx-unprivileged\n  dependency-version: 1.31.5\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: docker-patch\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": "e1449ec2f4ea36a6c9d758ac370a4da983c1a088",
      "tree": "59bbb0b9ca47cb345900e88008e87ded506e5b5c",
      "parents": [
        "36e3c07703bd238da7e7b0cd7b14351f7ada7926"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Sep 05 10:04:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 10:04:24 2026 +0800"
      },
      "message": "build(deps): bump postgres (#9099)\n\nBumps the compose-minor-patch group with 1 update in the /backend/test/e2e/remote directory: postgres.\n\n\nUpdates `postgres` from 18.4-alpine to 18.6-alpine\n\n---\nupdated-dependencies:\n- dependency-name: postgres\n  dependency-version: 18.6-alpine\n  dependency-type: direct:production\n  dependency-group: compose-minor-patch\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": "36e3c07703bd238da7e7b0cd7b14351f7ada7926",
      "tree": "c083feae203995e7f28c6de1dc37e8ea026b6d93",
      "parents": [
        "04ae22b4c3882a2faccb02b82a0be8b0dc5ffc7d"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Sep 05 10:03:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 10:03:14 2026 +0800"
      },
      "message": "build(deps): bump @types/node from 24.13.2 to 26.4.1 in /config-ui (#9112)\n\nBumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 24.13.2 to 26.4.1.\n- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)\n- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)\n\n---\nupdated-dependencies:\n- dependency-name: \"@types/node\"\n  dependency-version: 26.4.1\n  dependency-type: direct:development\n  update-type: version-update:semver-major\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": "04ae22b4c3882a2faccb02b82a0be8b0dc5ffc7d",
      "tree": "7bbe15f6582b2aea6841000da2f3a87d42cbe44d",
      "parents": [
        "69535edd2d5f416675458fa33f47e271e174deb9"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Sep 05 10:02:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 10:02:48 2026 +0800"
      },
      "message": "build(deps): bump jsdom from 29.1.1 to 30.0.1 in /config-ui (#9113)\n\nBumps [jsdom](https://github.com/jsdom/jsdom) from 29.1.1 to 30.0.1.\n- [Release notes](https://github.com/jsdom/jsdom/releases)\n- [Commits](https://github.com/jsdom/jsdom/compare/v29.1.1...v30.0.1)\n\n---\nupdated-dependencies:\n- dependency-name: jsdom\n  dependency-version: 30.0.1\n  dependency-type: direct:development\n  update-type: version-update:semver-major\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": "69535edd2d5f416675458fa33f47e271e174deb9",
      "tree": "0671c6687edc4fa91ab0166d55cf502dd2eff064",
      "parents": [
        "d1e8aded58922c8d2eead219fca5617331e3e323"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Sep 05 10:02:22 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 10:02:22 2026 +0800"
      },
      "message": "build(deps): bump @testing-library/jest-dom in /config-ui (#9114)\n\nBumps [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) from 6.9.1 to 7.0.1.\n- [Release notes](https://github.com/testing-library/jest-dom/releases)\n- [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/testing-library/jest-dom/compare/v6.9.1...v7.0.1)\n\n---\nupdated-dependencies:\n- dependency-name: \"@testing-library/jest-dom\"\n  dependency-version: 7.0.1\n  dependency-type: direct:development\n  update-type: version-update:semver-major\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": "d1e8aded58922c8d2eead219fca5617331e3e323",
      "tree": "00de5edae621f57c55c439fbe13b593d6c8a7c7a",
      "parents": [
        "340dba78ec2c03c5cdc2cce68fe3b1486f638cb1"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Sep 05 10:01:52 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 10:01:52 2026 +0800"
      },
      "message": "build(deps): bump jsonpointer in /backend/python/pydevlake (#9110)\n\nBumps [jsonpointer](https://github.com/stefankoegl/python-json-pointer) from 2.4 to 3.1.1.\n- [Commits](https://github.com/stefankoegl/python-json-pointer/compare/v2.4...v3.1.1)\n\n---\nupdated-dependencies:\n- dependency-name: jsonpointer\n  dependency-version: 3.1.1\n  dependency-type: direct:production\n  update-type: version-update:semver-major\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": "340dba78ec2c03c5cdc2cce68fe3b1486f638cb1",
      "tree": "e1c0a494a6a6af8d98b3728eeec9f15a9a6457f3",
      "parents": [
        "3ab03f25f47cc4ad1dabdaeef887f1ea832294cc"
      ],
      "author": {
        "name": "Dirk",
        "email": "DoDiDev@proton.me",
        "time": "Sat Sep 05 03:27:37 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 09:27:37 2026 +0800"
      },
      "message": "build(ci): add Dependabot configuration for all package ecosystems (#9089)\n\n* build(ci): add Dependabot configuration for all package ecosystems\n\n* build(ci): keep MySQL on the selected LTS major"
    },
    {
      "commit": "3ab03f25f47cc4ad1dabdaeef887f1ea832294cc",
      "tree": "dc9cd81a6dbf5539bd12e4d61179fe6870fd0b12",
      "parents": [
        "869256888618c315fb03f1a267add37bdd662efd"
      ],
      "author": {
        "name": "Dirk",
        "email": "DoDiDev@proton.me",
        "time": "Fri Sep 04 11:51:54 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 17:51:54 2026 +0800"
      },
      "message": "build(compose): make devlake image registry configurable (#9090)\n\nThe docker-compose-dev-*.yml files pull the pre-built devlake-dashboard and\ndevlake-config-ui images through devlake.docker.scarf.sh, the Scarf gateway\nthat provides download analytics for the project.\n\nIntroduce DEVLAKE_IMAGE_REGISTRY so the registry prefix can be overridden, for\nexample with docker.io to pull directly from Docker Hub. The Scarf gateway\nstays the default and is written inline in the compose files, so a rendered\n`docker compose config` is byte-identical when the variable is unset and\nexisting .env files keep working untouched.\n\nenv.example documents the variable but leaves it commented out on purpose: the\nservices read that file via `env_file`, so an active assignment would also be\ninjected as an environment variable into the running containers.\n\nSigned-off-by: DoDiODev \u003cDoDiDev@proton.me\u003e"
    },
    {
      "commit": "869256888618c315fb03f1a267add37bdd662efd",
      "tree": "06862facfb88abe16cf2ce4061d7ba6a3b9fd52a",
      "parents": [
        "e355317df1f1d40af094d5e9c63d7dc9b5530f83"
      ],
      "author": {
        "name": "Klesh Wong",
        "email": "klesh@qq.com",
        "time": "Fri Sep 04 17:44:15 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 17:44:15 2026 +0800"
      },
      "message": "chore(python): deprecate Python plugin framework (PyDevLake) (#9097)\n\nPhase 1 of the deprecation plan in #9092. Adds deprecation warnings across\nthe codebase to inform users that the Python plugin framework will be\nremoved in 3 months in favor of Go-based plugins.\n\nChanges:\n- backend/python/README.md: add DEPRECATED banner + migration guidance\n- backend/python/plugins/azuredevops/README.md: mark plugin deprecated,\n  point users to azuredevops_go\n- backend/core/runner/loader.go: emit a WARN log line at server startup\n  when remote (Python) plugins are being loaded\n- backend/core/plugin/plugin_meta.go: add PluginDeprecation interface\n- backend/server/services/remote/plugin/plugin_impl.go: implement\n  PluginDeprecation on RemotePlugin so all Python plugins are flagged\n- backend/server/api/plugininfo/plugininifo.go: expose  field\n  on GET /plugins so config-ui can detect deprecated plugins\n- config-ui: add isDeprecated/deprecationMessage to IPluginConfig, mark\n  the azuredevops (Python) plugin deprecated, and render a \u0027Deprecated\u0027\n  badge + message in the Connections page"
    },
    {
      "commit": "e355317df1f1d40af094d5e9c63d7dc9b5530f83",
      "tree": "97bf51d4c53de79b0ba3677096343dbbb1a075c4",
      "parents": [
        "d7ab23559d08e41a59d6638fc7a7f5402c126954"
      ],
      "author": {
        "name": "Klesh Wong",
        "email": "klesh@qq.com",
        "time": "Wed Sep 02 14:27:07 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 14:27:07 2026 +0800"
      },
      "message": "chore: remove the incubator prefix (#9093)\n\n* chore: remove incubator prefix\n\n* fix: linting\n\n* fix: mockery"
    },
    {
      "commit": "d7ab23559d08e41a59d6638fc7a7f5402c126954",
      "tree": "3ed2c64595f46abadd306b87c527d103133fac58",
      "parents": [
        "c8288c0cddb6a6b7abf23607d835aadaa7fe9916"
      ],
      "author": {
        "name": "Warren Chen",
        "email": "warren.chen830@gmail.com",
        "time": "Tue Sep 01 22:32:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 22:32:32 2026 +0800"
      },
      "message": "fix(kiro): align connection status and PostgreSQL dashboards (#9082)\n\n* fix(kiro): report successful connection tests\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n* fix(grafana): repair PostgreSQL Kiro queries\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n---------\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e"
    },
    {
      "commit": "c8288c0cddb6a6b7abf23607d835aadaa7fe9916",
      "tree": "49e455aaefa5a89aac083990fe15433afc90d037",
      "parents": [
        "4bc679efdd332f9a3d1a1e8afb7476d6a4fa9f06"
      ],
      "author": {
        "name": "Joshua Smith",
        "email": "jbsmith7741@gmail.com",
        "time": "Mon Aug 31 21:54:19 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 11:54:19 2026 +0800"
      },
      "message": "feat(cursor): add team usage and cost plugin (#9017)\n\n* feat(cursor): add plugin for team usage and cost collection\n\nSigned-off-by: Joshua Smith \u003cjbsmith7741@gmail.com\u003e\n\n* fix(cursor): Fix members collector infinite loop\n\n  * Set collectMembers PageSize to zero so teams/members is fetched once instead of re-inserting the full roster forever.\n  * Extend connection test to probe members, spend, and usage events Admin API permissions before pipelines run.\n\n* fix(cursor): align extractor raw params and handle fractional requestsCosts\n\nSigned-off-by: Joshua Smith \u003cjbsmith7741@gmail.com\u003e\n\n* feat(grafana): add Cursor usage and cost dashboard\n\nSigned-off-by: Joshua Smith \u003cjbsmith7741@gmail.com\u003e\n\n* feat(cursor): add daily usage and refresh dashboards\n\n  * Add daily usage collector, extractor, and table for per-user adoption metrics.\n  * Reorganize Cursor Usage overview panels and update related Grafana dashboards.\n\nSigned-off-by: Joshua Smith \u003cjbsmith7741@gmail.com\u003e\n\n* feat(cursor): add daily usage line metrics\n\n  * Store accepted, total line, and apply counts from daily usage API with migration.\n  * Add Grafana panels and fix spend reconciliation to include included spend.\n\nSigned-off-by: Joshua Smith \u003cjbsmith7741@gmail.com\u003e\n\n* feat(cursor): add stateful extract and docs\n\n  * Switch usage events and daily usage extractors to StatefulApiExtractor with versioned one-time full re-extract.\n  * Chunk filtered-usage-events into 30-day ranges and add plugin README.\n\nSigned-off-by: Joshua Smith \u003cjbsmith7741@gmail.com\u003e\n\n* feat(grafana): refresh Cursor usage dashboard\n\n  * Align cost panels with currencyUSD and stacked daily on-demand versus included spend.\n  * Document Enterprise AI Code Tracking gaps in the cursor plugin README.\n\nSigned-off-by: Joshua Smith \u003cjbsmith7741@gmail.com\u003e\n\n* build(plugins): cap concurrent CGO plugin builds\n\n  * Limit default parallelism to four with DEVLAKE_PLUGIN_PARALLELISM override to reduce OOM on small hosts.\n  * Add Cursor cost_reconciliation.sql queries and remove obsolete README rak_tools reference.\n\nSigned-off-by: Joshua Smith \u003cjbsmith7741@gmail.com\u003e\n\n* fix(cursor): heal stalled usage extracts\n\n  * Rewind incremental collect by seven days and repair unpromoted raw rows into tool tables\n  * Log collection windows, extract gaps, full sync, and skipped raw rows for pipeline triage\n\nSigned-off-by: Joshua Smith \u003cjbsmith7741@gmail.com\u003e\n\n* style(cursor): fix golangci lint issues\n\n  * Apply gofmt alignment fixes across cursor models, service, and extractors\n  * Remove unused spend response helpers flagged by the unused linter\n\nSigned-off-by: Joshua Smith \u003cjbsmith7741@gmail.com\u003e\n\n* test(e2e): Fix cursor plugin CI failures\n\n  * Set explicit raw row id in cursor extractor e2e so PostgreSQL does not hit duplicate primary key errors.\n  * Register cursor plugin in schema_e2e allGoPlugins so TestAllGoPluginsListed passes.\n\nSigned-off-by: Joshua Smith \u003cjbsmith7741@gmail.com\u003e\n\n* fix(cursor): support Postgres migration separate from mysql\n\n  * Use ALTER COLUMN TYPE on Postgres instead of MySQL-only MODIFY COLUMN syntax.\n  * Unblocks TestMigrationSchemaMatchesModels in the e2e-postgres CI job.\n\nSigned-off-by: Joshua Smith \u003cjbsmith7741@gmail.com\u003e\n\n---------\n\nSigned-off-by: Joshua Smith \u003cjbsmith7741@gmail.com\u003e"
    },
    {
      "commit": "4bc679efdd332f9a3d1a1e8afb7476d6a4fa9f06",
      "tree": "6b758d03406cafec72e9b09d046973835038dd72",
      "parents": [
        "63b6a9b7b317e85867cb9bbccb970a869469b9bb"
      ],
      "author": {
        "name": "Nikita Bolotov",
        "email": "16142581+zyv4yk@users.noreply.github.com",
        "time": "Tue Sep 01 06:53:29 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 11:53:29 2026 +0800"
      },
      "message": "fix(github_graphql): resolve Bot actors so bot-authored PRs keep their author (#9086)\n\n`author`, `mergedBy` and review authors are typed `Actor` in the GitHub\nschema, which `Bot` implements alongside `User`. The inline query spread\nonly `... on User`, so every pull request, issue and review opened by a\nGitHub App, Dependabot or Renovate came back with an empty selection set\nand was stored with no author at all.\n\n`... on Bot` cannot simply be added to the existing query: GitHub rejects\nthe whole request with \"Fragment on Bot can\u0027t be spread inside User\" when\nit is spread on a `User`-typed field such as assignees or a commit author.\nActor fields therefore get their own GraphqlInlineActorQuery, and both\ntypes resolve through an Account() accessor.\n\nBot logins are normalized to the `[bot]` suffix the REST collector stores,\nso an account keeps one identity across collectors, and the accounts\nlookup skips bot logins because `user(login:)` never resolves them.\n\nFixes #9085\n\nCo-authored-by: Claude Opus 5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "63b6a9b7b317e85867cb9bbccb970a869469b9bb",
      "tree": "4eb69f0a2971a6ed8d9754511ad5dc1efcdf1001",
      "parents": [
        "79ef9f4fa1b513de03a0cc7776c23fd9d9fb6488"
      ],
      "author": {
        "name": "Francisc Munteanu",
        "email": "fmuntean@redhat.com",
        "time": "Tue Sep 01 05:34:22 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 11:34:22 2026 +0800"
      },
      "message": "fix(gitlab): use stateful extractors for users and tags (#9070)\n\nNewApiExtractor always deleted tool-layer rows by raw params before insert,\nso a truncated Collect Users run wiped accounts. NewStatefulApiExtractor\nupserts incrementally, matching the rest of the GitLab plugin.\n\nCo-authored-by: Cursor Grok 4.6 \u003cnoreply@example.com\u003e\nCo-authored-by: Cursor \u003ccursoragent@cursor.com\u003e"
    },
    {
      "commit": "79ef9f4fa1b513de03a0cc7776c23fd9d9fb6488",
      "tree": "e2778c56e2d4c33047afebaf5344c4416ecb53e6",
      "parents": [
        "aaf05fc564c0fe22ee0b0647fb14015b6b3bbe7d"
      ],
      "author": {
        "name": "Klesh Wong",
        "email": "klesh@qq.com",
        "time": "Mon Aug 31 12:24:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 12:24:48 2026 +0800"
      },
      "message": "chore: remove the dbt plugin and alpine-dbt docker image (#8970) (#9084)\n\nRemove the deprecated dbt plugin from the backend, its alpine-dbt\nDocker image, the config-ui example entry, and the dbt-mysql /\ndbt-postgres Python dependencies. Update the plugin registration\ntest lists (table_info, schema_e2e, server_startup) accordingly."
    },
    {
      "commit": "aaf05fc564c0fe22ee0b0647fb14015b6b3bbe7d",
      "tree": "2e56e76d00d888977625580997c3a2a81a0c98b1",
      "parents": [
        "f110addad86930c4c792a3d22051e922346f3656"
      ],
      "author": {
        "name": "Warren Chen",
        "email": "warren.chen830@gmail.com",
        "time": "Fri Aug 28 23:50:00 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 23:50:00 2026 +0800"
      },
      "message": "chore: remove the q_dev plugin (#9079)\n\n* feat(kiro): add S3 collection and plugin APIs\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n* feat(config-ui): add Kiro connection support\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n* feat(grafana): add core Kiro dashboards\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n* feat(grafana): migrate Kiro engineering dashboards\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n* chore: remove the q_dev plugin\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n* fix(kiro): use portable timestamp precision\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n* fix(config-ui): deduplicate Kiro registration\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n---------\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e"
    },
    {
      "commit": "f110addad86930c4c792a3d22051e922346f3656",
      "tree": "3080e07e2bab1e461f73086cb442a34318d6c390",
      "parents": [
        "168ee34f9847f71bc108890c2cb4759b5a4bc32b"
      ],
      "author": {
        "name": "Warren Chen",
        "email": "warren.chen830@gmail.com",
        "time": "Fri Aug 28 17:44:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 17:44:24 2026 +0800"
      },
      "message": "feat(grafana): migrate Kiro engineering dashboards (#9078)\n\n* feat(kiro): add S3 collection and plugin APIs\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n* feat(config-ui): add Kiro connection support\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n* feat(grafana): add core Kiro dashboards\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n* feat(grafana): migrate Kiro engineering dashboards\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n* fix(kiro): use portable timestamp precision\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n* fix(kiro): keep q_dev in table info checks\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n---------\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e"
    },
    {
      "commit": "168ee34f9847f71bc108890c2cb4759b5a4bc32b",
      "tree": "ca614d5e464dc7438d20bbeda7b5ea6171170994",
      "parents": [
        "0642b594f049b344ad0d45a9811733c17abd63e7"
      ],
      "author": {
        "name": "Warren Chen",
        "email": "warren.chen830@gmail.com",
        "time": "Fri Aug 28 17:44:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 17:44:04 2026 +0800"
      },
      "message": "feat(grafana): add core Kiro dashboards (#9077)\n\n* feat(kiro): add S3 collection and plugin APIs\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n* feat(config-ui): add Kiro connection support\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n* feat(grafana): add core Kiro dashboards\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n* fix(kiro): use portable timestamp precision\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n* fix(kiro): keep q_dev in table info checks\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n---------\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e"
    },
    {
      "commit": "0642b594f049b344ad0d45a9811733c17abd63e7",
      "tree": "6832893bacbb33201ad532bfc68cc76f774b64cf",
      "parents": [
        "825a81ca6465e12df8590b494ebda679d882278b"
      ],
      "author": {
        "name": "Warren Chen",
        "email": "warren.chen830@gmail.com",
        "time": "Fri Aug 28 17:43:47 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 17:43:47 2026 +0800"
      },
      "message": "feat(config-ui): add Kiro connection support (#9076)\n\n* feat(kiro): add S3 collection and plugin APIs\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n* feat(config-ui): add Kiro connection support\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n* fix(kiro): use portable timestamp precision\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n* fix(kiro): keep q_dev in table info checks\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n---------\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e"
    },
    {
      "commit": "825a81ca6465e12df8590b494ebda679d882278b",
      "tree": "fa5033d77e536197da963636ffddd3f8c015afa1",
      "parents": [
        "065206eedfbf232457fd6f3b6ec4f344724c57bb"
      ],
      "author": {
        "name": "Warren Chen",
        "email": "warren.chen830@gmail.com",
        "time": "Thu Aug 27 18:57:41 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 18:57:41 2026 +0800"
      },
      "message": "feat: add Kiro commit attribution helper (#9074)\n\n* feat: add Kiro commit attribution helper\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n* fix: add Apache license headers\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e\n\n---------\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e"
    },
    {
      "commit": "065206eedfbf232457fd6f3b6ec4f344724c57bb",
      "tree": "5a168c4854320461160f73848857fdeb3a53c127",
      "parents": [
        "d4b31f1ede5bc326d8ae4893e1a79b0599c51f05"
      ],
      "author": {
        "name": "Warren Chen",
        "email": "warren.chen830@gmail.com",
        "time": "Thu Aug 27 18:57:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 18:57:26 2026 +0800"
      },
      "message": "feat(kiro): add core models and report parser (#9073)\n\nSigned-off-by: warren \u003cwarren.chen830@gmail.com\u003e"
    },
    {
      "commit": "d4b31f1ede5bc326d8ae4893e1a79b0599c51f05",
      "tree": "333626bce0829dd444e9c687827e12f0caf5ce5a",
      "parents": [
        "c2b0b171d71ef191ece4b92a95539b2a3c49f1fd"
      ],
      "author": {
        "name": "Dirk",
        "email": "DoDiDev@proton.me",
        "time": "Wed Aug 26 05:54:15 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 11:54:15 2026 +0800"
      },
      "message": "build(deps): maintain Go dependencies and migrate mapstructure v2 (#9061)\n\n* build(deps): bump x/mod to v0.40.0\n\n* build(deps): update gorm postgres driver\n\n* build(deps): update go-oidc\n\n* refactor(deps): replace mapstructure with go-viper v2\n\n* fix(db): keep postgres index drops compatible with updated GORM\n\n* fix: make mysql schema migrations idempotent\n\nSigned-off-by: DoDiODev \u003cDoDiDev@proton.me\u003e\n\n* fix(db): keep AutoMigrate from redefining the mysql primary key\n\ngorm.io/driver/mysql v1.6.0 appends \u0027ADD PRIMARY KEY\u0027 to every column added by\nAutoMigrate that carries the primaryKey tag. DevLake migration scripts add such\ncolumns to tables that already own a primary key, so MySQL rejected them with\n\u0027Error 1068: Multiple primary key defined\u0027.\nWrap the MySQL dialector so AddColumn keeps the pre-v1.6.0 behaviour: the\nprimary key is only created for AUTO_INCREMENT columns on tables without one,\nevery other primary key change stays with the migration scripts.\n\nSigned-off-by: DoDiODev \u003cDoDiDev@proton.me\u003e\n\n---------\n\nSigned-off-by: DoDiODev \u003cDoDiDev@proton.me\u003e"
    },
    {
      "commit": "c2b0b171d71ef191ece4b92a95539b2a3c49f1fd",
      "tree": "aa108d602cdbc8f42b435a35396b64af4d03e459",
      "parents": [
        "6da478b5491e0308a39539e08949313396776507"
      ],
      "author": {
        "name": "Dirk",
        "email": "DoDiDev@proton.me",
        "time": "Tue Aug 25 17:38:00 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 23:38:00 2026 +0800"
      },
      "message": "build(ci): consolidate database, builder and mockery pins (#9069)\n\n* build(ci): pin active database images\n\n* ci(builder): refresh runner and login action\n\n* build(deps): bump mockery to 3.7.4\n\nFollow-up to #9029, which introduced mockery v3.7.2. All active\ninstallation sites move to v3.7.4 in lockstep so the CI bootstrap, the\nMakefile target and the builder images stay on a single version:\n\n- .github/workflows/test.yml, .github/workflows/golangci-lint.yml\n- backend/scripts/install-mockery.sh (incl. release SHA-256 sums)\n- backend/Makefile (go-dep)\n- backend/Dockerfile.local, devops/docker/lake-builder/Dockerfile\n\nThe pinned archive checksums were verified against the official\nvektra/mockery v3.7.4 checksum.txt. \"make mock\" regenerates all 65 mock\nfiles without any diff, so no generated code is part of this commit."
    },
    {
      "commit": "6da478b5491e0308a39539e08949313396776507",
      "tree": "d8a43b3b5e404ca239c24e9e30fe787ae8b54ba1",
      "parents": [
        "c9721ee11f00ce311e4fc122492baa177d16618a"
      ],
      "author": {
        "name": "bujjibabukatta",
        "email": "bujjibabukatta6@gmail.com",
        "time": "Mon Aug 24 13:08:46 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 01:08:46 2026 +0800"
      },
      "message": "fix(server,asana): surface real /proceed-db-migration error instead of bare 500 (#9068)"
    },
    {
      "commit": "c9721ee11f00ce311e4fc122492baa177d16618a",
      "tree": "a1715d1b5c3fdb137e164cd33341a2a273e6982d",
      "parents": [
        "ca79876d65ffa8aa3c743d6ea96f95834ecbf7a1"
      ],
      "author": {
        "name": "Francisc Munteanu",
        "email": "fmuntean@redhat.com",
        "time": "Fri Aug 21 05:42:29 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 11:42:29 2026 +0800"
      },
      "message": "fix(jira): honor EpicKeyField when extracting issues (#9067)\n\nEpicKeyField is already on Jira scope config and in the Config UI, but\nextractIssues never applied it, so Cloud/Parent Link epics stayed empty.\n\nCo-authored-by: Cursor Grok 4.6 \u003cnoreply@example.com\u003e\nCo-authored-by: Cursor \u003ccursoragent@cursor.com\u003e"
    }
  ],
  "next": "ca79876d65ffa8aa3c743d6ea96f95834ecbf7a1"
}
