docs: add project management structure

This commit is contained in:
2025-12-28 09:16:22 +01:00
parent 3991362e67
commit 4eb20e2449
50 changed files with 1905 additions and 0 deletions

View File

@ -0,0 +1,38 @@
ID: EPIC_000001 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# EPIC_000001: Legacy CLI Account Control (sk.sh)
## Beschreibung
Der Legacy-CLI-Workflow ermoeglicht das Sperren und Entsperren lokaler Nutzerkonten per Bash-Skript.
## Ziel / Business Value
Schnelle, direkte Steuerung ohne Web-Service als Notfall- oder SSH-Fallback.
## Mission Statement
Stelle eine robuste, direkte Konto-Steuerung fuer Admins bereit, wenn der Service nicht verfuegbar ist.
## Business Value & Metriken
- Weniger Support-Aufwand durch schnelle lokale Eingriffe.
- Erfolgsmetrik: Konto-Disable/Enable laesst sich per CLI ohne Zusatztools ausfuehren.
## In-Scope
- Sperren/Entsperren von Nutzerkonten.
- Optionaler Countdown, Benachrichtigungen und Sound.
- Shutdown nur bei aktivem Login.
## Out-of-Scope
- Web-UI oder API-Integration.
- Persistente Protokollierung im Backend.
## High-Level Akzeptanzkriterien
- Admin kann einen Nutzer per CLI deaktivieren oder aktivieren.
- Countdown/Benachrichtigung/Shutdown verhalten sich wie dokumentiert.
## Technische Constraints & Risiken
- Root-Rechte erforderlich.
- Abhaengigkeit von notify-send und Sound-Tools.
## Zugeordnete User Stories (Done)
- US_000001: Nutzerkonto deaktivieren mit Countdown
- US_000002: Nutzerkonto wieder aktivieren

View File

@ -0,0 +1,41 @@
ID: EPIC_000002 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# EPIC_000002: Backend API Service
## Beschreibung
Der Backend-Service bietet REST-Endpunkte fuer Health-Checks und Nutzeraktionen zum Sperren/Entsperren.
## Ziel / Business Value
Remote-Steuerung von Nutzerkonten mit klaren API-Antworten fuer Automatisierung.
## Mission Statement
Biete eine sichere, zentrale API zur Verwaltung lokaler Nutzerkonten.
## Business Value & Metriken
- Remote-Verwaltung ohne direkten SSH-Zugriff.
- Erfolgsmetrik: API liefert konsistente Status- und Action-Responses.
## In-Scope
- Health-Endpoint.
- Auflistung verwaltbarer Nutzer.
- Disable/Enable-Endpoints mit Rueckgabe der Schritte.
## Out-of-Scope
- Frontend-Design-Iteration.
- Persistente Datenbank.
## High-Level Akzeptanzkriterien
- Endpunkte sind erreichbar und liefern erwartete Payloads.
- Actions melden Aktion, Schritte und Login-Status.
## Technische Constraints & Risiken
- Abhaengigkeit von lokalen System-Befehlen fuer Aktionen.
- Fehler muessen als HTTP-Fehler sauber abgebildet werden.
## Zugeordnete User Stories (Done)
- US_000003: Health-Status abfragen
- US_000004: Verfuegbare Nutzer auflisten
- US_000005: Nutzer per API deaktivieren
- US_000006: Nutzer per API aktivieren
- US_000021: Konfiguration per ENV steuern

View File

