What's Changed
- feat(executor): register user-supplied env values for masking by @rajatoss in #19644
- fix(executor): forward the stdin secrets envelope to CLIs that support it by @rajatoss in #19645
- perf(mcp): Improve a bit of efficiency during MCP validation by @supradeep-datahub in #19397
- fix(zdu): make rollback dual-write actually run in the MAE consumer by @gdatahub in #19631
- fix(quickstart): zombies due to healthcheck running as background process by @chakru-r in #19654
- feat(platforms): register missing data platforms and show them in the home Platforms module by @max-datahub in #19650
- feat(release): optional SHA input for Cut Branch workflow by @anshbansal in #19663
- fix(ingestion/postgres): map PostGIS, pgvector, geometric, xml, ltree, citext, cidr and range types instead of NullType by @minleejae in #18577
- fix(i18n): show custom ownership type names verbatim instead of appending an English "s" by @max-datahub in #19657
- test(smoke): mark the p0 tests selected by domain leads by @sachetansabhahit in #19579
- ci(smoke): run only p0 smoke tests on PRs when PYTEST_P0_SMOKE is set by @sachetansabhahit in #19587
- ci(smoke): add the run-all-tests PR label to opt out of the p0 tier by @sachetansabhahit in #19599
- fix(analytics): emit numeric date ranges and boolean terms for ES8 by @david-leifker in #19676
- fix(openapi): reject unregistered aspects on v3 entity writes by @david-leifker in #19628
- feat(ingest/sap): shared sap_common EDMX parsing + SAC acquired-model schema by @acrylJonny in #18678
- docs(release): add v1.7.0.1 release notes by @david-leifker in #19608
- feat(ingest/sac): emit SAC → SAP Datasphere (DWC) live-model lineage by @acrylJonny in #18646
- fix(ingest/documents): keep pages retryable when inline embedding fails by @alexjst in #19656
- fix(i18n): localize product update toast (CAT-3070) by @benjiaming in #19612
- feat(search-v3): hash entity document _id instead of URL-encoded URN by @david-leifker in #19679
- fix(cli): allow ingest-sample-data without ~/.datahubenv by @david-leifker in #19705
- fix(cli): accept four-part quickstart --version tags without confirmation by @david-leifker in #19704
- feat(search-v3): hash document ids and align V3 indices with V2 per-entity splits by @david-leifker in #19708
- fix(cli): use quickstart GMS default for datapack load and dry-run by @david-leifker in #19710
- fix(ingest): don't crash the run summary on a closed shared schema resolver by @agarwal-shreyas in #19406
- feat(ingest): table-level fallback and self-loop guard for view definitions by @agarwal-shreyas in #19661
- refactor(ui): consolidate app/businessAttribute schema description field by @v-tarasevich-blitz-brain in #19695
- refactor(ui): consolidate app/onboarding with the Acryl fork by @v-tarasevich-blitz-brain in #19699
- refactor(ui): consolidate app/mfeframework with the fork by @v-tarasevich-blitz-brain in #19698
- test(zdu): cover the standalone-consumer topology in compose profiles and the nightly ZDU job by @gdatahub in #19675
- feat(ui/policies): add support for adding and displaying conditions in policy builder and update UI to use component library by @purnimagarg1 in #19696
- fix(graphql): isolate secret decryption failures in getSecretValues by @Danishlynx in #19539
- feat(components): bring back alchemy components and common changes from metadata tests PR by @purnimagarg1 in #19702
- fix(pgqueue): backoff empty polls per consumer topic by @david-leifker in #19673
- fix(auth): mutate view-unrestricted defaults via ADD/REMOVE overlays by @david-leifker in #19717
- fix(product-updates): replace 404 Cloud toast CTA and gate link reachability (CUS-10161) by @benjiaming in #19711
- fix(auth): let Edit Domain alone authorize domain changes by @david-leifker in #19719
- feat(metrics): grouping in the metrics sidebar by @annadoesdesign in #19620
- test(ui/lineage): Add more playwright test coverage by @asikowitz in #19707
- fix(otel): preserve OTEL_RESOURCE_ATTRIBUTES on factory TracerProvider by @craig-rueda in #19724
- feat(profiling): flatten same-shape aggregates behind a flag by @kyungsoo-datahub in #18707
- docs: fix datahub-dev.sh paths by @bmaquet in #17661
- refactor(ui): consolidate app/previewV2 by @v-tarasevich-blitz-brain in #19648
- refactor(ui): consolidate app/browse with the SaaS fork by @v-tarasevich-blitz-brain in #19671
- refactor(ui): consolidate app/glossary with the SaaS fork by @v-tarasevich-blitz-brain in #19669
- refactor(ui): consolidate app/analyticsDashboard with SaaS by @v-tarasevich-blitz-brain in #19649
- refactor(ui): consolidate app/analyticsDashboardV2 with SaaS by @v-tarasevich-blitz-brain in #19651
- refactor(ui): consolidate app/lineage with the SaaS fork by @v-tarasevich-blitz-brain in #19652
- refactor(ui): consolidate app/recommendations by @v-tarasevich-blitz-brain in #19660
- refactor(ui): consolidate app/metrics with the fork by @v-tarasevich-blitz-brain in #19662
- refactor(ui): consolidate app/domain with the SaaS frontend by @v-tarasevich-blitz-brain in #19665
- refactor(ui): consolidate app/glossaryV2 with the Acryl fork by @v-tarasevich-blitz-brain in #19714
- refactor(ui): consolidate app/document with the SaaS fork by @v-tarasevich-blitz-brain in #19716
- docs(managed-datahub): release notes for v2.1.6 by @david-leifker in #19739
- feat(gms): optionally omit oversized structured properties from search by @david-leifker in #19727
- fix(deps): bump Spring Framework 7.0.9, Boot 4.0.8, and Security 7.0.7 by @david-leifker in #19742
- fix(deps): bump Apache Parquet to 1.18.1 for CVE-2026-73334 by @david-leifker in #19743
- fix(ui): updated the resources section by @annadoesdesign in #19718
- fix(search): skip reindex stall retry while ES task is unresolved by @david-leifker in #19741
- docs(managed-datahub): release notes for v2.2.1 by @devashish2203 in #19686
- ci: default GitHub Actions Python to 3.11 by @devashish2203 in #19738
- feat(darkmode): updated colors for darkmode by @annadoesdesign in #19744
- fix(graphql): require asset summary privilege for updateAssetSettings by @supersingh05 in #19745
- fix(graphql): require Manage Compliance Forms privilege for form assignment mutations by @supersingh05 in #19746
- fix(openapi): require Analytics API access privilege for raw analytics search by @supersingh05 in #19749
- feat(embedding): add in-process ONNX embedding provider by @alexjst in #19722
- feat(ingest/sac): column-level lineage to SAP Datasphere for DWC live models by @acrylJonny in #18677
- chore(test): Update test weights from CI runs (2026-09-13) by @github-actions[bot] in #19756
- refactor(ingest/bigquery): partition discovery metadata layer (stack 5/9) by @acrylJonny in #19482
- feat(embedding): ship ONNX/DJL only in dedicated ONNX image variants [PFP-3657] by @alexjst in #19753
- fix(ingest): switch MinIO images from Docker Hub to Quay.io by @sgomezvillamor in #19761
- fix(examples): enable mypy on metadata-ingestion/examples and fix the broken ones by @sgomezvillamor in #19637
- feat(i18n): add Russian (ru) locale [Beta] by @denish1204 in #19171
- feat(search): support OpenSearch 3.x via a unified OpenSearch client shim by @alexjst in #19748
- fix(tableau): ingest project container owners when ingest_owner is true by @jjjeong in #19275
- fix(metadata-io): wire Gradle 9 suite Test tasks so CI actually runs by @david-leifker in #19765
- test(metrics): add Playwright coverage for Metrics experience by @ani-malgari in #19726
- fix(gms): reuse a process-wide AWS credential chain to stop IRSA provider leaks by @david-leifker in #19747
- docs(mcp): document connecting clients to a scoped MCP server URL by @nwadams in #19766
- fix(graphql): drop un-mappable search hits instead of nulling the whole page by @alexsku in #19767
- chore(ingest): hygiene fixes across ingestion examples, docs, and tests by @puneetagarwal-datahub in #19697
- perf(gms): Remove line numbers from logback patterns for perf reasons by @supradeep-datahub in #19713
- feat(ingest/dataplex): support the Dataplex Metadata Export API extraction method by @TejasRGitHub in #18540
- fix(metadata-io): fill missing search config blocks in test fixture by @Ashish37-sh in #19769
- fix(sdk): use DataFlow URN as DataJob browse path entry id by @acrylJonny in #18924
- feat(ingest/sap-datasphere): surface calculated column formula in column description by @acrylJonny in #19763
- fix(docs): replace site-absolute links with relative paths in connector docs by @sgomezvillamor in #19780
- feat(config): per-operation configuration reads via ConfigEnrichment by @Ashish37-sh in #19732
- fix(ingest/dbt): read semantic model meta from config.meta instead of top-level by @sgomezvillamor in #19782
- fix(documents): keep the agent docs parent folder out of soft-delete by @jjoyce0510 in #19791
- docs(managed-datahub): release notes for v2.1.7 by @david-leifker in #19792
- fix(ingestion/mongodb): map unmapped BSON native types instead of falling back to unknown/NullType by @minleejae in #18572
- feat(search): add opt-in classical embedding provider for CI and smoke tests by @alexjst in #19759
- perf(schema): speed up schema tab grouping and editable field lookups by @benjiaming in #19125
- fix: Eager load single JSON per language by @benjiaming in #19709
- fix(ingest/snowflake): derive dynamic-table lineage from its definition, not the query log by @agarwal-shreyas in #19576
- fix(groups): correct group member removal and migration, and batch their DB round trips by @gdatahub in #18982
- build(ingest): remove setuptools<82 cap, support setuptools>=83 by @agarwal-shreyas in #19601
- refactor(ui): consolidate app/applications with the SaaS fork by @v-tarasevich-blitz-brain in #19670
- refactor(ui): consolidate app/domainV2 with the SaaS fork by @v-tarasevich-blitz-brain in #19772
- refactor(ui): consolidate app/permissions with the SaaS fork by @v-tarasevich-blitz-brain in #19773
- refactor(ui): consolidate app/identity with the SaaS fork by @v-tarasevich-blitz-brain in #19774
- refactor(ui): consolidate app/lineageV3 with the SaaS fork by @v-tarasevich-blitz-brain in #19775
- refactor(ui): consolidate app/homeV3 with the SaaS fork by @v-tarasevich-blitz-brain in #19776
- refactor(ui): consolidate app/searchV2 with the SaaS fork by @v-tarasevich-blitz-brain in #19778
- refactor(ui): consolidate app/search with the SaaS fork by @v-tarasevich-blitz-brain in #19779
- refactor(ui): consolidate app/ingest with the SaaS fork by @v-tarasevich-blitz-brain in #19781
- refactor(ui): consolidate app/ingestV2 with the SaaS fork by @v-tarasevich-blitz-brain in #19785
- perf(gms): Fix some CPU hotspots on the MCP ingestion path by @supradeep-datahub in #19783
- feat(homepage): raise Domains module cap from 5 to 25 by @max-datahub in #19771
- docs(managed-datahub): withdraw Remote Executor v2.1.6-cloud from recommended versions by @rajatoss in #19811
- feat(policies): add support for structured properties in policies by @purnimagarg1 in #19737
- feat(metrics): model column-level lineage on metricUpstreams by @ani-malgari in #19751
- fix(groups): preserve migration failure cause on group member removal by @gdatahub in #19798
- fix(ingest/sigma): restore Dataset warehouse lineage after dataset deprecation by @kyungsoo-datahub in #19815
- feat(lineage): guardrail for graph-query timeouts (distinct error + metric + PIT robustness) by @max-datahub in #19799
- ci: nest pytest domain markers in PostHog test-failure events by @devashish2203 in #19819
- feat(ingest/powerbi): resolve BigQuery EXTERNAL_QUERY federation lineage by @NehaGslab in #18782
- feat(platform): give Kafka Connect a distinct logo by @max-datahub in #19821
- chore(ci/kafka-connect): bump Kafka/Kafka Connect test cluster to CP 7.9.10 + modern connectors by @max-datahub in #19829
- refactor(ui): consolidate app/homeV2 with the SaaS fork by @v-tarasevich-blitz-brain in #19777
- refactor(ui): consolidate app/homeV3 with the SaaS fork by @v-tarasevich-blitz-brain in #19806
- refactor(ui): consolidate app/govern with the SaaS fork by @v-tarasevich-blitz-brain in #19807
- feat(python): Enable ingestion of structured properties settings by @DiogoVala in #13732
- refactor(ingest/profiling): simplify formatting in SQLAlchemy profiler by @sgomezvillamor in #19789
- fix(search): warn when all of a search request's results fail existence checks by @chakru-r in #19827
- feat(policies): improvements in policies and related components by @purnimagarg1 in #19832
- fix(ingest/bigquery): read require_partition_filter from the table-level field by @avery-datahub in #19524
- fix(domains): detach leftover domain refs after Domain delete by @ani-malgari in #19796
- fix: narrow dependent config types by @benjiaming in #19793
- test(metadata-io): re-enable excluded lineage and index-builder base tests by @alexjst in #19794
- fix(ingest/documents): cap per-document semanticContent chunks under the Kafka size floor by @alexjst in #19797
- feat(metrics): model consumer-owned Metric downstream lineage by @ani-malgari in #19818
- feat(i18n): add Traditional Chinese (zh-TW) by @benjiaming in #19532
- fix(i18n): register ru/zh-CN cron locales and guard locale wiring by @max-datahub in #19762
- feat(bigquery): emit datasetProfile for materialized views by @alokr-dhub in #19514
- fix(ui): prevent Access Management columns from clipping on narrow screens by @max-datahub in #19822
- fix(ingest/git): skip private clone test on empty SSH key, not just None by @alokr-dhub in #19849
- fix(ui): fetch applications on the Data Product query by @max-datahub in #19808
- fix(i18n): add zh-TW product-update copy and run locale sync pre-merge by @devashish2203 in #19850
- docs(managed-datahub): release notes for v2.2.2 by @sachetansabhahit in #19851
- fix(ingest/dbt): resolve real container path for target-platform siblings by @JohnRTurner in #19547
- docs(snowflake): add key-pair auth migration guide by @alokr-dhub in #19692
- ci(product-update): skip heavy CI for toast JSON and cigate by @devashish2203 in #19854
- fix(policies): fix new policy not appearing at the top by @purnimagarg1 in #19855
- feat(frontend): add opt-in Play security headers via env vars by @kewats in #19848
- perf(schema-tab): load schema incrementally to fix slow loading for datasets with many columns by @rob-1019 in #18908
- perf(graphql): stream GraphQL responses via message converter to cap GMS heap by @kewats in #19825
- ci: replace unpublished cloudflare pages-action with wrangler-action by @david-leifker in #19866
- feat(darkmode): updates on dark mode colors and beta tag by @annadoesdesign in #19864
- fix(ingest/cassandra): decode bytes in extensions map to avoid JSON serialization error by @max-datahub in #19863
- feat(cli): add
migrate schema-field-caseto re-anchor column metadata after casing changes by @acrylJonny in #19795 - feat(search): resolve search clients via OperationContext by @david-leifker in #19764
- feat(ui/lineage): Support column -> entity (metric) lineage by @asikowitz in #19847
- feat(lineage): write Metric-as-upstream edges through updateLineage by @ani-malgari in #19839
- feat(search): dual-write document embeddings onto Search V3 by @david-leifker in #19837
- feat(search)!: drop Elasticsearch 7 as a GMS search backend by @david-leifker in #19865
- fix(docker): regenerate quickstart compose for resolved AWS env defaults by @david-leifker in #19871
- feat(structured-properties): preserve allowed value order by @annadoesdesign in #19844
- chore(ingestion): raise grpcio minimum to 1.84.0 by @david-leifker in #19874
- feat(lineage): enable manual Metric downstream lineage in the UI by @ani-malgari in #19875
- fix(ingest/bigquery): detect linked datasets with schema metadata off by @agarwal-shreyas in #19836
- fix(opcontext): build request-scoped OperationContext in controllers and consumers instead of passing raw systemOperationContext by @Dutt23 in #19858
- chore(test): Update test weights from CI runs (2026-09-20) by @github-actions[bot] in #19877
- docs(ingest/airflow): document the plugin changelog per released version by @treff7es in #19860
- docs(ingest/spark): document the agent changelog per released version by @treff7es in #19859
- perf(graphql): Introduce GraphQL Query document caching by @supradeep-datahub in #19820
- ci(smoke-test): pack pytest batches by loadscope makespan by @devashish2203 in #19857
- feat(ingest/odcs): emit native DataHub data contracts for ODCS by @acrylJonny in #18480
- fix(ingest): filter unsupported data lake file types by @yianni in #19516
- ci(test): group weekly test-weight PR stats by JSON file by @devashish2203 in #19884
- feat(ingest/odcs): add contract datasets to their Data Product as output ports by @acrylJonny in #18723
- feat(snowflake): show password-auth deprecation banner in UI by @alokr-dhub in #19694
- chore(ingestion): upgrade confluent-kafka to 2.15.1 by @david-leifker in #19873
- feat(pgqueue): in-memory queue store for Docker-free local dev and CI by @shirshanka in #19878
- ci(product-update): gate CTA 404s only when toast JSON changes by @benjiaming in #19869
- perf(recommendations): request only needed HOME recommendation modules by @benjiaming in #19267
- fix(ingestion): upgrade unstructured to 0.24.1 for CVE-2026-71428 by @david-leifker in #19554
- ci: fold AI embedding smoke tests into docker-unified by @devashish2203 in #19621
- fix(ingest): add iter_entry_points to the pkg_resources shim by @agarwal-shreyas in #19896
- feat(ingest/sigma): expose every segment of a bracket reference by @kyungsoo-datahub in #19786
- perf(search): use lightweight lineage counts in search Summary by @benjiaming in #19876
- feat(metrics): enable Metrics by default and add Beta nav badge by @ani-malgari in #19901
- fix(ui): documentation padding by @annadoesdesign in #19903
- docs(context): add context public beta user guide by @manuelawei8 in #19893
- docs(schemaField): correct entity auto-creation and fetch-flag claims by @yjyspree in #19276
- feat(snowflake): warn on password-auth deprecation in CLI by @alokr-dhub in #19693
- perf(ingest/aws): reuse the S3 client in AwsConnectionConfig by @max-datahub in #19496
- fix(openapi): resolve $refs under patternProperties for map schemas by @acrylJonny in #19383
- refactor(smoke-test): share batch packing and dump collect-only shard plans by @devashish2203 in #19914
- refactor(ingest/profiling): drop Great Expectations naming from shared profiling code by @sgomezvillamor in #19891
- docs(ingest): add user-facing docs for the set_attribution transformer by @sgomezvillamor in #19912
- refactor(ui): consolidate app/entityV2 with the SaaS fork by @v-tarasevich-blitz-brain in #19833
- refactor(settings): give settingsPaths an extension point for extra pages by @v-tarasevich-blitz-brain in #19834
- refactor(ui): converge app/entity, app/entityV2 and alchemy-components with SaaS by @v-tarasevich-blitz-brain in #19862
- fix(ingest/dataplex): fix lookupEntryLinks request and attach glossary terms to containers by @sgomezvillamor in #17553
- fix(ingestion/looker): default transport_options.headers to empty dict by @alokr-dhub in #19659
- docs: update entity change event category from OWNER to OWNERSHIP by @NehaGslab in #19911
- fix(ingest): drop the sqlglot requirement from auto_resolve_lineage_urns by @aviraj-gour in #19882
- fix(auth-api): repair javadoc reference that blocks the jar release by @treff7es in #19917
- chore(security): bump Bouncy Castle jdk18on to 1.86 by @david-leifker in #19924
- fix(search): use aggregation entity's valueType for structured-property bucket display names by @rob-1019 in #18973
- chore(security): bump anyio>=4.14.2 and soupsieve>=2.9.0 by @david-leifker in #19925
- fix(graphql): authorize patchEntity by URN type with Edit Entity or the type's management privilege by @supersingh05 in #19872
- chore(security): raise deepdiff and click floors for CVEs by @david-leifker in #19928
- fix(ingest/deps): move pip to 26.2 for CVE-2026-13346 by @rajatoss in #19918
- fix(ingest): raise snowflake-connector-python floor to 4.7.1 for CVE-2026-15925 by @rajatoss in #19921
- perf(gms): Turn off GMS debug logs by default by @supradeep-datahub in #19908
- fix(ingest/tests): prune each module's docker images after its compose suites by @naeemdh in #19735
- ci(smoke-test): split entity graph cache tests and raise full-suite batches to 9 by @devashish2203 in #19915
- docs: fix typo arbitary -> arbitrary by @vaibhav8a in #19511
- fix(ingest/airflow): stop duplicating OpenLineage facet extraction by @treff7es in #19910
- fix(platform): add Azure Blob Storage metadata by @yianni in #19416
- perf(structured-properties): page, filter and lazily hydrate property values; searchable pickers by @rob-1019 in #19900
- chore(security): bump libthrift to 0.24.0 for CVE-2026-48586 by @david-leifker in #19932
- fix(actions): handle SIGTERM so container stops shut down cleanly by @max-datahub in #19402
- fix(auth): require Manage User Credentials to read corpUserCredentials on every API by @supersingh05 in #19931
- fix(ingest/documents): don't fail the run when orphans fill a hydration batch by @nwadams in #19944
- feat(ingest/openapi): typed get_token config + credential-leak hardening by @acrylJonny in #19905
- fix(search): normalize adjust_pure_negative in Elasticsearch 8 kNN filters by @alexjst in #19935
- feat(search): serve semantic search from the Search V3 document index by @alexjst in #19934
- fix(events): include sourceDetails in documentation ECE parameters by @shirshanka in #19936
- perf(ui): tree-shake lodash via per-function imports by @benjiaming in #19904
- feat(ingest/openapi): harden malformed-input handling by @acrylJonny in #19906
- fix(search): pre-filter Elasticsearch kNN queries by @alexjst in #19938
- fix(ingest/looker): preserve cross-project view project assignment in explore lineage by @alokr-dhub in #19306
- build(deps): bump dompurify from 3.2.4 to 3.4.0 in /datahub-web-react by @dependabot[bot] in #17046
- build(deps): bump picomatch from 2.3.1 to 2.3.2 in /docs-website by @dependabot[bot] in #16794
- build(deps): bump node-forge from 1.3.1 to 1.4.0 in /docs-website by @dependabot[bot] in #16805
- build(deps): bump brace-expansion from 1.1.11 to 1.1.13 in /docs-website by @dependabot[bot] in #16817
- build(deps): bump follow-redirects from 1.15.6 to 1.16.0 in /docs-website by @dependabot[bot] in #17012
- build(deps): bump basic-ftp from 5.2.0 to 5.3.1 in /docs-website by @dependabot[bot] in #17345
- chore(deps): bump joi from 17.12.3 to 17.13.7 in /docs-website by @dependabot[bot] in #19681
- build(deps): bump yaml from 1.10.2 to 1.10.3 in /docs-website by @dependabot[bot] in #16783
- chore(deps): bump baseline-browser-mapping from 2.9.19 to 2.11.21 in /docs-website by @dependabot[bot] in #19682
- build(deps): bump lodash-es from 4.17.23 to 4.18.1 in /docs-website by @dependabot[bot] in #16892
- chore(deps): bump requests from 2.32.4 to 2.33.0 in /docs-website by @dependabot[bot] in #16786
- chore(deps): bump svgo from 2.8.0 to 2.8.4 in /docs-website by @dependabot[bot] in #19684
- fix(search): compact missing lineage neighbors before lightning pagination by @david-leifker in #19948
- chore(deps): bump jjwt from 0.11.2 to 0.13.0 by @david-leifker in #19963
- fix(mae): skip hydrating synthetic actors in usage events by @david-leifker in #19965
- feat(authorization): add VIEW_ENTITY_QUERIES privilege for Dataset, Chart, and Data Job by @rob-1019 in #16319
- chore(cli): bump default CLI to 1.7.0.12 by @david-leifker in #19946
- feat(lite): make the DataHub Lite storage engine pluggable, add SQLite by @nwadams in #19898
- chore(deps): bump Jackson, ZooKeeper, MariaDB Connector/J, JLine, and Jetty by @david-leifker in #19966
- fix(ui): send values for data product output ports filter by @ani-malgari in #19976
- fix(ingest/aerospike): pass socket_timeout via query.results() policy by @dotan-mor in #17584
- chore(deps): bump colord from 2.9.3 to 2.10.0 in /docs-website by @dependabot[bot] in #19683
- build(deps): bump @babel/plugin-transform-modules-systemjs from 7.24.1 to 7.29.4 in /docs-website by @dependabot[bot] in #17367
- chore(deps): bump postcss from 8.4.38 to 8.5.10 in /docs-website by @dependabot[bot] in #17186
- feat(ingest/powerbi): add Trino/Starburst M-Query lineage support by @acrylJonny in #19974
- refactor(ui): consolidate app/tags with the SaaS frontend by @v-tarasevich-blitz-brain in #19664
- refactor(ui): consolidate app by @v-tarasevich-blitz-brain in #19939
- chore(deps): bump immutable from 4.3.5 to 4.3.9 in /docs-website by @dependabot[bot] in #19814
- test(ingest): swap MinIO CI images to Silo after Quay pull failures by @david-leifker in #19968
- refactor(ingest/bigquery): partition discovery date-hierarchy + fallbacks (stack 6/9) by @acrylJonny in #19484
- fix(ingest/deps): lock aiohttp 3.14.3 for CVE-2026-69244 by @rajatoss in #19982
- fix(graph): guard Neo4j Filter/RelationsipFilter.or againt null in me… by @relaxedboi in #19961
- fix(search): serve full-text search, scroll, autocomplete and browse from Search V3 tier fields by @alexjst in #19980
- fix(ingestion): raise snowflake-connector-python floor to 4.7.3 by @supersingh05 in #19991
- refactor(alchemy): strengthen themed UI primitives by @annadoesdesign in #19989
- refactor(frontend): migrate shared actions to Alchemy by @annadoesdesign in #19990
- docs: add v1.6.0.3 LTS hotfix upgrade notes by @david-leifker in #19994
- fix(schema-registry): stub Confluent associations API on INTERNAL registry by @david-leifker in #19993
- fix(alchemy): stop clickable pills from hijacking nested button keyboard events by @annadoesdesign in #19999
- docs(ontology): set ontology feature availability on saasOnly and private beta by @manuelawei8 in #20003
- fix(pre-commit): remove Docker requirement for ruff hooks by @shirshanka in #20012
- fix(pre-commit): run pinned Ruff with uv by @shirshanka in #20015
- fix(graphql): Improve accuracy of GraphQL controller-level latency metrics by @supradeep-datahub in #19981
- chore(test): Update test weights from CI runs (2026-09-28) by @github-actions[bot] in #20020
- fix(ingest/mode): gate chart fetching on the report's chart_count, not the query's by @sgomezvillamor in #19941
- fix(ci): bound test-weight run lookup by created date by @devashish2203 in #20029
- feat(ingest/cli): add datahub recipe probe for interrogating a source before ingesting by @treff7es in #19655
- fix(scripts): The PDL change report fix to handle false positive bump issues. by @gdatahub in #20033
- fix(ui): disable edit buttons and show a tooltip when the user lacks permission by @rob-1019 in #18906
- refactor(ingest/profiling): hoist Snowflake sampling constants and drop dead sample_clause hook by @sgomezvillamor in #20013
- refactor(smoke-test): split live e2e from stack-free tests by @devashish2203 in #19927
- fix(ingest/sigma): report failed Sigma API calls, and fail on a dead listing by @kyungsoo-datahub in #19899
- fix(deps): upgrade pac4j to 6.5.8 for CVE-2026-82461..82465 by @david-leifker in #20014
- fix(ui): sidebar documentation edit opens where the profile renders documentation by @rob-1019 in #20050
- docs(context): add Build a Data Agent guide and Context feature guides by @jjoyce0510 in #20018
- fix(frontend): cap upstream calls and split health probes off the Play port by @david-leifker in #20049
- feat(frontend): export Play HTTP server pool metrics via Micrometer by @david-leifker in #20048
- refactor(messaging): remove DataHubUpgradeHistory_v1 by @david-leifker in #19962
- fix(ingest/dbt): file target-platform stubs in their siblings' container by @JohnRTurner in #19973
- fix(build): keep namespaced git tags distinct from release versions by @david-leifker in #20052
- refactor(frontend): migrate non-query code surfaces to Alchemy by @annadoesdesign in #19995
- refactor(frontend): migrate query cards to Alchemy by @annadoesdesign in #19996
- fix(system-update): migrate usage event indices created without their template by @alexjst in #19957
- feat(search): add per-cluster HTTP proxy with JVM proxy-property fallback by @david-leifker in #19971
- fix(openapi): emit Pegasus unions in the OpenAPI 3.1 wire format by @david-leifker in #20055
- fix(ci): harden smoke waits and smoke-label image builds by @david-leifker in #20016
- fix(ingest/dbt): treat semantic models as logical, not physical by @sgomezvillamor in #19987
- feat(ingest/dbt): emit semanticModel and metric entities by @sgomezvillamor in #19988
- fix(ingest/openapi): add missing openapi extra to setup.py by @max-datahub in #20059
- feat(views): add support for nested conditions in views by @purnimagarg1 in #19954
- fix(ingestion/deps): bump starlette to >=1.3.1 for CVEs by @rajatoss in #20058
- feat: Privilege constraints for structured property queries by @DiogoVala in #16478
- refactor(ui): migrate nav bar menu and settings page to Alchemy components by @annadoesdesign in #20006
- refactor(ui): migrate assertion list actions to Alchemy Menu and ConfirmationModal by @annadoesdesign in #20007
- refactor(ui): migrate search filters, sort, and browse results to Alchemy components by @annadoesdesign in #20008
- refactor(ui): migrate business attributes, charts, and empty states to Alchemy components by @annadoesdesign in #20046
- refactor(ui): migrate the ingestion source builder to Alchemy components by @annadoesdesign in #20044
- refactor(ui): migrate ingestion source lists to Alchemy components by @annadoesdesign in #20043
- refactor(ui): migrate the home page module menu and toast to Alchemy components by @annadoesdesign in #20045
- feat(executor): file based token provider for executor by @skrydal in #20070
- chore: Bump pyJWT and urllib3 constraints by @skrydal in #20073
- fix(ingest/unity): resolve cross-catalog tables via the DataHub graph in the usage path by @askumar27 in #19752
- fix(ingest/tableau): handle null column names in custom SQL lineage by @naeemdh in #20074
- fix(ingest): raise snowflake-sqlalchemy floor to 1.11.0 for CVE-2026-15736 by @rajatoss in #19922
- fix(patch): register a patch template for institutionalMemory by @Laolex in #18869
- refactor(frontend): migrate the queries list to the Alchemy table by @annadoesdesign in #19997
- fix(ingest/snowflake): use fixed-size TABLESAMPLE when the row count is unknown by @sgomezvillamor in #20041
- refactor(ui): migrate schema, lineage, versioning, and glossary menus to Alchemy components by @annadoesdesign in #20011
- refactor(ui): migrate user, group, and view lists to Alchemy components by @annadoesdesign in #20009
- fix(ui): open the description editor from the sidebar pencil by @benjiaming in #20076
- feat(frontend): emit Vite build manifest by @benjiaming in #20077
- fix(gms): forward ssl.keystore.type/truststore.type to schema registr… by @manuschillerdev in #16997
- feat(mfe): make MFE remote-module load timeout configurable by @rob-1019 in #18735
- feat(documents): add explicit save mode for document editor behind fe… by @annadoesdesign in #20053
- chore(deps): fix (nl.basjes.parse.useragent:yauaa) by @relaxedboi in #15315
- refactor(ui): migrate domain, application, and entity tab menus to Alchemy components by @annadoesdesign in #20010
- feat(ui): replace antd tooltips and popovers with FloatingOverlay by @annadoesdesign in #19870
- refactor(frontend): migrate the query builder and empty state to Alchemy by @annadoesdesign in #19998
- fix(gms): skip eager string building in debug logs by @david-leifker in #20083
- fix(ingestion): do not report skipped dbt tests as assertion failures by @max-datahub in #20064
- fix(cli): refresh
datahub init --oauthtokens on each request by @nwadams in #20081 - fix(ui/lineage): count charts in column lineage counts by @chriscollins3456 in #20087
- fix(applications): Display parent applications in entity header instead of domain by @chriscollins3456 in #20095
- fix(ingest): detect EXEC statement boundaries in T-SQL splitter by @kyungsoo-datahub in #19929
- fix(ingest/mssql): preserve manually added dataJob lineage when incremental_lineage is enabled by @kyungsoo-datahub in #19930
- feat(config): read metricsEnabled per operation, guard runtime configs with an arch test by @Ashish37-sh in #20068
- fix(lineage): fix data product lineage issue by hiding assets with no lineage by @purnimagarg1 in #20037
- docs: correct external data-quality assertion documentation by @max-datahub in #20063
- ci(ui): fail when a locale file stores keys as nested objects by @v-tarasevich-blitz-brain in #20040
- fix(ingest/bigquery): don't treat dated copies of a real table as shards by @treff7es in #19430
- refactor(ui): consolidate app (part 2) by @v-tarasevich-blitz-brain in #19984
- test(playwright): check impact analysis time filtering in the main lineage tab by @v-tarasevich-blitz-brain in #20099
- refactor(ui): consolidate app (part 3) by @v-tarasevich-blitz-brain in #20069
- fix(ingest/sql-parsing): skip table functions when extracting table names by @aviraj-gour in #20061
- docs(i18n): describe what multi-language support translates by @benjiaming in #20085
- fix(gms): skip Hazelcast Kubernetes join outside the cluster by @david-leifker in #20088
- chore(ingest): cut over metadata-ingestion to SQLAlchemy 2.0 by @treff7es in #17982
- ci: skip collect-metrics on forks by @NexuChat in #19680
- docs(quickstart): document silent hang when DOCKER_HOST is unset with Colima/Rancher Desktop/Podman by @alejandro-publius in #19046
- docs: move Ontology docs under Context in sidebar by @jjoyce0510 in #20075
- docs(managed-datahub): release notes for v2.3.0 by @sachetansabhahit in #19926
- feat(audit): add jti header for access audit logs by @RyanHolstien in #19902
- feat(search): add provider-neutral embedding SPI and query dimension check by @alexjst in #20082
- feat(actions): honour KAFKA_PROPERTIES_* env vars in the Kafka event source by @max-datahub in #20104
- fix(actions): surface Kafka connection and auth failures instead of reporting the pipeline as running by @max-datahub in #20105
- ci: pin ubuntu-latest runners to ubuntu-24.04 by @priyabratadas-dh in #20078
- fix(upgrade): update componentScan package list to include additional migration mutators by @relaxedboi in #20067
- fix(gms): pin token and write-path reads to primary under replica lag by @david-leifker in #20106
- fix(ingest/hex): route queriedTables lineage through SchemaResolver by @alfiyas-datahub in #19162
- feat(ingest/sigma): add a parser for Data Model /spec join keys and unions by @kyungsoo-datahub in #19970
- fix(ui): show profile scope and aged stats on the Stats tab by @benjiaming in #20002
- fix(upgrade): backfill asset-side dataProducts via RESTATE side effects by @ani-malgari in #20140
- feat(search): add includeExplain and searchType search flags by @alexjst in #20084
- fix(search): forward DFS_QUERY_THEN_FETCH on Elasticsearch 8 by @alexjst in #20093
- feat(frontend): emit hidden source maps by @benjiaming in #20086
- fix(ingest/documents): embed SYSTEM documents and reach non-global-context docs by @askumar27 in #20143
- feat(ingest/sap-datasphere): discover Views not exposed for consumption by @acrylJonny in #20124
- docs(airflow): clarify what materialize_iolets does by @sgomezvillamor in #20156
- fix(search): apply latest-version filter to unfiltered searches by @max-datahub in #20148
- fix(graphql): map missing entity types in EntityTypeMapper by @max-datahub in #20149
- docs(readme): restructure README and move detailed content into docs by @lakshay-nasa in #19992
- ci: assign Catalog tickets in PR-to-Linear routing by @lakshay-nasa in #20131
- fix(ingest/profiling): drop a non-deterministic sample size from partitionSpec, document the rowCount contract by @sgomezvillamor in #20042
- ci(security): route scan labels into release and security groups by @david-leifker in #20141
- refactor(web): migrate shared and alchemy icons to phosphor by @annadoesdesign in #20134
- fix(deps): floor pypdf at 6.19.0 for CVE-2026-103000 by @david-leifker in #20159
- perf(frontend): serve precompressed brotli and gzip static assets by @benjiaming in #20094
- fix(darkmode): fixed the colors and replaced antd in login and made sure the bg resp… by @annadoesdesign in #20162
- refactor(cache): default standalone process caches off via Spring profiles by @david-leifker in #20133
- refactor(web): migrate search icons to phosphor by @annadoesdesign in #20135
- feat(ingestion/trino): add Oracle and StarRocks as supported connectors by @daha in #17678
- fix(zdu): pin system-update image in nuke and nonblocking phases by @gdatahub in #20184
- fix(actions): keep Wolfi Python working on OpenSSL 4 by @david-leifker in #20167
- chore(test): Update test weights from CI runs (2026-10-05) by @github-actions[bot] in #20183
- docs: Datahub Cloud Hotfix v2.2.3-cloud release notes by @devashish2203 in #20186
- fix(build): diff pushed range in PrettierWriteChanged at pre-push by @devashish2203 in #20187
- feat(ingest/bigquery): capture job labels as query custom properties by @treff7es in #20145
- perf(ingest/clickhouse): cut SQL parsing out of the query-log path by @aviraj-gour in #19955
- refactor(ui): consolidate app (part 4) by @v-tarasevich-blitz-brain in #20153
- chore(i18n): drop stale translation keys and align a few translations by @v-tarasevich-blitz-brain in #20154
- fix(test): fix flakiness in siblings search playwright test by @purnimagarg1 in #20121
- fix(ui): fix scroll and flicker issues in select assets tab in views modal and collection module by @purnimagarg1 in #20098
- fix(ui): expect phosphor Folder icon in filter utils test by @v-tarasevich-blitz-brain in #20207
- feat(api): Add graphql and UI for API entity type by @chriscollins3456 in #20102
- refactor(web): migrate ingest icons to phosphor by @annadoesdesign in #20136
- fix(ci): test and publish the same nightly image build by @devashish2203 in #20202
- feat(search): port the per-field Search V3 schema and document projector by @alexjst in #20195
- feat(search): run V2 queries on Search V3 per-field fields, drop search tiers by @alexjst in #20196
- fix(ingest/datahub-documents): prune deleted documents from the chunking checkpoint [PFP-6552] by @alexjst in #20215
- fix(ingest/documents): re-embed when the server's embedding config changes [AI-3177] by @alexjst in #20164
- feat(search): serve legacy browse, custom search config and dual-write facet counts on Search V3 by @alexjst in #20197
- refactor(ui): consolidate app (part 5) by @v-tarasevich-blitz-brain in #20203
- feat(search): allow nested index settings overrides with deep merge by @8silvergun in #20112
- feat(entity-service): stamp emitModeMarker=sync on externally-originated sync writes by @rob-1019 in #19327
- fix(graphql): de-duplicate group members across membership edge types by @max-datahub in #19801
- fix(analytics): fix SearchBarFilter events fail mapping for values by @purnimagarg1 in #20238
- fix(ingest/tableau): resolve workbook project via REST lookup when bulk listing misses it by @naeemdh in #20245
- refactor(web): migrate entity V1 icons to phosphor by @annadoesdesign in #20137
- feat(search): set Elasticsearch refresh interval per index service by @david-leifker in #20163
- feat(graph-cache): publish finished full walks into partial snapshots by @david-leifker in #20179
- feat(search): run the Stage 1 query on Search V3 keyword reads by @alexjst in #20213
- fix(config): allow DATAHUB_POSTGRES_SCHEMA for SqlSetup metadata DDL by @david-leifker in #20217
- feat(search): run the light Stage 1 query first on Search V3 keyword reads by @alexjst in #20216
- fix(search): reindex when structured property copy_to mapping mismatches by @david-leifker in #20251
- feat(search): run Search V3 full-text search on shared _search fields by @alexjst in #20218
- feat(search): rerank Search V3 keyword results with document vectors by @alexjst in #20219
- perf(profiling): skip the stddev NULL re-count, and drop the lone-query CTE by @kyungsoo-datahub in #20209
- feat(search): match structured property values in Search V3 full-text search by @alexjst in #20214
- feat(graph): add metrics for lineage PIT search and ES connection pool by @vasavimadhurima96 in #20118
- fix(ingest/unity): use native ? markers for system-table SQL params by @max-datahub in #20194
- feat(ingest/probe): shared verdict hooks for connector probes by @treff7es in #20111
- docs(executor): require Kafka channel for Remote Executors on GCP instances by @pedro93 in #20241
- feat(ingest/redshift,mssql): probe providers for Redshift and SQL Server by @treff7es in #20129
- fix(ingest/transformer): never emit duplicate entries from the OVERWRITE path by @sgomezvillamor in #20239
- fix(actions): install OpenSSL 4 TLSv1 shim as sitecustomize in stdlib by @david-leifker in #20252
- fix(ui): stop counting members of every group owner in owner lists by @v-tarasevich-blitz-brain in #20257
- fix(ingest/dbt): dedupe owners carried forward by the write_semantics=PATCH merge by @sgomezvillamor in #20240
- refactor(web): migrate entityV2 shared icons to phosphor by @annadoesdesign in #20138
- perf(search): defer per-result lineage counts off the search query by @benjiaming in #20144
- refactor(web): migrate remaining app icons to phosphor by @annadoesdesign in #20139
- fix(delete): hard delete removes references first and never deletes data written after the request by @Dutt23 in #20268
- fix(search): pause Search V3 hybrid reranking after repeated failures by @alexjst in #20260
- fix(ingest/sigma): only resolve a chart formula ref to a column that exists by @kyungsoo-datahub in #20000
- fix(ingest/bigquery): handle temp UDFs and trailing semicolons by @agarwal-shreyas in #20021
- fix(ingest/snowflake): use Streamlit app name when title is blank by @agarwal-shreyas in #19916
- fix(ingest/s3): handle file names with dots in the stem when resolving format extension by @rospe in #17595
New Contributors
- @minleejae made their first contribution in #18577
- @denish1204 made their first contribution in #19171
- @jjjeong made their first contribution in #19275
- @TejasRGitHub made their first contribution in #18540
- @avery-datahub made their first contribution in #19524
- @yianni made their first contribution in #19516
- @vaibhav8a made their first contribution in #19511
- @Laolex made their first contribution in #18869
- @NexuChat made their first contribution in #19680
- @alejandro-publius made their first contribution in #19046
- @8silvergun made their first contribution in #20112
- @vasavimadhurima96 made their first contribution in #20118
Full Changelog: v1.8.0rc3...v1.8.0rc4