{% extends "base.html" %} {% block title %}Timeline{% endblock %} {% block body %}

Timeline

Every transition, run, review and decision, newest first. The digest on the right is what you'd want to know after being away.

{% for w in ['6h','24h','3d','1w'] %}{{ w }}{% endfor %} {{ events|length }} events · {{ digest.dispatched }} dispatches · ${{ '%.2f' % digest.cost_usd }}
{% if digest.needs_human %}
Needed you
    {% for e in digest.needs_human %}
  • {{ e.at[5:16] }}{{ e.task }}{{ e.question or e.reason or e.note or e.to }}
  • {% endfor %}
{% endif %}
Events
    {% for e in events %}
  • {{ e.at[5:16] }}{% if e.task %}{{ e.task }}{% elif e.phase %}{{ e.phase }}{% endif %} {{ e.kind }} {% if e.kind == 'transition' %}{{ e['from'] }} → {{ e.to }}: {{ e.note[:110] }}{% elif e.kind == 'dispatch' %}{{ e.mode }} {{ e.model }}{% if e.resumed %} (resumed){% endif %}{% elif e.kind == 'run_finished' %}{{ e.mode }} {{ e.status }}{% if e.cost_usd %} ${{ '%.2f' % e.cost_usd }}{% endif %}{% elif e.kind == 'review' %}{{ e.verdict }}: {{ e.summary[:110] }}{% elif e.kind == 'waiting_human' %}{{ e.question[:120] }}{% elif e.kind == 'discovered' %}{{ e.new_task }} {{ e.title }}{% elif e.kind == 'budget' %}{{ e.phase }} spent ${{ '%.2f' % e.spent }} of ${{ '%.2f' % e.budget }}{% elif e.kind == 'triaged' %}{{ e.decision or 'ready' }} by {{ e.by }}{% elif e.kind == 'persona' %}{{ e.persona }} {{ e.score }}/10{% elif e.kind == 'trial_done' %}winner {{ e.winner }}{% elif e.kind == 'moved' %}{{ e['from'] }} → {{ e.to }}{% elif e.kind == 'rebase' %}{% if e.how == 'mechanical' %}rebased onto {{ e.base }} mechanically — no model, no cost{% elif e.how == 'agent' %}conflict on {{ e.base }}{% if e.files %} in {{ e.files|join(', ') }}{% endif %} — a rebase agent will resolve it{% elif e.verdict_kept %}rebased; diff unchanged; verdict kept{% else %}rebased; diff changed; re-reviewing{% endif %}{% elif e.kind == 'merge_head' %}{% if e.left %}left the merge queue: {{ e.reason }}{% else %}merge queue head — {{ e.reason }}{% endif %}{% elif e.kind == 'feedback_ignored' %}ignored feedback from {{ e.author }}{% if e.reason %} ({{ e.reason }}){% endif %}{% elif e.kind == 'retro_failed' %}{{ e.phase }} retro: {{ e.step }} failed — {{ e.error[:110] }}{% elif e.kind == 'rebased_stale_base' %}{% if e.resolved %}base {{ e.base }} moved and recovered; rebased onto it, checks pass{% else %}still failing after a rebase onto {{ e.base }}{% endif %}{% elif e.kind == 'phase_frozen' %}{{ e.phase }} {{ 'frozen' if e.frozen else 'unfrozen' }}{% else %}{{ e.reason or e.note or e.pr or e.answer or '' }}{% endif %}
  • {% else %}
  • no events in this window
  • {% endfor %}
Since {{ since }}
PRs opened
{% for e in digest.prs_opened %}{{ e.task }} {% else %}{% endfor %}
merged
{% for e in digest.merged %}{{ e.task }} {% else %}{% endfor %}
reviews
{% for e in digest.reviews %}{{ e.task }}: {{ e.verdict }}
{% else %}{% endfor %}
discovered
{% for e in digest.discovered %}{{ e.new_task }} {% else %}{% endfor %}
All time

Cost by difficulty tier

{{ tiers|safe }} {% if metrics.by_difficulty %} {% for tier in ['easy','medium','hard'] %}{% if metrics.by_difficulty.get(tier) %}{% set d = metrics.by_difficulty[tier] %}{% endif %}{% endfor %}
tiertasksavg revfirst-pass
{{ tier }}{{ d.tasks }}{{ d.avg_revisions }}{% if d.first_pass_rate is not none %}{{ (d.first_pass_rate * 100)|round|int }}%{% endif %}
{% endif %}
{% endblock %}