{% extends "base.html" %} {% block title %}Release Cadence - craft-dashboard{% endblock %} {% block content %} {% include "stats/partials/tabs.html" %}

Release cadence

Release freshness across tracked repositories, ordered by least-recent release. For unreleased repositories with a known start date, cadence is tracked from initial repository commit.

{% set red_count = cadence | selectattr("badge_color", "equalto", "red") | list | length %} {% set yellow_count = cadence | selectattr("badge_color", "equalto", "yellow") | list | length %} {% set green_count = cadence | selectattr("badge_color", "equalto", "green") | list | length %} {% set fallback_count = cadence | selectattr("is_fallback") | list | length %}
{% for row in cadence %} {% else %} {% endfor %}
Repository Category Latest Tag Release Date Cadence Commits Ahead
{{ row.name }} {{ row.category }} {% if row.is_fallback %} {{ row.latest_version }} {% else %} {{ row.latest_version }} {% endif %} {{ row.released_at_str }} {% if row.days_ago is not none %} {{ row.days_ago | format_age_days }} ago {% else %} — {% endif %} {% if row.commits_since is not none %} {{ row.commits_since }} {% else %} — {% endif %}
No repository cadence data available.

Summary

Tracked:
{{ cadence | length }} repositories
Fresh (≤30d):
{{ green_count }} repos
Warning (31–60d):
{{ yellow_count }} repos
Stale (>60d):
{{ red_count }} repos
{% if fallback_count > 0 %}
Fallback / Unreleased:
{{ fallback_count }} repos
{% endif %}

Thresholds

≤ 30 days: Fresh
31–60 days: Attention needed
> 60 days: Release overdue
Unreleased: Tracked from initial commit

{% endblock %} {% block scripts %} {% endblock %}