{% from '_partials/badge.html' import badge %} {% if gaps %} {# T-2043: bound rendered height — order active (non-closed) gaps first so they're always inline, then render the first _gaps_cap and wrap the overflow (mostly closed/resolved) in a collapsed
(display:none → excluded from scrollHeight and full_page screenshots, every gap still in the DOM one click away). Same card-list class as T-2040. #} {% set _gaps_ordered = (gaps|rejectattr('status','equalto','closed')|list) + (gaps|selectattr('status','equalto','closed')|list) %} {% set _gaps_cap = 20 %} {% for g in _gaps_ordered %} {% if loop.index == _gaps_cap + 1 %}
Show {{ _gaps_ordered|length - _gaps_cap }} more gap{{ 's' if (_gaps_ordered|length - _gaps_cap) != 1 }} — mostly closed / resolved {% endif %}
{{ g.id }} — {{ g.title }} {{ badge(g.severity | default('unknown')) }} {% set _status_map = {'watching': 'watching', 'decided-build': 'build', 'decided-simplify': 'simplify', 'closed': 'closed'} %} {{ badge(_status_map.get(g.status, g.status | default('unknown'))) }}

{{ g.description }}

{% if g.spec_reference %}

Spec: {{ g.spec_reference }}

{% endif %} {% if g.why_not_now %}
Why not now?

{{ g.why_not_now }}

{% endif %} {% if g.decision_trigger %}
Decision trigger

{{ g.decision_trigger }}

{% if g.trigger_check %}

Check type: {{ g.trigger_check.type }} {% if g.trigger_check.hint %} — {{ g.trigger_check.hint }}{% endif %} {% if g.trigger_check.check %}
Command: {{ g.trigger_check.check }}{% endif %} {% if g.trigger_check.threshold %}
Threshold: {{ g.trigger_check.threshold }}{% endif %}

{% endif %}
{% endif %} {% if g.evidence_needed or g.evidence_collected %}
Evidence {% if g.evidence_needed %}

Needed: {{ g.evidence_needed }}

{% endif %} {% if g.evidence_collected %}

Collected: {{ g.evidence_collected }}

{% endif %}
{% endif %} {% if g.alternative_outcome %}
Alternative outcome

{{ g.alternative_outcome }}

{% endif %} {# T-2185: Close action — surfaces when gap has a closure_check_command and gauge=READY. Disabled tooltip when gauge=NOT_READY/UNKNOWN; absent when no command configured. Inline result via HTMX swap. #} {% set _gs = gauge_by_id.get(g.id) %} {% if g.status == 'watching' and _gs and _gs.has_gauge %}
{% if _gs.verdict == 'READY' %}
{% else %} {% endif %}
{% endif %}
{% if g.related_directives %}Directives: {{ g.related_directives | join(', ') }} | {% endif %} Created: {{ g.created | default('unknown') }} {% if g.last_reviewed %} | Last reviewed: {{ g.last_reviewed }}{% endif %}
{% endfor %} {% if _gaps_ordered|length > _gaps_cap %}
{% endif %} {% else %}

No Gaps Found

No gaps were found in .context/project/gaps.yaml.

{% endif %}