{# ---------- Helpers ---------- #} {# `band` is for "higher is better" metrics (defense score, dimension scores) #} {% macro band(score) -%} {%- if score >= 70 -%}good {%- elif score >= 40 -%}warn {%- else -%}bad {%- endif -%} {%- endmacro %} {# `inv_band` is for "higher is worse" metrics (bot completion likelihood) #} {% macro inv_band(score) -%} {%- if score >= 70 -%}bad {%- elif score >= 40 -%}warn {%- else -%}good {%- endif -%} {%- endmacro %} {# `severity_class` maps Finding.severity int → CSS class. Defaults to `low` so an unexpected int never shadows the page with stack traces. #} {% macro severity_class(s) -%} {%- if s == 3 -%}high {%- elif s == 2 -%}med {%- else -%}low {%- endif -%} {%- endmacro %} {# ---------- 1. Header ---------- #}

Instrument Review

{{ review.filename }}
Reviewed {{ review.timestamp.strftime("%Y-%m-%d %H:%M") }} · Model: {{ review.parameters.model }} · Dimensions: {{ review.parameters.dimension_set_version }} · Review ID: {{ review.review_id }}
{# ---------- 2. Score panel ---------- #}
{{ '%.0f'|format(review.overall_score) }}
Overall defense score / 100
{{ '%.0f'|format(review.completion_likelihood) }}
Bot completion likelihood / 100
lower is better
{{ review.dimensions|length }}
Dimensions reviewed
{% set failed_dims = review.dimensions | selectattr("error") | list %} {% if failed_dims %}
Note: {{ failed_dims|length }} dimension{{ 's' if failed_dims|length != 1 else '' }} did not complete and {{ 'were' if failed_dims|length != 1 else 'was' }} weighted at zero in the overall score.
{% endif %} {# ---------- 3. Bot-resistance assessment ---------- #} {% if review.overall_feedback and review.overall_feedback.headline %}

Bot-resistance assessment

{{ review.overall_feedback.headline }}

{% for para in review.overall_feedback.paragraphs %}

{{ para }}

{% endfor %}
{% endif %} {# ---------- 4. Methods statement ---------- #}

Methods statement for your paper

Paste this into the Methods section of your manuscript to signal the instrument was reviewed for non-human-response resistance.
{# ---------- 5. Survey at a glance ---------- #}

Survey at a glance

Title{{ survey.name }}
Questions{{ review.parsed_summary.n_questions }}
Blocks{{ review.parsed_summary.n_blocks }}
Force-response{{ review.parsed_summary.force_response_pct }}% of questions
Question types {% for t, n in review.parsed_summary.type_histogram.items() -%} {{ t }}: {{ n }}{% if not loop.last %} · {% endif %} {%- endfor %}
{# ---------- 6. Per-dimension cards ---------- #}

Per-dimension review

{% for d in review.dimensions %}

{{ d.dimension }}

{{ '%.0f'|format(d.score) }} / 100
{% if d.error %}

Reviewer error: {{ d.error }}

{% else %}

{{ d.summary }}

{% if d.findings %}
{{ d.findings|length }} finding{% if d.findings|length != 1 %}s{% endif %} {% for f in d.findings %}
{{ severity_class(f.severity) }} {% if f.question_id %} {{ f.question_id }} {% endif %}
{{ f.rationale }}
{% if f.excerpt %}
"{{ f.excerpt }}"
{% endif %} {% if f.suggested_fix %}
→ {{ f.suggested_fix }}
{% endif %} {% if f.contributing_dimensions %}
Flagged by: {{ f.contributing_dimensions|join(', ') }}
{% endif %}
{% endfor %}
{% endif %} {% endif %}
{% endfor %} {# ---------- 7. Top recommendations ---------- #}

Top recommendations

{% if review.recommendations %}
    {% for r in review.recommendations %}
  1. {{ r.title }}
    {{ r.detail }}
    Surfaced by: {{ r.related_dimensions|join(", ") }}
  2. {% endfor %}
{% else %}

No actionable recommendations — every reviewer either passed cleanly or returned only low-impact findings.

{% endif %} {# ---------- 8. Narrative summary ---------- #}

Narrative summary

{{ review.narrative_summary }}
{# ---------- 9. Evidence appendix ---------- #}

Evidence appendix

{% for q in survey.questions %}
{{ q.qid }} · {{ q.type }}{% if q.subtype %}/{{ q.subtype }}{% endif %} · {{ q.text[:80] }}{% if q.text|length > 80 %}…{% endif %}
{{ q.text }}
{% if q.choices %}
Choices: {{ q.choices|join(' | ') }}
{% endif %} {% if q.force_response %}
force_response: ON
{% endif %} {% if q.hidden %}
hidden
{% endif %} {% if findings_by_qid.get(q.qid) %}
Flagged by: {% for dim_name, f in findings_by_qid[q.qid] -%} {{ dim_name }}{% if not loop.last %}, {% endif %} {%- endfor %}
{% endif %}
{% endfor %}
{# ---------- 10. Citation block ---------- #}

Cite Survey Shield

APA
{{ citation.apa }}
BibTeX
{{ citation.bibtex }}
{# ---------- 11. Footer ---------- #}