{% extends "base.html" %} {% load scoped_tags %} {% block title %}Scheduling{% endblock %} {% block page_title %}Scheduling{% endblock %} {% block page_subtitle %}Recurring schedules and scoped job execution (Layer 16){% endblock %} {% block layer_indicator %}L16 Scheduling{% endblock %} {% block content %} {# Recurring Schedules #}

Recurring Schedules

{{ schedules|length }} schedule{{ schedules|length|pluralize }}
{% if schedules %}
{% for sched in schedules %} {% endfor %}
Name Type Expression Status Owner Created
{{ sched.name|default:"Unnamed" }} {% if sched.cron_expression %} CRON {% elif sched.interval_seconds %} INTERVAL {% else %} {% endif %} {% if sched.cron_expression %}{{ sched.cron_expression }}{% elif sched.interval_seconds %}Every {{ sched.interval_seconds }}s{% else %}—{% endif %} {% include "components/_state_badge.html" with state=sched.lifecycle|default:"ACTIVE" %} {{ sched.owner_id|truncate_id }} {{ sched.created_at|format_dt }}
{% else %} {% include "components/_empty_state.html" with title="No recurring schedules" message="Cron and interval schedules will appear here once configured." %} {% endif %}
{# Scheduled Actions #}

Scheduled Actions

{{ actions|length }} action{{ actions|length|pluralize }}
{% if actions %}
{% for action in actions %} {% endfor %}
Name Action Type Next Run State Owner Config
{{ action.name|default:"Unnamed" }} {{ action.action_type }} {% if action.next_run_at %} {{ action.next_run_at|format_dt }} {% else %} Not scheduled {% endif %} {% include "components/_state_badge.html" with state=action.state|default:action.lifecycle|default:"PENDING" %} {{ action.owner_id|truncate_id }} {% if action.config %}
{{ action.config|pretty_json }}
{% else %} None {% endif %}
{% else %} {% include "components/_empty_state.html" with title="No scheduled actions" message="Scheduled actions run at specific times. Create actions to automate recurring tasks." %} {% endif %}
{# Recent Jobs #}

Recent Jobs

{{ recent_jobs|length }} job{{ recent_jobs|length|pluralize }}
{% if recent_jobs %}
{% for job in recent_jobs %} {% endfor %}
Job Action Type State Owner Started Completed
{{ job.name|default:"Unnamed Job" }} {{ job.action_type|default:"—" }} {% include "components/_state_badge.html" with state=job.state|default:"PENDING" %} {{ job.owner_id|truncate_id }} {{ job.started_at|format_dt|default:"—" }} {{ job.completed_at|format_dt|default:"—" }}
{% else %}

No jobs have been executed yet.

{% endif %}
{% endblock %}