Honest steer: for a team this size, 9c (kill it) or 9b (handover draft) — 9b is the only version that does work the Overview can't.
Recommendation: 8b's queue as the core, with 8c's carried-over callout appended — old ad-hoc debt is the thing "My Tasks" can show that the dashboard can't.
All four compose with the 6a board: 7a is pure display logic, 7b/7c reuse existing data, 7d needs one template field (expected pipelines).
Template anchor becomes optional: anchor: friday | anytime. 6a keeps the board metaphor, 6b keeps days lightweight, 6c admits most tasks aren't day-bound and sorts purely by urgency.
Rule of thumb: the board shows state (counts, latest snippet), the detail shows story (full stream with timestamps). Webhook batches within a few minutes collapse to one passed-line.
activity:
task: task-instance id
ts: 2026-07-15T14:02Z
author: user "jweber" | token "gitlab-webhook"
text: "infra-eu failed on terraform plan, rerunning"
links: [ {type: pipeline, url: …/8843,
label: "weekly-infra-eu #8843",
meta: {status: running}} ]
Links always belong to an activity entry — a bare "attach link" is just an entry with empty text. The task's chip row is the union of its entries' links (latest status wins). Timestamp stored on every entry, shown only in task detail / history, not on the dashboard.
POST /api/tasks/{id}/activity
POST /api/tasks/by-template/verify-pipelines/current/activity
↑ pipelines don't know instance ids — address the
current week's instance by template slug
A CI job curls its own pipeline URL onto this week's verify task. Machine entries render as one compact line — gear icon + status chip; meta.status = failed tints the whole entry red (see 4a) instead of relying on the label text. This is the v2 auto-verification hook: a webhook entry with meta.status = passed for every expected pipeline could auto-complete the task.
Consolidates 3b: "link" is no longer a separate action — Note and Link merge into one composer; the hover bar becomes Done / Skip / Note.
link:
type: pipeline | cedm | grafana | runbook | url
url: https://gitlab…/pipelines/8841
label: "nightly #8841" # auto-derived, editable
meta: { status: failed } # v2: fetched live (GitLab hook)
Type is auto-detected from the URL host/path (GitLab → pipeline, CEDM → ticket id, Grafana → dashboard title). Stored per task instance; rendered everywhere as the same chip. The reserved meta field is where v2 pipeline auto-verification plugs in.
Skip lives in the card's hover action bar (see the Wed column in 3a) — reason required, shown on the skipped card afterwards. Links are typed chips per 3b.
List (2a) scales better when a day has many tasks and keeps notes readable; board (2b) gives instant "what's left this week" at a glance but gets tight with long notes.
| Task | Due | Status | Done by | Note | ||
|---|---|---|---|---|---|---|
| Check luau@ mailbox | Mon 13 Jul | Done | Jonas Weber · Mon 10:12 | 2 mails, both spam | ||
| Verify weekly pipelines ran · verifies: Tag terraform repos (Fri 10 Jul) | Mon 13 Jul | Overdue | — | |||
| Review Betterstack incident summary | Wed 15 Jul | Due today | — | |||
| Check luau@ mailbox | Wed 15 Jul | Due today | — | |||
| Tag terraform repos · on done schedules: Verify weekly pipelines ran (Mon 20 Jul) | Fri 17 Jul | Open | — | |||
| Clean up CI runner disk space | Tue 14 Jul | Skipped | Jonas Weber · Tue 16:40 | Runners rebuilt last week, disks fresh |
| Task | Status | Opened | Links | Last note | |
|---|---|---|---|---|---|
| JONAS WEBER (ON CALL) — 2 | |||||
| Investigate flaky nightly build on runner-04 | In progress | Tue 14 Jul | Pipeline #8841 | 2 h ago | |
| Rotate expiring registry credentials | Open | Wed 15 Jul | CEDM-10231 | — | |
| MIRIAM SCHOLZ — 1 | |||||
| Renew TLS cert for staging cluster | In progress | Thu 9 Jul | CEDM-10198 | yesterday | |
| DENIZ KAYA — 1 | |||||
| Document Betterstack escalation policy change | Open | Mon 6 Jul | — | 6 d ago | |
Try next: "build the full prototype from 1b" · "merge 1c's week board into 1a's tables" · "show the task detail page"