pipekit/pipekit/web/templates/groups.html
Paul Trowbridge 31d670b4e6 Add group runs and fix wizard identifier sanitization for spaced column names
Groups allow multiple modules to be run sequentially in a defined order.
Adds full CRUD (repo, engine orchestrator, web routes, templates) for grp,
group_member, and group_run tables that were previously schema-only. Module
index now shows group membership badges per module. Wizard default dest name
now sanitizes source column names with spaces or special characters to valid
identifiers rather than failing at CREATE TABLE time.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-06-02 00:05:37 -04:00

61 lines
2.2 KiB
HTML

{% extends "base.html" %}
{% set section = "groups" %}
{% block title %}Groups — Pipekit{% endblock %}
{% block content %}
<div class="panel">
<header>
Groups
<span class="subtitle">{{ groups|length }} total</span>
<span style="margin-left:auto">
<a class="btn" href="/groups/new">New group…</a>
</span>
</header>
<div class="body tight">
{% if groups %}
<table class="grid">
<thead>
<tr>
<th>name</th>
<th>members</th>
<th>last run</th>
<th style="width:9em">status</th>
<th></th>
</tr>
</thead>
<tbody>
{% for g in groups %}
<tr>
<td><a href="/groups/{{ g.id }}"><strong>{{ g.name }}</strong></a></td>
<td class="mono">{{ g.member_count }}</td>
<td class="mono">{{ g.last_run_at or "—" }}</td>
<td>
{% if g.last_status %}
<span class="pill {{ g.last_status }}">{{ g.last_status }}</span>
{% else %}
<span class="pill">never ran</span>
{% endif %}
</td>
<td style="text-align:right">
<form class="inline" method="post" action="/groups/{{ g.id }}/run">
<button type="submit">Run</button>
</form>
<form class="inline" method="post" action="/groups/{{ g.id }}/run">
<input type="hidden" name="dry_run" value="1">
<button type="submit" class="ghost">Dry run</button>
</form>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<div class="empty">
No groups yet.<br>
<a class="btn" href="/groups/new" style="margin-top:0.7rem; display:inline-block">Create one</a>
</div>
{% endif %}
</div>
</div>
{% endblock %}