Den Stand von origin/main ins Cluster bringen. Weil main alles enthält, gehen Paket 0, Rückgrat, T3, T4, T6, ERP-Export und Beute L1 gemeinsam live – getrennt nach den Schritten des Rückgrat-Runbooks, jeder Schritt mit Freigabe des Inhabers.
Umgesetzt
Alles gebaut, getestet und gemergt; CI-Image-Builds auf b48fb157 grün (Lauf 2052/2053)
Overlay-ConfigMaps tragen seit 2026-10-15 die Live-Werte (6e3e9aee); Skript für fehlende Secrets (deploy/k8s/scripts/ensure-secrets.sh)
Live heute: Backend sha-f5b1964 (seit 2026-10-12), Frontend-Image vom 2026-10-12, Postgres 18.6-alpine, CronJob apicore-db-backup, PVC apicore-data; im Namespace nur die drei Ingress-Policies aus rke2-cluster
Offen
Freigabe Rückgrat (Runbook im Plan 2026-10-13-plattform-rueckgrat.md):
Schritt 0: Live-Digests ins Overlay, neue Digests bereithalten, Kubernetes-Version prüfen
Schritt 1: Overlay auf Ist-Stand bringen (Hosts und TLS noch Platzhalter example.com), kubectl diff leer
Schritt 2: NetworkPolicies schärfen, danach die apicore-Kopien von allow-from-traefik und allow-same-namespace im rke2-cluster entfernen; Zertifikats-Erneuerung prüfen (Frontend 2026-10-25, Backend 2026-10-26)
Schritt 3: Rollen, Worker, CronJobs, Pod-Härtung (Vorprüfungen und Secrets: #29)
Schritt 4: Schlüssel trennen (rekey), danach JWT-Secrets rotieren (siehe #30)
Schritt 5: HPA einschalten
Freigabe T4: vorher App-Backup und pg_dump, Prüfabfrage colonyStrength > 40, danach Prüfabfragen aus T4-Spec 4.12; Telegram-Schritte 9.1–9.4 (Bot, Secret, Deploy, Test-Erinnerung)
Freigabe T6: nach dem Rollout Inhaber-Checkliste aus T6-Spec 13.3 (#34)
Zusatz mit eigener Freigabe: Cloudflare-Cache- und Rate-Limit-Regel für /api/v1/public/batches/*
Nach jedem Schritt: TASKS.md und Status in den Detail-Issues nachziehen
Abhängigkeiten / Blocker
Blockiert: jeder Schritt braucht die ausdrückliche Freigabe des Inhabers (Memory: Rollout nur mit Freigabe). Secrets legt der Inhaber an (#29).
Code: ja · Geprüft: ja · Gemergt: ja · Produktiv: nein
Stand: 2026-10-16 (Quelle: git origin/main b48fb157, Cluster-Abfrage 2026-10-16, Session-Status vs-code-ff, Memory)
## Ziel
Den Stand von `origin/main` ins Cluster bringen. Weil `main` alles enthält, gehen Paket 0, Rückgrat, T3, T4, T6, ERP-Export und Beute L1 gemeinsam live – getrennt nach den Schritten des Rückgrat-Runbooks, jeder Schritt mit Freigabe des Inhabers.
## Umgesetzt
- [x] Alles gebaut, getestet und gemergt; CI-Image-Builds auf b48fb157 grün (Lauf 2052/2053)
- [x] Overlay-ConfigMaps tragen seit 2026-10-15 die Live-Werte (6e3e9aee); Skript für fehlende Secrets (`deploy/k8s/scripts/ensure-secrets.sh`)
- [x] Live heute: Backend `sha-f5b1964` (seit 2026-10-12), Frontend-Image vom 2026-10-12, Postgres `18.6-alpine`, CronJob `apicore-db-backup`, PVC `apicore-data`; im Namespace nur die drei Ingress-Policies aus `rke2-cluster`
## Offen
- [ ] Freigabe Rückgrat (Runbook im Plan `2026-10-13-plattform-rueckgrat.md`):
- [ ] Schritt 0: Live-Digests ins Overlay, neue Digests bereithalten, Kubernetes-Version prüfen
- [ ] Schritt 1: Overlay auf Ist-Stand bringen (Hosts und TLS noch Platzhalter `example.com`), `kubectl diff` leer
- [ ] Schritt 2: NetworkPolicies schärfen, danach die `apicore`-Kopien von `allow-from-traefik` und `allow-same-namespace` im rke2-cluster entfernen; Zertifikats-Erneuerung prüfen (Frontend 2026-10-25, Backend 2026-10-26)
- [ ] Schritt 3: Rollen, Worker, CronJobs, Pod-Härtung (Vorprüfungen und Secrets: #29)
- [ ] Schritt 4: Schlüssel trennen (`rekey`), danach JWT-Secrets rotieren (siehe #30)
- [ ] Schritt 5: HPA einschalten
- [ ] Freigabe T4: vorher App-Backup und `pg_dump`, Prüfabfrage `colonyStrength > 40`, danach Prüfabfragen aus T4-Spec 4.12; Telegram-Schritte 9.1–9.4 (Bot, Secret, Deploy, Test-Erinnerung)
- [ ] Freigabe T6: nach dem Rollout Inhaber-Checkliste aus T6-Spec 13.3 (#34)
- [ ] Zusatz mit eigener Freigabe: Cloudflare-Cache- und Rate-Limit-Regel für `/api/v1/public/batches/*`
- [ ] Nach jedem Schritt: `TASKS.md` und Status in den Detail-Issues nachziehen
## Abhängigkeiten / Blocker
Blockiert: jeder Schritt braucht die ausdrückliche Freigabe des Inhabers (Memory: Rollout nur mit Freigabe). Secrets legt der Inhaber an (#29).
## Grundlage
`docs/superpowers/plans/2026-10-13-plattform-rueckgrat.md` Abschnitt „Rollout-Runbook“, T4-Spec §15, T6-Spec §13, `ARCHITECTURE.md` Abschnitt 7. Pakete: #12, #13, #14, #15, #16, #17, #18.
## Status
Code: ja · Geprüft: ja · Gemergt: ja · Produktiv: nein
Stand: 2026-10-16 (Quelle: git origin/main b48fb157, Cluster-Abfrage 2026-10-16, Session-Status vs-code-ff, Memory)
Neue Voraussetzung für den nächsten Backend-Rollout (T7, Commit 9795f980, noch nicht gepusht): Ein Backend-Image ab diesem Stand startet in Produktion in keiner Rolle (api inkl. initContainer, worker, CronJobs), solange VOICE_ENCRYPTION_KEY nicht in apicore-backend-secret steht.
Reihenfolge beim Rollout:
deploy/k8s/scripts/ensure-secrets.sh ausführen (legt den Schlüssel zufällig im Cluster an, kein Wert in Kommandozeile oder Log).
Den Schlüssel wie die anderen Schlüssel sichern.
Erst dann das neue Image ausrollen.
Außerdem: Seed-Fix #45 ist im selben Stand; nach dem Rollout ein mögliches zusätzliches Konto [email protected] prüfen. Siehe ARCHITECTURE Annahme 22.
**Neue Voraussetzung für den nächsten Backend-Rollout (T7, Commit 9795f980, noch nicht gepusht):** Ein Backend-Image ab diesem Stand startet in Produktion in keiner Rolle (api inkl. initContainer, worker, CronJobs), solange `VOICE_ENCRYPTION_KEY` nicht in `apicore-backend-secret` steht.
Reihenfolge beim Rollout:
1. `deploy/k8s/scripts/ensure-secrets.sh` ausführen (legt den Schlüssel zufällig im Cluster an, kein Wert in Kommandozeile oder Log).
2. Den Schlüssel wie die anderen Schlüssel sichern.
3. Erst dann das neue Image ausrollen.
Außerdem: Seed-Fix #45 ist im selben Stand; nach dem Rollout ein mögliches zusätzliches Konto `[email protected]` prüfen. Siehe ARCHITECTURE Annahme 22.
Whisper-Image erstmals in CI gebaut (c53810b8, alle Läufe grün): git.encry.de/nick.rosenloecher/apicore-whisper:sha-c53810b, Index-Digest sha256:bb0eb6cd0168d0acb79a220699d0c8e254df4616d6dae78c109501566e100cd1. Im Overlay stehen wie bei Backend und Frontend noch Platzhalter-Digests; sie werden beim Rollout eingetragen.
Reihenfolge T7 im Rollout (Plan Task 25): 0. ensure-secrets.sh (VOICE_ENCRYPTION_KEY) und sichern; 1. Backend-Image mit Migration (VOICE_RECORDING_ENABLED=false); 2. Whisper-Digest ins Overlay; 3. Komponente voice an, erster Lauf von Hand, Logs auf Inhalte prüfen; 4. Messung (RAM gegen 1280Mi, Dauer); 5. VOICE_RECORDING_ENABLED=true. Jeder Schritt nur mit Freigabe.
Whisper-Image erstmals in CI gebaut (c53810b8, alle Läufe grün): `git.encry.de/nick.rosenloecher/apicore-whisper:sha-c53810b`, Index-Digest `sha256:bb0eb6cd0168d0acb79a220699d0c8e254df4616d6dae78c109501566e100cd1`. Im Overlay stehen wie bei Backend und Frontend noch Platzhalter-Digests; sie werden beim Rollout eingetragen.
Reihenfolge T7 im Rollout (Plan Task 25): 0. `ensure-secrets.sh` (VOICE_ENCRYPTION_KEY) und sichern; 1. Backend-Image mit Migration (`VOICE_RECORDING_ENABLED=false`); 2. Whisper-Digest ins Overlay; 3. Komponente `voice` an, erster Lauf von Hand, Logs auf Inhalte prüfen; 4. Messung (RAM gegen 1280Mi, Dauer); 5. `VOICE_RECORDING_ENABLED=true`. Jeder Schritt nur mit Freigabe.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Ziel
Den Stand von
origin/mainins Cluster bringen. Weilmainalles enthält, gehen Paket 0, Rückgrat, T3, T4, T6, ERP-Export und Beute L1 gemeinsam live – getrennt nach den Schritten des Rückgrat-Runbooks, jeder Schritt mit Freigabe des Inhabers.Umgesetzt
b48fb157grün (Lauf 2052/2053)6e3e9aee); Skript für fehlende Secrets (deploy/k8s/scripts/ensure-secrets.sh)sha-f5b1964(seit 2026-10-12), Frontend-Image vom 2026-10-12, Postgres18.6-alpine, CronJobapicore-db-backup, PVCapicore-data; im Namespace nur die drei Ingress-Policies ausrke2-clusterOffen
2026-10-13-plattform-rueckgrat.md):example.com),kubectl diffleerapicore-Kopien vonallow-from-traefikundallow-same-namespaceim rke2-cluster entfernen; Zertifikats-Erneuerung prüfen (Frontend 2026-10-25, Backend 2026-10-26)rekey), danach JWT-Secrets rotieren (siehe #30)pg_dump, PrüfabfragecolonyStrength > 40, danach Prüfabfragen aus T4-Spec 4.12; Telegram-Schritte 9.1–9.4 (Bot, Secret, Deploy, Test-Erinnerung)/api/v1/public/batches/*TASKS.mdund Status in den Detail-Issues nachziehenAbhängigkeiten / Blocker
Blockiert: jeder Schritt braucht die ausdrückliche Freigabe des Inhabers (Memory: Rollout nur mit Freigabe). Secrets legt der Inhaber an (#29).
Grundlage
docs/superpowers/plans/2026-10-13-plattform-rueckgrat.mdAbschnitt „Rollout-Runbook“, T4-Spec §15, T6-Spec §13,ARCHITECTURE.mdAbschnitt 7. Pakete: #12, #13, #14, #15, #16, #17, #18.Status
Code: ja · Geprüft: ja · Gemergt: ja · Produktiv: nein
Stand: 2026-10-16 (Quelle: git origin/main
b48fb157, Cluster-Abfrage 2026-10-16, Session-Status vs-code-ff, Memory)Neue Voraussetzung für den nächsten Backend-Rollout (T7, Commit
9795f980, noch nicht gepusht): Ein Backend-Image ab diesem Stand startet in Produktion in keiner Rolle (api inkl. initContainer, worker, CronJobs), solangeVOICE_ENCRYPTION_KEYnicht inapicore-backend-secretsteht.Reihenfolge beim Rollout:
deploy/k8s/scripts/ensure-secrets.shausführen (legt den Schlüssel zufällig im Cluster an, kein Wert in Kommandozeile oder Log).Außerdem: Seed-Fix #45 ist im selben Stand; nach dem Rollout ein mögliches zusätzliches Konto
[email protected]prüfen. Siehe ARCHITECTURE Annahme 22.Whisper-Image erstmals in CI gebaut (
c53810b8, alle Läufe grün):git.encry.de/nick.rosenloecher/apicore-whisper:sha-c53810b, Index-Digestsha256:bb0eb6cd0168d0acb79a220699d0c8e254df4616d6dae78c109501566e100cd1. Im Overlay stehen wie bei Backend und Frontend noch Platzhalter-Digests; sie werden beim Rollout eingetragen.Reihenfolge T7 im Rollout (Plan Task 25): 0.
ensure-secrets.sh(VOICE_ENCRYPTION_KEY) und sichern; 1. Backend-Image mit Migration (VOICE_RECORDING_ENABLED=false); 2. Whisper-Digest ins Overlay; 3. Komponentevoicean, erster Lauf von Hand, Logs auf Inhalte prüfen; 4. Messung (RAM gegen 1280Mi, Dauer); 5.VOICE_RECORDING_ENABLED=true. Jeder Schritt nur mit Freigabe.