@ -0,0 +1,40 @@
ID: EPIC_000003 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# EPIC_000003: Authentication & Sessions
## Beschreibung
Authentifizierung und Autorisierung fuer Admins via PAM oder OIDC inkl. Session-Handling.
## Ziel / Business Value
Sichere Zugriffskontrolle auf API und UI mit klarer Admin-Identitaet.
## Mission Statement
Stelle einen sicheren Admin-Login bereit, der Token oder Session-Cookies ausstellt.
## Business Value & Metriken
- Reduzierung unautorisierter Zugriffe.
- Erfolgsmetrik: Nur autorisierte Admins koennen Nutzeraktionen ausfuehren.
## In-Scope
- PAM-Login mit Token-Ausgabe.
- OIDC-Login Flow mit State-Validierung.
- Autorisierungs-Guards und /me-Endpoint.
## Out-of-Scope
- Multi-Faktor-Authentifizierung.
- Externe Session Stores.
## High-Level Akzeptanzkriterien
- PAM-Login liefert Token und setzt Session-Cookie.
- OIDC-Flow validiert State und setzt Session-Cookie.
- Nicht autorisierte Nutzer werden blockiert.
## Technische Constraints & Risiken
- Abhaengigkeit von PAM und OIDC-Provider-Verfuegbarkeit.
- Cookie-Sicherheit muss korrekt konfiguriert sein.
## Zugeordnete User Stories (Done)
- US_000007: PAM-Login mit Token
- US_000008: OIDC-Login Flow
- US_000009: Autorisierung und /me-Identitaet

View File

@ -0,0 +1,35 @@
ID: EPIC_000004 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# EPIC_000004: Web UI
## Beschreibung
Eine schlanke Web-Oberflaeche wird als HTML-Template vom Backend ausgeliefert.
## Ziel / Business Value
Remote-Bedienung ueber den Browser ohne separate Client-Installation.
## Mission Statement
Biete eine einfache UI fuer Admins zum Login und zur Nutzersteuerung.
## Business Value & Metriken
- Schnellere Bedienung fuer Nicht-CLI-Nutzer.
- Erfolgsmetrik: UI ist unter / erreichbar.
## In-Scope
- Auslieferung der Index-Seite.
- Einbindung der Login-Optionen im Template.
## Out-of-Scope
- Design-Overhaul oder umfassende Frontend-Architektur.
## High-Level Akzeptanzkriterien
- GET / liefert eine HTML-Seite aus dem Template-Verzeichnis.
## Technische Constraints & Risiken
- Template-Abhaengigkeit von korrekter Backend-Konfiguration.
## Zugeordnete User Stories (Done)
- US_000010: Index-Seite ausliefern
- US_000022: Web-UI Aktionen ausfuehren
- US_000024: Watchtower Theme fuer Web-UI

View File

@ -0,0 +1,43 @@
ID: EPIC_000005 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# EPIC_000005: Automation Scripts
## Beschreibung
Bash-Skripte automatisieren Installation, Start, Update und Deployment des Services.
## Ziel / Business Value
Schnelle und reproduzierbare Betriebsablaeufe auf Zielsystemen.
## Mission Statement
Minimiere manuelle Admin-Schritte durch standardisierte Skripte.
## Business Value & Metriken
- Zeitersparnis bei Setup und Updates.
- Erfolgsmetrik: Install/Update/Deploy laufen ohne manuelle Nacharbeit.
## In-Scope
- Virtualenv-Erstellung und Abhaengigkeiten.
- Service-Start und Installation.
- Update- und Deployment-Workflows.
- OIDC-Client-Registrierungshilfe.
## Out-of-Scope
- CI/CD-Pipelines.
- Monitoring oder Alerting.
## High-Level Akzeptanzkriterien
- Skripte decken lokale und remote Setups ab.
- Fehler brechen mit klarer Ausgabe ab.
## Technische Constraints & Risiken
- Abhaengigkeit von sudo, rsync, ssh, python3.
## Zugeordnete User Stories (Done)
- US_000011: Virtualenv und Abhaengigkeiten erstellen
- US_000012: Service lokal starten
- US_000013: Service installieren
- US_000014: Service aktualisieren
- US_000015: Remote-Deployment durchfuehren
- US_000016: OIDC-Client registrieren
- US_000020: Makefile-Automation bereitstellen

View File

