{% extends "base.html" %} {% block title %}Academy Oracle — ICDEV™{% endblock %} {% block extra_css %} {% include "forge_academy/partials/_chrome_clearance.html" %} {% endblock %} {% block content %}
CUI // SP-CTI

🔮 Academy Oracle

7-lens AI prediction engine — learner risk · content quality · skill gap · AADC readiness · staleness · ACE skill gap · agent readiness

← Academy
{{ stats.total_pending or 0 }}
Pending Predictions
{{ stats.critical or 0 }}
Critical
{{ stats.warning or 0 }}
Warnings
{{ stats.convergence_events or 0 }}
Convergence Events

Predictions ({{ predictions|length }})

{% if predictions %}
{% for p in predictions %}
{{ p.prediction_text }}
{{ p.severity|upper }} {{ p.confidence * 100 | round(0) | int }}% conf
{{ p.lens_name }} {{ p.subject_type }}:{{ p.subject_id }} {{ p.prediction_type }} {{ p.created_at[:10] if p.created_at else '' }}
{% endfor %}
{% else %}
{# aca-empty-demo: "click Run Oracle to generate the first batch" promised output the Oracle cannot produce. The seven lenses already run every 6 hours (academy_oracle_reflex) and only predict from learner activity: inactive learners with open missions, repeated failures on a step, steps or missions with at least 5 attempts/starters, missions 180+ days old. With no such activity, an empty list is the correct answer, not a missing run. #}
No risks predicted
The Oracle's seven lenses run automatically every 6 hours and read learner activity — inactivity on open missions, repeated failed attempts, hint overuse, low completion and ageing content. Predictions appear here once learners have generated enough of that activity to read. Run Oracle re-checks now.
Browse missions →
{% endif %}

Convergence Events ({{ convergence|length }})

{% if convergence %}
{% for e in convergence %}
{{ e.subject_type }}:{{ e.subject_id }} {{ e.lens_count }} lenses · {{ (e.consensus_score * 100)|round(0)|int }}% consensus
{{ e.summary }}
{% if e.recommended_action %}
→ {{ e.recommended_action }}
{% endif %}
{% endfor %}
{% else %}
No active convergence events.
{% endif %} {% endblock %}