Manual Checklist Progress{{ passed + failed + skipped }} of {{ total }} reviewed
{{ passed }} Pass
{{ failed }} Fail
{{ skipped }} Skip
{{ pending }} Pending
{{ smoke_pass }}/{{ smoke_total }} Auto Pass
{% for block_key, block_label in block_labels.items() %}
{% set items = checklist_by_block.get(block_key, []) %}
{% set block_pass = items|selectattr('status','equalto','pass')|list|length %}
{% set block_fail = items|selectattr('status','equalto','fail')|list|length %}
{% endfor %}
Automated Smoke Tests
{{ smoke_pass }} pass{{ smoke_fail }} fail
{% for key, result in smoke_results.items() %}
{{ '✓' if result.status == 'pass' else ('⏳' if result.status == 'pending' else '✗') }}
{{ result.label }}
{{ result.detail }}
{% endfor %}
{% for block_key, block_label in block_labels.items() %}
{{ block_label }}
{% set items = checklist_by_block.get(block_key, []) %}
{% set bp = items|selectattr('status','equalto','pass')|list|length %}
{% set bf = items|selectattr('status','equalto','fail')|list|length %}
{% if bp > 0 %}{{ bp }} pass{% endif %}
{% if bf > 0 %}{{ bf }} fail{% endif %}
{{ items|length }} items
{% for item in checklist_by_block.get(block_key, []) %}
{% set item_label = namespace(text=item.item_key) %}
{% for b, k, l in qa_checklist_def %}{% if k == item.item_key %}{% set item_label.text = l %}{% endif %}{% endfor %}