docs/managed-datahub/release-notes/v_2_0_0.md
This release rolls up hotfixes on top of v2.0.4. There are no breaking changes or deprecations.
21-July-2026
Recommended Versions
This release rolls up hotfixes on top of v2.0.3.
17-July-2026
Recommended Versions
adjust_pure_negative parameter.This release rolls up hotfixes on top of v2.0.2.
07-July-2026
Recommended Versions
This release rolls up hotfixes on top of v2.0.1.
06-July-2026
Recommended Versions
2.0.x version.This release rolls up hotfixes on top of v2.0.0.
02-July-2026
Recommended Versions
find_sql_context and draft_sql_for_tables are now gated behind one ENABLE_SQL_CONTEXT_TOOLS flag (default off) so they roll out together; generate_sql_sketch keeps its own separate flag.logicalParent link now also requires Edit Entity on the proposed parent dataset; clearing a logical parent still only requires Edit Entity on the child. Action: grant Edit Entity on logical-parent datasets to principals who create or change these links, or update policies so those operations continue to succeed.NOT_EQUALS condition returning an error when view-based authorization is enabled.EDIT_ENTITY_TAGS to be used for tag writes via the REST API.ENABLE_SQL_CONTEXT_TOOLS (default false): replaces the separate FIND_SQL_CONTEXT_TOOL / DRAFT_SQL_FOR_TABLES_TOOL gates — enables find_sql_context and draft_sql_for_tables together. generate_sql_sketch keeps its own GENERATE_SQL_SKETCH_TOOL gate, unaffected.25-June-2026
DataHub Cloud v2.0.0 has been internally tested with the following Remote Executor versions:
| Remote Executor version | Status | Notes |
|---|---|---|
| v2.0.0-cloud | Tested | Recommended. |
| v1.1.3-cloud | Tested | Supported with this release. |
| v1.0.3-cloud | Tested | Supported with this release. |
Search V2.5 is now the default — cross-entity ranking with name-match boosting and diversity promotion, plus latency optimizations for query understanding and multi-match.
Bridge-backed semantic search now covers datasets, charts, dashboards, glossary terms, and data products via hidden bridge documents in the document semantic index.
Action Workflows v2 — build multi-step approval workflows for any asset, not just access requests: route each step to the right approvers automatically (such as a dataset's owners or domain stewards), require single- or multi-person sign-off, show or skip steps and form fields based on the asset, and let requesters cancel or admins override a request mid-flight.
MCP Audit — new audit surface for MCP tool invocations: GraphQL mcpAudit resolver, dedicated audit tab in Settings → AI, KPI charts and history table.
CDE Steward agent — new 10-star governance agent for Critical Data Element compliance and certification workflows.
Internationalization (i18n) — first-class infrastructure (feature flag + user settings), end-to-end string extraction across the application (entity tabs, search, settings, governance, ingestion source metadata, etc.), and initial DE translations.
Distributed rate limiting across REST, GraphQL, and OpenAPI with per-endpoint token-bucket controls and configurable jitter.
Domain propagation — automatic propagation of domain assignment across lineage and containment relationships, with attribution.
note_metadata_observation MCP tool — replaces register_feedback and note_sql_anchor_observation, and raises ANNOTATE or POST_ATTACHMENT proposals so agent-recorded observations land in the Context Hub inbox for SME review.
Assertion SQL Query Replay - You can now see the exact queries issued by assertions against your warehouse, enabling you to replay failures to find failing records.
Anomaly Detection Assertion Improvements — Volume assertions that use Anomaly Detection will now see more accurate predictions, reducing false alarms. This improvement is most pronounced on datasets with large row counts. This improvement requires upgrading your remote executor.
SecretService caller guard — non-system actors (including PATs with MANAGE_SECRETS) can no longer decrypt secrets; hardens the credential-access surface.
New ingestion sources: ThoughtSpot, TimescaleDB, Airbyte; production-ready SAP HANA with calc-view lineage, stored procedures, and query usage.
All changes in https://github.com/datahub-project/datahub/releases/tag/v1.6.0
id, producing a predictable request URN (urn:li:actionRequest:<id>) instead of a server-generated UUID — so external automation can deep-link to or fetch a request directly by its URN instead of searching for it after submission.mcpAudit resolver and Settings → AI → MCP Audit tab with feature-flag gate. KPI charts, history table, session and event drawers. MCP_TELEMETRY_CAPTURE_PAYLOADS env flag controls payload capture. McpServerRequest analytics report script.mcp/ ↔ mcp_integration/ boundary enforcement for OSS hygiene.note_metadata_observation MCP tool. Replaces register_feedback and note_sql_anchor_observation with a single tool covering both metadata gaps and SQL-anchor quality observations. Update agent prompts that reference the old tool names.note_metadata_observation raises ANNOTATE proposals on context docs. When called with one or more urn:li:document: URNs in related_objects, the tool raises one DOCUMENTS_PROPOSAL ActionRequest per target with proposalType: ANNOTATE. The proposal stages a draft Document carrying an ENTITY_ANNOUNCEMENT Post; until an SME accepts it from the Context Hub inbox the target doc is unchanged. On acceptance, only the Post migrates to the target.note_metadata_observation raises POST_ATTACHMENT_PROPOSAL when the agent cannot pin the gap to an existing doc. Emits two coordinated MCPs: a Post with postType=AI_OBSERVATION and target=null, plus a new POST_ATTACHMENT_PROPOSAL ActionRequest. The Post is invisible across existing UI surfaces by construction; the ActionRequest shows up in the Task Center for SME triage. On accept, the Post becomes a real Comment on the chosen entity.DocumentProposalService.applyDraftDocumentChange respects proposalType: ANNOTATE. ANNOTATE proposals now skip the info / properties copy and only migrate Posts; EDIT, STATE_CHANGE, and CONFLICT acceptance behavior is unchanged.preview_sql_context / save_sql_context use a clean preview-then-commit flow. preview_sql_context builds the MCP App render payload without writing anything; save_sql_context commits on Approve in a single write. Cancel is handled client-side — no tombstone cleanup needed. Draft-based save flow with MCP App preview.find_sql_context improvements — consumes admin-curated overrideSql; deprecates generate_sql_sketch. Looker view-text and dbt model-text fallbacks added. SQL-override prop supported on semantic-anchor docs for human edits / proposals.Context Drop and Context Curator agents default to off.LLMCallEvent per-call telemetry (token-billing primitive), context-local cost accumulation, per-turn usage logging, surface and time-to-first-token captured. New POST /openapi/v1/billing/usage endpoint.bot_id to a DataHub corp user URN under Settings → Platform → AI → Enable Ask DataHub in Slack. When a registered bot @-mentions DataHub, the question is attributed to the mapped service account. Useful for cop-rotation bots, ticketing bots, and other automations.externalUrl and inject DataHub URLs into results.markdownify.CALL statements. DATAHUB_EXECUTOR_ALLOW_CALL_STATEMENTS=true lets a custom SQL assertion's statement be a CALL my_db.my_schema.my_proc() in addition to the read-only query shapes always allowed. Off by default; enabling accepts the risk that the procedure may perform mutations.SecretService caller guard. Non-system actors (including human users and PATs with MANAGE_SECRETS) can no longer decrypt secrets. Controlled by SECRET_SERVICE_CALLER_GUARD_MODE (ENFORCE / AUDIT / DISABLED). Components that fetch secrets at runtime use system credentials in standard deployments and are unaffected.RATE_LIMITS_RETRY_AFTER_JITTER_PERCENT).ARCHIVED via Status.lifecycleStage instead of disappearing from the API. A startup reconciler reads agent-flags.yaml and restores the previous non-ARCHIVED stage when the flag flips back on.gemini-embedding-001); AWS deployments continue to use AWS Bedrock with Cohere Embed v3.ELASTICSEARCH_INDEX_ENTITYMAPPINGLIMITS_<ENTITY>_<LIMIT> env vars configure per-entity mapping limits; the configured value is baked into the index settings at creation/reindex time and pushed to existing live indices on every system update run. Use DEFAULT as the entity name for a fallback.RelationshipChange platform event — emitted on relationship changes for downstream consumers.New ingestion sources:
Connector improvements:
lastRefreshed), and optional AI context documents extracted directly from Hex REST APIs. New include_lineage, use_queried_tables_lineage, connection_platform_map, and include_context_documents config options. Hex Components are now ingested as Chart entities (see Breaking Changes).DYNAMIC_TABLE_GRAPH_HISTORY; private-link Snowsight base URL override; Sweden Central Azure region mapping; fix for silently-dropped views in batched SHOW VIEWS.datasetProperties emitted as standard MCPWs with incremental config; partner/DataHub user-agent for Databricks telemetry.extract_lakeformation_column_tags); optional propagation of database tags to tables and columns (propagate_lakeformation_tags); inherited tags marked with propagation attribution.schema_pattern and dataset_pattern (and skip the _accelerator_ reflection schema); platform mappings for BIGQUERY, RESTCATALOG (Polaris OSS, Nessie, AWS Glue Iceberg REST, S3 Tables, Confluent Tableflow, Microsoft OneLake), SAPHANA, SNOWFLAKEOPENCATALOG, and UNITY; domain recipe field now actually emits a Domains aspect; stateful incremental ingestion, incremental lineage / properties, profile-skip; synthetic created = epoch 0 no longer emitted when Dremio doesn't report one; remove_stale_metadata and fail_safe_threshold exposed.skip_missing_upstreams_in_lineage config; column-level lineage restored for two-tier warehouses (catalog-prefixed SQL + v2 schema fieldPaths); test assertion entities emit an ownership aspect when the dbt test node has explicit owner metadata.workload_identity auth type for GKE Workload Identity; list_objects_v2 to fix PaginationError on Hive-partitioned paths.SqlParsingAggregator.CHAR(N)-padded values.report_pattern (AllowDenyPattern) config; chart fetch gated on chart_count rather than explorations_count.$metadata.markdownify.Ingestion infrastructure:
acryl-datahub installs the GE extras only when explicitly requested.sqlglot[c] tokenizer restored on 30.8.0 for performance.Executor:
DATAHUB_EXECUTOR_LOG_GC_ENABLED=true makes both the remote executor and the coordinator's embedded worker scan /tmp/datahub/logs/ on an hourly tick and delete per-execution subdirectories older than 14 days. A size cap (default 10 GB) and a 1-hour in-flight grace window apply. Default is false for this release; expect the default to flip in a follow-up release.SEARCH_VERSION_V2_5_ENABLED will use V2.5 after upgrading. Existing instances still on legacy V2 may reindex search indices with the V2.5 analyzers during the upgrade. Migration: no action required to use the new default. To temporarily roll back to legacy V2, set SEARCH_VERSION_V2_5_ENABLED=false for GMS and the system-update job.ELASTICSEARCH_SEMANTIC_SEARCH_ENTITIES=document no longer also bridges datasets; dataset must be listed explicitly (document,dataset). Action: for instances relying on dataset semantic search, set ELASTICSEARCH_SEMANTIC_SEARCH_ENTITIES=document,dataset on GMS and the system-update job.rateLimits.defaultRetryAfterSeconds / RATE_LIMITS_DEFAULT_RETRY_AFTER renamed to minRetryAfterSeconds / RATE_LIMITS_MIN_RETRY_AFTER. The value is now the minimum Retry-After floor; endpoint (token-bucket) denials may return a longer wait. Added retryAfterJitterPercent / RATE_LIMITS_RETRY_AFTER_JITTER_PERCENT (default 10) to spread endpoint retry timing.acryl-datahub-airflow-plugin now requires Airflow 3.0+. The plugin always uses apache-airflow-providers-openlineage (>=2.1.0); drop openlineage-airflow from constraints. [airflow2] install extra removed; [airflow3] retained as a no-op. taskinstance URL format and patch_snowflake_schema config removed. Pin acryl-datahub-airflow-plugin <= 1.6.0 for Airflow 2.7–2.10.>=3.0.0,<4.0.0). Entry point group changed from prefect.block to prefect.collections. Re-register the DataHub block before upgrading.chart_pattern removed — emits a deprecation warning if set; chart-level filtering is not yet implemented for this connector.MANAGE_DOCUMENTS. Document CREATE accepts standard entity create privileges (CREATE_ENTITY or EDIT_ENTITY) or MANAGE_DOCUMENTS. UPDATE / DELETE still accept EDIT_ENTITY / DELETE_ENTITY (or MANAGE_DOCUMENTS). Bridge documents inherit VIEW from the source entity; writes do not inherit.DATAHUB_EXECUTOR_MONITORS_ENABLED and DATAHUB_EXECUTOR_TASKS_ENABLED are now hard opt-outs (skip subsystem wiring and heavy imports), not fetcher-only toggles. Use DATAHUB_EXECUTOR_INGESTION_PIPELINE_ENABLED to disable the Kafka / datahub-actions pipeline.getSecretValues GraphQL query now requires system-level authentication. The MANAGE_SECRETS privilege check remains in place, but SecretService now also enforces system-actor auth. Components that fetch secrets at runtime use system credentials in standard deployments and are unaffected. Customers who configured these services with a user-issued PAT must migrate to system credentials before upgrading.Status.lifecycleStage. A SYSTEM agent whose AI_AGENT_<NAME>_ENABLED env-var resolves to false is now marked ARCHIVED rather than hidden by a read-time filter. Direct URN fetches resolve normally; the existing lifecycle-stage filter keeps ARCHIVED agents out of default search. A startup reconciler restores the previous stage when the flag flips back. Callers that depended on the "null entity" behavior should switch to checking Status.lifecycleStage = ARCHIVED.REQUEST_MINIMAL_SLACK_PERMISSIONS feature flag. Replaced by DATAHUB_SLACK_SERVER_SIDE_HISTORY_ENABLED, which marks the Slack :history scopes as optional in the install screen via bot_optional. Admins can deselect them per install rather than the choice being baked in at deploy time.notificationConfig when creating a subscription through syncSubscription, or send notificationConfig without notificationSettings, will use the actor's current notification defaults at delivery time. Callers that intentionally want a no-sink subscription should send notificationConfig.notificationSettings.sinkTypes: [] explicitly.ENABLE_BEDROCK_OPTIMIZED_LATENCY. AWS latency-optimized inference is only available for Claude 3.5 Haiku — not the newer model families (Haiku 4.5, Sonnet 4.x, Opus). The flag was a no-op for those models while inflating every Bedrock cost estimate by 25%. Remove the variable from any deployment config.lineage_start_time, lineage_end_time, and datahub_page_size emit a deprecation warning if set. Lineage now comes directly from the Hex REST API. Remove them from your recipe.SecretService caller guard (see Platform).REQUEST_MINIMAL_SLACK_PERMISSIONS in favor of DATAHUB_SLACK_SERVER_SIDE_HISTORY_ENABLED for per-install Slack scope opt-out.ujson >= 5.12.1 (CVE-2026-44660); idna >= 3.15 (CVE-2026-45409); plus ongoing dep-bump coverage in line with the OSS changelog.DATAHUB_EXECUTOR_EMBEDDED_WORKER_ENABLED env var.AssertionRunEvent, MonitorSuiteInfo, SubscriptionInfo, and AssertionAssignmentRuleInfo schemaVersion bumps for forward compatibility.SyntaxError on special characters.applications field on glossary term and data product GraphQL queries.EntityDropdown (i18n).WorkEventProducer fail-fast init when a Kafka channel is required.@KafkaMessagingEnabled annotation on KafkaAdminServiceFactory for pgQueue compatibility.SECRET_SERVICE_CALLER_GUARD_MODE (default: ENFORCE) — Controls how SecretService responds when a non-system actor attempts to decrypt a secret. Values: ENFORCE (throw SecurityException, recommended for production), AUDIT (allow but log a warning — staged rollout), DISABLED (no enforcement — break-glass).DATAHUB_EXECUTOR_LOG_GC_ENABLED (default false), DATAHUB_EXECUTOR_LOG_DIR (default /tmp/datahub/logs), DATAHUB_EXECUTOR_LOG_GC_INTERVAL_SECONDS (default 3600), DATAHUB_EXECUTOR_LOG_GC_RETENTION_DAYS (default 14), DATAHUB_EXECUTOR_LOG_GC_MAX_DIR_SIZE_MB (default 10000; 0 to disable the size cap), DATAHUB_EXECUTOR_LOG_GC_IN_FLIGHT_GRACE_SECONDS (default 3600): Opt-in in-process ingestion-log garbage collector on remote executors and the coordinator's embedded worker.DATAHUB_EXECUTOR_ALLOW_CALL_STATEMENTS (default false): When true, custom SQL assertions may use a stored-procedure CALL statement in addition to read-only queries. Requires an executor restart.DATAHUB_USE_INFERENCE_V2 (default false): Routes smart-assertion training to the V2 pipeline. Requires DATAHUB_USE_OBSERVE_MODELS=true.DATAHUB_EXECUTOR_ENABLE_DELTA_BOUNDS (default false): Enables differenced (boundsValueSpace=DELTA) prediction bounds in the V1 smart-assertion trainer.ELASTICSEARCH_INDEX_ENTITYMAPPINGLIMITS_<ENTITY>_<LIMIT>: Per-entity OpenSearch / Elasticsearch mapping ceilings. Use DEFAULT as the entity name for a fallback applying to all entity indices.MCP_TELEMETRY_CAPTURE_PAYLOADS: Enables payload capture for MCP tool invocations surfaced in the MCP Audit tab.RATE_LIMITS_MIN_RETRY_AFTER (replaces RATE_LIMITS_DEFAULT_RETRY_AFTER) and RATE_LIMITS_RETRY_AFTER_JITTER_PERCENT (default 10): GMS rate-limit floor and jitter spread.AUTH_GMS_SESSION_COOKIE_NAME (default SESSION): Name of the Spring Security session cookie set by GMS. Set this if your deployment overrides spring.session.servlet.cookie.name.