feat: add incident management system with user reporting

- Status page (status.viktorbarzin.me): incident cards with SEV badges,
  expandable timelines, postmortem links, user report rendering
- Issue templates on infra repo for user outage reports
- CronJob reads incidents + user-reports from ViktorBarzin/infra
- "Report an Outage" button on status page links to infra repo
- Post-mortem agents restored (4-stage pipeline: triage → investigation
  → historian → report writer) with updated paths and issue linking
- Post-mortem skill/template updated to link reports to GitHub Issues
  and manage postmortem-required/postmortem-done labels
- Labels: incident, sev1-3, user-report, postmortem-required,
  postmortem-done on infra repo

[ci skip]

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Viktor Barzin 2026-04-14 20:00:31 +00:00
parent 24a23709a5
commit 460c68e015
10 changed files with 880 additions and 1 deletions

5
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View file

@ -0,0 +1,5 @@
blank_issues_enabled: true
contact_links:
- name: Service Status
url: https://status.viktorbarzin.me
about: Check current service status and active incidents

View file

@ -0,0 +1,37 @@
name: Report an Outage
description: Report a service that appears to be down or degraded
labels: ["user-report"]
body:
- type: dropdown
id: service
attributes:
label: Affected Service
description: Which service is affected?
options:
- Nextcloud
- Immich
- Vaultwarden
- Grafana
- Plex / Jellyfin
- Mail
- DNS
- VPN / Tailscale
- Website / Blog
- Music (Navidrome / Freedify)
- Other
validations:
required: true
- type: textarea
id: description
attributes:
label: What's happening?
description: Describe what you're seeing. Include error messages, when it started, etc.
placeholder: "e.g., Getting 502 errors when trying to access Nextcloud since about 3pm"
validations:
required: true
- type: input
id: contact
attributes:
label: Contact (optional)
description: How can we reach you with updates?
placeholder: Email, Telegram handle, etc.