{% extends "base.html" %} {% block title %}Admin tools{% endblock %} {% block content %}
HelpAdmin tools

Admin tools

Maintenance surface for the .help/templates/ corpus — coverage gaps, stale templates, and one-click regeneration.

{{ report.completeness_pct }}%
complete
{{ report.total_templates }}
templates
{{ report.fresh_pct }}%
fresh
{{ report.stale | length }}
stale
Refresh page
{% if report.incomplete %}

Incomplete sets {{ report.incomplete | length }}

{% for f in report.incomplete %} {% endfor %}
FeatureKindsCompletenessMissingAction
{{ f.name }} {{ f.kinds | length }}/11 {{ f.completeness_pct }}% {{ f.missing_kinds | join(", ") }}
{% endif %} {% if report.stale %}

Stale templates {{ report.stale | length }}

Source has changed since the template was generated (source-hash drift). Use the per-row button or the bulk "Regenerate all stale" above.

{% for t in report.stale[:25] %} {% endfor %} {% if report.stale | length > 25 %} {% endif %}
FeatureKindGeneratedAction
{{ t.feature }} {{ t.kind }} {{ t.generated_at | replace("T", " ") | replace("+00:00", " UTC") }}
… {{ (report.stale | length) - 25 }} more
{% endif %}

How regen works

  1. Per-feature regen shells out to attune-author generate <feature> --all-kinds — regenerates all 11 kinds, including missing ones.
  2. Regenerate all stale runs attune-author regenerate which detects every stale feature and regenerates each in turn.
  3. Each job runs in the dashboard's process; output streams below as it appears. Only one job can run at a time — touching the corpus from multiple processes would race.
  4. Review regenerated content before committing — the polish pass is LLM-assisted; spot-check the facts you care about per the existing hallucination-shapes lesson.
{% endblock %} {% block scripts %} {% endblock %}