{% extends "base.html" %} {% block title %}Run {{ run.run_id }}{% endblock %} {% block head %}{% if run.status == "Running" %}{% endif %}{% endblock %} {% block style %} .st { display: inline-block; padding: 2px 9px; border-radius: 10px; font-weight: 600; font-size: 12px; background: var(--head); } .st.Done { background: var(--pass-bg); color: var(--pass); } .st.Run-Error, .st.Ended-without-a-record { background: var(--fail-bg); color: var(--fail); } .st.Stopped { background: var(--review-bg); color: var(--review); } .st.Running { background: var(--hilite); color: var(--accent); } dl.facts { display: grid; grid-template-columns: 150px 1fr; gap: 6px 12px; margin: 0; } dl.facts dt { color: var(--muted); } dl.facts dd { margin: 0; } .card.error { border-left: 5px solid var(--fail); } .card.warn { border-left: 5px solid var(--review-bar); } table.plain { width: 100%; border-collapse: collapse; font-size: 13px; } table.plain th, table.plain td { text-align: left; padding: 6px 8px; border-bottom: 1px solid var(--line); vertical-align: top; } table.plain th { color: #3b4757; font-size: 12px; text-transform: uppercase; letter-spacing: .4px; background: var(--head); } td.t { white-space: nowrap; color: var(--muted); width: 90px; } .ok { color: var(--pass); font-weight: 600; } .no { color: var(--fail); font-weight: 600; } pre.tb { background: var(--head); padding: 10px; border-radius: 6px; white-space: pre-wrap; font-size: 12px; margin: 6px 0 0; } ul.claims { columns: 4; margin: 0; padding-left: 18px; } tr.k-run_error td, tr.k-claim_error td { color: var(--fail); } tr.k-warning td { color: var(--review); } {% endblock %} {% block content %}

Run {{ run.started | usdate }} {{ run.status }}

{% if run.status == "Running" %}Still running — this page refreshes every 5 seconds.{% else %}Ran {{ run.duration_s | dur }}.{% endif %}

Started By
{{ run.started_by }}
Source
{{ run.source | capitalize }}
Mode
{{ run.mode }}{% if run.test_sheet %} · claims from {{ run.test_sheet }}{% endif %}
Started
{{ run.started | usdate }}
Ended
{{ run.ended | usdate }}
Result
{{ run.status }}{% if run.exit_code is not none %} (exit {{ run.exit_code }}){% endif %}{% if run.error_step %} — {{ run.error_step }}: {{ run.error_message }}{% endif %}
{% if run.status == "Stopped" %}
Stopped By
{{ run.stopped_by or "—" }}
{% endif %}
Claims
{{ run.claims_done }} of {{ run.claims_total }} checked · {{ run.pass }} Pass · {{ run.fail }} Fail · {{ run.review }} Review{% if run.not_found %} · {{ run.not_found }} not found{% endif %}
{% if run.run_errors %}

Run Error

{% for e in run.run_errors %}

{{ e.t[11:19] }} · {{ e.step }} · exit {{ e.exit_code }} — {{ e.message }}

{% if e.traceback %}
Traceback
{{ e.traceback }}
{% endif %} {% endfor %}
{% endif %}

eCW Login Attempts{% if run.login_attempts %} · {{ run.login_total_s | dur }} in all{% endif %}

{% if run.login_attempts %} {% for a in run.login_attempts %} {% endfor %}
#StartEndTook2FA mail waitResultSteps
{{ a.attempt }} {{ a.start | usdate }} {{ a.end | usdate }} {{ a.duration_s | dur }} {{ a.twofa_wait_s | dur if a.twofa_wait_s is not none else "—" }} {{ a.result_label }}{% if a.message %} — {{ a.message }}{% endif %} {% for label, time in a.step_rows %}{{ time }} {{ label }}{% if not loop.last %}
{% endif %}{% endfor %}
{% else %}

No eCW login in this run.

{% endif %}
{% if run.claim_errors %}

Claim Errors ({{ run.claim_errors | length }})

The bot could not check these claims; the Charge Summary shows them as Review.

{% for e in run.claim_errors %}{% endfor %}
TimeClaimStepMessage
{{ e.t[11:19] }}{{ e.claim }}{{ e.step }}{{ e.message }}
{% endif %} {% if run.not_reached %}

Not Reached ({{ run.not_reached | length }})

Queued, but the run ended before it got to them.

{% endif %} {% if run.warnings %}

Warnings ({{ run.warnings | length }})

{% for e in run.warnings %}{% endfor %}
TimeKindClaimMessage
{{ e.t[11:19] }}{{ e.code }}{{ e.claim or "" }}{{ e.message }}
{% endif %} {% if run.screenshots %}

Failure screenshots

Each one's page HTML, when saved, is beside it in Screenshots\ (open it there, not here).

{% endif %}

Timeline

{% for e in run.timeline %}{% endfor %}
{{ e.time }}{{ e.text }}
{% endblock %}