Report migration coverage
Goal: compose a shareable coverage summary from artifacts a completed obs-migrate migrate run already wrote on disk — read-only; do not re-run migration or touch any cluster.
Inputs (artifact table)
Assume the user installed the package (obs-migrate on PATH); prefix .venv/bin/ only for a repo checkout. Every artifact below is written by a normal migrate run — no source checkout required.
| What you want | File | Field(s) |
|---|---|---|
| Verdict + scorecard | <output-dir>/dashboards/migration_summary.md |
verdict, scorecard, per-dashboard table, must-fix worklist |
| Counts | <output-dir>/dashboards/migration_manifest.json |
clean: summary.migrated (Grafana) / summary.ok (Datadog); warnings: summary.migrated_with_warnings (Grafana) / summary.warning (Datadog); shared: summary.requires_manual, summary.not_feasible; Datadog-only: summary.blocked |
| Which asset families ran | <output-dir>/run_summary.json |
ran.dashboards, ran.alerts, dashboards.total |
| Optional field-mapping appendix | command obs-migrate schema-report --artifact-dir <output-dir>/dashboards --output schema_change_report.md |
per-panel source→target field table |
Workflow
- Locate the output dir — the
--output-dirfrom the user's migrate run (or ask which run they mean if several exist). - Read the headline verdict — open
<output-dir>/dashboards/migration_summary.mdfor the human-readable scorecard and must-fix worklist. - Read the counts — open
<output-dir>/dashboards/migration_manifest.jsonand read thesummaryobject. - Compute coverage — from
summary(clean/warning key names differ by source — pick the right pair for the run):- Grafana: clean =
summary.migrated, warnings =summary.migrated_with_warnings. - Datadog: clean =
summary.ok, warnings =summary.warning. - Both:
summary.requires_manual,summary.not_feasible; Datadog alsosummary.blocked. - Coverage % = clean count /
summary.panels. - Needs review = warnings count +
summary.requires_manual. - Blocked =
summary.not_feasible(+summary.blockedon Datadog).
- Grafana: clean =
- Check scope — read
<output-dir>/run_summary.jsonto see whether dashboards and/or alerts actually ran (ran.dashboards,ran.alerts) and how many dashboards were in scope (dashboards.total). - Optional appendix — if the audience cares about field/schema gaps, run
obs-migrate schema-report --artifact-dir <output-dir>/dashboards --output schema_change_report.mdand attach or link the table. - Assemble the shareable summary — one short narrative (verdict + coverage % + needs-review + blocked counts + alert scope note) backed by the artifact paths above.
Manual-effort estimate
Give a rough bucket estimate, not false precision:
requires_manual— moderate rebuild each (partial translation; human must finish or replace the panel).not_feasible(+blockedon Datadog) — full manual rebuild each (engine could not produce a usable panel).
State the counts from summary and multiply by the bucket above (e.g. "12 requires_manual ≈ moderate rework each; 4 not_feasible ≈ full rebuild each"). Avoid implying exact person-hours unless the user supplies their own velocity.
Degrade gracefully / Honest limits
- exit 0 does not mean every panel is perfect; warnings and blocked panels are listed, never hidden. Trust
migration_summary.mdandmigration_manifest.json, not the exit code alone. - Alerts coverage depends on what ran. If the migrate command used
--assets dashboardsonly,run_summary.jsonshowsran.alerts: false— do not claim alert migration coverage without reading that file. - Datadog and Grafana use different clean/warning keys in
summary. Grafana writessummary.migratedandsummary.migrated_with_warnings; Datadog writessummary.okandsummary.warning(notmigrated/migrated_with_warnings) and addssummary.blocked.summary.requires_manualandsummary.not_feasibleare shared — read the JSON for the source you are reporting on. - This skill does not prove panels render correctly — empty uploaded panels may be missing telemetry, not a translation bug. Numerical proof is
validate-side-by-side; per-panel gap explanations areexplain-migration-gaps.
See also
explain-migration-gapsskill — turn each panelreasoninto manual rebuild guidance.validate-side-by-sideskill — prove migrated panels match source numerically.docs/command-contract.md— artifact paths and migrate flags for the installed version.