aminghadersohi commented on code in PR #45486:
URL: https://github.com/apache/superset/pull/45486#discussion_r4403797056


##########
superset/mcp_service/dashboard_scope.py:
##########
@@ -1032,22 +1015,19 @@ def scoped_dataset_query(
         time_range = intersect_time_ranges(constraints.time_range, time_range)
         time_column = scope_column
 
-    granularity = (time_column or main_dttm_col) if time_range else time_column
     final = [*filters, *scope_filters]
-    if time_range and granularity:
-        final_with_time = [
-            *final,
-            {"col": granularity, "op": TEMPORAL_RANGE, "val": time_range},
-        ]
-    else:
-        final_with_time = final
-    removed = removed_granularity_column(final_with_time, granularity)
-    if removed is not None and removed in constraints.columns:
-        raise MCPDashboardScopeError(
-            f"the dashboard filter on {removed!r} would be dropped because 
that "
-            "column is also the query's time column.",
-            "Query without a time range on that column, or use the dashboard's 
charts.",
-        )
+    temporal = {f["col"] for f in final if f.get("op") == TEMPORAL_RANGE}
+    # An explicit range appends a TEMPORAL_RANGE on the query's time column.
+    # Without it, granularity can replace a different column's temporal filter
+    # and discard every dashboard predicate on that column.
+    if not time_range and temporal and time_column and time_column not in 
temporal:
+        if dropped := sorted(temporal & constraints.columns):

Review Comment:
   Fixed the dashboard-scoped caller-only case in 
e453e6aa781bdbeb539a54f84804ca341b8b6f87. I do not read the column selector as 
permission to silently discard a caller predicate in this scoped query.
   
   At the starting head, the unit replay of scope rewriting → 
`get_table._build_query_dict` → `_apply_granularity`, with the dashboard 
filtering only `client`, produced:
   
   ```python
   filter = [{"col": "client", "op": "IN", "val": ["A"]}]
   granularity = "ship_date"
   from_dttm = datetime(2025, 10, 28)
   to_dttm = datetime(2026, 10, 28)
   ```
   
   The caller's `order_date TEMPORAL_RANGE "Last year"` disappeared and its 
bounds moved to `ship_date`. The request is refused before query execution with 
this commit, even when the dashboard does not filter `order_date`.
   
   Regression: 
`tests/unit_tests/mcp_service/test_dashboard_scope.py::test_dataset_query_refuses_a_clause_on_a_non_time_temporal_column`,
 with the new `caller-only-temporal-column` cases for `get_table` and 
`query_dataset`. Restoring `dashboard_scope.py` from 
`a72613f8422e8b31d3073cf3bc61e8028409a4bb` makes those two cases fail with `DID 
NOT RAISE`; the two dashboard-column cases fail the new exact wording 
assertion. With e453e6aa781bdbeb539a54f84804ca341b8b6f87, all four pass. The 12 
`test_dataset_query_keeps_scope_clauses_with_safe_temporal_bindings` controls 
pass before and after, including four new unrelated-dashboard-filter controls.
   
   Commands: `PYTHONPATH="$PWD:$PWD/superset-core/src" pytest 
tests/unit_tests/mcp_service/test_dashboard_scope.py -q -k 
'non_time_temporal_column or safe_temporal_bindings' -m 'not manual and not 
llm_compliance'` gave **4 failed, 12 passed** against the starting production 
file. The final five-file targeted run (query-context factory, dashboard time 
binding, dashboard scope, no-filter time range, tabular query) gave **519 
passed**. Pre-commit on the seven PR-changed files passed, including mypy.
   
   Remaining: the unscoped shared granularity override behavior is unchanged; 
this change refuses the mismatch for dashboard-scoped dataset queries. 
`query_dataset` uses the same conservative refusal although its no-range 
builder does not itself set granularity.
   
   Search: `grep -rn --include='*.py' 'TEMPORAL_RANGE\|_apply_granularity' 
superset/mcp_service superset/common` (80 source hits; the initial unrestricted 
grep also matched generated `__pycache__` binaries, which are not source 
siblings).
   
   Siblings checked:
   - superset/mcp_service/dataset/tool/query_dataset.py:281 — not affected: 
this builder appends a matching temporal binding when time_range is set; 
without time_range it does not set granularity, and the scoped rewriter applies 
the conservative shared refusal before either builder
   - superset/mcp_service/dataset/tool/query_dataset.py:288 — not affected: 
this builder appends a matching temporal binding when time_range is set; 
without time_range it does not set granularity, and the scoped rewriter applies 
the conservative shared refusal before either builder
   - superset/mcp_service/dataset/tool/query_dataset.py:301 — not affected: 
this builder appends a matching temporal binding when time_range is set; 
without time_range it does not set granularity, and the scoped rewriter applies 
the conservative shared refusal before either builder
   - superset/mcp_service/dataset/schemas.py:1187 — not affected: filter 
operator declaration/description or value validation; no time-column override 
or predicate removal
   - superset/mcp_service/dataset/schemas.py:1200 — not affected: filter 
operator declaration/description or value validation; no time-column override 
or predicate removal
   - superset/mcp_service/dataset/schemas.py:1214 — not affected: filter 
operator declaration/description or value validation; no time-column override 
or predicate removal
   - superset/mcp_service/dashboard_scope.py:117 — not affected: existing scope 
parsing/chart guards or explicit dashboard time-range conflict handling; no 
caller-only dataset mismatch exemption here
   - superset/mcp_service/dashboard_scope.py:381 — not affected: existing scope 
parsing/chart guards or explicit dashboard time-range conflict handling; no 
caller-only dataset mismatch exemption here
   - superset/mcp_service/dashboard_scope.py:383 — not affected: existing scope 
parsing/chart guards or explicit dashboard time-range conflict handling; no 
caller-only dataset mismatch exemption here
   - superset/mcp_service/dashboard_scope.py:390 — not affected: existing scope 
parsing/chart guards or explicit dashboard time-range conflict handling; no 
caller-only dataset mismatch exemption here
   - superset/mcp_service/dashboard_scope.py:412 — not affected: existing scope 
parsing/chart guards or explicit dashboard time-range conflict handling; no 
caller-only dataset mismatch exemption here
   - superset/mcp_service/dashboard_scope.py:417 — not affected: existing scope 
parsing/chart guards or explicit dashboard time-range conflict handling; no 
caller-only dataset mismatch exemption here
   - superset/mcp_service/dashboard_scope.py:425 — not affected: existing scope 
parsing/chart guards or explicit dashboard time-range conflict handling; no 
caller-only dataset mismatch exemption here
   - superset/mcp_service/dashboard_scope.py:618 — not affected: existing scope 
parsing/chart guards or explicit dashboard time-range conflict handling; no 
caller-only dataset mismatch exemption here
   - superset/mcp_service/dashboard_scope.py:977 — not affected: existing scope 
parsing/chart guards or explicit dashboard time-range conflict handling; no 
caller-only dataset mismatch exemption here
   - superset/mcp_service/dashboard_scope.py:1008 — not affected: existing 
scope parsing/chart guards or explicit dashboard time-range conflict handling; 
no caller-only dataset mismatch exemption here
   - superset/mcp_service/dashboard_scope.py:1010 — not affected: existing 
scope parsing/chart guards or explicit dashboard time-range conflict handling; 
no caller-only dataset mismatch exemption here
   - superset/mcp_service/dashboard_scope.py:1019 — fixed in 
e453e6aa781bdbeb539a54f84804ca341b8b6f87
   - superset/mcp_service/dashboard_scope.py:1020 — fixed in 
e453e6aa781bdbeb539a54f84804ca341b8b6f87
   - superset/mcp_service/common/time_range_validation.py:121 — not affected: 
validates range text; does not select a column or remove predicates
   - superset/mcp_service/chart/compile.py:751 — not affected: validates a 
chart temporal subject; does not build the dataset-tool granularity override
   - superset/mcp_service/chart/schemas.py:1381 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:1401 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:2632 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:2681 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:2701 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:2719 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:4459 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:4577 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:4581 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:5279 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:5325 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:5368 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:5393 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:5397 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/chart_utils.py:528 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:875 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:886 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:901 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:986 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:1251 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:1546 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:1549 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:1555 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:1565 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:1576 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:1599 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:2330 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:2331 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:2435 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:2994 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:3052 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:3065 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:3070 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:3743 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:3968 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:3973 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:4024 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:4029 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:4102 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:4122 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:4497 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:4510 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:4519 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_helpers.py:368 — not affected: recognizes 
a chart filter already represented by form-data time_range, not a dataset-tool 
column override
   - superset/mcp_service/semantic_layer/schemas.py:182 — not affected: filter 
description/value validation; no column substitution or removal
   - superset/mcp_service/semantic_layer/schemas.py:196 — not affected: filter 
description/value validation; no column substitution or removal
   - superset/common/tabular_query.py:290 — not affected: documents/preserves 
dataset temporal filters and rewrites semantic one-sided ranges; the scoped 
get_table refusal runs before this shared builder; unscoped override semantics 
remain unchanged
   - superset/common/tabular_query.py:295 — not affected: documents/preserves 
dataset temporal filters and rewrites semantic one-sided ranges; the scoped 
get_table refusal runs before this shared builder; unscoped override semantics 
remain unchanged
   - superset/common/tabular_query.py:304 — not affected: documents/preserves 
dataset temporal filters and rewrites semantic one-sided ranges; the scoped 
get_table refusal runs before this shared builder; unscoped override semantics 
remain unchanged
   - superset/common/query_object.py:689 — not affected: cache-key 
comment/retention of resolved bounds, not predicate removal
   - superset/common/query_object.py:690 — not affected: cache-key 
comment/retention of resolved bounds, not predicate removal
   - superset/common/utils/time_range_utils.py:46 — not affected: extracts 
range expressions/bounds without removing filters or choosing granularity
   - superset/common/utils/time_range_utils.py:100 — not affected: extracts 
range expressions/bounds without removing filters or choosing granularity
   - superset/common/query_context_factory.py:175 — not affected: shared chart 
granularity/filter processing remains unchanged; scoped get_table now refuses 
the mismatch before reaching it; unscoped override semantics remain unchanged
   - superset/common/query_context_factory.py:287 — not affected: shared chart 
granularity/filter processing remains unchanged; scoped get_table now refuses 
the mismatch before reaching it; unscoped override semantics remain unchanged
   - superset/common/query_context_factory.py:302 — not affected: shared chart 
granularity/filter processing remains unchanged; scoped get_table now refuses 
the mismatch before reaching it; unscoped override semantics remain unchanged
   - superset/common/query_context_factory.py:414 — not affected: shared chart 
granularity/filter processing remains unchanged; scoped get_table now refuses 
the mismatch before reaching it; unscoped override semantics remain unchanged
   - superset/common/query_context_factory.py:441 — not affected: shared chart 
granularity/filter processing remains unchanged; scoped get_table now refuses 
the mismatch before reaching it; unscoped override semantics remain unchanged
   - superset/common/query_context_factory.py:465 — not affected: shared chart 
granularity/filter processing remains unchanged; scoped get_table now refuses 
the mismatch before reaching it; unscoped override semantics remain unchanged
   - superset/mcp_service/semantic_layer/tool/get_table.py:331 — not affected: 
builder remains unchanged; the scoped rewriter refuses this mismatch before it 
can set granularity
   



##########
superset/mcp_service/dashboard_scope.py:
##########
@@ -1032,22 +1015,19 @@ def scoped_dataset_query(
         time_range = intersect_time_ranges(constraints.time_range, time_range)
         time_column = scope_column
 
-    granularity = (time_column or main_dttm_col) if time_range else time_column
     final = [*filters, *scope_filters]
-    if time_range and granularity:
-        final_with_time = [
-            *final,
-            {"col": granularity, "op": TEMPORAL_RANGE, "val": time_range},
-        ]
-    else:
-        final_with_time = final
-    removed = removed_granularity_column(final_with_time, granularity)
-    if removed is not None and removed in constraints.columns:
-        raise MCPDashboardScopeError(
-            f"the dashboard filter on {removed!r} would be dropped because 
that "
-            "column is also the query's time column.",
-            "Query without a time range on that column, or use the dashboard's 
charts.",
-        )
+    temporal = {f["col"] for f in final if f.get("op") == TEMPORAL_RANGE}
+    # An explicit range appends a TEMPORAL_RANGE on the query's time column.
+    # Without it, granularity can replace a different column's temporal filter
+    # and discard every dashboard predicate on that column.
+    if not time_range and temporal and time_column and time_column not in 
temporal:
+        if dropped := sorted(temporal & constraints.columns):
+            raise MCPDashboardScopeError(
+                f"the dashboard filter on {dropped[0]!r} would be dropped 
because "
+                f"the query's time range is on {time_column!r} instead.",

Review Comment:
   Fixed the wording in e453e6aa781bdbeb539a54f84804ca341b8b6f87: `the query's 
time column is {time_column!r} instead.` The regression assertion checks that 
exact sentence; it fails on the starting message and passes with this commit.
   
   Regression: 
`tests/unit_tests/mcp_service/test_dashboard_scope.py::test_dataset_query_refuses_a_clause_on_a_non_time_temporal_column`,
 with the new `caller-only-temporal-column` cases for `get_table` and 
`query_dataset`. Restoring `dashboard_scope.py` from 
`a72613f8422e8b31d3073cf3bc61e8028409a4bb` makes those two cases fail with `DID 
NOT RAISE`; the two dashboard-column cases fail the new exact wording 
assertion. With e453e6aa781bdbeb539a54f84804ca341b8b6f87, all four pass. The 12 
`test_dataset_query_keeps_scope_clauses_with_safe_temporal_bindings` controls 
pass before and after, including four new unrelated-dashboard-filter controls.
   
   Commands: `PYTHONPATH="$PWD:$PWD/superset-core/src" pytest 
tests/unit_tests/mcp_service/test_dashboard_scope.py -q -k 
'non_time_temporal_column or safe_temporal_bindings' -m 'not manual and not 
llm_compliance'` gave **4 failed, 12 passed** against the starting production 
file. The final five-file targeted run (query-context factory, dashboard time 
binding, dashboard scope, no-filter time range, tabular query) gave **519 
passed**. Pre-commit on the seven PR-changed files passed, including mypy.
   
   Remaining: the unscoped shared granularity override behavior is unchanged; 
this change refuses the mismatch for dashboard-scoped dataset queries. 
`query_dataset` uses the same conservative refusal although its no-range 
builder does not itself set granularity.
   
   Search: `grep -rn --include='*.py' 'TEMPORAL_RANGE\|_apply_granularity' 
superset/mcp_service superset/common` (80 source hits; the initial unrestricted 
grep also matched generated `__pycache__` binaries, which are not source 
siblings).
   
   Siblings checked:
   - superset/mcp_service/dataset/tool/query_dataset.py:281 — not affected: 
this builder appends a matching temporal binding when time_range is set; 
without time_range it does not set granularity, and the scoped rewriter applies 
the conservative shared refusal before either builder
   - superset/mcp_service/dataset/tool/query_dataset.py:288 — not affected: 
this builder appends a matching temporal binding when time_range is set; 
without time_range it does not set granularity, and the scoped rewriter applies 
the conservative shared refusal before either builder
   - superset/mcp_service/dataset/tool/query_dataset.py:301 — not affected: 
this builder appends a matching temporal binding when time_range is set; 
without time_range it does not set granularity, and the scoped rewriter applies 
the conservative shared refusal before either builder
   - superset/mcp_service/dataset/schemas.py:1187 — not affected: filter 
operator declaration/description or value validation; no time-column override 
or predicate removal
   - superset/mcp_service/dataset/schemas.py:1200 — not affected: filter 
operator declaration/description or value validation; no time-column override 
or predicate removal
   - superset/mcp_service/dataset/schemas.py:1214 — not affected: filter 
operator declaration/description or value validation; no time-column override 
or predicate removal
   - superset/mcp_service/dashboard_scope.py:117 — not affected: existing scope 
parsing/chart guards or explicit dashboard time-range conflict handling; no 
caller-only dataset mismatch exemption here
   - superset/mcp_service/dashboard_scope.py:381 — not affected: existing scope 
parsing/chart guards or explicit dashboard time-range conflict handling; no 
caller-only dataset mismatch exemption here
   - superset/mcp_service/dashboard_scope.py:383 — not affected: existing scope 
parsing/chart guards or explicit dashboard time-range conflict handling; no 
caller-only dataset mismatch exemption here
   - superset/mcp_service/dashboard_scope.py:390 — not affected: existing scope 
parsing/chart guards or explicit dashboard time-range conflict handling; no 
caller-only dataset mismatch exemption here
   - superset/mcp_service/dashboard_scope.py:412 — not affected: existing scope 
parsing/chart guards or explicit dashboard time-range conflict handling; no 
caller-only dataset mismatch exemption here
   - superset/mcp_service/dashboard_scope.py:417 — not affected: existing scope 
parsing/chart guards or explicit dashboard time-range conflict handling; no 
caller-only dataset mismatch exemption here
   - superset/mcp_service/dashboard_scope.py:425 — not affected: existing scope 
parsing/chart guards or explicit dashboard time-range conflict handling; no 
caller-only dataset mismatch exemption here
   - superset/mcp_service/dashboard_scope.py:618 — not affected: existing scope 
parsing/chart guards or explicit dashboard time-range conflict handling; no 
caller-only dataset mismatch exemption here
   - superset/mcp_service/dashboard_scope.py:977 — not affected: existing scope 
parsing/chart guards or explicit dashboard time-range conflict handling; no 
caller-only dataset mismatch exemption here
   - superset/mcp_service/dashboard_scope.py:1008 — not affected: existing 
scope parsing/chart guards or explicit dashboard time-range conflict handling; 
no caller-only dataset mismatch exemption here
   - superset/mcp_service/dashboard_scope.py:1010 — not affected: existing 
scope parsing/chart guards or explicit dashboard time-range conflict handling; 
no caller-only dataset mismatch exemption here
   - superset/mcp_service/dashboard_scope.py:1019 — fixed in 
e453e6aa781bdbeb539a54f84804ca341b8b6f87
   - superset/mcp_service/dashboard_scope.py:1020 — fixed in 
e453e6aa781bdbeb539a54f84804ca341b8b6f87
   - superset/mcp_service/common/time_range_validation.py:121 — not affected: 
validates range text; does not select a column or remove predicates
   - superset/mcp_service/chart/compile.py:751 — not affected: validates a 
chart temporal subject; does not build the dataset-tool granularity override
   - superset/mcp_service/chart/schemas.py:1381 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:1401 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:2632 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:2681 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:2701 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:2719 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:4459 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:4577 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:4581 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:5279 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:5325 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:5368 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:5393 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/schemas.py:5397 — not affected: typed chart 
temporal normalization/provenance validation, not the dataset-tool scoped query 
guard
   - superset/mcp_service/chart/chart_utils.py:528 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:875 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:886 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:901 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:986 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:1251 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:1546 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:1549 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:1555 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:1565 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:1576 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:1599 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:2330 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:2331 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:2435 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:2994 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:3052 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:3065 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:3070 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:3743 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:3968 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:3973 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:4024 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:4029 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:4102 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:4122 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:4497 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:4510 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_utils.py:4519 — not affected: chart 
binding generation/merge/provenance logic, not the scoped dataset request 
builder; chart time-binding tests pass
   - superset/mcp_service/chart/chart_helpers.py:368 — not affected: recognizes 
a chart filter already represented by form-data time_range, not a dataset-tool 
column override
   - superset/mcp_service/semantic_layer/schemas.py:182 — not affected: filter 
description/value validation; no column substitution or removal
   - superset/mcp_service/semantic_layer/schemas.py:196 — not affected: filter 
description/value validation; no column substitution or removal
   - superset/common/tabular_query.py:290 — not affected: documents/preserves 
dataset temporal filters and rewrites semantic one-sided ranges; the scoped 
get_table refusal runs before this shared builder; unscoped override semantics 
remain unchanged
   - superset/common/tabular_query.py:295 — not affected: documents/preserves 
dataset temporal filters and rewrites semantic one-sided ranges; the scoped 
get_table refusal runs before this shared builder; unscoped override semantics 
remain unchanged
   - superset/common/tabular_query.py:304 — not affected: documents/preserves 
dataset temporal filters and rewrites semantic one-sided ranges; the scoped 
get_table refusal runs before this shared builder; unscoped override semantics 
remain unchanged
   - superset/common/query_object.py:689 — not affected: cache-key 
comment/retention of resolved bounds, not predicate removal
   - superset/common/query_object.py:690 — not affected: cache-key 
comment/retention of resolved bounds, not predicate removal
   - superset/common/utils/time_range_utils.py:46 — not affected: extracts 
range expressions/bounds without removing filters or choosing granularity
   - superset/common/utils/time_range_utils.py:100 — not affected: extracts 
range expressions/bounds without removing filters or choosing granularity
   - superset/common/query_context_factory.py:175 — not affected: shared chart 
granularity/filter processing remains unchanged; scoped get_table now refuses 
the mismatch before reaching it; unscoped override semantics remain unchanged
   - superset/common/query_context_factory.py:287 — not affected: shared chart 
granularity/filter processing remains unchanged; scoped get_table now refuses 
the mismatch before reaching it; unscoped override semantics remain unchanged
   - superset/common/query_context_factory.py:302 — not affected: shared chart 
granularity/filter processing remains unchanged; scoped get_table now refuses 
the mismatch before reaching it; unscoped override semantics remain unchanged
   - superset/common/query_context_factory.py:414 — not affected: shared chart 
granularity/filter processing remains unchanged; scoped get_table now refuses 
the mismatch before reaching it; unscoped override semantics remain unchanged
   - superset/common/query_context_factory.py:441 — not affected: shared chart 
granularity/filter processing remains unchanged; scoped get_table now refuses 
the mismatch before reaching it; unscoped override semantics remain unchanged
   - superset/common/query_context_factory.py:465 — not affected: shared chart 
granularity/filter processing remains unchanged; scoped get_table now refuses 
the mismatch before reaching it; unscoped override semantics remain unchanged
   - superset/mcp_service/semantic_layer/tool/get_table.py:331 — not affected: 
builder remains unchanged; the scoped rewriter refuses this mismatch before it 
can set granularity
   



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to