name: bi-validation description: BI validator driven by ValidationHook — inspects every dashboard, chart, and dataset delivered in the run, verifies config quality (chart type, metrics, dimensions, dataset wiring) and data presence via get_chart_data when supported tags: - bi - dashboard - publish - validation - metrics version: "2.0.0" user_invocable: false disable_model_invocation: false allowed_agents: - gen_dashboard kind: validator severity: blocking mode: llm targets: [] # empty = match all; body filters to dashboard / chart / dataset types
BI Validation
Driven by ValidationHook.on_end for gen_dashboard runs. The hook passes a
SessionTarget containing every DashboardTarget / ChartTarget /
DatasetTarget the run delivered. Iterate them and run the checks below.
Target shape
You receive SessionTarget.targets — loop over each entry and dispatch on
type:
dashboard→ inspect chart list viaget_dashboard/list_chartschart→ inspect config viaget_chart; if supported, runget_chart_datadataset→ verify fields viaget_dataset
Layer A (the builtin hook) has already confirmed each resource exists and is reachable — skip existence checks and focus on config correctness and data presence.
Publish success criteria
A dashboard publish is complete when:
get_dashboardreturns the dashboard- the expected chart ids / names are present in
get_dashboardorlist_charts - every chart can be inspected with
get_chart - supported
get_chart_datacalls return data or a valid empty result without backend errors - known values match expected results or tolerances
When these criteria pass, return PASS and stop. Treat additional styling or structural changes as a separate request unless a concrete failing check is present.
Core workflow
For every target in the session:
- Dashboard targets: call
get_dashboard(dashboard_id)to retrieve the chart list. For each chart on the dashboard callget_chartand inspect config (step 2). Whenget_chart_datais supported, validate data (step 3). - Chart targets (standalone or from step 1): verify
chart_type,metrics,x_axis,dimensions,dataset_idagainst the intended design. - Data presence: when
get_chart_datais supported, call it on every chart to confirm the chart returns data without backend errors. Compare numeric values against expected tolerances when expectations are available. - Dataset targets: call
get_dataset(dataset_id)to verify schema / SQL / column definitions. - Remediation planning:
- only propose or perform a follow-up change for a specific failed configuration or data check
- prefer the smallest supported update for fields the platform can modify
(
title,chart_type,metrics,x_axis,description, platform SQL) - for unsupported wiring changes, report the exact mismatch and required follow-up action for the main agent / user
- if the publish success criteria already pass, return PASS instead of planning follow-up changes
- Return a compact pass / fail report covering every target.
IMPORTANT: Every chart on the dashboard must pass configuration inspection with get_chart. Data validation with get_chart_data is mandatory when that tool is supported on the active platform. If get_chart_data is unavailable, mark the data check as unsupported / N/A and validate configuration plus reference SQL or known expectations instead.
Platform notes
- Superset: confirm dashboard reachability, chart count, chart type, metric expressions, group-by dimensions, and runtime query success. Use
get_chartandget_chart_datafor every chart. Compare exact numeric values where expectations are known. - Grafana: confirm dashboard reachability, panel count, panel type, datasource wiring, and panel SQL against the materialized tables. Use
get_chartwithdashboard_idfor every panel.get_chart_datais not available in Grafana yet, so configuration validation is mandatory and the data check should be reported as unsupported / N/A unless a separate reference query is available.
Configuration inspection checklist (per chart)
When calling get_chart for each chart, verify these fields:
| Field | Check |
|---|---|
chart_type |
Matches intended visualization (bar, pie, big_number, line, table, etc.) |
metrics |
Correct aggregation expressions (COUNT, SUM, AVG, etc.) |
x_axis |
Correct column for the horizontal axis (bar/line charts) |
dimensions |
Correct grouping columns (pie charts, grouped bar charts) |
dataset_id |
Points to the correct dataset |
If title, chart_type, metrics, x_axis, description, or platform-specific SQL is wrong, fix it with update_chart when the tool supports that change. If dimensions, dataset_id, or unsupported wiring is wrong, report the mismatch and the required follow-up action.
Publish verification checklist
After a BI publish, run this checklist:
- Call
get_dashboardto confirm the dashboard is reachable and to retrieve the full chart list. - For every chart on the dashboard:
- call
get_chartto inspect configuration (chart_type,metrics,x_axis,dimensions,dataset_id) - verify each configuration field matches the intended design
- if
get_chart_datais supported on the active platform, call it to confirm the chart returns data without backend errors - verify key numeric values match expected results or tolerances when those expectations are available
- if
get_chart_datais not supported, record the data check as unsupported / N/A and rely on configuration inspection plus reference SQL or known expectations
- call
- If any chart fails validation:
- use
update_chartonly for fields the tool actually supports - recreate the chart or panel when the issue is
dimensions,dataset_id, or another unsupported wiring change
- use
- Report both absolute and relative differences when possible.
- Block rollout when any chart fails configuration or supported data validation.
Do not skip any charts. get_chart_data is required for every chart only
on platforms that actually expose it.
Output expectations
For each chart, report:
| Column | Description |
|---|---|
| Chart ID | The chart identifier |
| Chart Name | Human-readable title |
| Config Check | PASS if get_chart fields match design, FAIL + reason otherwise |
| Data Check | PASS if get_chart_data succeeds and expected values match when available; N/A when the platform does not support get_chart_data; FAIL + reason otherwise |
Final summary: total charts, passed, failed, overall PASS/FAIL decision.