{% import "macros.html" as m %} {% if not view.ok %} {{ m.absence(view) }} {% elif view.single %} {# Honest single-/no-snapshot message — never a faked delta (spec §4.10). #}

{{ view.title }}

{{ view.reason }}

{% if view.commit %}

current snapshot @ {{ view.commit }}

{% endif %}
{% elif view.has_changes %}

What moved between the two most recent committed generated/ snapshots — {{ view.old_commit }}{{ view.new_commit }}. {{ m.derived() }} (structural delta).

{% if view.transitions %}

Task state transitions

{{ view.transitions|length }}
{% for t in view.transitions %}
{{ t.id }} {{ t.title }} {{ m.tstate(t['from']) }}{{ m.tstate(t.to) }}
{% endfor %}
{% endif %} {% if view.stage_moves %}

Roadmap moves

{{ view.stage_moves|length }}
{% for s in view.stage_moves %}
{{ s.label }} {% if s.from_state != s.to_state %}{{ m.tstate(s.from_state) }}{{ m.tstate(s.to_state) }}{% endif %} {% if s.from_progress != s.to_progress %}{{ (s.from_progress * 100)|round|int }}% → {{ (s.to_progress * 100)|round|int }}%{% endif %}
{% endfor %}
{% endif %} {% if view.new_tasks or view.closed_tasks or view.new_suggestions or view.closed_suggestions %}

Opened & closed

{% for t in view.new_tasks %}
+ task{{ t.id }}{{ t.title }}{{ m.tstate(t.state) }}
{% endfor %} {% for t in view.closed_tasks %}
− task{{ t.id }}{{ t.title }}
{% endfor %} {% for s in view.new_suggestions %}
+ suggestion{{ s.id }}{{ s.title }}
{% endfor %} {% for s in view.closed_suggestions %}
− suggestion{{ s.id }}{{ s.title }}
{% endfor %}
{% endif %} {% else %} {{ m.empty_inline(view.empty_title, view.empty_reason) }} {% endif %}