diff --git a/.gitignore b/.gitignore index 5bc8ed8..7f3e47d 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ __pycache__/ *$py.class .venv/ upload.token +update-addon.env venv/ ENV/ .env diff --git a/CHANGELOG.md b/CHANGELOG.md index f9c0562..90ca51a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -ID: DOC_000001 | Version: 0.2.1 | Status: Final +ID: DOC_000001 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # Projekt-Logbuch (Changelog) @@ -76,6 +76,12 @@ By: Codex (GPT-5) | 15.01.2026 | 🏗️ Planning | ID: US_000048/TASK_000057 Release-Upload automatisieren. By: Codex (GPT-5) | | 15.01.2026 | ⚙️ Code | ID: Release-Upload Script hinzugefuegt (tar.gz + curl). By: Codex (GPT-5) | | 15.01.2026 | ⚙️ Code | ID: Upload-Script toleriert fehlende Leserechte fuer /etc/skd/*. By: Codex (GPT-5) | +| 15.01.2026 | 🏗️ Planning | ID: US_000049/TASK_000058 deployment.env fuer lokale Uploads. By: Codex (GPT-5) | +| 15.01.2026 | ⚙️ Code | ID: deployment.env.example hinzugefuegt und Scripts angepasst. By: Codex (GPT-5) | +| 15.01.2026 | ⚙️ Code | ID: deployment.env als lokale Quelle fuer Enrollment/Upload Scripts. By: Codex (GPT-5) | +| 15.01.2026 | ⚙️ Code | ID: EPIC_000013 System Telemetry Endpoint und UI umgesetzt. By: Codex (GPT-5) | +| 15.01.2026 | 📝 Req | ID: EPIC_000009 Update Webservice als erledigt markiert. By: Codex (GPT-5) | +| 15.01.2026 | 🚀 Release | ID: VERSION auf 0.2.2 erhoeht. By: Codex (GPT-5) | | 15.01.2026 | ⚙️ Code | ID: Makefile restart-Target hinzugefuegt. By: Codex (GPT-5) | --- diff --git a/README.md b/README.md index 8d4afdc..62b64ba 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -ID: README_000001 | Version: 0.2.1 | Status: Draft +ID: README_000001 | Version: 0.2.2 | Status: Draft By: Codex (GPT-5) # Safe Kiddo Daemon diff --git a/VERSION b/VERSION index 0c62199..ee1372d 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.2.1 +0.2.2 diff --git a/backend/app.py b/backend/app.py index 8890d99..bc489f7 100644 --- a/backend/app.py +++ b/backend/app.py @@ -28,11 +28,13 @@ from backend.models import ( UpdateLogEntry, UpdateServiceStatus, UpdateStatus, + SystemMetrics, UserStatus, ) from backend.oidc import OIDCClient, OIDCError from backend.settings import Settings, get_settings from backend import update +from backend import system_metrics logging.basicConfig( level=logging.INFO, @@ -321,6 +323,12 @@ def update_service_status(settings: Settings = Depends(get_settings)) -> UpdateS return UpdateServiceStatus(**data) +@app.get("/system/metrics", response_model=SystemMetrics, dependencies=[Depends(get_current_admin)]) +def system_metrics_status() -> SystemMetrics: + data = system_metrics.get_system_metrics() + return SystemMetrics(**data) + + @app.get("/", response_class=HTMLResponse) @app.get("/login", response_class=HTMLResponse) @app.get("/dashboard", response_class=HTMLResponse) diff --git a/backend/models.py b/backend/models.py index afc8c69..08f86e4 100644 --- a/backend/models.py +++ b/backend/models.py @@ -82,3 +82,14 @@ class UpdateServiceStatus(BaseModel): error: Optional[str] = None checked_url: str environment: str + + +class SystemMetrics(BaseModel): + cpu_percent: float + ram_total_mb: float + ram_used_percent: float + gpu_vram_total_mb: Optional[float] = None + gpu_vram_used_percent: Optional[float] = None + gpu_present: bool = False + net_rx_mbps: float + net_tx_mbps: float diff --git a/backend/system_metrics.py b/backend/system_metrics.py new file mode 100644 index 0000000..83ab7f7 --- /dev/null +++ b/backend/system_metrics.py @@ -0,0 +1,139 @@ +import time +import shutil +import subprocess +from typing import Any, Dict, Optional, Tuple + +_last_cpu: Optional[Tuple[float, float]] = None +_last_net: Optional[Tuple[float, float, float]] = None + + +def _read_cpu_times() -> Tuple[float, float]: + with open("/proc/stat", "r", encoding="utf-8") as handle: + line = handle.readline() + parts = line.strip().split() + if not parts or parts[0] != "cpu": + return 0.0, 0.0 + values = [float(p) for p in parts[1:]] + total = sum(values) + idle = values[3] if len(values) > 3 else 0.0 + return total, idle + + +def _cpu_percent() -> float: + global _last_cpu + total, idle = _read_cpu_times() + if _last_cpu is None: + _last_cpu = (total, idle) + return 0.0 + last_total, last_idle = _last_cpu + _last_cpu = (total, idle) + delta_total = total - last_total + delta_idle = idle - last_idle + if delta_total <= 0: + return 0.0 + return max(0.0, min(100.0, (delta_total - delta_idle) / delta_total * 100.0)) + + +def _read_meminfo() -> Dict[str, float]: + data: Dict[str, float] = {} + with open("/proc/meminfo", "r", encoding="utf-8") as handle: + for line in handle: + key, value = line.split(":", 1) + parts = value.strip().split() + if not parts: + continue + data[key] = float(parts[0]) + return data + + +def _read_net_bytes() -> Tuple[float, float]: + rx_total = 0.0 + tx_total = 0.0 + with open("/proc/net/dev", "r", encoding="utf-8") as handle: + for line in handle: + if ":" not in line: + continue + iface, stats = line.split(":", 1) + iface = iface.strip() + if iface == "lo": + continue + fields = stats.split() + if len(fields) < 16: + continue + rx_total += float(fields[0]) + tx_total += float(fields[8]) + return rx_total, tx_total + + +def _net_mbps() -> Tuple[float, float]: + global _last_net + now = time.time() + rx, tx = _read_net_bytes() + if _last_net is None: + _last_net = (now, rx, tx) + return 0.0, 0.0 + last_time, last_rx, last_tx = _last_net + _last_net = (now, rx, tx) + delta_t = now - last_time + if delta_t <= 0: + return 0.0, 0.0 + rx_mbps = (rx - last_rx) * 8.0 / (delta_t * 1_000_000.0) + tx_mbps = (tx - last_tx) * 8.0 / (delta_t * 1_000_000.0) + return max(0.0, rx_mbps), max(0.0, tx_mbps) + + +def _gpu_metrics() -> Dict[str, Any]: + if not shutil.which("nvidia-smi"): + return { + "gpu_vram_total_mb": None, + "gpu_vram_used_percent": None, + "gpu_present": False, + } + try: + output = subprocess.check_output( + [ + "nvidia-smi", + "--query-gpu=memory.total,memory.used", + "--format=csv,noheader,nounits", + ], + text=True, + ).strip() + if not output: + raise ValueError("empty nvidia-smi output") + total_str, used_str = output.split(",", 1) + total_mb = float(total_str.strip()) + used_mb = float(used_str.strip()) + used_percent = 0.0 if total_mb == 0 else used_mb / total_mb * 100.0 + return { + "gpu_vram_total_mb": total_mb, + "gpu_vram_used_percent": used_percent, + "gpu_present": True, + } + except Exception: + return { + "gpu_vram_total_mb": None, + "gpu_vram_used_percent": None, + "gpu_present": False, + } + + +def get_system_metrics() -> Dict[str, Any]: + meminfo = _read_meminfo() + total_kb = meminfo.get("MemTotal", 0.0) + available_kb = meminfo.get("MemAvailable", 0.0) + used_kb = max(0.0, total_kb - available_kb) + ram_total_mb = total_kb / 1024.0 + ram_used_percent = 0.0 if total_kb == 0 else used_kb / total_kb * 100.0 + + cpu_percent = _cpu_percent() + rx_mbps, tx_mbps = _net_mbps() + gpu = _gpu_metrics() + + return { + "cpu_percent": cpu_percent, + "ram_total_mb": ram_total_mb, + "ram_used_percent": ram_used_percent, + "net_rx_mbps": rx_mbps, + "net_tx_mbps": tx_mbps, + **gpu, + } diff --git a/backend/templates/index.html b/backend/templates/index.html index 733ca73..dec71ff 100644 --- a/backend/templates/index.html +++ b/backend/templates/index.html @@ -95,6 +95,30 @@ + + + System Information + + + CPU + - + + + RAM + - + + + GPU + - + + + Netzwerk + - + + + Aktualisierung alle 5 Sekunden. + + Nutzerverwaltung @@ -326,14 +350,24 @@ showApp(); document.getElementById('userSection').classList.remove('hidden'); document.getElementById('updateSection').classList.remove('hidden'); + document.getElementById('systemSection').classList.remove('hidden'); await refreshUsers(); await refreshUpdateStatus(); + await refreshSystemMetrics(); + if (!window.systemMetricsTimer) { + window.systemMetricsTimer = setInterval(refreshSystemMetrics, 5000); + } return true; } catch (err) { document.getElementById('currentUser').textContent = 'Nicht angemeldet'; showLanding(); document.getElementById('userSection').classList.add('hidden'); document.getElementById('updateSection').classList.add('hidden'); + document.getElementById('systemSection').classList.add('hidden'); + if (window.systemMetricsTimer) { + clearInterval(window.systemMetricsTimer); + window.systemMetricsTimer = null; + } return false; } } @@ -513,6 +547,29 @@ } } + async function refreshSystemMetrics() { + try { + const data = await api('/system/metrics'); + document.querySelector('#metricCpu .value').textContent = `${data.cpu_percent.toFixed(1)}%`; + const ramGb = data.ram_total_mb / 1024.0; + document.querySelector('#metricRam .value').textContent = `${data.ram_used_percent.toFixed(1)}% (${ramGb.toFixed(1)} GB)`; + if (data.gpu_present && data.gpu_vram_total_mb) { + const gpuGb = data.gpu_vram_total_mb / 1024.0; + const gpuPct = data.gpu_vram_used_percent ?? 0; + document.querySelector('#metricGpu .value').textContent = `${gpuPct.toFixed(1)}% (${gpuGb.toFixed(1)} GB)`; + } else { + document.querySelector('#metricGpu .value').textContent = 'Nicht verfuegbar'; + } + document.querySelector('#metricNet .value').textContent = `${data.net_rx_mbps.toFixed(1)} / ${data.net_tx_mbps.toFixed(1)} Mbps`; + lucide.createIcons(); + } catch (err) { + document.querySelector('#metricCpu .value').textContent = 'Fehler'; + document.querySelector('#metricRam .value').textContent = 'Fehler'; + document.querySelector('#metricGpu .value').textContent = 'Fehler'; + document.querySelector('#metricNet .value').textContent = 'Fehler'; + } + } + // Event listeners document.getElementById('loginForm').addEventListener('submit', async (e) => { e.preventDefault(); diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index cea6bbc..c02c814 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -1,4 +1,4 @@ -ID: DOC_000012 | Version: 0.2.1 | Status: Draft +ID: DOC_000012 | Version: 0.2.2 | Status: Draft By: Codex (GPT-5) # Architektur diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md index 6fd00d1..f43357b 100644 --- a/docs/CONFIGURATION.md +++ b/docs/CONFIGURATION.md @@ -1,4 +1,4 @@ -ID: DOC_000011 | Version: 0.2.1 | Status: Draft +ID: DOC_000011 | Version: 0.2.2 | Status: Draft By: Codex (GPT-5) # Konfiguration @@ -6,7 +6,8 @@ By: Codex (GPT-5) ## Speicherort Die Konfiguration erfolgt per ENV-Dateien: - `/etc/skd/env` (Core-App, Vorlage: `env.example`) -- `/etc/skd/update.env` (Update-Service, Vorlage: `env.update.example`) +- `/etc/skd/update.env` (Update-Service fuer Laufzeit, Vorlage: `env.update.example`) +- `update-addon.env` (lokal fuer Upload/Enrollment, Vorlage: `update-addon.env.example`) ## Authentifizierung - `SKD_AUTH_MODE` (default `pam`): `pam` oder `oidc`. Ungueltige Werte fallen auf `pam` zurueck. Hinweis: Der Wert wird aktuell nicht zur Erzwingung genutzt; OIDC ist aktiv, sobald die OIDC-Variablen gesetzt sind. @@ -67,6 +68,8 @@ Hinweis: OIDC ist aktiv, sobald Issuer, Client-ID und Secret gesetzt sind. - `SKD_UPDATE_STATUS_FILE` (default `/var/lib/skd/update_status.json`) - `SKD_UPDATE_LOG_FILE` (default `/var/lib/skd/update_logs.jsonl`) - `SKD_UPDATE_INTERVAL` (default `3600`): Hinweis: wird aktuell nur eingelesen, aber nicht automatisch genutzt. +- `SKD_UPDATE_UPLOAD_TOKEN` (optional; fuer Release-Upload) +- `SKD_UPDATE_UPLOAD_TOKEN_FILE` (optional; z.B. `/etc/skd/update.upload.token`) ## Dry-Run - `SKD_DRY_RUN` (default `false`): Keine echten System-Aktionen, nur Logging. diff --git a/docs/DEPLOYMENT.md b/docs/DEPLOYMENT.md index 9034cf7..eb49cdb 100644 --- a/docs/DEPLOYMENT.md +++ b/docs/DEPLOYMENT.md @@ -1,4 +1,4 @@ -ID: DOC_000014 | Version: 0.2.1 | Status: Draft +ID: DOC_000014 | Version: 0.2.2 | Status: Draft By: Codex (GPT-5) # Deployment @@ -94,13 +94,31 @@ Hinweis: Der Update-Check ist erst moeglich, wenn der Langzeit-Token gespeichert Enrollment-Tools: - `scripts/manual_enroll.py`: Enrollment direkt gegen den Update-Service, schreibt Token in `SKD_UPDATE_TOKEN_FILE`. - `scripts/enroll_local.py`: Enrollment ueber die lokale API (`/update/enroll`), benoetigt Admin-Session; `--token` setzen (Default-Token ist nur Prototyp-Altlast). -- `scripts/enroll_update_service.sh`: Holt den Langzeit-Token per curl vom Update-Service (liest `/etc/skd/env`). +- `scripts/enroll_update_service.sh`: Holt den Langzeit-Token per curl vom Update-Service (liest `update-addon.env`). Beispiel (curl-Script): ```bash sudo ./scripts/enroll_update_service.sh --enroll-token "enroll_example" ``` +## Release-Upload (Dev/Prod) +Fuer Dev/Prod Uploads kann ein Release-Archiv (tar.gz) automatisiert gebaut und hochgeladen werden. + +Beispiel: +```bash +./scripts/upload_release.sh --profile dev +``` + +Token-Quelle: +- `update-addon.env` (z.B. `DEV_UPDATE_UPLOAD_TOKEN_FILE=./upload.token`). + +## Lokale update-addon.env +Fuer lokale Tests kann eine `update-addon.env` im Repo genutzt werden (gitignored). +Beispiel: +```bash +cp update-addon.env.example update-addon.env +``` + Lokale Status/Logs: - `SKD_UPDATE_STATUS_FILE` (default `/var/lib/skd/update_status.json`) - `SKD_UPDATE_LOG_FILE` (default `/var/lib/skd/update_logs.jsonl`) diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 13a416b..97b79cd 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -1,4 +1,4 @@ -ID: DOC_000013 | Version: 0.2.1 | Status: Draft +ID: DOC_000013 | Version: 0.2.2 | Status: Draft By: Codex (GPT-5) # Development @@ -23,6 +23,20 @@ Standard: `0.0.0.0:80`. Fuer andere Ports: HOST=127.0.0.1 PORT=8000 ./scripts/run.sh ``` +## Release-Upload (Dev/Prod) +Das Update-Artefakt wird als tar.gz gebaut und ueber den Update-Service hochgeladen. +Das Script nutzt `VERSION` und laedt ein vollstaendiges Release (kein Delta). + +Vorbereitung: +```bash +cp update-addon.env.example update-addon.env +``` + +Beispiel (Dev): +```bash +./scripts/upload_release.sh --profile dev +``` + ## Tests und Lint Im Repo sind keine automatisierten Tests enthalten. Verfuegbare Checks: - Bash-Syntax: `bash -n sk.sh` diff --git a/docs/FAQ.md b/docs/FAQ.md index 5f0977a..4604810 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -1,4 +1,4 @@ -ID: DOC_000015 | Version: 0.2.1 | Status: Draft +ID: DOC_000015 | Version: 0.2.2 | Status: Draft By: Codex (GPT-5) # FAQ diff --git a/docs/FOR_USERS.md b/docs/FOR_USERS.md index 8ef4579..218bfe1 100644 --- a/docs/FOR_USERS.md +++ b/docs/FOR_USERS.md @@ -1,4 +1,4 @@ -ID: DOC_000017 | Version: 0.2.1 | Status: Draft +ID: DOC_000017 | Version: 0.2.2 | Status: Draft By: Codex (GPT-5) # Fuer Nutzerinnen und Nutzer diff --git a/docs/GETTING_STARTED.md b/docs/GETTING_STARTED.md index 3d42606..fd045ee 100644 --- a/docs/GETTING_STARTED.md +++ b/docs/GETTING_STARTED.md @@ -1,4 +1,4 @@ -ID: DOC_000009 | Version: 0.2.1 | Status: Draft +ID: DOC_000009 | Version: 0.2.2 | Status: Draft By: Codex (GPT-5) # Getting Started diff --git a/docs/TROUBLESHOOTING.md b/docs/TROUBLESHOOTING.md index 30a6f3d..223f439 100644 --- a/docs/TROUBLESHOOTING.md +++ b/docs/TROUBLESHOOTING.md @@ -1,4 +1,4 @@ -ID: DOC_000016 | Version: 0.2.1 | Status: Draft +ID: DOC_000016 | Version: 0.2.2 | Status: Draft By: Codex (GPT-5) # Troubleshooting diff --git a/docs/USAGE.md b/docs/USAGE.md index b32af01..ac8ba4b 100644 --- a/docs/USAGE.md +++ b/docs/USAGE.md @@ -1,4 +1,4 @@ -ID: DOC_000010 | Version: 0.2.1 | Status: Draft +ID: DOC_000010 | Version: 0.2.2 | Status: Draft By: Codex (GPT-5) # Usage @@ -61,6 +61,9 @@ Alle Update-Endpunkte erfordern Admin-Auth. - `POST /update/rollback` - `GET /update/logs?limit=200` +### System-API (lokal) +- `GET /system/metrics` (CPU %, RAM, GPU VRAM, Netzwerk Mbps) + Beispiel (Enrollment): ```bash ENROLL_TOKEN="example-enroll-token" diff --git a/docs/_archive/admin-token-operations.md b/docs/_archive/admin-token-operations.md index 60a1b5e..baeb25f 100644 --- a/docs/_archive/admin-token-operations.md +++ b/docs/_archive/admin-token-operations.md @@ -1,4 +1,4 @@ -ID: DOC_000006 | Version: 0.2.1 | Status: Draft +ID: DOC_000006 | Version: 0.2.2 | Status: Draft Archived – superseded by new documentation. By: Codex (GPT-5) diff --git a/docs/_archive/client-quickstart.md b/docs/_archive/client-quickstart.md index 534c013..739eedc 100644 --- a/docs/_archive/client-quickstart.md +++ b/docs/_archive/client-quickstart.md @@ -1,4 +1,4 @@ -ID: DOC_000008 | Version: 0.2.1 | Status: Draft +ID: DOC_000008 | Version: 0.2.2 | Status: Draft Archived – superseded by new documentation. # Client Quickstart diff --git a/docs/_archive/oidc-validation.md b/docs/_archive/oidc-validation.md index 3ffbd13..719b19a 100644 --- a/docs/_archive/oidc-validation.md +++ b/docs/_archive/oidc-validation.md @@ -1,4 +1,4 @@ -ID: DOC_000003 | Version: 0.2.1 | Status: Draft +ID: DOC_000003 | Version: 0.2.2 | Status: Draft Archived – superseded by new documentation. By: Codex (GPT-5) diff --git a/docs/_archive/third-party-api.md b/docs/_archive/third-party-api.md index 19bca3c..349011b 100644 --- a/docs/_archive/third-party-api.md +++ b/docs/_archive/third-party-api.md @@ -1,4 +1,4 @@ -ID: DOC_000005 | Version: 0.2.1 | Status: Draft +ID: DOC_000005 | Version: 0.2.2 | Status: Draft Archived – superseded by new documentation. By: Codex (GPT-5) diff --git a/docs/_archive/update-api.md b/docs/_archive/update-api.md index ff642b6..6540efb 100644 --- a/docs/_archive/update-api.md +++ b/docs/_archive/update-api.md @@ -1,4 +1,4 @@ -ID: DOC_000006 | Version: 0.2.1 | Status: Draft +ID: DOC_000006 | Version: 0.2.2 | Status: Draft Archived – superseded by new documentation. By: Codex (GPT-5) diff --git a/docs/_archive/update-client.md b/docs/_archive/update-client.md index 73ebbd4..b995ace 100644 --- a/docs/_archive/update-client.md +++ b/docs/_archive/update-client.md @@ -1,4 +1,4 @@ -ID: DOC_000004 | Version: 0.2.1 | Status: Draft +ID: DOC_000004 | Version: 0.2.2 | Status: Draft Archived – superseded by new documentation. By: Codex (GPT-5) diff --git a/docs/_archive/update-status.md b/docs/_archive/update-status.md index b96fab7..e31ffe7 100644 --- a/docs/_archive/update-status.md +++ b/docs/_archive/update-status.md @@ -1,4 +1,4 @@ -ID: DOC_000005 | Version: 0.2.1 | Status: Draft +ID: DOC_000005 | Version: 0.2.2 | Status: Draft Archived – superseded by new documentation. By: Codex (GPT-5) diff --git a/env.update.example b/env.update.example index ad60e17..48cb535 100644 --- a/env.update.example +++ b/env.update.example @@ -7,3 +7,5 @@ SKD_UPDATE_TOKEN_FILE=/var/lib/skd/update_token SKD_UPDATE_INTERVAL=3600 SKD_UPDATE_STATUS_FILE=/var/lib/skd/update_status.json SKD_UPDATE_LOG_FILE=/var/lib/skd/update_logs.jsonl +SKD_UPDATE_UPLOAD_TOKEN= +SKD_UPDATE_UPLOAD_TOKEN_FILE=/etc/skd/update.upload.token diff --git a/project-management/AGENTS.md b/project-management/AGENTS.md index aa6349d..b4cb8d4 100644 --- a/project-management/AGENTS.md +++ b/project-management/AGENTS.md @@ -1,4 +1,4 @@ -ID: AGENTS_000001 | Version: 0.2.1 | Status: Draft +ID: AGENTS_000001 | Version: 0.2.2 | Status: Draft By: Codex (GPT-5) # Repository Guidelines diff --git a/project-management/PROJECT_STATUS.md b/project-management/PROJECT_STATUS.md index 25bfb6d..42c4eab 100644 --- a/project-management/PROJECT_STATUS.md +++ b/project-management/PROJECT_STATUS.md @@ -1,4 +1,4 @@ -ID: STATUS_000001 | Version: 0.2.1 | Status: Final +ID: STATUS_000001 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # Projekt-Status @@ -113,11 +113,15 @@ Sicheres, remote steuerbares System zum Sperren/Entsperren lokaler Nutzerkonten. - [x] TASK_000055: Endpoint und UI fuer Update-Service Status - [x] US_000047: Update-Config auslagern - [x] TASK_000056: Update-ENV separieren +- [x] US_000048: Release-Upload automatisieren +- [x] TASK_000057: Script fuer Release-Upload erstellen +- [x] US_000049: Lokale deployment.env fuer Update-Uploads +- [x] TASK_000058: deployment.env Beispiel und Script-Anpassungen ### EPIC_000009: Update Webservice (External Team) -- [ ] US_000026: Client bezieht Updates (Pull) -- [ ] US_000027: Client verifiziert und wendet Updates an -- [ ] US_000028: Client meldet Update-Status +- [x] US_000026: Client bezieht Updates (Pull) +- [x] US_000027: Client verifiziert und wendet Updates an +- [x] US_000028: Client meldet Update-Status ### EPIC_000010: Update-Service v1 Migration (Major Release) - [x] US_000034: Enrollment fuer Langzeit-Token @@ -144,9 +148,9 @@ Sicheres, remote steuerbares System zum Sperren/Entsperren lokaler Nutzerkonten. - [x] TASK_000048: External Dependencies und Audience-Ergaenzungen ### EPIC_000013: System Telemetry im Dashboard -- [ ] US_000044: Systemmetriken im Dashboard anzeigen -- [ ] TASK_000050: Backend-Endpoint fuer Systemmetriken -- [ ] TASK_000051: UI-Kacheln im Dashboard (System Information) +- [x] US_000044: Systemmetriken im Dashboard anzeigen +- [x] TASK_000050: Backend-Endpoint fuer Systemmetriken +- [x] TASK_000051: UI-Kacheln im Dashboard (System Information) ### EPIC_000014: Login-Zeitfenster und Parent-Control Regeln - [ ] US_000045: Regeln fuer Login-Zeitfenster definieren und durchsetzen diff --git a/project-management/PROJECT_STATUS_TEMPLATE.md b/project-management/PROJECT_STATUS_TEMPLATE.md index 620a538..422c797 100644 --- a/project-management/PROJECT_STATUS_TEMPLATE.md +++ b/project-management/PROJECT_STATUS_TEMPLATE.md @@ -1,4 +1,4 @@ -ID: PROJECT_STATUS_TEMPLATE | Version: 0.2.1 | Status: Draft +ID: PROJECT_STATUS_TEMPLATE | Version: 0.2.2 | Status: Draft By: Codex (GPT-5) # 📊 Projekt-Status (Template) diff --git a/project-management/onboarding.md b/project-management/onboarding.md index da196e5..b2486a5 100644 --- a/project-management/onboarding.md +++ b/project-management/onboarding.md @@ -1,4 +1,4 @@ -ID: SOP_000001 | Version: 0.2.1 | Status: Draft +ID: SOP_000001 | Version: 0.2.2 | Status: Draft By: Codex (GPT-5) # Onboarding: Arbeitsweise im Sound Architect Projekt diff --git a/project-management/project-setup.md b/project-management/project-setup.md index 43fd80a..b825191 100644 --- a/project-management/project-setup.md +++ b/project-management/project-setup.md @@ -1,4 +1,4 @@ -ID: SETUP_000005 | Version: 0.2.1 | Status: Draft +ID: SETUP_000005 | Version: 0.2.2 | Status: Draft By: Codex (GPT-5) # 🧬 SETUP_GUIDE: Phase 0 - Project Genesis diff --git a/project-management/requirements-engineer.promt b/project-management/requirements-engineer.promt index f6d7145..e78b2ad 100644 --- a/project-management/requirements-engineer.promt +++ b/project-management/requirements-engineer.promt @@ -1,4 +1,4 @@ -ID: PROMPT_000008 | Version: 0.2.1 | Status: Draft +ID: PROMPT_000008 | Version: 0.2.2 | Status: Draft By: Codex (GPT-5) # Requirements Engineer Prompt diff --git a/project-management/requirements/epics/EPIC_000001.md b/project-management/requirements/epics/EPIC_000001.md index e8db53f..19f36e0 100644 --- a/project-management/requirements/epics/EPIC_000001.md +++ b/project-management/requirements/epics/EPIC_000001.md @@ -1,4 +1,4 @@ -ID: EPIC_000001 | Version: 0.2.1 | Status: Final +ID: EPIC_000001 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # EPIC_000001: Legacy CLI Account Control (sk.sh) diff --git a/project-management/requirements/epics/EPIC_000002.md b/project-management/requirements/epics/EPIC_000002.md index bef33ca..8d10a90 100644 --- a/project-management/requirements/epics/EPIC_000002.md +++ b/project-management/requirements/epics/EPIC_000002.md @@ -1,4 +1,4 @@ -ID: EPIC_000002 | Version: 0.2.1 | Status: Final +ID: EPIC_000002 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # EPIC_000002: Backend API Service diff --git a/project-management/requirements/epics/EPIC_000003.md b/project-management/requirements/epics/EPIC_000003.md index c55e994..2127320 100644 --- a/project-management/requirements/epics/EPIC_000003.md +++ b/project-management/requirements/epics/EPIC_000003.md @@ -1,4 +1,4 @@ -ID: EPIC_000003 | Version: 0.2.1 | Status: Final +ID: EPIC_000003 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # EPIC_000003: Authentication & Sessions diff --git a/project-management/requirements/epics/EPIC_000004.md b/project-management/requirements/epics/EPIC_000004.md index 6ce7f5c..0d485cc 100644 --- a/project-management/requirements/epics/EPIC_000004.md +++ b/project-management/requirements/epics/EPIC_000004.md @@ -1,4 +1,4 @@ -ID: EPIC_000004 | Version: 0.2.1 | Status: Final +ID: EPIC_000004 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # EPIC_000004: Web UI diff --git a/project-management/requirements/epics/EPIC_000005.md b/project-management/requirements/epics/EPIC_000005.md index 131ba2d..88426e6 100644 --- a/project-management/requirements/epics/EPIC_000005.md +++ b/project-management/requirements/epics/EPIC_000005.md @@ -1,4 +1,4 @@ -ID: EPIC_000005 | Version: 0.2.1 | Status: Final +ID: EPIC_000005 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # EPIC_000005: Automation Scripts diff --git a/project-management/requirements/epics/EPIC_000006.md b/project-management/requirements/epics/EPIC_000006.md index 10aa11f..bc923b9 100644 --- a/project-management/requirements/epics/EPIC_000006.md +++ b/project-management/requirements/epics/EPIC_000006.md @@ -1,4 +1,4 @@ -ID: EPIC_000006 | Version: 0.2.1 | Status: Final +ID: EPIC_000006 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # EPIC_000006: Systemd & Deployment Artifacts diff --git a/project-management/requirements/epics/EPIC_000007.md b/project-management/requirements/epics/EPIC_000007.md index b37e186..c254f0a 100644 --- a/project-management/requirements/epics/EPIC_000007.md +++ b/project-management/requirements/epics/EPIC_000007.md @@ -1,4 +1,4 @@ -ID: EPIC_000007 | Version: 0.2.1 | Status: Final +ID: EPIC_000007 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # EPIC_000007: Documentation & Runbook diff --git a/project-management/requirements/epics/EPIC_000008.md b/project-management/requirements/epics/EPIC_000008.md index 29768c4..21f4b94 100644 --- a/project-management/requirements/epics/EPIC_000008.md +++ b/project-management/requirements/epics/EPIC_000008.md @@ -1,4 +1,4 @@ -ID: EPIC_000008 | Version: 0.2.1 | Status: Draft +ID: EPIC_000008 | Version: 0.2.2 | Status: Draft By: Codex (GPT-5) # EPIC_000008: Client-Side Update Mechanism @@ -46,3 +46,5 @@ Ermoegliche einen robusten Client-Update-Flow mit Verifikation und Rollback. - US_000033: Rollback im Web-UI anstossen - US_000043: Enrollment-Token per Script abrufen - US_000046: Update-Service Erreichbarkeit anzeigen +- US_000048: Release-Upload automatisieren +- US_000049: Lokale deployment.env fuer Update-Uploads diff --git a/project-management/requirements/epics/EPIC_000009.md b/project-management/requirements/epics/EPIC_000009.md index 358cfc6..9a58f4d 100644 --- a/project-management/requirements/epics/EPIC_000009.md +++ b/project-management/requirements/epics/EPIC_000009.md @@ -1,4 +1,4 @@ -ID: EPIC_000009 | Version: 0.2.1 | Status: Draft +ID: EPIC_000009 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # EPIC_000009: Update Webservice (External Team) diff --git a/project-management/requirements/epics/EPIC_000010.md b/project-management/requirements/epics/EPIC_000010.md index 012e81c..83e124e 100644 --- a/project-management/requirements/epics/EPIC_000010.md +++ b/project-management/requirements/epics/EPIC_000010.md @@ -1,4 +1,4 @@ -ID: EPIC_000010 | Version: 0.2.1 | Status: Done +ID: EPIC_000010 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # EPIC_000010: Update-Service v1 Migration (Major Release) diff --git a/project-management/requirements/epics/EPIC_000011.md b/project-management/requirements/epics/EPIC_000011.md index ac1c7ce..5d54392 100644 --- a/project-management/requirements/epics/EPIC_000011.md +++ b/project-management/requirements/epics/EPIC_000011.md @@ -1,4 +1,4 @@ -ID: EPIC_000011 | Version: 0.2.1 | Status: Done +ID: EPIC_000011 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # EPIC_000011: Documentation and Configuration Alignment diff --git a/project-management/requirements/epics/EPIC_000012.md b/project-management/requirements/epics/EPIC_000012.md index 417ecfc..b0a8e3f 100644 --- a/project-management/requirements/epics/EPIC_000012.md +++ b/project-management/requirements/epics/EPIC_000012.md @@ -1,4 +1,4 @@ -ID: EPIC_000012 | Version: 0.2.1 | Status: Done +ID: EPIC_000012 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # EPIC_000012: Dokumentations-Overhaul diff --git a/project-management/requirements/epics/EPIC_000013.md b/project-management/requirements/epics/EPIC_000013.md index 6daf771..98e2bc5 100644 --- a/project-management/requirements/epics/EPIC_000013.md +++ b/project-management/requirements/epics/EPIC_000013.md @@ -1,4 +1,4 @@ -ID: EPIC_000013 | Version: 0.2.1 | Status: Draft +ID: EPIC_000013 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # EPIC_000013: System Telemetry im Dashboard diff --git a/project-management/requirements/epics/EPIC_000014.md b/project-management/requirements/epics/EPIC_000014.md index 7743a4d..b197a15 100644 --- a/project-management/requirements/epics/EPIC_000014.md +++ b/project-management/requirements/epics/EPIC_000014.md @@ -1,4 +1,4 @@ -ID: EPIC_000014 | Version: 0.2.1 | Status: Draft +ID: EPIC_000014 | Version: 0.2.2 | Status: Draft By: Codex (GPT-5) # EPIC_000014: Login-Zeitfenster und Parent-Control Regeln diff --git a/project-management/requirements/stories/US_000001.md b/project-management/requirements/stories/US_000001.md index 7a3aaf8..01d15a9 100644 --- a/project-management/requirements/stories/US_000001.md +++ b/project-management/requirements/stories/US_000001.md @@ -1,4 +1,4 @@ -ID: US_000001 | Version: 0.2.1 | Status: Final +ID: US_000001 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # US_000001: Nutzerkonto per CLI deaktivieren diff --git a/project-management/requirements/stories/US_000002.md b/project-management/requirements/stories/US_000002.md index a26bc08..731d719 100644 --- a/project-management/requirements/stories/US_000002.md +++ b/project-management/requirements/stories/US_000002.md @@ -1,4 +1,4 @@ -ID: US_000002 | Version: 0.2.1 | Status: Final +ID: US_000002 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # US_000002: Nutzerkonto per CLI aktivieren diff --git a/project-management/requirements/stories/US_000003.md b/project-management/requirements/stories/US_000003.md index 5d87055..9575492 100644 --- a/project-management/requirements/stories/US_000003.md +++ b/project-management/requirements/stories/US_000003.md @@ -1,4 +1,4 @@ -ID: US_000003 | Version: 0.2.1 | Status: Final +ID: US_000003 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # US_000003: Health-Status abfragen diff --git a/project-management/requirements/stories/US_000004.md b/project-management/requirements/stories/US_000004.md index fa68bd2..09eb78f 100644 --- a/project-management/requirements/stories/US_000004.md +++ b/project-management/requirements/stories/US_000004.md @@ -1,4 +1,4 @@ -ID: US_000004 | Version: 0.2.1 | Status: Final +ID: US_000004 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # US_000004: Verfuegbare Nutzer auflisten diff --git a/project-management/requirements/stories/US_000005.md b/project-management/requirements/stories/US_000005.md index c0cb902..f0a5190 100644 --- a/project-management/requirements/stories/US_000005.md +++ b/project-management/requirements/stories/US_000005.md @@ -1,4 +1,4 @@ -ID: US_000005 | Version: 0.2.1 | Status: Final +ID: US_000005 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # US_000005: Nutzer per API deaktivieren diff --git a/project-management/requirements/stories/US_000006.md b/project-management/requirements/stories/US_000006.md index 473934a..fba8360 100644 --- a/project-management/requirements/stories/US_000006.md +++ b/project-management/requirements/stories/US_000006.md @@ -1,4 +1,4 @@ -ID: US_000006 | Version: 0.2.1 | Status: Final +ID: US_000006 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # US_000006: Nutzer per API aktivieren diff --git a/project-management/requirements/stories/US_000007.md b/project-management/requirements/stories/US_000007.md index d77cae2..cb349c6 100644 --- a/project-management/requirements/stories/US_000007.md +++ b/project-management/requirements/stories/US_000007.md @@ -1,4 +1,4 @@ -ID: US_000007 | Version: 0.2.1 | Status: Final +ID: US_000007 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # US_000007: PAM-Login mit Token diff --git a/project-management/requirements/stories/US_000008.md b/project-management/requirements/stories/US_000008.md index 2131bbb..5869118 100644 --- a/project-management/requirements/stories/US_000008.md +++ b/project-management/requirements/stories/US_000008.md @@ -1,4 +1,4 @@ -ID: US_000008 | Version: 0.2.1 | Status: Final +ID: US_000008 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # US_000008: OIDC-Login Flow diff --git a/project-management/requirements/stories/US_000009.md b/project-management/requirements/stories/US_000009.md index fbd4ffc..6800fdc 100644 --- a/project-management/requirements/stories/US_000009.md +++ b/project-management/requirements/stories/US_000009.md @@ -1,4 +1,4 @@ -ID: US_000009 | Version: 0.2.1 | Status: Final +ID: US_000009 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # US_000009: Autorisierung und /me-Identitaet diff --git a/project-management/requirements/stories/US_000010.md b/project-management/requirements/stories/US_000010.md index b447c37..dac7f6d 100644 --- a/project-management/requirements/stories/US_000010.md +++ b/project-management/requirements/stories/US_000010.md @@ -1,4 +1,4 @@ -ID: US_000010 | Version: 0.2.1 | Status: Final +ID: US_000010 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # US_000010: Index-Seite ausliefern diff --git a/project-management/requirements/stories/US_000011.md b/project-management/requirements/stories/US_000011.md index edf1f61..389e073 100644 --- a/project-management/requirements/stories/US_000011.md +++ b/project-management/requirements/stories/US_000011.md @@ -1,4 +1,4 @@ -ID: US_000011 | Version: 0.2.1 | Status: Final +ID: US_000011 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # US_000011: Virtualenv und Abhaengigkeiten erstellen diff --git a/project-management/requirements/stories/US_000012.md b/project-management/requirements/stories/US_000012.md index 919e66f..db2e3cb 100644 --- a/project-management/requirements/stories/US_000012.md +++ b/project-management/requirements/stories/US_000012.md @@ -1,4 +1,4 @@ -ID: US_000012 | Version: 0.2.1 | Status: Final +ID: US_000012 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # US_000012: Service lokal starten diff --git a/project-management/requirements/stories/US_000013.md b/project-management/requirements/stories/US_000013.md index 3c2f094..c811a37 100644 --- a/project-management/requirements/stories/US_000013.md +++ b/project-management/requirements/stories/US_000013.md @@ -1,4 +1,4 @@ -ID: US_000013 | Version: 0.2.1 | Status: Final +ID: US_000013 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # US_000013: Service installieren diff --git a/project-management/requirements/stories/US_000014.md b/project-management/requirements/stories/US_000014.md index 1ead3dd..add222a 100644 --- a/project-management/requirements/stories/US_000014.md +++ b/project-management/requirements/stories/US_000014.md @@ -1,4 +1,4 @@ -ID: US_000014 | Version: 0.2.1 | Status: Final +ID: US_000014 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # US_000014: Service aktualisieren diff --git a/project-management/requirements/stories/US_000015.md b/project-management/requirements/stories/US_000015.md index 6b1cd6c..d9c07a6 100644 --- a/project-management/requirements/stories/US_000015.md +++ b/project-management/requirements/stories/US_000015.md @@ -1,4 +1,4 @@ -ID: US_000015 | Version: 0.2.1 | Status: Final +ID: US_000015 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # US_000015: Remote-Deployment durchfuehren diff --git a/project-management/requirements/stories/US_000016.md b/project-management/requirements/stories/US_000016.md index d5d8e78..e92ee34 100644 --- a/project-management/requirements/stories/US_000016.md +++ b/project-management/requirements/stories/US_000016.md @@ -1,4 +1,4 @@ -ID: US_000016 | Version: 0.2.1 | Status: Final +ID: US_000016 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # US_000016: OIDC-Client registrieren diff --git a/project-management/requirements/stories/US_000017.md b/project-management/requirements/stories/US_000017.md index 5e30e45..80e9b76 100644 --- a/project-management/requirements/stories/US_000017.md +++ b/project-management/requirements/stories/US_000017.md @@ -1,4 +1,4 @@ -ID: US_000017 | Version: 0.2.1 | Status: Final +ID: US_000017 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # US_000017: Systemd-Unit im Repo diff --git a/project-management/requirements/stories/US_000018.md b/project-management/requirements/stories/US_000018.md index 3fac482..ae3bec3 100644 --- a/project-management/requirements/stories/US_000018.md +++ b/project-management/requirements/stories/US_000018.md @@ -1,4 +1,4 @@ -ID: US_000018 | Version: 0.2.1 | Status: Final +ID: US_000018 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # US_000018: Konfigurations-Templates verfuegbar diff --git a/project-management/requirements/stories/US_000019.md b/project-management/requirements/stories/US_000019.md index 23a9c3e..a0fc7af 100644 --- a/project-management/requirements/stories/US_000019.md +++ b/project-management/requirements/stories/US_000019.md @@ -1,4 +1,4 @@ -ID: US_000019 | Version: 0.2.1 | Status: Final +ID: US_000019 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # US_000019: Deployment-Archiv vorhanden diff --git a/project-management/requirements/stories/US_000020.md b/project-management/requirements/stories/US_000020.md index 8475d7e..adc49f3 100644 --- a/project-management/requirements/stories/US_000020.md +++ b/project-management/requirements/stories/US_000020.md @@ -1,4 +1,4 @@ -ID: US_000020 | Version: 0.2.1 | Status: Final +ID: US_000020 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # US_000020: Makefile-Automation bereitstellen diff --git a/project-management/requirements/stories/US_000021.md b/project-management/requirements/stories/US_000021.md index 408ffe6..04ac90c 100644 --- a/project-management/requirements/stories/US_000021.md +++ b/project-management/requirements/stories/US_000021.md @@ -1,4 +1,4 @@ -ID: US_000021 | Version: 0.2.1 | Status: Final +ID: US_000021 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # US_000021: Konfiguration per ENV steuern diff --git a/project-management/requirements/stories/US_000022.md b/project-management/requirements/stories/US_000022.md index 586818a..99457fc 100644 --- a/project-management/requirements/stories/US_000022.md +++ b/project-management/requirements/stories/US_000022.md @@ -1,4 +1,4 @@ -ID: US_000022 | Version: 0.2.1 | Status: Final +ID: US_000022 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # US_000022: Web-UI Aktionen ausfuehren diff --git a/project-management/requirements/stories/US_000023.md b/project-management/requirements/stories/US_000023.md index b429b78..2653385 100644 --- a/project-management/requirements/stories/US_000023.md +++ b/project-management/requirements/stories/US_000023.md @@ -1,4 +1,4 @@ -ID: US_000023 | Version: 0.2.1 | Status: Final +ID: US_000023 | Version: 0.2.2 | Status: Final By: Codex (GPT-5) # US_000023: Runbook und Security-Hinweise dokumentieren diff --git a/project-management/requirements/stories/US_000024.md b/project-management/requirements/stories/US_000024.md index 0a9dfd7..ee12044 100644 --- a/project-management/requirements/stories/US_000024.md +++ b/project-management/requirements/stories/US_000024.md @@ -1,4 +1,4 @@ -ID: US_000024 | Version: 0.2.1 | Status: Done +ID: US_000024 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # US_000024: Watchtower Theme fuer Web-UI diff --git a/project-management/requirements/stories/US_000025.md b/project-management/requirements/stories/US_000025.md index 94ab31a..b37bcfd 100644 --- a/project-management/requirements/stories/US_000025.md +++ b/project-management/requirements/stories/US_000025.md @@ -1,4 +1,4 @@ -ID: US_000025 | Version: 0.2.1 | Status: Draft +ID: US_000025 | Version: 0.2.2 | Status: Draft By: Codex (GPT-5) # US_000025: OIDC End-to-End Validierung und Runbook diff --git a/project-management/requirements/stories/US_000026.md b/project-management/requirements/stories/US_000026.md index da21cce..9c19169 100644 --- a/project-management/requirements/stories/US_000026.md +++ b/project-management/requirements/stories/US_000026.md @@ -1,4 +1,4 @@ -ID: US_000026 | Version: 0.2.1 | Status: Done +ID: US_000026 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # US_000026: Client bezieht Updates (Pull) diff --git a/project-management/requirements/stories/US_000027.md b/project-management/requirements/stories/US_000027.md index 7e70d93..85bb4ce 100644 --- a/project-management/requirements/stories/US_000027.md +++ b/project-management/requirements/stories/US_000027.md @@ -1,4 +1,4 @@ -ID: US_000027 | Version: 0.2.1 | Status: Done +ID: US_000027 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # US_000027: Client verifiziert und wendet Updates an diff --git a/project-management/requirements/stories/US_000028.md b/project-management/requirements/stories/US_000028.md index 1dd0f53..59ea193 100644 --- a/project-management/requirements/stories/US_000028.md +++ b/project-management/requirements/stories/US_000028.md @@ -1,4 +1,4 @@ -ID: US_000028 | Version: 0.2.1 | Status: Done +ID: US_000028 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # US_000028: Client meldet Update-Status diff --git a/project-management/requirements/stories/US_000029.md b/project-management/requirements/stories/US_000029.md index 4d68a4c..4a25ee4 100644 --- a/project-management/requirements/stories/US_000029.md +++ b/project-management/requirements/stories/US_000029.md @@ -1,4 +1,4 @@ -ID: US_000029 | Version: 0.2.1 | Status: Done +ID: US_000029 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # US_000029: Update-Status im Web-UI anzeigen diff --git a/project-management/requirements/stories/US_000030.md b/project-management/requirements/stories/US_000030.md index 66a8cb1..408de46 100644 --- a/project-management/requirements/stories/US_000030.md +++ b/project-management/requirements/stories/US_000030.md @@ -1,4 +1,4 @@ -ID: US_000030 | Version: 0.2.1 | Status: Done +ID: US_000030 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # US_000030: Update-Check im Web-UI ausloesen diff --git a/project-management/requirements/stories/US_000031.md b/project-management/requirements/stories/US_000031.md index 5e7b8c1..514eddb 100644 --- a/project-management/requirements/stories/US_000031.md +++ b/project-management/requirements/stories/US_000031.md @@ -1,4 +1,4 @@ -ID: US_000031 | Version: 0.2.1 | Status: Done +ID: US_000031 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # US_000031: Update im Web-UI anstossen diff --git a/project-management/requirements/stories/US_000032.md b/project-management/requirements/stories/US_000032.md index 2ff221f..fe8bd60 100644 --- a/project-management/requirements/stories/US_000032.md +++ b/project-management/requirements/stories/US_000032.md @@ -1,4 +1,4 @@ -ID: US_000032 | Version: 0.2.1 | Status: Done +ID: US_000032 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # US_000032: Update-Logs im Web-UI anzeigen diff --git a/project-management/requirements/stories/US_000033.md b/project-management/requirements/stories/US_000033.md index 8466184..acf831d 100644 --- a/project-management/requirements/stories/US_000033.md +++ b/project-management/requirements/stories/US_000033.md @@ -1,4 +1,4 @@ -ID: US_000033 | Version: 0.2.1 | Status: Done +ID: US_000033 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # US_000033: Rollback im Web-UI anstossen diff --git a/project-management/requirements/stories/US_000034.md b/project-management/requirements/stories/US_000034.md index e12e188..aff4081 100644 --- a/project-management/requirements/stories/US_000034.md +++ b/project-management/requirements/stories/US_000034.md @@ -1,4 +1,4 @@ -ID: US_000034 | Version: 0.2.1 | Status: Done +ID: US_000034 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # US_000034: Enrollment fuer Langzeit-Token diff --git a/project-management/requirements/stories/US_000035.md b/project-management/requirements/stories/US_000035.md index 9d06b6d..b731938 100644 --- a/project-management/requirements/stories/US_000035.md +++ b/project-management/requirements/stories/US_000035.md @@ -1,4 +1,4 @@ -ID: US_000035 | Version: 0.2.1 | Status: Done +ID: US_000035 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # US_000035: v1 Update-Endpoints und Status-Schema diff --git a/project-management/requirements/stories/US_000036.md b/project-management/requirements/stories/US_000036.md index 9f9023d..a59294e 100644 --- a/project-management/requirements/stories/US_000036.md +++ b/project-management/requirements/stories/US_000036.md @@ -1,4 +1,4 @@ -ID: US_000036 | Version: 0.2.1 | Status: Done +ID: US_000036 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # US_000036: Doku-Versionen auf VERSION synchronisieren diff --git a/project-management/requirements/stories/US_000037.md b/project-management/requirements/stories/US_000037.md index bc4343a..b0acce1 100644 --- a/project-management/requirements/stories/US_000037.md +++ b/project-management/requirements/stories/US_000037.md @@ -1,4 +1,4 @@ -ID: US_000037 | Version: 0.2.1 | Status: Done +ID: US_000037 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # US_000037: Update-API-Doku mit /update/enroll abgleichen diff --git a/project-management/requirements/stories/US_000038.md b/project-management/requirements/stories/US_000038.md index 18bb9d9..d52c2dc 100644 --- a/project-management/requirements/stories/US_000038.md +++ b/project-management/requirements/stories/US_000038.md @@ -1,4 +1,4 @@ -ID: US_000038 | Version: 0.2.1 | Status: Done +ID: US_000038 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # US_000038: ENV-Beispiele und Healthcheck-Auth angleichen diff --git a/project-management/requirements/stories/US_000039.md b/project-management/requirements/stories/US_000039.md index 4179f60..aecfcba 100644 --- a/project-management/requirements/stories/US_000039.md +++ b/project-management/requirements/stories/US_000039.md @@ -1,4 +1,4 @@ -ID: US_000039 | Version: 0.2.1 | Status: Done +ID: US_000039 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # US_000039: Doku-Audit fuer verbleibende Abweichungen diff --git a/project-management/requirements/stories/US_000040.md b/project-management/requirements/stories/US_000040.md index 96311c4..f1719a9 100644 --- a/project-management/requirements/stories/US_000040.md +++ b/project-management/requirements/stories/US_000040.md @@ -1,4 +1,4 @@ -ID: US_000040 | Version: 0.2.1 | Status: Done +ID: US_000040 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # US_000040: Doku-Struktur und Inhalte erstellen diff --git a/project-management/requirements/stories/US_000041.md b/project-management/requirements/stories/US_000041.md index 9d42a7d..c1c44c7 100644 --- a/project-management/requirements/stories/US_000041.md +++ b/project-management/requirements/stories/US_000041.md @@ -1,4 +1,4 @@ -ID: US_000041 | Version: 0.2.1 | Status: Done +ID: US_000041 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # US_000041: Einbindung externer Services dokumentieren diff --git a/project-management/requirements/stories/US_000042.md b/project-management/requirements/stories/US_000042.md index 23a35e7..4da6431 100644 --- a/project-management/requirements/stories/US_000042.md +++ b/project-management/requirements/stories/US_000042.md @@ -1,4 +1,4 @@ -ID: US_000042 | Version: 0.2.1 | Status: Done +ID: US_000042 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # US_000042: Consumer-Perspektive und Audience-Split ergaenzen diff --git a/project-management/requirements/stories/US_000043.md b/project-management/requirements/stories/US_000043.md index 399000b..8260a3e 100644 --- a/project-management/requirements/stories/US_000043.md +++ b/project-management/requirements/stories/US_000043.md @@ -1,4 +1,4 @@ -ID: US_000043 | Version: 0.2.1 | Status: Done +ID: US_000043 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # US_000043: Enrollment-Token per Script abrufen diff --git a/project-management/requirements/stories/US_000044.md b/project-management/requirements/stories/US_000044.md index 71d3f41..98c4867 100644 --- a/project-management/requirements/stories/US_000044.md +++ b/project-management/requirements/stories/US_000044.md @@ -1,4 +1,4 @@ -ID: US_000044 | Version: 0.2.1 | Status: Draft +ID: US_000044 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # US_000044: Systemmetriken im Dashboard anzeigen diff --git a/project-management/requirements/stories/US_000045.md b/project-management/requirements/stories/US_000045.md index 8266da0..9656a38 100644 --- a/project-management/requirements/stories/US_000045.md +++ b/project-management/requirements/stories/US_000045.md @@ -1,4 +1,4 @@ -ID: US_000045 | Version: 0.2.1 | Status: Draft +ID: US_000045 | Version: 0.2.2 | Status: Draft By: Codex (GPT-5) # US_000045: Regeln fuer Login-Zeitfenster definieren und durchsetzen diff --git a/project-management/requirements/stories/US_000046.md b/project-management/requirements/stories/US_000046.md index e39a58f..9593e2d 100644 --- a/project-management/requirements/stories/US_000046.md +++ b/project-management/requirements/stories/US_000046.md @@ -1,4 +1,4 @@ -ID: US_000046 | Version: 0.2.1 | Status: Done +ID: US_000046 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # US_000046: Update-Service Erreichbarkeit anzeigen diff --git a/project-management/requirements/stories/US_000047.md b/project-management/requirements/stories/US_000047.md index f978539..1242900 100644 --- a/project-management/requirements/stories/US_000047.md +++ b/project-management/requirements/stories/US_000047.md @@ -1,4 +1,4 @@ -ID: US_000047 | Version: 0.2.1 | Status: Done +ID: US_000047 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # US_000047: Update-Config auslagern diff --git a/project-management/requirements/stories/US_000048.md b/project-management/requirements/stories/US_000048.md new file mode 100644 index 0000000..f86aea6 --- /dev/null +++ b/project-management/requirements/stories/US_000048.md @@ -0,0 +1,17 @@ +ID: US_000048 | Version: 0.2.2 | Status: Done +By: Codex (GPT-5) + +# US_000048: Release-Upload automatisieren + +Als Admin moechte ich das Erstellen des Release-Archivs und den Upload zum Update-Service +automatisieren, damit Dev/Prod Releases reproduzierbar und fehlerarm erstellt werden. + +## Akzeptanzkriterien +- Given eine gueltige VERSION +- When das Upload-Script ausgefuehrt wird +- Then wird ein tar.gz Archiv erzeugt (vollstaendiges Release) +- And der Upload erfolgt gegen die konfigurierte Update-Service URL +- And Dev/Prod kann ueber URL oder Parameter unterschieden werden + +## Task-Platzhalter +- TASK_000057: Script fuer Release-Upload erstellen und dokumentieren diff --git a/project-management/requirements/stories/US_000049.md b/project-management/requirements/stories/US_000049.md new file mode 100644 index 0000000..b2db3ae --- /dev/null +++ b/project-management/requirements/stories/US_000049.md @@ -0,0 +1,16 @@ +ID: US_000049 | Version: 0.2.2 | Status: Done +By: Codex (GPT-5) + +# US_000049: Lokale deployment.env fuer Update-Uploads + +Als Admin moechte ich eine lokale deployment.env nutzen, um Update-Service Parameter +und Tokens fuer Dev/Prod Tests zu konfigurieren, ohne /etc/skd/ zu verwenden. + +## Akzeptanzkriterien +- Given ich arbeite lokal im Repo +- When ich ein Update-Artefakt hochlade oder Enrollment teste +- Then kann ich eine deployment.env als Quelle fuer Update-Variablen nutzen +- And die Datei ist nicht Teil des Repos (lokal, gitignored) + +## Task-Platzhalter +- TASK_000058: deployment.env Beispiel und Script-Anpassungen diff --git a/project-management/requirements/tasks/TASK_000025.md b/project-management/requirements/tasks/TASK_000025.md index d87cfa2..761c904 100644 --- a/project-management/requirements/tasks/TASK_000025.md +++ b/project-management/requirements/tasks/TASK_000025.md @@ -1,4 +1,4 @@ -ID: TASK_000025 | Version: 0.2.1 | Status: Blocked +ID: TASK_000025 | Version: 0.2.2 | Status: Blocked By: Codex (GPT-5) # TASK_000025: OIDC E2E validation diff --git a/project-management/requirements/tasks/TASK_000026.md b/project-management/requirements/tasks/TASK_000026.md index 0f083a8..7287f48 100644 --- a/project-management/requirements/tasks/TASK_000026.md +++ b/project-management/requirements/tasks/TASK_000026.md @@ -1,4 +1,4 @@ -ID: TASK_000026 | Version: 0.2.1 | Status: Blocked +ID: TASK_000026 | Version: 0.2.2 | Status: Blocked By: Codex (GPT-5) # TASK_000026: OIDC runbook update diff --git a/project-management/requirements/tasks/TASK_000027.md b/project-management/requirements/tasks/TASK_000027.md index b642acc..e38b3a2 100644 --- a/project-management/requirements/tasks/TASK_000027.md +++ b/project-management/requirements/tasks/TASK_000027.md @@ -1,4 +1,4 @@ -ID: TASK_000027 | Version: 0.2.1 | Status: Done +ID: TASK_000027 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000027: Update endpoint config diff --git a/project-management/requirements/tasks/TASK_000028.md b/project-management/requirements/tasks/TASK_000028.md index 0a99af5..2a0cca4 100644 --- a/project-management/requirements/tasks/TASK_000028.md +++ b/project-management/requirements/tasks/TASK_000028.md @@ -1,4 +1,4 @@ -ID: TASK_000028 | Version: 0.2.1 | Status: Done +ID: TASK_000028 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000028: Verify and apply update diff --git a/project-management/requirements/tasks/TASK_000029.md b/project-management/requirements/tasks/TASK_000029.md index 022eaa2..3771618 100644 --- a/project-management/requirements/tasks/TASK_000029.md +++ b/project-management/requirements/tasks/TASK_000029.md @@ -1,4 +1,4 @@ -ID: TASK_000029 | Version: 0.2.1 | Status: Done +ID: TASK_000029 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000029: Report update status diff --git a/project-management/requirements/tasks/TASK_000030.md b/project-management/requirements/tasks/TASK_000030.md index 4bdfc79..3072cb2 100644 --- a/project-management/requirements/tasks/TASK_000030.md +++ b/project-management/requirements/tasks/TASK_000030.md @@ -1,4 +1,4 @@ -ID: TASK_000030 | Version: 0.2.1 | Status: Done +ID: TASK_000030 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000030: UI update status view diff --git a/project-management/requirements/tasks/TASK_000031.md b/project-management/requirements/tasks/TASK_000031.md index 14be611..61b3bcd 100644 --- a/project-management/requirements/tasks/TASK_000031.md +++ b/project-management/requirements/tasks/TASK_000031.md @@ -1,4 +1,4 @@ -ID: TASK_000031 | Version: 0.2.1 | Status: Done +ID: TASK_000031 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000031: UI update check trigger diff --git a/project-management/requirements/tasks/TASK_000032.md b/project-management/requirements/tasks/TASK_000032.md index 56844d6..d320a73 100644 --- a/project-management/requirements/tasks/TASK_000032.md +++ b/project-management/requirements/tasks/TASK_000032.md @@ -1,4 +1,4 @@ -ID: TASK_000032 | Version: 0.2.1 | Status: Done +ID: TASK_000032 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000032: UI update apply action diff --git a/project-management/requirements/tasks/TASK_000033.md b/project-management/requirements/tasks/TASK_000033.md index da68b3c..81fdc57 100644 --- a/project-management/requirements/tasks/TASK_000033.md +++ b/project-management/requirements/tasks/TASK_000033.md @@ -1,4 +1,4 @@ -ID: TASK_000033 | Version: 0.2.1 | Status: Done +ID: TASK_000033 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000033: UI update logs view diff --git a/project-management/requirements/tasks/TASK_000034.md b/project-management/requirements/tasks/TASK_000034.md index 86bfb55..092f387 100644 --- a/project-management/requirements/tasks/TASK_000034.md +++ b/project-management/requirements/tasks/TASK_000034.md @@ -1,4 +1,4 @@ -ID: TASK_000034 | Version: 0.2.1 | Status: Done +ID: TASK_000034 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000034: UI rollback action diff --git a/project-management/requirements/tasks/TASK_000035.md b/project-management/requirements/tasks/TASK_000035.md index dcae1e1..186b06d 100644 --- a/project-management/requirements/tasks/TASK_000035.md +++ b/project-management/requirements/tasks/TASK_000035.md @@ -1,4 +1,4 @@ -ID: TASK_000035 | Version: 0.2.1 | Status: Done +ID: TASK_000035 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000035: Login-Landing und Header-Version diff --git a/project-management/requirements/tasks/TASK_000036.md b/project-management/requirements/tasks/TASK_000036.md index 2a89b99..8640db3 100644 --- a/project-management/requirements/tasks/TASK_000036.md +++ b/project-management/requirements/tasks/TASK_000036.md @@ -1,4 +1,4 @@ -ID: TASK_000036 | Version: 0.2.1 | Status: Done +ID: TASK_000036 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000036: Login-Landing und Dashboard-Redirect diff --git a/project-management/requirements/tasks/TASK_000037.md b/project-management/requirements/tasks/TASK_000037.md index c30c524..7acfaea 100644 --- a/project-management/requirements/tasks/TASK_000037.md +++ b/project-management/requirements/tasks/TASK_000037.md @@ -1,4 +1,4 @@ -ID: TASK_000037 | Version: 0.2.1 | Status: Done +ID: TASK_000037 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000037: OIDC-Button neben Anmelden diff --git a/project-management/requirements/tasks/TASK_000038.md b/project-management/requirements/tasks/TASK_000038.md index b81363d..e372fd3 100644 --- a/project-management/requirements/tasks/TASK_000038.md +++ b/project-management/requirements/tasks/TASK_000038.md @@ -1,4 +1,4 @@ -ID: TASK_000038 | Version: 0.2.1 | Status: Done +ID: TASK_000038 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000038: Logo und Favicon einbinden diff --git a/project-management/requirements/tasks/TASK_000039.md b/project-management/requirements/tasks/TASK_000039.md index 3d9cdea..a36e1b6 100644 --- a/project-management/requirements/tasks/TASK_000039.md +++ b/project-management/requirements/tasks/TASK_000039.md @@ -1,4 +1,4 @@ -ID: TASK_000039 | Version: 0.2.1 | Status: Done +ID: TASK_000039 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000039: Login-Text und Panel-Layout diff --git a/project-management/requirements/tasks/TASK_000040.md b/project-management/requirements/tasks/TASK_000040.md index 971852e..062bcf0 100644 --- a/project-management/requirements/tasks/TASK_000040.md +++ b/project-management/requirements/tasks/TASK_000040.md @@ -1,4 +1,4 @@ -ID: TASK_000040 | Version: 0.2.1 | Status: Done +ID: TASK_000040 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000040: Enrollment-Flow implementieren diff --git a/project-management/requirements/tasks/TASK_000041.md b/project-management/requirements/tasks/TASK_000041.md index bfec6b8..09c9af6 100644 --- a/project-management/requirements/tasks/TASK_000041.md +++ b/project-management/requirements/tasks/TASK_000041.md @@ -1,4 +1,4 @@ -ID: TASK_000041 | Version: 0.2.1 | Status: Done +ID: TASK_000041 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000041: v1 Endpunkte im Update-Client umstellen diff --git a/project-management/requirements/tasks/TASK_000042.md b/project-management/requirements/tasks/TASK_000042.md index 3f05133..ae516b4 100644 --- a/project-management/requirements/tasks/TASK_000042.md +++ b/project-management/requirements/tasks/TASK_000042.md @@ -1,4 +1,4 @@ -ID: TASK_000042 | Version: 0.2.1 | Status: Done +ID: TASK_000042 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000042: Doku-Audit verbleibender Dateien diff --git a/project-management/requirements/tasks/TASK_000043.md b/project-management/requirements/tasks/TASK_000043.md index 1613027..145964f 100644 --- a/project-management/requirements/tasks/TASK_000043.md +++ b/project-management/requirements/tasks/TASK_000043.md @@ -1,4 +1,4 @@ -ID: TASK_000043 | Version: 0.2.1 | Status: Done +ID: TASK_000043 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000043: Neue Doku-Dateien erstellen und verlinken diff --git a/project-management/requirements/tasks/TASK_000044.md b/project-management/requirements/tasks/TASK_000044.md index 2d7e651..11c4486 100644 --- a/project-management/requirements/tasks/TASK_000044.md +++ b/project-management/requirements/tasks/TASK_000044.md @@ -1,4 +1,4 @@ -ID: TASK_000044 | Version: 0.2.1 | Status: Done +ID: TASK_000044 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000044: Altdoku archivieren diff --git a/project-management/requirements/tasks/TASK_000045.md b/project-management/requirements/tasks/TASK_000045.md index a430a65..87769ad 100644 --- a/project-management/requirements/tasks/TASK_000045.md +++ b/project-management/requirements/tasks/TASK_000045.md @@ -1,4 +1,4 @@ -ID: TASK_000045 | Version: 0.2.1 | Status: Done +ID: TASK_000045 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000045: Einbindung externer Services dokumentieren diff --git a/project-management/requirements/tasks/TASK_000046.md b/project-management/requirements/tasks/TASK_000046.md index 5f0c2b5..9df8015 100644 --- a/project-management/requirements/tasks/TASK_000046.md +++ b/project-management/requirements/tasks/TASK_000046.md @@ -1,4 +1,4 @@ -ID: TASK_000046 | Version: 0.2.1 | Status: Done +ID: TASK_000046 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000046: Consumer-Doku erstellen (FOR_USERS.md) diff --git a/project-management/requirements/tasks/TASK_000047.md b/project-management/requirements/tasks/TASK_000047.md index 2b4b71b..e6094a5 100644 --- a/project-management/requirements/tasks/TASK_000047.md +++ b/project-management/requirements/tasks/TASK_000047.md @@ -1,4 +1,4 @@ -ID: TASK_000047 | Version: 0.2.1 | Status: Done +ID: TASK_000047 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000047: README und Audience-Split anpassen diff --git a/project-management/requirements/tasks/TASK_000048.md b/project-management/requirements/tasks/TASK_000048.md index 4c1fede..ac606d5 100644 --- a/project-management/requirements/tasks/TASK_000048.md +++ b/project-management/requirements/tasks/TASK_000048.md @@ -1,4 +1,4 @@ -ID: TASK_000048 | Version: 0.2.1 | Status: Done +ID: TASK_000048 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000048: External Dependencies und Audience-Ergaenzungen diff --git a/project-management/requirements/tasks/TASK_000049.md b/project-management/requirements/tasks/TASK_000049.md index 10ecb96..f636984 100644 --- a/project-management/requirements/tasks/TASK_000049.md +++ b/project-management/requirements/tasks/TASK_000049.md @@ -1,4 +1,4 @@ -ID: TASK_000049 | Version: 0.2.1 | Status: Done +ID: TASK_000049 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000049: Script fuer Enrollment-Flow erstellen diff --git a/project-management/requirements/tasks/TASK_000050.md b/project-management/requirements/tasks/TASK_000050.md index 619262d..947f05c 100644 --- a/project-management/requirements/tasks/TASK_000050.md +++ b/project-management/requirements/tasks/TASK_000050.md @@ -1,4 +1,4 @@ -ID: TASK_000050 | Version: 0.2.1 | Status: Draft +ID: TASK_000050 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000050: Backend-Endpoint fuer Systemmetriken diff --git a/project-management/requirements/tasks/TASK_000051.md b/project-management/requirements/tasks/TASK_000051.md index 4d5181c..817e73d 100644 --- a/project-management/requirements/tasks/TASK_000051.md +++ b/project-management/requirements/tasks/TASK_000051.md @@ -1,4 +1,4 @@ -ID: TASK_000051 | Version: 0.2.1 | Status: Draft +ID: TASK_000051 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000051: UI-Kacheln im Dashboard (System Information) diff --git a/project-management/requirements/tasks/TASK_000052.md b/project-management/requirements/tasks/TASK_000052.md index fa831e4..18fba30 100644 --- a/project-management/requirements/tasks/TASK_000052.md +++ b/project-management/requirements/tasks/TASK_000052.md @@ -1,4 +1,4 @@ -ID: TASK_000052 | Version: 0.2.1 | Status: Draft +ID: TASK_000052 | Version: 0.2.2 | Status: Draft By: Codex (GPT-5) # TASK_000052: Regelmodell und Speicherung definieren diff --git a/project-management/requirements/tasks/TASK_000053.md b/project-management/requirements/tasks/TASK_000053.md index dc090c7..12bb961 100644 --- a/project-management/requirements/tasks/TASK_000053.md +++ b/project-management/requirements/tasks/TASK_000053.md @@ -1,4 +1,4 @@ -ID: TASK_000053 | Version: 0.2.1 | Status: Draft +ID: TASK_000053 | Version: 0.2.2 | Status: Draft By: Codex (GPT-5) # TASK_000053: Login-Pruefung und Enforcement diff --git a/project-management/requirements/tasks/TASK_000054.md b/project-management/requirements/tasks/TASK_000054.md index 0dfce30..32728f6 100644 --- a/project-management/requirements/tasks/TASK_000054.md +++ b/project-management/requirements/tasks/TASK_000054.md @@ -1,4 +1,4 @@ -ID: TASK_000054 | Version: 0.2.1 | Status: Draft +ID: TASK_000054 | Version: 0.2.2 | Status: Draft By: Codex (GPT-5) # TASK_000054: Admin-UI fuer Regeln und Scheduler diff --git a/project-management/requirements/tasks/TASK_000055.md b/project-management/requirements/tasks/TASK_000055.md index 1430f7a..360204a 100644 --- a/project-management/requirements/tasks/TASK_000055.md +++ b/project-management/requirements/tasks/TASK_000055.md @@ -1,4 +1,4 @@ -ID: TASK_000055 | Version: 0.2.1 | Status: Done +ID: TASK_000055 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000055: Endpoint und UI fuer Update-Service Status diff --git a/project-management/requirements/tasks/TASK_000056.md b/project-management/requirements/tasks/TASK_000056.md index 862ff4e..772b9ef 100644 --- a/project-management/requirements/tasks/TASK_000056.md +++ b/project-management/requirements/tasks/TASK_000056.md @@ -1,4 +1,4 @@ -ID: TASK_000056 | Version: 0.2.1 | Status: Done +ID: TASK_000056 | Version: 0.2.2 | Status: Done By: Codex (GPT-5) # TASK_000056: Update-ENV separieren diff --git a/project-management/requirements/tasks/TASK_000057.md b/project-management/requirements/tasks/TASK_000057.md new file mode 100644 index 0000000..bf3dcfd --- /dev/null +++ b/project-management/requirements/tasks/TASK_000057.md @@ -0,0 +1,20 @@ +ID: TASK_000057 | Version: 0.2.2 | Status: Done +By: Codex (GPT-5) + +# TASK_000057: Script fuer Release-Upload erstellen + +## Outcome +Ein Script baut das tar.gz Artefakt und laedt es mit curl beim Update-Service hoch. + +## Story-Bezug +US_000048 + +## Beschreibung +- Version aus `VERSION`. +- tar.gz ohne .git/.venv/upload.token. +- SHA256 berechnen. +- Upload via `POST /v1/projects/{project_id}/releases`. + +## Definition of Done (DoD) +- Script liegt unter scripts/. +- Parameter fuer Service-URL/Token vorhanden. diff --git a/project-management/requirements/tasks/TASK_000058.md b/project-management/requirements/tasks/TASK_000058.md new file mode 100644 index 0000000..f72681f --- /dev/null +++ b/project-management/requirements/tasks/TASK_000058.md @@ -0,0 +1,18 @@ +ID: TASK_000058 | Version: 0.2.2 | Status: Done +By: Codex (GPT-5) + +# TASK_000058: deployment.env Beispiel und Script-Anpassungen + +## Outcome +deployment.env.example vorhanden; Scripts lesen deployment.env fuer lokale Tests. + +## Story-Bezug +US_000049 + +## Beschreibung +- deployment.env.example anlegen (Update-URL/Project/Token). +- deployment.env in .gitignore. +- upload/enroll Scripts priorisieren deployment.env, wenn vorhanden. + +## Definition of Done (DoD) +- Lokale Tests ohne /etc/skd/ funktionieren. diff --git a/project-management/restructure.promt b/project-management/restructure.promt index 98edf7f..271e4b3 100644 --- a/project-management/restructure.promt +++ b/project-management/restructure.promt @@ -1,4 +1,4 @@ -ID: PROMPT_000006 | Version: 0.2.1 | Status: Draft +ID: PROMPT_000006 | Version: 0.2.2 | Status: Draft By: Codex (GPT-5) # Restructure Prompt: Forensic Architect (Compliance Mode) diff --git a/project-management/story-refactoring.promt b/project-management/story-refactoring.promt index eb80cd1..d5d61d4 100644 --- a/project-management/story-refactoring.promt +++ b/project-management/story-refactoring.promt @@ -1,4 +1,4 @@ -ID: PROMPT_000009 | Version: 0.2.1 | Status: Draft +ID: PROMPT_000009 | Version: 0.2.2 | Status: Draft By: Codex (GPT-5) # Story Refactoring Prompt diff --git a/project-management/system-architect.promt b/project-management/system-architect.promt index 65d52c1..4aa22c5 100644 --- a/project-management/system-architect.promt +++ b/project-management/system-architect.promt @@ -1,4 +1,4 @@ -ID: PROMPT_000007 | Version: 0.2.1 | Status: Draft +ID: PROMPT_000007 | Version: 0.2.2 | Status: Draft By: Codex (GPT-5) # The Stack-Master & System Architect diff --git a/scripts/enroll_update_service.sh b/scripts/enroll_update_service.sh index c174da9..a3b2250 100755 --- a/scripts/enroll_update_service.sh +++ b/scripts/enroll_update_service.sh @@ -1,8 +1,8 @@ #!/usr/bin/env bash set -euo pipefail -ENV_FILE="${ENV_FILE:-/etc/skd/env}" -UPDATE_ENV_FILE="${UPDATE_ENV_FILE:-/etc/skd/update.env}" +ADDON_ENV_FILE="${ADDON_ENV_FILE:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/update-addon.env}" +PROFILE="${PROFILE:-dev}" SERVICE_URL="${SKD_UPDATE_SERVICE_URL:-}" PROJECT_ID="${SKD_UPDATE_PROJECT_ID:-}" TOKEN_FILE="${SKD_UPDATE_TOKEN_FILE:-}" @@ -16,13 +16,13 @@ usage() { Usage: enroll_update_service.sh --enroll-token TOKEN [options] Options: - --service-url URL Update-Service URL (default: SKD_UPDATE_SERVICE_URL) - --project-id ID Project ID (default: SKD_UPDATE_PROJECT_ID) + --service-url URL Update-Service URL (overrides env) + --project-id ID Project ID (overrides env) --client-id ID Client ID (default: hostname) --software-id ID Software ID (default: safe-kiddo) - --output PATH Write token to PATH (default: SKD_UPDATE_TOKEN_FILE if set) - --env-file PATH Read core env file (default: /etc/skd/env) - --update-env PATH Read update env file (default: /etc/skd/update.env) + --output PATH Write token to PATH (overrides env) + --profile NAME Environment profile: dev|stage|prod (default: dev) + --addon-env PATH Addon env file (default: ./update-addon.env) -h, --help Show this help EOF } @@ -35,8 +35,8 @@ while [[ $# -gt 0 ]]; do --software-id) SOFTWARE_ID="$2"; shift 2 ;; --enroll-token) ENROLL_TOKEN="$2"; shift 2 ;; --output) OUTPUT_PATH="$2"; shift 2 ;; - --env-file) ENV_FILE="$2"; shift 2 ;; - --update-env) UPDATE_ENV_FILE="$2"; shift 2 ;; + --profile) PROFILE="$2"; shift 2 ;; + --addon-env) ADDON_ENV_FILE="$2"; shift 2 ;; -h|--help) usage; exit 0 ;; *) echo "Unknown option: $1" >&2; usage; exit 1 ;; esac @@ -44,16 +44,20 @@ done read_env_value() { local key="$1" - python3 - <<'PY' "${ENV_FILE}" "${UPDATE_ENV_FILE}" "${key}" + python3 - <<'PY' "${ADDON_ENV_FILE}" "${key}" from pathlib import Path import sys -env_paths = [Path(sys.argv[1]), Path(sys.argv[2])] -key = sys.argv[3] +env_paths = [Path(sys.argv[1])] +key = sys.argv[2] for path in env_paths: if not path.exists(): continue - for raw in path.read_text(encoding="utf-8").splitlines(): + try: + lines = path.read_text(encoding="utf-8").splitlines() + except OSError: + continue + for raw in lines: line = raw.strip() if not line or line.startswith("#"): continue @@ -67,9 +71,10 @@ for path in env_paths: PY } -SERVICE_URL="${SERVICE_URL:-$(read_env_value SKD_UPDATE_SERVICE_URL)}" -PROJECT_ID="${PROJECT_ID:-$(read_env_value SKD_UPDATE_PROJECT_ID)}" -TOKEN_FILE="${OUTPUT_PATH:-${TOKEN_FILE:-$(read_env_value SKD_UPDATE_TOKEN_FILE)}}" +PROFILE_UPPER="$(printf '%s' "${PROFILE}" | tr '[:lower:]' '[:upper:]')" +SERVICE_URL="${SERVICE_URL:-$(read_env_value "${PROFILE_UPPER}_UPDATE_SERVICE_URL")}" +PROJECT_ID="${PROJECT_ID:-$(read_env_value "${PROFILE_UPPER}_UPDATE_PROJECT_ID")}" +TOKEN_FILE="${OUTPUT_PATH:-${TOKEN_FILE:-$(read_env_value "${PROFILE_UPPER}_UPDATE_TOKEN_FILE")}}" CLIENT_ID="${CLIENT_ID:-$(hostname)}" if [[ -z "${SERVICE_URL}" || -z "${PROJECT_ID}" ]]; then diff --git a/scripts/upload_release.sh b/scripts/upload_release.sh index 33ddce0..98843ac 100755 --- a/scripts/upload_release.sh +++ b/scripts/upload_release.sh @@ -2,41 +2,49 @@ set -euo pipefail PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -ENV_FILE="${ENV_FILE:-/etc/skd/env}" -UPDATE_ENV_FILE="${UPDATE_ENV_FILE:-/etc/skd/update.env}" +ADDON_ENV_FILE="${ADDON_ENV_FILE:-${PROJECT_ROOT}/update-addon.env}" +PROFILE="${PROFILE:-dev}" -SERVICE_URL="${SKD_UPDATE_SERVICE_URL:-}" -PROJECT_ID="${SKD_UPDATE_PROJECT_ID:-}" -UPLOAD_TOKEN="${SKD_UPDATE_UPLOAD_TOKEN:-}" -UPLOAD_TOKEN_FILE="${SKD_UPDATE_UPLOAD_TOKEN_FILE:-${PROJECT_ROOT}/upload.token}" +SERVICE_URL="" +PROJECT_ID="" +UPLOAD_TOKEN="" +UPLOAD_TOKEN_FILE="" VERSION="" ARTIFACT_PATH="" +VERBOSE="${VERBOSE:-0}" + +log() { + if [[ "${VERBOSE}" == "1" ]]; then + echo "[upload_release] $*" + fi +} usage() { cat <<'EOF' Usage: upload_release.sh [options] Options: - --service-url URL Update-Service URL (default: SKD_UPDATE_SERVICE_URL) - --project-id ID Project ID (default: SKD_UPDATE_PROJECT_ID) - --token TOKEN Upload token (default: SKD_UPDATE_UPLOAD_TOKEN) - --token-file PATH Upload token file (default: ./upload.token or SKD_UPDATE_UPLOAD_TOKEN_FILE) + --service-url URL Update-Service URL (overrides env) + --project-id ID Project ID (overrides env) + --token TOKEN Upload token (overrides env) + --token-file PATH Upload token file (overrides env) + --profile NAME Environment profile: dev|stage|prod (default: dev) + --addon-env PATH Addon env file (default: ./update-addon.env) + --verbose Enable debug logging --artifact PATH Use existing tar.gz artifact instead of building --version VERSION Override VERSION file - --env-file PATH Read core env file (default: /etc/skd/env) - --update-env PATH Read update env file (default: /etc/skd/update.env) -h, --help Show this help EOF } read_env_value() { local key="$1" - python3 - <<'PY' "${ENV_FILE}" "${UPDATE_ENV_FILE}" "${key}" + python3 - <<'PY' "${ADDON_ENV_FILE}" "${key}" from pathlib import Path import sys -env_paths = [Path(sys.argv[1]), Path(sys.argv[2])] -key = sys.argv[3] +env_paths = [Path(sys.argv[1])] +key = sys.argv[2] for path in env_paths: if not path.exists(): continue @@ -64,21 +72,29 @@ while [[ $# -gt 0 ]]; do --project-id) PROJECT_ID="$2"; shift 2 ;; --token) UPLOAD_TOKEN="$2"; shift 2 ;; --token-file) UPLOAD_TOKEN_FILE="$2"; shift 2 ;; + --profile) PROFILE="$2"; shift 2 ;; + --addon-env) ADDON_ENV_FILE="$2"; shift 2 ;; + --verbose) VERBOSE="1"; shift 1 ;; --artifact) ARTIFACT_PATH="$2"; shift 2 ;; --version) VERSION="$2"; shift 2 ;; - --env-file) ENV_FILE="$2"; shift 2 ;; - --update-env) UPDATE_ENV_FILE="$2"; shift 2 ;; -h|--help) usage; exit 0 ;; *) echo "Unknown option: $1" >&2; usage; exit 1 ;; esac done -SERVICE_URL="${SERVICE_URL:-$(read_env_value SKD_UPDATE_SERVICE_URL)}" -PROJECT_ID="${PROJECT_ID:-$(read_env_value SKD_UPDATE_PROJECT_ID)}" -UPLOAD_TOKEN="${UPLOAD_TOKEN:-$(read_env_value SKD_UPDATE_UPLOAD_TOKEN)}" -UPLOAD_TOKEN_FILE="${UPLOAD_TOKEN_FILE:-$(read_env_value SKD_UPDATE_UPLOAD_TOKEN_FILE)}" +PROFILE_UPPER="$(printf '%s' "${PROFILE}" | tr '[:lower:]' '[:upper:]')" +SERVICE_URL="${SERVICE_URL:-$(read_env_value "${PROFILE_UPPER}_UPDATE_SERVICE_URL")}" +PROJECT_ID="${PROJECT_ID:-$(read_env_value "${PROFILE_UPPER}_UPDATE_PROJECT_ID")}" +UPLOAD_TOKEN="${UPLOAD_TOKEN:-$(read_env_value "${PROFILE_UPPER}_UPDATE_UPLOAD_TOKEN")}" +UPLOAD_TOKEN_FILE="${UPLOAD_TOKEN_FILE:-$(read_env_value "${PROFILE_UPPER}_UPDATE_UPLOAD_TOKEN_FILE")}" VERSION="${VERSION:-$(cat "${PROJECT_ROOT}/VERSION" 2>/dev/null || true)}" +log "Profile: ${PROFILE}" +log "Addon env: ${ADDON_ENV_FILE}" +log "Service URL: ${SERVICE_URL}" +log "Project ID: ${PROJECT_ID}" +log "Version: ${VERSION}" + if [[ -z "${SERVICE_URL}" || -z "${PROJECT_ID}" ]]; then echo "Missing service URL or project ID." >&2 echo "Set SKD_UPDATE_SERVICE_URL and SKD_UPDATE_PROJECT_ID or pass --service-url/--project-id." >&2 @@ -94,12 +110,17 @@ if [[ -z "${UPLOAD_TOKEN}" && -n "${UPLOAD_TOKEN_FILE}" && -f "${UPLOAD_TOKEN_FI UPLOAD_TOKEN="$(cat "${UPLOAD_TOKEN_FILE}" | tr -d '\n')" fi +if [[ -n "${UPLOAD_TOKEN_FILE}" ]]; then + log "Upload token file: ${UPLOAD_TOKEN_FILE}" +fi + if [[ -z "${UPLOAD_TOKEN}" ]]; then echo "Missing upload token. Provide --token or SKD_UPDATE_UPLOAD_TOKEN[_FILE]." >&2 exit 1 fi if [[ -z "${ARTIFACT_PATH}" ]]; then + log "Building artifact..." ARTIFACT_PATH="$(mktemp "/tmp/sk_release_${VERSION}.XXXXXX.tar.gz")" tar czf "${ARTIFACT_PATH}" \ --exclude '.git' \ @@ -114,13 +135,26 @@ if [[ ! -f "${ARTIFACT_PATH}" ]]; then fi SHA256="$(sha256sum "${ARTIFACT_PATH}" | awk '{print $1}')" +log "Artifact: ${ARTIFACT_PATH}" +log "SHA256: ${SHA256}" UPLOAD_URL="${SERVICE_URL%/}/v1/projects/${PROJECT_ID}/releases" -curl -fsS -X POST "${UPLOAD_URL}" \ +log "Upload URL: ${UPLOAD_URL}" +response_file="$(mktemp)" +trap 'rm -f "${response_file}"' EXIT + +http_code=$(curl -sS -o "${response_file}" -w '%{http_code}' \ + -X POST "${UPLOAD_URL}" \ -H "Authorization: Bearer ${UPLOAD_TOKEN}" \ -F "version=${VERSION}" \ -F "sha256=${SHA256}" \ - -F "artifact=@${ARTIFACT_PATH}" + -F "artifact=@${ARTIFACT_PATH}") + +if [[ "${http_code}" != "201" && "${http_code}" != "200" ]]; then + echo "Upload failed (HTTP ${http_code}). Response:" >&2 + cat "${response_file}" >&2 + exit 1 +fi echo "Upload finished: version=${VERSION} sha256=${SHA256}" diff --git a/update-addon.env.example b/update-addon.env.example new file mode 100644 index 0000000..bf1175c --- /dev/null +++ b/update-addon.env.example @@ -0,0 +1,17 @@ +DEV_UPDATE_SERVICE_URL=https://dev.update.wlkns.org +DEV_UPDATE_PROJECT_ID=safe-kiddo-control +DEV_UPDATE_UPLOAD_TOKEN_FILE=./upload.token +DEV_UPDATE_UPLOAD_TOKEN= +DEV_UPDATE_TOKEN_FILE=./update.token + +STAGE_UPDATE_SERVICE_URL=https://staging.update.wlkns.org +STAGE_UPDATE_PROJECT_ID=safe-kiddo-control +STAGE_UPDATE_UPLOAD_TOKEN_FILE=./upload.token +STAGE_UPDATE_UPLOAD_TOKEN= +STAGE_UPDATE_TOKEN_FILE=./update.token + +PROD_UPDATE_SERVICE_URL=https://update.wlkns.org +PROD_UPDATE_PROJECT_ID=safe-kiddo-control +PROD_UPDATE_UPLOAD_TOKEN_FILE=./upload.token +PROD_UPDATE_UPLOAD_TOKEN= +PROD_UPDATE_TOKEN_FILE=./update.token