| name | dashboard-metrics |
| version | 1.0 |
| last_updated | 2026-07-28 |
| id | dashboard-metrics |
| one_line_purpose | Read and extend the live testsuite dashboard metrics. |
| entry_point | docs/skills/ci-ops/dashboard-metrics/SKILL.md |
| category | ci-ops |
| mcp_compliance_level | partial |
| status | active |
| dependencies | [] |
| tags | ["dashboard","metrics","astro","telemetry"] |
| description | How to read and contribute to the live test dashboard metrics. Load when updating metrics collection or interpreting dashboard data. |
| metadata | {"type":"pattern","audience":"agents","maturity":"stable"} |
QA Dashboard & Metrics compilation
Overview
This skill guides agents through modifying, compiling, and deploying the QA dashboard located in dashboard/ and managing its serverless static-site data pipelines.
When to Use
- Modifying Astro page components (
index.astro, run/[id].astro, headers, layouts, logs viewer)
- Adjusting the python compilation pipeline (
compile_data.py, convert_behave.py)
- Troubleshooting Pagefind search indexing or broken CSS asset paths on the custom domain
- Updating pages deployment actions (
publish-to-pages.yml)
When NOT to Use
- Writing or debugging GDM/AT-SPI behave test scenarios inside
tests/** — use gnome.md or behave.md
- Modifying Argo/KubeVirt cluster infrastructure manifests — use
projectbluefin/lab repo
- Adjusting core reusable workflow configurations (
e2e.yml) — use e2e-workflow.md
Core Process
-
Path-Robust Script Design: When writing python aggregation or data conversion scripts under dashboard/scripts/, never hardcode relative string paths like ./raw-runs or ./src/data/. Execution directories differ between local development and CI runs. Always resolve path coordinates dynamically relative to the script's actual directory:
from pathlib import Path
SCRIPT_DIR = Path(__file__).resolve().parent
DASHBOARD_DIR = SCRIPT_DIR.parent
RUNS_DIR = DASHBOARD_DIR / "src" / "data" / "runs"
-
Build-Time Compilation Power: Take full advantage of Astro's build-time static generation. Instead of loading logs client-side at runtime, import raw run JSONs in the frontmatter of your Astro pages using Vite globbing:
const runFiles = import.meta.glob('../data/runs/*.json', { eager: });
runs = .(runFiles).( ({
: path.().().(, ),
...(content. || content)
}));