Check System Health with the Dashboard
Before you begin
Audience: Knowledge architect, governance lead, platform admin
The dashboard endpoint requires no special role beyond standard service access. To act on what the metrics show, you need permission to query the registry and the generation pipeline. For background on registry lifecycle states, see Validation Authority and Lifecycle.
To set up continuous monitoring with Prometheus or Grafana, see Monitor Dashboard and Metrics.
Steps
1. Pull the current metrics snapshot
curl -s http://localhost:8000/v1/dashboard/metrics | python3 -m json.tool
A healthy registry returns output similar to this:
{
"total_approved": 412,
"total_disputed": 7,
"expiring_soon": 23,
"by_horn_type": {
"fact": 289,
"concept": 64,
"procedure": 38,
"principle": 21
},
"work_items_pending": 14,
"f2_score": null,
"precision": null,
"recall": null,
"validation_throughput_7d": 0
}
Note: The dashboard is a point-in-time snapshot queried live from PostgreSQL each time you call the endpoint. It does not update automatically — run the command again whenever you need a current reading.
2. Assess registry health
Read the top-level counts first to get an immediate sense of overall health:
| Metric | What it tells you | Action threshold |
|---|---|---|
total_approved |
How many answers are active and queryable | Low counts relative to your expected coverage may indicate intake or classification backlogs |
total_disputed |
How many answers are under governance review and excluded from search | Rising values mean decisions are accumulating; see step 3 |
expiring_soon |
How many approved answers need a review cycle within 30 days | Non-zero values require reviewer assignment; see step 3 |
3. Identify and act on signals
Expiring answers (expiring_soon > 0)
Answers past their review_due date remain APPROVED but are unverified. Get the list and assign reviewers before deadlines pass:
curl -s "http://localhost:8000/v1/registry/answers?status=approved&review_due_before=$(date -v +30d +%Y-%m-%d)"
Assign a validator to each answer in the result. Prioritize those whose review_due date is soonest.
Accumulating disputes (total_disputed rising)
Disputed answers are excluded from search and readouts — each unresolved dispute is a gap in coverage. Pull the disputed list and assign resolution owners:
curl -s "http://localhost:8000/v1/registry/answers?status=disputed"
Generation backlog (work_items_pending high)
A large pending count means the pipeline is backed up. Check whether items are stuck at intake or awaiting validation:
# Items not yet picked up by the generator
curl -s "http://localhost:8000/v1/generation/work-items?state=new"
# Items generated but waiting for a validator decision
curl -s "http://localhost:8000/v1/generation/work-items?state=pending_validation"
If items are stuck in NEW for an extended period, the Celery worker may be stopped or unhealthy. Contact your platform administrator.
4. Check coverage balance
Expand by_horn_type to see how approved answers are distributed across the nine Horn information types:
"by_horn_type": {
"fact": 289,
"concept": 64,
"procedure": 38,
"principle": 21
}
A registry dominated by fact — especially above 80% of the total — can indicate narrow extraction coverage. If procedure, concept, and principle counts are sparse relative to your meeting content, review your intake and classification configuration to ensure diverse question types are being captured. For guidance, see Classify a Candidate Answer.
5. Interpret quality metrics
The f2_score, precision, and recall fields indicate retrieval quality from a golden set evaluation:
| Field | Meaning |
|---|---|
f2_score |
Recall-weighted F-score (β = 2); higher is better; null until observability is connected |
precision |
Fraction of retrieved answers that are relevant; null until observability is connected |
recall |
Fraction of relevant answers that were retrieved; null until observability is connected |
These fields remain null until an observability integration (MLflow or equivalent) is connected. To generate scores manually from the 50-item golden test set:
python tests/golden/evaluate.py
Results from this script are written to the evaluation output file for offline analysis and are not automatically written back to the dashboard.
Result
You have a current reading of registry health, governance backlog, and pipeline pressure. You know how many answers are approved and queryable, how many are at risk of expiring, and how much work is queued. You have the commands to drill into each signal and take targeted action without guessing at system state.