{% extends "base.html" %} {% block title %}{{ learner.display_name }} — Instructor Console{% endblock %} {% block extra_css %} {% include "forge_academy/partials/_chrome_clearance.html" %} {% endblock %} {% block content %}
{{ learner.username }} — {{ roles.get(learner.role, {}).get('label', learner.role) }} · rank {{ learner.level }}
| Work | Due | Progress | Status | Assigned by |
|---|---|---|---|---|
| {{ a.label }}{% if a.note %} {{ a.note }} {% endif %} |
{{ (a.due_at or '—')[:10] }} | {{ mine.completed if mine else 0 }}/{{ mine.total if mine else 0 }} | {% if a.status == 'cancelled' %}CANCELLED {% elif mine and mine.complete %}COMPLETE {% elif a.overdue %}OVERDUE {% else %}OPEN{% endif %} | {{ a.assigned_by }} |
| Mission | Step | Type | Status | Score | Hints | Work |
|---|---|---|---|---|---|---|
| {{ s.mission_title }} T{{ s.tier }} |
{{ s.step_num }}. {{ s.step_title }} |
{{ s.step_type }}
{% if not s.assessed %}
NOT GRADED
{% endif %}
|
{% if s.status == 'completed' %}COMPLETED {% elif s.status == 'attempted' %}ATTEMPTED {% else %}{{ s.status | upper }}{% endif %} | {{ s.score }} | {{ s.hints_used }} |
{% if s.has_submission %}
{{ s.submission }}
{% else %}
no text submitted
{% endif %}
|
coding and reflect steps are machine-graded. The rest are
acknowledgements — completable, but not evidence of a demonstrated skill.
| When | Kind | What | Value |
|---|---|---|---|
| {{ (e.created_at or e.issued_at or '')[:19] }} | {% if e.kind == 'certificate' %}CERTIFICATE {% elif e.is_attendance %}ATTENDANCE {% else %}EARNED XP{% endif %} | {% if e.kind == 'certificate' %}{{ e.cert_tier }} {% else %}{{ e.reason }}{% if e.source_type %} ({{ e.source_type }} {{ e.source_id }}){% endif %}{% endif %} | {% if e.kind == 'certificate' %}—{% else %}{{ e.xp_delta }} XP{% endif %} |
| When | Verdict | Mission | Score | Comment | Reviewer |
|---|---|---|---|---|---|
| {{ (r.created_at or '')[:19] }} | {% if r.verdict == 'approved' %}APPROVED {% elif r.verdict == 'rejected' %}REJECTED {% else %}NEEDS REWORK{% endif %} | {{ r.mission_title or '—' }} | {% if r.override_score is not none %} {{ r.prior_score if r.prior_score is not none else '—' }} → {{ r.override_score }} {% else %}—{% endif %} | {{ r.comment or '' }} | {{ r.reviewer }} |