@ -0,0 +1,37 @@
ID: EPIC_000006 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# EPIC_000006: Systemd & Deployment Artifacts
## Beschreibung
Service-Unit und Konfigurationsvorlagen stellen den Betrieb und die manuelle Verteilung sicher.
## Ziel / Business Value
Konsistente Service-Konfiguration und einfache Bereitstellungsvorlagen.
## Mission Statement
Stelle Service-Unit und Konfigurations-Templates fuer reproduzierbare Deployments bereit.
## Business Value & Metriken
- Reduzierte Fehlkonfigurationen durch Standardvorlagen.
- Erfolgsmetrik: Service startet mit Unit-Datei und Env-Template.
## In-Scope
- Systemd-Unit-Datei im Repo.
- Konfigurationsvorlagen fuer env und Deploy-Hosts.
- Manuelle Deployment-Archive.
## Out-of-Scope
- Automatisierte Release-Pipelines.
## High-Level Akzeptanzkriterien
- Unit- und Template-Dateien sind im Repo vorhanden.
- Deployment-Archiv steht fuer manuelle Nutzung bereit.
## Technische Constraints & Risiken
- Pfadannahmen muessen zum Zielsystem passen.
## Zugeordnete User Stories (Done)
- US_000017: Systemd-Unit im Repo
- US_000018: Konfigurations-Templates verfuegbar
- US_000019: Deployment-Archiv vorhanden

View File

@ -0,0 +1,32 @@
ID: EPIC_000007 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# EPIC_000007: Documentation & Runbook
## Beschreibung
Projekt-Dokumentation beschreibt Setup, Betrieb und Sicherheitsrichtlinien fuer Admins.
## Ziel / Business Value
Schnelleres Onboarding und sichere Bedienung durch klare Runbooks.
## Mission Statement
Stelle eine verlaessliche Betriebs- und Sicherheitsdokumentation bereit.
## Business Value & Metriken
- Reduzierter Support durch klare Anleitungen.
- Erfolgsmetrik: Operatoren koennen Installation und Betrieb aus der Doku nachvollziehen.
## In-Scope
- README mit Setup, Running, Updates und Security-Hinweisen.
## Out-of-Scope
- Externe Wiki- oder Ticket-Systeme.
## High-Level Akzeptanzkriterien
- README beschreibt Setup, Betrieb und Security Hardening.
## Technische Constraints & Risiken
- Dokumentation muss mit dem aktuellen Verhalten uebereinstimmen.
## Zugeordnete User Stories (Done)
- US_000023: Runbook und Security-Hinweise dokumentieren

View File

@ -0,0 +1,18 @@
ID: US_000001 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# US_000001: Nutzerkonto per CLI deaktivieren
Status: Done
Als Admin moechte ich ein Nutzerkonto per CLI deaktivieren, damit der Zugriff sofort unterbunden wird.
## Akzeptanzkriterien
- Given ein existierender Nutzer und Root-Rechte
- When das Skript mit `disable` und optionalen Countdown/Sound-Parametern aufgerufen wird
- Then das Konto ist gesperrt und ein aktiver Login wird erkannt
- And bei aktivem Login wird eine Warnung/Countdown versendet und anschliessend abgemeldet
- And ein Shutdown erfolgt nur, wenn der Nutzer zuvor eingeloggt war
## Task-Platzhalter
- TASK_000001: Disable user countdown (Details bei Story-Start)

View File

@ -0,0 +1,17 @@
ID: US_000002 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# US_000002: Nutzerkonto per CLI aktivieren
Status: Done
Als Admin moechte ich ein Nutzerkonto per CLI aktivieren, damit sich der Nutzer wieder anmelden kann.
## Akzeptanzkriterien
- Given ein existierender Nutzer und Root-Rechte
- When das Skript mit `enable` aufgerufen wird
- Then das Konto ist entsperrt und Login ist wieder moeglich
- And es wird kein Shutdown ausgeloest
## Task-Platzhalter
- TASK_000002: Enable user account (Details bei Story-Start)

View File

@ -0,0 +1,17 @@
ID: US_000003 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# US_000003: Health-Status abfragen
Status: Done
Als Admin moechte ich den Health-Status per API abfragen, damit ich den Service-Zustand sehe.
## Akzeptanzkriterien
- Given der Service laeuft
- When ein GET auf `/health` erfolgt
- Then die Antwort enthaelt `status` mit dem Wert `ok`
- And die Antwort enthaelt `dry_run` als Boolean
## Task-Platzhalter
- TASK_000003: Health response payload (Details bei Story-Start)

