The exported dashboard-1783595688930.json wraps the model in the
apiVersion/kind/metadata/spec envelope. Grafana's "Import via JSON"
validates the pasted top level against the dashboard-spec schema and
reports every required field (annotations, elements, layout,
timeSettings, etc.) as missing because they live under spec.
dashboard-import.json is the same dashboard with the envelope stripped,
so the required fields sit at the top level and the UI importer accepts
it. The original envelope file is kept for API/provisioning use.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The panels queried raw openclaw_daily_* cumulative gauges, which carry a
date label and reset at midnight. Across a range crossing midnight this
produced two date-labeled series, so stat cards showed duplicate values
and the pies/bar gauges had duplicated legend rows; the queries also
ignored the picked timeframe entirely.
Reduce each query over $__range with max_over_time (per-day cumulative
peak) and aggregate away the date/tz labels so every panel yields a
single range-aware value. Drop the misleading "today" from titles and
bump rowHeightMode short -> standard for taller panels (width unchanged).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>