{# Shared body for the atomic-service page (full render + HTMX refresh). #}
Scheduling Configuration
Cycle Interval {{ config.interval_minutes }} min
Spread Margin {{ config.spread_margin_minutes }} min
Check Interval {{ config.check_interval_minutes }} min
Runner Dead After {{ config.runner_dead_after_minutes }} min

Now (UTC) {{ cycle.now }}
Cycle Start {{ cycle.cycle_start or "—" }}
Cycle End {{ cycle.cycle_end or "—" }}
Current-Cycle Slot Assignment ({{ total_runners }} runner{{ '' if total_runners == 1 else 's' }})
{% if slot_rows %}
{% for row in slot_rows %} {% endfor %}
Position Runner Slot Start Slot End State Decision Reason
{{ row.position if row.position is not none else "—" }} {{ row.runner_id }} {{ row.slot_start or "—" }} {{ row.slot_end or "—" }} {% if row.is_current_owner %} Owns slot {% else %} Waiting {% endif %} {{ row.reason }}
{% else %}

No active runners are eligible for atomic-service scheduling.

{% endif %}
Active Runners (heartbeat + last execution)
{% if runner_rows %}
{% for row in runner_rows %} {% endfor %}
Runner Created Last Heartbeat Eligible Last Service Start Last Service End Decision
{{ row.runner_id }} {{ row.creation_time }} {{ row.last_heartbeat }} {% if row.allow_to_run_atomic_service %} yes {% if row.in_membership_grace %}
grace
{% elif row.in_runnable_set %}
runnable
{% endif %} {% else %} no {% endif %}
{{ row.last_service_start or "—" }} {{ row.last_service_end or "—" }} {% if row.decision %} {% if row.decision.should_try_start %} try-start {% else %} skip {% endif %} {{ row.decision.reason }} {% else %} — {% endif %}
{% else %}

No active runners.

{% endif %}
Recent Skip Events
{% if events %}
{% for event in events %} {% endfor %}
Created (UTC) Reason Cycle Start Slot Start Slot End Observer Message
{{ event.created_at }} {{ event.reason }} {{ event.cycle_start or "—" }} {{ event.slot_start or "—" }} {{ event.slot_end or "—" }} {{ event.runner_id }} {{ event.message or "—" }}
{% else %}

No skip events recorded yet (derived from BLOCKED execution rows).

{% endif %}