{% extends "base.html" %} {% block title %}Specs{% endblock %} {% block content %}

Specs

{{ specs|length }} spec{{ '' if specs|length == 1 else 's' }} across {{ roots|length }} root{{ '' if roots|length == 1 else 's' }}. {% if allow_run %} Click a status chip to flip it. {% else %} Read-only mode — restart without --read-only to edit statuses. {% endif %}

{% if roots %}

Reading from {% for root in roots %} {{ root }}{% if not loop.last %}, {% endif %} {% endfor %}

{% endif %} {# "Ready to close?" section — server-rendered shell, populated by completion_candidates.js on page load. Hidden until the GET returns at least one candidate, so users with zero candidates see no visual clutter. Gated server-side on both feature flag AND allow_run per docs/specs/ops-specs-completion-candidates/ (Phase 2). #} {% if allow_run and specs_candidates_enabled %} {% endif %} {% if specs %} {# Compact status display: dot + 3-letter code for known statuses, truncated text + dotted underline for custom strings. Full status in title attribute (native tooltip). Click on editable pills swaps to