{# T34.4 / VALIDATION RESULTS -- per-endpoint outcomes for Bucket A (rich, 4-check pipeline) plus a compact Bucket B reachability sub-table. Bucket B entries surface as the "did the prerequisite respond" check so users see "session-start is broken" before they hit production. Hidden entirely when validation did not run for this scan. Inline styles because styles.css is byte-pinned to the v0.1.0 mockup; we re-use existing CSS variables for theme parity. #} {% if report.validation_result and report.validation_result.per_endpoint %} {% set per_endpoint = report.validation_result.per_endpoint %} {% set bucket_a_entries = per_endpoint | rejectattr('bucket', 'equalto', 'B') | list %} {% set bucket_b_entries = per_endpoint | selectattr('bucket', 'equalto', 'B') | list %} {% set bucket_a_assignment = (report.bucket_assignment or {}).get('bucket_a') or [] %} {% set bucket_b_assignment = (report.bucket_assignment or {}).get('bucket_b') or [] %} {% set filtered_total = (bucket_a_assignment | length) + (bucket_b_assignment | length) %} {% set validated_total = bucket_a_entries | length %}
02b / VALIDATION RESULTS

Per-endpoint validation outcomes

{% if filtered_total > 0 %}

Validated {{ validated_total }} of {{ filtered_total }} filtered endpoint{{ '' if filtered_total == 1 else 's' }}. {% if filtered_total > validated_total %} The other {{ filtered_total - validated_total }} inherit{{ '' if (filtered_total - validated_total) == 1 else '' }} the recommendation from these {{ validated_total }}. {% endif %}

{% endif %} {% if bucket_a_entries %} {% for entry in bucket_a_entries %} {% set is_blocked = not entry.best_library %} {% endfor %}
Endpoint Library Min hdrs Cookies? Rate limit Block reasons
{{ entry.method }} {{ entry.endpoint }} {# T35.2: shape-dedup aliases. Other captured URLs whose response shape matched this representative collapsed into this row. Surface them so users can spot when two genuinely different endpoints share a shape. #} {% if entry.aliased_urls %}
Also represents {{ entry.aliased_urls | length }} URL{{ '' if (entry.aliased_urls | length) == 1 else 's' }}:
{% for alias in entry.aliased_urls %}
↳ {{ alias }}
{% endfor %}
{% endif %}
{% if is_blocked %} ✗ all blocked {% else %} ✔ {{ entry.best_library }} {% endif %} {{ entry.min_required_headers | length }} {% if entry.cookies_required %}yes{% else %}no{% endif %} {% if entry.rate_limit and entry.rate_limit.get('rate_limit_detected') %} {% set delay = entry.rate_limit.get('estimated_safe_delay_s') %} {% if delay is not none %} ~{{ delay }}s safe delay {% else %} detected {% endif %} {% elif entry.rate_limit and not entry.rate_limit.get('error') %} no limit detected {% else %} — {% endif %} {% if entry.warnings %} {% for w in entry.warnings %}
{{ w }}
{% endfor %} {% else %} — {% endif %}
{% else %}

No Bucket A endpoints were validated for this scan.

{% endif %} {% if bucket_b_entries %}
Bucket B reachability ({{ bucket_b_entries | length }})

Light liveness probe -- single library call per prerequisite. ``Blocked`` here means the session-start endpoint will not respond from a Python client; expect to warm up via a real browser before any data call works.

{% for entry in bucket_b_entries %} {% endfor %}
Endpoint Reachable
{{ entry.method }} {{ entry.endpoint }} {% if entry.best_library %} ✔ via {{ entry.best_library }} {% else %} ✗ blocked {% endif %}
{% endif %}
{% endif %}