{% extends "base.html" %} {% block title %}Job onboarding — BackupWatch{% endblock %} {% block main_class %}onb{% endblock %} {% block content %} {# how many rows of a group/section are on screen before the footer offers the rest #} {% set VISIBLE_CLUSTER_ROWS = 3 %} {% set VISIBLE_READY_ROWS = 8 %} {% set kind_label = 'Sweep' if data.ai_sweep else 'Discovery' if data.discovery else 'Inventory' %}
{% if data.ai_sweep %}Read {{ '{:,}'.format(data.message_count or 0) }} waiting Review-queue report{{ '' if data.message_count == 1 else 's' }} across {{ data.client_count or 0 }} client{{ '' if data.client_count == 1 else 's' }} and proposed {{ summary.proposed }} job{{ '' if summary.proposed == 1 else 's' }}.{% elif data.discovery %}Grouped {{ '{:,}'.format(data.message_count or 0) }} report{{ '' if data.message_count == 1 else 's' }} from {{ data.source }} into {{ summary.proposed }} proposed job{{ '' if summary.proposed == 1 else 's' }}.{% else %}Read {{ summary.proposed }} inventory row{{ '' if summary.proposed == 1 else 's' }} and proposed {{ summary.proposed }} job{{ '' if summary.proposed == 1 else 's' }}.{% endif %} Nothing is written until you save.
One request per client for {{ data.ai_candidates|length }} client{{ '' if data.ai_candidates|length == 1 else 's' }} — subject lines and sender addresses only, using your Anthropic API key and the shared hourly AI request budget. If the sweep hits the hourly limit partway through, the remaining clients are reported below the next run.
Last AI refinement run: {{ data.ai_summary.refined|length }} client(s) refined (~${{ '%.2f'|format(data.ai_summary.cost) }}). {% if data.ai_summary.skipped_cap %} Hourly AI limit reached. Not sent: {{ data.ai_summary.skipped_cap|join(', ') }}. Re-run the sweep later.{% endif %} {% if data.ai_summary.skipped_error %} Couldn't refine: {{ data.ai_summary.skipped_error|join(', ') }}.{% endif %}
{% endif %}{{ p.error }}
{% endif %} {% if p.superseded_by %}AI row{{ '' if p.superseded_by|length == 1 else 's' }} #{{ p.superseded_by|join(', #') }} cover{{ 's' if p.superseded_by|length == 1 else '' }} every report listed here, so this row is unticked. Tick it to create this job as well.
{% endif %}No sampled report emails for this row.
{% endif %}Imports never delete jobs missing from the file. Changed matching rules return active jobs to observation until they report again.
{# ---- ignore these reports: the Review page's "Always ignore" rule, opened from a row ---- #}