View File

@ -0,0 +1,17 @@
ID: US_000004 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# US_000004: Verfuegbare Nutzer auflisten
Status: Done
Als Admin moechte ich verwaltbare Nutzer per API auflisten, damit ich ihren Login-Status sehe.
## Akzeptanzkriterien
- Given ein autorisierter Admin-Login
- When ein GET auf `/users` erfolgt
- Then die Antwort ist eine Liste von Eintraegen mit `user` und `logged_in`
- And die Liste enthaelt nur verwaltbare, nicht-root Nutzer
## Task-Platzhalter
- TASK_000004: List users status (Details bei Story-Start)

View File

@ -0,0 +1,17 @@
ID: US_000005 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# US_000005: Nutzer per API deaktivieren
Status: Done
Als Admin moechte ich einen Nutzer per API deaktivieren, damit ich den Zugriff remote steuern kann.
## Akzeptanzkriterien
- Given ein autorisierter Admin-Login und ein erlaubter Nutzer
- When ein POST auf `/users/{username}/disable` mit optionalen Feldern `countdown`, `sound`, `message` erfolgt
- Then die Antwort enthaelt `user`, `action` = `disable`, `dry_run`, `steps` und `logged_in`
- And nicht erlaubte Nutzer werden mit 403 abgewiesen
## Task-Platzhalter
- TASK_000005: API disable action (Details bei Story-Start)

View File

@ -0,0 +1,17 @@
ID: US_000006 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# US_000006: Nutzer per API aktivieren
Status: Done
Als Admin moechte ich einen Nutzer per API aktivieren, damit ich den Zugriff remote wieder erlaube.
## Akzeptanzkriterien
- Given ein autorisierter Admin-Login und ein erlaubter Nutzer
- When ein POST auf `/users/{username}/enable` erfolgt
- Then die Antwort enthaelt `user`, `action` = `enable`, `dry_run`, `steps` und `logged_in`
- And nicht erlaubte Nutzer werden mit 403 abgewiesen
## Task-Platzhalter
- TASK_000006: API enable action (Details bei Story-Start)

View File

@ -0,0 +1,18 @@
ID: US_000007 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# US_000007: PAM-Login mit Token
Status: Done
Als Admin moechte ich mich per PAM-Login anmelden, damit ich ein Session-Token erhalte.
## Akzeptanzkriterien
- Given `SKD_AUTH_MODE=pam` und gueltige Admin-Credentials
- When ein POST auf `/login` mit Benutzername und Passwort erfolgt
- Then die Antwort enthaelt `token` und `expires_in`
- And ein Session-Cookie mit dem Token wird gesetzt
- And der Login ist ohne OIDC-Konfiguration als Schnellstart moeglich
## Task-Platzhalter
- TASK_000007: PAM login token (Details bei Story-Start)

View File

@ -0,0 +1,19 @@
ID: US_000008 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# US_000008: OIDC-Login Flow
Status: Done
Als Admin moechte ich mich per OIDC anmelden, damit ich ohne Passwort-Login zugreifen kann.
## Akzeptanzkriterien
- Given `SKD_AUTH_MODE=oidc` und ein erreichbarer OIDC-Provider
- When ein GET auf `/login/oidc/start` erfolgt
- Then der Nutzer wird zum Provider umgeleitet und ein State-Cookie gesetzt
- When der Provider auf `/login/oidc/callback` mit Code und State zurueckleitet
- Then der State wird validiert und ein Session-Cookie gesetzt
- And bei ungueltigem State erfolgt eine 400-Antwort
## Task-Platzhalter
- TASK_000008: OIDC auth callback (Details bei Story-Start)

View File

@ -0,0 +1,20 @@
ID: US_000009 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# US_000009: Autorisierung und /me-Identitaet
Status: Done
Als Admin moechte ich autorisiert werden und meine Identitaet abrufen, damit API-Zugriffe nachvollziehbar sind.
## Akzeptanzkriterien
- Given ein gueltiges Session-Token
- When ein GET auf `/me` erfolgt
- Then die Antwort enthaelt `user` und `auth_mode`
- Given kein oder ungueltiges Token
- When ein Zugriff auf geschuetzte Endpunkte erfolgt
- Then der Zugriff wird mit 401/403 verweigert
- And bei OIDC wird die Allowlist gegen `preferred_username`, `email` oder `sub` geprueft
## Task-Platzhalter
- TASK_000009: Authorization /me gate (Details bei Story-Start)

