mirror of
https://github.com/apache/superset.git
synced 2026-09-08 16:25:03 +00:00
Third and final sub-project from the control-panel architecture ask, scoped down after discovering the assumed infrastructure doesn't exist: Dashboard V2's node.props lives only in the frontend's in-memory DashboardProvider (explicitly "No persistence"), and Widget.validate_control_values has never had a real caller -- only its own REST endpoint handler invokes it, and nothing in the traced human edit flow does. Adds a minimal MCP-process-local node store (node_store.py, mirroring widgets/registry.py's plain-dict idiom) and one new tool that gives validate_control_values its first real caller: shallow-merges provided control values onto a node's current values (matching DashboardProvider.updateProps's own merge semantics), validates the candidate, and only commits (a single dict reassignment) on success -- so a validation failure is atomic by construction, not by explicit rollback code. Registered in app.py (a tool exported from tool/__init__.py but missing from app.py's import list is invisible to a real MCP client despite passing every direct-call test -- caught this by adding a Client(mcp)-based registration test, not just _impl calls). Persistence, default-seeding, generated-value propagation, and the broader value-precedence contract from the original ask are explicitly out of scope -- documented as follow-ups in the accompanying spec. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>