Skip to content

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.