View File

@ -0,0 +1,16 @@
ID: US_000010 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# US_000010: Index-Seite ausliefern
Status: Done
Als Admin moechte ich die Web-UI im Browser oeffnen, damit ich mich anmelden und Aktionen starten kann.
## Akzeptanzkriterien
- Given der Service laeuft
- When ein GET auf `/` erfolgt
- Then die Antwort ist HTML aus dem Template-Verzeichnis
## Task-Platzhalter
- TASK_000010: Serve UI template (Details bei Story-Start)

View File

@ -0,0 +1,17 @@
ID: US_000011 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# US_000011: Virtualenv und Abhaengigkeiten erstellen
Status: Done
Als Operator moechte ich eine virtuelle Umgebung erstellen, damit der Service reproduzierbar laeuft.
## Akzeptanzkriterien
- Given ein verfuegbares Python-Executable
- When `scripts/create_venv.sh` ausgefuehrt wird
- Then eine `.venv` wird erstellt und aktiviert
- And die Abhaengigkeiten aus `backend/requirements.txt` sind installiert
## Task-Platzhalter
- TASK_000011: Provision venv deps (Details bei Story-Start)

View File

@ -0,0 +1,16 @@
ID: US_000012 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# US_000012: Service lokal starten
Status: Done
Als Operator moechte ich den Service lokal starten, damit ich die API ohne Systemd testen kann.
## Akzeptanzkriterien
- Given eine vorhandene `.venv`
- When `scripts/run.sh` ausgefuehrt wird
- Then `uvicorn` startet die App `backend.app:app` auf dem konfigurierten Host/Port
## Task-Platzhalter
- TASK_000012: Run uvicorn service (Details bei Story-Start)

View File

@ -0,0 +1,19 @@
ID: US_000013 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# US_000013: Service installieren
Status: Done
Als Operator moechte ich den Service installieren, damit er als Systemdienst laeuft.
## Akzeptanzkriterien
- Given sudo-Rechte und ein Zielpfad
- When `scripts/install.sh` ausgefuehrt wird
- Then der Service-User/-Group existiert oder wird erstellt
- And das Projekt wird ins Install-Verzeichnis synchronisiert
- And eine Env-Datei wird aus `env.example` erstellt, falls sie fehlt
- And eine Systemd-Unit wird geschrieben und der Service gestartet
## Task-Platzhalter
- TASK_000013: Install service setup (Details bei Story-Start)

View File

@ -0,0 +1,18 @@
ID: US_000014 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# US_000014: Service aktualisieren
Status: Done
Als Operator moechte ich den Service aktualisieren, damit Updates schnell eingespielt werden.
## Akzeptanzkriterien
- Given ein vorhandenes Repo-Checkout
- When `scripts/update.sh` ausgefuehrt wird
- Then das Repo wird auf den Ziel-Branch aktualisiert
- And die Abhaengigkeiten werden in der venv aktualisiert
- And der Systemdienst wird neu gestartet
## Task-Platzhalter
- TASK_000014: Update service refresh (Details bei Story-Start)

View File

@ -0,0 +1,18 @@
ID: US_000015 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# US_000015: Remote-Deployment durchfuehren
Status: Done
Als Operator moechte ich auf ein Zielsystem deployen, damit das Projekt remote aktualisiert wird.
## Akzeptanzkriterien
- Given ein Host-Eintrag in `deploy_hosts.yml` oder JSON-Konfig
- When `scripts/deploy.sh <host>` ausgefuehrt wird
- Then das Projekt wird als Archiv gepackt und auf den Host kopiert
- And der Inhalt wird im Install-Verzeichnis entpackt und Rechte werden gesetzt
- And Abhaengigkeiten werden installiert und der Service neu gestartet
## Task-Platzhalter
- TASK_000015: Remote deploy package (Details bei Story-Start)

