docs: add project management structure
This commit is contained in:
38
project-management/requirements/epics/EPIC_000001.md
Normal file
38
project-management/requirements/epics/EPIC_000001.md
Normal 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
|
||||
41
project-management/requirements/epics/EPIC_000002.md
Normal file
41
project-management/requirements/epics/EPIC_000002.md
Normal 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
|
||||
40
project-management/requirements/epics/EPIC_000003.md
Normal file
40
project-management/requirements/epics/EPIC_000003.md
Normal 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
|
||||
35
project-management/requirements/epics/EPIC_000004.md
Normal file
35
project-management/requirements/epics/EPIC_000004.md
Normal 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
|
||||
43
project-management/requirements/epics/EPIC_000005.md
Normal file
43
project-management/requirements/epics/EPIC_000005.md
Normal 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
|
||||
37
project-management/requirements/epics/EPIC_000006.md
Normal file
37
project-management/requirements/epics/EPIC_000006.md
Normal 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
|
||||
32
project-management/requirements/epics/EPIC_000007.md
Normal file
32
project-management/requirements/epics/EPIC_000007.md
Normal 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
|
||||
18
project-management/requirements/stories/US_000001.md
Normal file
18
project-management/requirements/stories/US_000001.md
Normal 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)
|
||||
17
project-management/requirements/stories/US_000002.md
Normal file
17
project-management/requirements/stories/US_000002.md
Normal 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)
|
||||
17
project-management/requirements/stories/US_000003.md
Normal file
17
project-management/requirements/stories/US_000003.md
Normal 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)
|
||||
17
project-management/requirements/stories/US_000004.md
Normal file
17
project-management/requirements/stories/US_000004.md
Normal 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)
|
||||
17
project-management/requirements/stories/US_000005.md
Normal file
17
project-management/requirements/stories/US_000005.md
Normal 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)
|
||||
17
project-management/requirements/stories/US_000006.md
Normal file
17
project-management/requirements/stories/US_000006.md
Normal 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)
|
||||
18
project-management/requirements/stories/US_000007.md
Normal file
18
project-management/requirements/stories/US_000007.md
Normal 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)
|
||||
19
project-management/requirements/stories/US_000008.md
Normal file
19
project-management/requirements/stories/US_000008.md
Normal 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)
|
||||
20
project-management/requirements/stories/US_000009.md
Normal file
20
project-management/requirements/stories/US_000009.md
Normal 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)
|
||||
16
project-management/requirements/stories/US_000010.md
Normal file
16
project-management/requirements/stories/US_000010.md
Normal 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)
|
||||
17
project-management/requirements/stories/US_000011.md
Normal file
17
project-management/requirements/stories/US_000011.md
Normal 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)
|
||||
16
project-management/requirements/stories/US_000012.md
Normal file
16
project-management/requirements/stories/US_000012.md
Normal 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)
|
||||
19
project-management/requirements/stories/US_000013.md
Normal file
19
project-management/requirements/stories/US_000013.md
Normal 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)
|
||||
18
project-management/requirements/stories/US_000014.md
Normal file
18
project-management/requirements/stories/US_000014.md
Normal 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)
|
||||
18
project-management/requirements/stories/US_000015.md
Normal file
18
project-management/requirements/stories/US_000015.md
Normal 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)
|
||||
20
project-management/requirements/stories/US_000016.md
Normal file
20
project-management/requirements/stories/US_000016.md
Normal 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)
|
||||
16
project-management/requirements/stories/US_000017.md
Normal file
16
project-management/requirements/stories/US_000017.md
Normal 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)
|
||||
19
project-management/requirements/stories/US_000018.md
Normal file
19
project-management/requirements/stories/US_000018.md
Normal 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)
|
||||
16
project-management/requirements/stories/US_000019.md
Normal file
16
project-management/requirements/stories/US_000019.md
Normal 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)
|
||||
18
project-management/requirements/stories/US_000020.md
Normal file
18
project-management/requirements/stories/US_000020.md
Normal 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)
|
||||
20
project-management/requirements/stories/US_000021.md
Normal file
20
project-management/requirements/stories/US_000021.md
Normal 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)
|
||||
19
project-management/requirements/stories/US_000022.md
Normal file
19
project-management/requirements/stories/US_000022.md
Normal 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)
|
||||
17
project-management/requirements/stories/US_000023.md
Normal file
17
project-management/requirements/stories/US_000023.md
Normal 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)
|
||||
22
project-management/requirements/stories/US_000024.md
Normal file
22
project-management/requirements/stories/US_000024.md
Normal 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)
|
||||
Reference in New Issue
Block a user