{% from '_rule_block.html' import pin_block with context %}
{% from '_pin_sections.html' import suspended_pins, suspended_sentence with context %}
{% set page_title = 'Maintenance' %}
{% include '_header.html' %}
{#- The full, uncapped maintenance overview (ADR-0014, ADR-0036): **every pin** —
a node's own, or one of its reasons' — with what it silences, how long is
left, why, and who is behind it, read from the whole snapshot so it is
depth- and filter-independent. Viewer-visible and bookmarkable; the strip
pill's popover "+N more" links here. A plain page (the check.html /
events.html pattern), not polled — so an open editor has nothing to wait
for.
This page is what makes the popover's one-row-per-node summary safe: it is
where *"what is silenced right now?"* is answered completely, so the capped
surface is free to fold.
**The same blocks as a node's own page** (ADR-0104 decision 6,
`_rule_block.html`), grouped under each node's path: the node's own pin
first, then its lines' in the check's order — which is information
(severity, API order) that the order they were pinned in is not. Each is
read here and, by an admin, changed here: *Edit* opens in the block, and a
save or a clear comes back to this page with its node named —
`?node= {{ pins | length }} {{ 'pin' if pins | length == 1 else 'pins' }} on {{ nodes }} {{ 'node' if nodes == 1 else 'nodes' }}. {{ suspended_sentence(group) }} No nodes are in maintenance.Maintenance
{% if pins %}
{%- set nodes = pins | map(attribute='path') | unique | list | length %}
{% if suspended %}{{ path }}{% else %}{{ path }}{% endif %}{% set shown = group[0] | node_title %}{% if shown %} {{ shown | markdown_inline }}{% endif %}
{%- if suspended %}