{# The workspace: navigator, content, findings, coverage and the actions on one unit. Every string reaching this template is model output or user input and is escaped by the environment's autoescaping. Nothing here uses `| safe`, and nothing may: risk S1 names unescaped model output as this application's highest-impact security risk, and the unit content is the single largest piece of it. Works with JavaScript disabled (ADR-0020). The navigator is links, every action is a form, and the live region is filled by `workspace.js` only as an enhancement. #} {% extends "base.html" %} {% from "mirrorwall/components.html" import badge, empty_state, kv_list %} {% block head %}{% endblock %} {% block scripts %} {% endblock %} {% block content %}
Backend: {{ backend.mode }} {% if backend.egress %}{{ badge("leaves this machine", tone="warning") }}{% else %}{{ badge("stays on this machine", tone="success") }}{% endif %} {% if backend.routes_internally %}{{ badge("routes by task profile", tone="neutral") }}{% endif %} {% if backend.mode != "none" and not backend.structured_output %}{{ badge("no schema enforcement — validated here", tone="neutral") }}{% endif %}
{% if running_task_id %}Reload this page to see progress. With JavaScript enabled it updates here as it happens.
{{ pause.reason }}
{% if pause.hint %}{{ pause.hint }}
{% endif %}Other units are unaffected: a paused unit never stops the rest of the stage.
{{ coverage_summary.satisfied }} of {{ coverage_summary.total }} satisfied. {% if coverage_summary.model_guaranteed %} {{ badge(coverage_summary.model_guaranteed ~ " guaranteed by model review, not a deterministic check", tone="warning") }} {% endif %}
{% if unit.coverage %}| Requirement | Satisfied | Decided by | Detail |
|---|---|---|---|
| {{ entry.requirement_key }} | {{ badge("yes" if entry.satisfied else "no", tone="success" if entry.satisfied else "danger") }} | {{ entry.satisfied_by }}{% if entry.satisfied_by == "audit" %} {{ badge("model review, not a deterministic check", tone="warning") }}{% elif entry.satisfied_by not in ("deterministic_check", "") %} {{ badge("model-assisted", tone="neutral") }}{% endif %} | {{ entry.detail }} |
{{ unit.content }}
{% else %}{{ empty_state("No committed content yet.") }}{% endif %}
| Round | Severity | Problem | Would resolve it |
|---|---|---|---|
| {{ finding.round }} | {{ badge(finding.severity, tone="danger" if finding.severity in ("critical", "major") else "neutral") }} | {{ finding.problem }} | {{ finding.fix }} |
{{ diff.unavailable }}
{% elif diff.diff_unchanged %}Versions {{ diff.diff_old_version }} and {{ diff.diff_new_version }} are identical — the revision changed nothing.
{% else %}Version {{ diff.diff_old_version }} → {{ diff.diff_new_version }}: {{ diff.diff_added }} line(s) added, {{ diff.diff_removed }} removed. {% if diff.diff_truncated %}Unchanged passages are elided.{% endif %}
| Old | New | Change | Line |
|---|---|---|---|
| {{ line.old_number if line.old_number is not none else "" }} | {{ line.new_number if line.new_number is not none else "" }} | {{ line.marker }} | {{ line.text }} |
| Stage | Attempt | Backend | Model | Prompt | Routing | Degradations |
|---|---|---|---|---|---|---|
| {{ attempt.stage }} | {{ attempt.attempt }} | {{ attempt.backend }} | {{ attempt.model_canonical_id or "—" }} | {{ attempt.prompt_id }} {{ attempt.prompt_version }} | {% if attempt.routing %}
decision {{ attempt.routing.decision_id or "—" }}{% if attempt.routing.final_score is defined and attempt.routing.final_score is not none %}, score {{ attempt.routing.final_score }}{% endif %}
{% if attempt.routing.flags %} {% for flag in attempt.routing.flags %}{{ badge(flag, tone="warning") }} {% endfor %}{% endif %} {% else %}—{% endif %} |
{% if attempt.degradations %}
|