View File

@ -0,0 +1,20 @@
ID: US_000016 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# US_000016: OIDC-Client registrieren
Status: Done
Als Operator moechte ich einen OIDC-Client registrieren, damit der Login-Flow konfiguriert werden kann.
## Akzeptanzkriterien
- Given `SKD_OIDC_ISSUER` und `OIDC_INITIAL_ACCESS_TOKEN` sind gesetzt
- When `scripts/register_oidc_client.sh` ausgefuehrt wird
- Then ein Registrierungsrequest wird an den Provider gesendet
- And Client-ID und Client-Secret werden ausgegeben
- And bei HTTP-Fehler wird mit Fehlermeldung abgebrochen
- And die Redirect-URI ist exakt `https://<device-host>[:port]/login/oidc/callback` (keine Wildcards)
- And bei Host/Port-Aenderung erfolgt eine Neuregistrierung mit neuen Credentials
## Task-Platzhalter
- TASK_000016: OIDC client register (Details bei Story-Start)

View File

@ -0,0 +1,16 @@
ID: US_000017 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# US_000017: Systemd-Unit im Repo
Status: Done
Als Operator moechte ich eine Systemd-Unit im Repo haben, damit der Service standardisiert betrieben werden kann.
## Akzeptanzkriterien
- Given die Datei `systemd/skd.service` existiert
- When die Unit inspiziert wird
- Then sie enthaelt Description, User/Group, WorkingDirectory, EnvironmentFile, ExecStart und Restart-Policy
## Task-Platzhalter
- TASK_000017: Systemd unit template (Details bei Story-Start)

View File

@ -0,0 +1,19 @@
ID: US_000018 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# US_000018: Konfigurations-Templates verfuegbar
Status: Done
Als Operator moechte ich Konfigurationsvorlagen im Repo haben, damit Installationen konsistent sind.
## Akzeptanzkriterien
- Given `env.example` liegt im Root-Verzeichnis
- When die Datei geprueft wird
- Then sie enthaelt SKD-Konfigurationswerte fuer Auth und Defaults
- Given `deploy_hosts.yml` liegt im Root-Verzeichnis
- When die Datei geprueft wird
- Then sie enthaelt eine Host-Liste mit Name, Host, User, Port, Install-Dir und Service-Parametern
## Task-Platzhalter
- TASK_000018: Config templates ready (Details bei Story-Start)

View File

@ -0,0 +1,16 @@
ID: US_000019 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# US_000019: Deployment-Archiv vorhanden
Status: Done
Als Operator moechte ich ein Deployment-Archiv im Repo haben, damit ich manuell ausrollen kann.
## Akzeptanzkriterien
- Given `sk_deploy.zip` liegt im Root-Verzeichnis
- When das Archiv geoeffnet wird
- Then es enthaelt das Projekt fuer die manuelle Bereitstellung
## Task-Platzhalter
- TASK_000019: Deployment zip artifact (Details bei Story-Start)

View File

@ -0,0 +1,18 @@
ID: US_000020 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# US_000020: Makefile-Automation bereitstellen
Status: Done
Als Operator moechte ich Standard-Targets fuer Installation, Start/Stop und Updates haben, damit Betriebsablaeufe vereinfacht werden.
## Akzeptanzkriterien
- Given ein Makefile im Root-Verzeichnis
- When die Targets `install`, `up`, `down`, `uninstall`, `update` ausgefuehrt werden
- Then die entsprechenden Service-Aktionen werden aufgerufen
- And `healthcheck` und `token` stehen als Hilfs-Targets bereit
- And `healthcheck` prueft nur die Erreichbarkeit von `/health` ohne Auth-Anforderung
## Task-Platzhalter
- TASK_000020: Makefile ops targets (Details bei Story-Start)

View File

@ -0,0 +1,20 @@
ID: US_000021 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# US_000021: Konfiguration per ENV steuern
Status: Done
Als Operator moechte ich Konfigurationen per ENV setzen, damit Verhalten und Defaults steuerbar sind.
## Akzeptanzkriterien
- Given Umgebungsvariablen aus `env.example`
- When der Service startet
- Then Auth- und Session-Settings werden aus ENV geladen (`SKD_AUTH_MODE`, `SKD_AUTH_SECRET`, `SKD_TOKEN_TTL_SECONDS`, `SKD_AUTH_ALLOWED_USERS`, `SKD_AUTH_ALLOWED_GROUPS`, `SKD_AUTH_PAM_SERVICE`, `SKD_SESSION_COOKIE_NAME`, `SKD_SESSION_COOKIE_SECURE`, `SKD_OIDC_STATE_COOKIE_NAME`)
- And OIDC-Settings werden aus ENV geladen (`SKD_OIDC_ISSUER`, `SKD_OIDC_CLIENT_ID`, `SKD_OIDC_CLIENT_SECRET`, `SKD_OIDC_REDIRECT_URI`, `SKD_OIDC_SCOPES`)
- And Allowlist/Defaults werden aus ENV geladen (`SKD_ALLOWED_USERS`, `SKD_DEFAULT_COUNTDOWN`, `SKD_DEFAULT_SOUND`, `SKD_NOTIFY_TIMEOUT`, `SKD_DRY_RUN`)
- And Sound/Notify-Pfade sind ueber ENV ueberschreibbar (`SKD_SOUND_PLAYER`, `SKD_SOUND_FILE`, `SKD_NOTIFY_SEND_PATH`)
- And der OIDC Issuer entspricht der externen URL des Providers
## Task-Platzhalter
- TASK_000021: ENV settings defaults (Details bei Story-Start)

View File

@ -0,0 +1,19 @@
ID: US_000022 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# US_000022: Web-UI Aktionen ausfuehren
Status: Done
Als Admin moechte ich mich im Web-UI anmelden, Nutzer laden und Aktionen ausfuehren, damit ich keine CLI benoetige.
## Akzeptanzkriterien
- Given die Web-UI ist erreichbar
- When ich mich per PAM oder OIDC anmelde
- Then der Session-Status wird angezeigt
- When ich Nutzer lade und eine Aktion sende
- Then die Aktionsergebnisse (Steps/Status) werden als Text angezeigt
- And Fehlerantworten werden als Text angezeigt
## Task-Platzhalter
- TASK_000022: UI login and actions (Details bei Story-Start)

View File

@ -0,0 +1,17 @@
ID: US_000023 | Version: 0.1.0 | Status: Final
By: Codex (GPT-5)
# US_000023: Runbook und Security-Hinweise dokumentieren
Status: Done
Als Operator moechte ich eine klare Betriebs- und Security-Dokumentation haben, damit der Service sicher betrieben werden kann.
## Akzeptanzkriterien
- Given das README im Root-Verzeichnis
- When ich es lese
- Then ich finde Abschnitte zu Quick Start, Configuration, Running, Updates und Deployment
- And Security Hardening ist als eigener Abschnitt beschrieben
## Task-Platzhalter
- TASK_000023: README runbook notes (Details bei Story-Start)

View File

@ -0,0 +1,22 @@
ID: US_000024 | Version: 0.1.0 | Status: Draft
By: Codex (GPT-5)
# US_000024: Watchtower Theme fuer Web-UI
Status: Zurueckgestellt
Als Admin moechte ich das Watchtower-Design verwenden, damit die Web-UI dem vereinbarten Dark-Mode-Branding entspricht.
## Akzeptanzkriterien
- Given die Web-UI wird aus dem Template ausgeliefert
- When das UI geladen wird
- Then das Watchtower-Theme praegt Farben, Typografie und Kontraste der UI
- And die Theme-Assets liegen unter `assets/` in einer klaren Design-Struktur (z.B. `assets/design/`)
- And das Theme nutzt die bereitgestellten Dateien `tokens_watchtower.css` und `theme_watchtower.css`
- And ein Hintergrundrauschen (`bg-noise`) ist sichtbar
## Notizen
- Assets sind unter `assets/design/` abgelegt (noch nicht eingebunden).
## Task-Platzhalter
- TASK_000024: Apply Watchtower theme (Details bei Story-Start)