Zum Inhalt

Routing & Endpunkte

Stand: Phase B, Block 7 in Arbeit (Block 7.3 abgeschlossen, 2026-04-25). Geltungsbereich: Heute erreichbare Endpunkte sind als 🟢 live markiert, das Block-7-Vollstand-Ziel als 🟡 geplant, rein interne Container-Endpunkte als 🔵 intern. Phase 8+ (Tenant-User- Provisioning, Connector-Subsystem, Knowledge-Hub, …) ist nicht enthalten.

Diese Seite ist ein Inventar, kein Runbook. Sie sagt was wo läuft, nicht warum (→ Konzepte) und nicht wie aufsetzen (→ Deployment- Runbooks).


TLDR — Quick-Reference

Was du tun willst Wo du hingehst Auth Status
Operator-Tenants verwalten (CRUD) https://platform.kora.luki-net.org/admin/operator/tenants Keycloak kora-platform / operator-ui 🟢
Modules-Registry (Read-Only) + Per-Tenant-Toggle https://platform.kora.luki-net.org/admin/operator/modules Keycloak kora-platform / operator-ui 🟢
Operator-Templates verwalten (CRUD) https://platform.kora.luki-net.org/admin/operator/templates Keycloak kora-platform / operator-ui 🟢
Tenant-eigene Chatbots ansehen (Tenant-UI) https://platform.kora.luki-net.org/tenant/dashboard Keycloak kora-tenants / tenant-ui 🟢
Platform-API direkt ansprechen https://platform.kora.luki-net.org/api/v1/... Bearer-Token (jeder Realm) 🟢
Keycloak-Admin-Console https://auth.kora.luki-net.org/admin/master/console/ Master-Realm-Admin-User 🟢
Live-Health-Probe (Platform-API) https://platform.kora.luki-net.org/health/live unauth 🟢
Platform-Doku (diese Seite + alle anderen) https://docs.kora.luki-net.org/ unauth 🟢
Demo-Widget testen (AVS-Demo) https://demo.avs.luki-net.org/demo unauth 🟢
Demo-Doku https://docs.avs.luki-net.org/ unauth 🟢
Operator-Audit-Log einsehen + CSV-Export …/admin/operator/audit Keycloak operator-ui 🟢
Connectors-Stub (Block-13-Hinweis) …/admin/operator/connectors Keycloak operator-ui 🟢 (Stub)

1. Externe Einstiegspunkte

User-facing Domains, die per öffentlichem DNS auflösbar und per NPMplus mit TLS-Termination versorgt sind. TLS-Zertifikate stammen aus Let's-Encrypt (NPMplus-eigene ACME-Integration).

Domain Zweck Auth-Modus Status
platform.kora.luki-net.org Platform-API + Operator-UI + Tenant-UI (Path-Routing) OIDC (Keycloak) 🟢
auth.kora.luki-net.org Keycloak (beide Realms + Admin-Console) Master-Realm + Realm-Logins 🟢
docs.kora.luki-net.org MkDocs-Material Platform-Doku unauth 🟢
demo.avs.luki-net.org AVS-Demo-Surface (Widget-Playground, Demo-Chatbot) unauth (Widget public, Demo-Admin SSO) 🟢
docs.avs.luki-net.org AVS-Demo-Doku (separates MkDocs) unauth 🟢

1a. Pfade auf platform.kora.luki-net.org

Pfad Bedient Auth Status
/ (TBD — Block 14 entscheidet Default-Redirect) 🟡
/admin/operator/ Operator-UI SPA (Vue 3, Tenants + Templates aktiv) Realm kora-platform, Client operator-ui, Operator-Rolle 🟢
/admin/operator/tenants Tenants-CRUD (Liste/Create/Detail/Edit/Soft-Delete) dito 🟢
/admin/operator/templates Templates-CRUD inkl. Reaktivieren dito 🟢
/admin/operator/modules Modules-Registry (Read-Only) + Per-Tenant-Toggle in Tenants-Detail-Tab Realm kora-platform, Client operator-ui, Operator-Rolle 🟢
/admin/operator/audit Audit-Log-Viewer (List/Filter/Detail-Expand/CSV-Export) dito 🟢
/admin/operator/connectors Connectors-Stub mit Block-13-Hinweis (kein Backend-Read) dito 🟢 (Stub)
/tenant/ Tenant-UI SPA (Block-5-Scaffolding + Template-Update-Banner) Realm kora-tenants, Client tenant-ui 🟢
/api/v1/... Platform-REST-API (siehe §5) Bearer-Token (jeder Realm) 🟢
/auth/* Nicht bedient — Auth-Endpoints liegen ausschließlich auf auth.kora.luki-net.org (siehe §6). Trifft FastAPI und gibt {"detail":"Not Found"} zurück.
/health/live, /health/ready Liveness + Readiness unauth 🟢
/metrics Prometheus-Scrape (IP-Allowlist) IP-Gating + interner Scrape 🔵

Tenant-Subdomain (z. B. <slug>.kora.luki-net.org): im Konzept §17 für Phase D angedacht, nicht Teil von Phase B. Kein DNS-Eintrag heute. Tenants laufen aktuell unter dem Path-Prefix /tenant/ auf der Platform-Domain.

1b. Localhost-Dev-Endpunkte

Für lokale Entwicklung (make dev-platform, make operator-ui-dev, make tenant-ui-dev):

URL Service Status
http://localhost:8280/ Platform-API (StaticFiles + REST) 🟢
http://localhost:8236/ Keycloak (beide Realms) 🟢
http://localhost:5173/tenant/ Vite-Dev tenant-ui (proxyt /api/* → 8280) 🟢
http://localhost:5174/admin/operator/ Vite-Dev operator-ui (proxyt /api/* → 8280) 🟢
http://localhost:8237/ mkdocs-Container (Platform-Doku live) 🟢
http://localhost:8233/dashboard Qdrant-Dashboard 🔵
http://localhost:8239/ MailHog-UI (Test-Mail-Sink) 🔵

2. Reverse-Proxy-Layer (NPMplus)

NPMplus terminiert TLS für alle externen Subdomains und proxyt im HTTP-Klartext zu den Containern. Cert-Quelle: Let's-Encrypt via NPMplus-eigener ACME-Integration. Keine produktive NPMplus-Regel für /admin/operator/* separat nötig — der FastAPI-Mount in der Platform- API liefert das Operator-UI-Bundle direkt aus (siehe §5).

graph LR
    Browser[Browser]

    subgraph npm[NPMplus Reverse-Proxy]
        npm_demo[demo.avs.luki-net.org]
        npm_docs_avs[docs.avs.luki-net.org]
        npm_platform[platform.kora.luki-net.org]
        npm_auth[auth.kora.luki-net.org]
        npm_docs_kora[docs.kora.luki-net.org]
    end

    subgraph stack[Container-Network]
        c_avs_api[avs-api:8080]
        c_avs_docs[avs-mkdocs:8000]
        c_kora_api[kora-platform-api:8080]
        c_kora_kc[kora-platform-keycloak:8080]
        c_kora_docs[kora-platform-mkdocs:8000]
    end

    Browser --> npm_demo
    Browser --> npm_docs_avs
    Browser --> npm_platform
    Browser --> npm_auth
    Browser --> npm_docs_kora

    npm_demo --> c_avs_api
    npm_docs_avs --> c_avs_docs
    npm_platform --> c_kora_api
    npm_auth --> c_kora_kc
    npm_docs_kora --> c_kora_docs

Mapping:

Subdomain NPMplus-Stream-Target Host-Port
platform.kora.luki-net.org kora-platform-api:8080 8280
auth.kora.luki-net.org kora-platform-keycloak:8080 8236
docs.kora.luki-net.org kora-platform-mkdocs:8000 8237
demo.avs.luki-net.org avs-api:8080 (Demo-Stack) 8080
docs.avs.luki-net.org avs-mkdocs:8000 (Demo-Stack) 8001

NPMplus-Setup-Details für auth.kora.luki-net.org siehe Runbook NPMplus auth.kora.luki-net.org; für /admin/operator/* siehe Operator-UI Keycloak-Client.


3. Interne Service-Topologie

Alle Platform-Services laufen im Docker-Network kora-platform-net, DNS-Auflösung erfolgt über Container-Name (kora-platform-api, kora-platform-postgres, …). Demo-Stack-Services laufen analog im avs-net. Beide Networks sind heute getrennt; eine geplante Cross-Network-Verbindung (Konzept §15a) lässt die Platform-API später den Demo-vLLM-LB mitnutzen.

Service Container-Name Image Intern Host-Port Auth Beschreibung
Platform-API kora-platform-api local build (Dockerfile.platform) 8080 8280 OIDC + RLS FastAPI; serviert auch tenant-ui + operator-ui Bundles
Postgres kora-platform-postgres postgres:16-alpine 5432 8232 Role-basiert (kora_platform_app, _vendor, …) RLS-enforced Tenant-Daten
Qdrant kora-platform-qdrant qdrant/qdrant:latest 6333/6334 8233/8234 API-Key (intern) Vektordaten, Collection-per-Chatbot
Redis kora-platform-redis redis:7-alpine 6379 8235 unauth (intern only) Cache + Tenant-Slug-Lookup
Keycloak kora-platform-keycloak quay.io/keycloak/keycloak:26.0 8080 8236 OIDC Beide Realms
Keycloak-DB kora-platform-keycloak-db postgres:16-alpine 5432 Role-basiert Keycloak-State
MailHog kora-platform-mailhog mailhog/mailhog:latest 8025/1025 8239/8226 unauth Dev-Mail-Sink für Keycloak
Embedder kora-platform-embedder local build 5000 unauth (intern) multilingual-e5-large
Scheduler kora-platform-scheduler mcuadros/ofelia:latest Docker-Socket Cron-Jobs (Chatbot-Cleanup …)
MkDocs kora-platform-mkdocs squidfunk/mkdocs-material:latest 8000 8237 unauth Live-Reload Platform-Doku

Persistente Volumes: kora_platform_postgres_data, kora_platform_qdrant_data, kora_platform_redis_data, kora_platform_keycloak_db_data. Bind-Mount-Disziplin siehe Runbook.

Demo-Stack-Container (avs-api, avs-vllm, avs-vllm-lb, avs-keycloak, avs-redis, avs-qdrant, avs-minio, avs-postgres, avs-grafana, avs-prometheus, avs-gpu-exporter, avs-mkdocs) laufen im avs-net. Der Platform-Stack greift heute nicht auf sie zu — Cross-Network-Brücke kommt mit Block 14.


4. GPU-Inferenz-Topologie

Heute ausschließlich im Demo-Stack. Der Platform-Stack hat keinen eigenen vLLM-Service; Block 14 verbindet Platform-API mit avs-vllm-lb via Cross-Network-Bridge.

graph LR
    api[avs-api]
    lb[avs-vllm-lb<br/>nginx least_conn]
    local[vllm<br/>luki-ai GPU 0<br/>RTX 4090]
    remote[VLLM_5090_HOST<br/>192.168.0.223:8000<br/>RTX 5090]

    api --> lb
    lb -- vllm:8000 --> local
    lb -- 192.168.0.223:8000 --> remote
    local -. healthcheck /v1/models .-> lb
    remote -. healthcheck via max_fails=3, fail_timeout=30s .-> lb
    lb -. /lb-health .- api
Node Hardware vLLM-Port Health-Pfad Erreichbar von Status
vllm (luki-ai, GPU 0) RTX 4090 8000 (intern) GET /v1/models (compose-Healthcheck) avs-vllm-lb (gleiches Network) 🟢
192.168.0.223 (Remote-Node) RTX 5090 8000 (LAN) max_fails=3 / fail_timeout=30s aus Nginx avs-vllm-lb (LAN-Routing + iptables) 🟢
avs-vllm-lb nginx:alpine 8000 GET /lb-health → 200 OK avs-api (Demo-Net) 🟢
GPU-Exporter (luki-ai) n/a 9835 (intern) Prometheus-Scrape avs-prometheus (Demo-Net) 🟢
GPU-Exporter (Remote) n/a 9835 (LAN) Prometheus-Scrape avs-prometheus direkt 🟢

Failover: nginx least_conn mit max_fails=3 / fail_timeout=30s markiert einen Upstream nach drei Fehlversuchen für 30 s als down. Der verbleibende Node nimmt allen Traffic. keepalive 32 hält Connections warm.

iptables-Restriktion auf Remote-Node (DOCKER-USER-Chain): beschränkt Zugriff auf 192.168.0.223:8000 und :9835 auf luki-ai-IP. Codifiziert seit TODO-Platform-04 als idempotentes Skript infra/remote-node/docker-firewall.sh + systemd-Service-Template infra/remote-node/docker-firewall.service. Aufruf-Reihenfolge + Verifikation + Rollback im Runbook Remote-vLLM-Node-Setup. Pattern: Delete-then-Insert-Position-1 mit IPv4-RETURN-Whitelist + IPv4/IPv6-DROP-Catchall.


5. API-Endpunkt-Familien

Alle Pfade unter https://platform.kora.luki-net.org. Auth via Authorization: Bearer <jwt>-Header; Realm-Auswahl je Familie.

Präfix Zweck Realm/Scope Status
/api/v1/me, /api/v1/whoami Identity-Echo jeder authentifizierte Scope 🟢
/api/v1/tenants/me, /api/v1/tenants/{id}/chatbots Tenant-Self-View, Chatbot-Liste tenant + operator + vendor 🟢
/api/v1/platform/tenants/* Operator-Tenants-CRUD operator (write), operator/vendor (read) 🟢
/api/v1/platform/modules Modul-Katalog operator/vendor 🟢
/api/v1/tenants/{id}/modules Pro-Tenant-Modul-Toggle + Audit tenant (read), operator/vendor (write) 🟢
/api/v1/operator/templates/* Templates-CRUD operator/vendor 🟢
/api/v1/tenant/templates, /api/v1/tenant/chatbots/{id}/template-update Tenant-Template-Read + Diff/Apply jeder Scope (RLS-gegated) 🟢
/api/v1/platform/audit, /api/v1/platform/audit/{id}, /api/v1/platform/audit/export.csv Audit-Reader (List/Filter/Detail/CSV-Export) operator/vendor 🟢
/api/v1/platform/tenants/bulk-soft-delete Bulk-Soft-Delete für Tenants (atomar, single Audit-Entry) operator 🟢
/api/v1/platform/tenants/{id}/modules/bulk Bulk-Module-Toggle pro Tenant (atomar, single Audit-Entry) operator/vendor 🟢
/api/v1/users/me/preferences (GET, PATCH) User-UI-Preferences (Theme), beide Realms, Lazy-Create, kein Audit jeder authentifizierte User 🟢
/health/live, /health/ready Liveness, Readiness (DB+Redis+KC) unauth 🟢
/metrics Prometheus-Scrape IP-Allowlist (CIDR) 🔵
/admin/operator/*, /tenant/* SPA-Bundle + Vue-Router-Fallback unauth (Auth läuft im SPA) 🟢

Vollständige OpenAPI-Definition (Pfad + Schema) liefert FastAPI unter https://platform.kora.luki-net.org/docs (Swagger UI) bzw. /redoc — beide nur intern erreichbar, weil sie unauth sind und die NPMplus-Regel sie ausspart. Lokal: http://localhost:8280/docs.

Pfad-Präfix-Inkonsistenz (TODO-Block-7-01)

Operator-Resources sind über zwei Präfixe verteilt:

  • /api/v1/platform/tenants (Block 7.1a)
  • /api/v1/platform/modules (Block 6)
  • /api/v1/platform/audit (Block 7.4)
  • /api/v1/operator/templates (Block 5)

Die Vereinheitlichung auf einen Präfix ist als TODO-Block-7-01 in offene-todos.md deferred (Score 45, Trigger nach 7.4). Block 7.4 hat den Präfix-Drift nicht aufgelöst — neue Routen liegen unter /api/v1/platform/audit*, der Templates- Präfix /api/v1/operator/* bleibt unverändert. Bestehende Clients (operator-ui-Frontend, smoke-Tests) nutzen die jeweils realen Präfixe — die Doku spiegelt den Bestand, nicht das Ziel.


6. Auth-Endpunkte (Keycloak)

Beide Realms laufen auf derselben Keycloak-Instanz unter https://auth.kora.luki-net.orgnicht unter https://platform.kora.luki-net.org/auth/... (dort gibt es kein NPMplus-Routing zur Keycloak-Instanz, FastAPI antwortet mit 404). Operator-UI nutzt https://auth.kora.luki-net.org/realms/kora-platform/..., Tenant-UI nutzt https://auth.kora.luki-net.org/realms/kora-tenants/.... Keycloak läuft mit der modernen Pfad-Konvention ohne /auth/-Präfix (siehe quay.io/keycloak/keycloak:24+).

Realm Client Typ Zweck Status
kora-platform kora-api confidential Operator + Vendor-Support Backend-Token 🟢
kora-platform kora-api-vendor-breakglass confidential, 2 h Session-Cap Notfall-Vendor-Zugriff 🟢
kora-platform kora-api-vendor-tunnel confidential, 2 h Session-Cap Vendor-Audit-Tunnel 🟢
kora-platform operator-ui public, PKCE S256 Operator-UI SPA 🟢
kora-platform kora-platform-audit confidential, Client-Credentials-Flow, view-events-Rolle Service-Account für den Audit-Poller 🟢
kora-tenants kora-api confidential Tenant-API-Backend 🟢
kora-tenants tenant-ui public, PKCE S256 Tenant-UI SPA 🟢

Token-Endpunkt-Pattern: https://auth.kora.luki-net.org/realms/<realm>/protocol/openid-connect/token

Authorization-Endpunkt-Pattern: https://auth.kora.luki-net.org/realms/<realm>/protocol/openid-connect/auth

Admin-Console: https://auth.kora.luki-net.org/admin/master/console/ — nur für Master-Realm-Admins (KC_BOOTSTRAP_ADMIN_USERNAME aus .env.platform). Tagesgeschäft (Tenant-User-Provisioning, Rolle-Zuweisung) läuft NICHT über die Admin-Console, sondern über kcadm.sh oder ab Block 12 über das Platform-Backend.

Service-Accounts: kora-platform-audit ist live im kora-platform-Realm, angelegt durch das Init-Script infra/keycloak/init-scripts/create-audit-service-account.sh (idempotent, regeneriert das Secret beim Re-Run nicht). Der archivierte TODO-B2-03 markiert diese Arbeit als abgeschlossen — der TODO-B2-03-Kommentar in docker-compose.platform.yml:188 ist nur eine Code-Annotation auf bereits erledigte Arbeit, kein offener Task.

Source-of-Truth-Modell: Das Realm-JSON deklariert den Soll- Zustand, Init-Scripts in infra/keycloak/init-scripts/ garantieren den Ist-Zustand idempotent. Hintergrund: ein Realm-JSON-Re-Import würde Confidential-Client-Secrets regenerieren und damit den Stack zerlegen — deshalb ist der Re-Import nach dem Erstanlegen tabu, und neue/nachträgliche Clients werden über kcadm.sh create clients -f <client.json> nachgezogen. Der 2026-04-25-Drift (operator-ui im JSON, nicht im laufenden Realm) ist mit create-operator-ui-client.sh geschlossen (TODO-Platform-05 archiviert). Verifikations-Befehl als verbindliche Quelle: docker exec kora-platform-keycloak /opt/keycloak/bin/kcadm.sh get clients -r <realm> --fields clientId | sort.

Drift-Pattern (2026-04-26 / 2026-04-27, alle archiviert nach TODO-Platform-09): Sieben Datenpunkte in drei Tagen — alle gefixt, Anti-Drift-Disziplin etabliert.

  1. Realm-JSON ↔ Live-Keycloak — operator-ui-Client (TODO-Platform-05): operator-ui- Client war im Soll-JSON, fehlte im Ist-Realm. Init-Skript create-operator-ui-client.sh schließt die Lücke.
  2. Frontend-Konfig ↔ NPMplus-Routing — operator-ui Auth-URL (TODO-Platform-06): useAuth.ts defaultete auf /auth (relativ → resolved auf platform.kora.luki-net.org/auth), wo NPMplus aber keine Keycloak-Route hat. Default jetzt absolut auf https://auth.kora.luki-net.org.
  3. E2E-Tests ↔ Prod-Login-Pfad (TODO-Platform-06): Bestehende Playwright-Specs seedeten den Token via window.__KORA_E2E_SEED__ und übersprangen den useAuth.login()-Authorize-Redirect. Anti-Regression-Spec auth-redirect.spec.ts testet ohne Seed-Hook.
  4. Frontend-OIDC-Scope ↔ Realm-Architektur — operator-ui (TODO-Platform-08): Frontend fragte OIDC-Standard-Scopes (openid profile email) an, die im Custom-Scope-Realm nicht existieren. Frontend- Scope-Request reduziert auf openid kora-scope — Realm- Architektur (Custom-Scope-only) bleibt unangetastet.
  5. Frontend-Pfad-Doppelung — operator-ui post-login redirect (TODO-Platform-09 Drift #5): useAuth.login() speicherte window.location.pathname (volle Pfadkomponente inkl. Router-Base) als post_login_redirect; router.replace(target) mit createWebHistory("/admin/operator/") verdoppelte den Pfad zu /admin/operator/admin/operator/.... Fix: pathRelativeToBase()-Helper schneidet die Router-Base ab.
  6. OAuth state mismatch bei Re-Login (TODO-Platform-09 Drift #6): Folge von Drift #5 — verifiziert nach #5-Fix.
  7. Realm-JSON ↔ Live — defaultClientScopes aller Clients (TODO-Platform-09 Drift #7): Realm-JSONs deklarierten in beiden Realms für alle Clients defaultClientScopes: ["openid","profile","email","roles","kora-scope"], die OIDC-Standard-Scopes existieren aber als Client-Scope- Objekte gar nicht. Live-Zustand war seit Anfang sauber ["kora-scope"]. Re-Import wäre an dem aspirativen JSON gescheitert. JSON in beiden Realms auf den Live-Soll konsolidiert. Plus: TODO-Platform-07 (tenant-ui Auth-URL, analog #2) und tenant-ui Scope-Patch (analog #4) im selben Lauf gefixt.

Lessons-Learned:

  • Source-of-Truth-Disziplin gilt für jede Schicht einzeln — Realm-JSON, Live-Keycloak, Frontend-Konfig, NPMplus-Routing und Test-Suite-Realismus.
  • „Tests grün" reicht nicht, wenn die Tests den fehleranfälligen Pfad bypassen.
  • Realm-Architektur prüfen, bevor Standard-OIDC-Konventionen angenommen werden. Custom-Scope-Patterns sind valide Architektur-Entscheidungen — Frontend muss sich an die Realm-Konvention anpassen, nicht umgekehrt.
  • Der Frontend-Router-Base ist eine versteckte Schicht: createWebHistory(base) interagiert mit window.location.pathname- Speicherung im Auth-Flow. Wenn der Auth-Composable nicht weiß, was die Router-Base ist, produziert er Pfad-Doppelungen beim Post-Login-Redirect.

Konsequenz / Anti-Drift-Disziplin: Source-of-Truth pro Schicht ist deklarativ benannt und verlinkt in auth-stack-soll-zustand.md. Drifts werden via scripts/verify-auth-stack.sh regelmäßig geprüft (read-only, idempotent, exit != 0 bei Drift, CI-tauglich für Block 14). Künftige Auth-Änderungen müssen zuerst die Soll-Zustand-Doku aktualisieren und das Skript grün halten.


7. Observability

Service URL Auth Was siehst du dort Status
Prometheus (avs-prometheus, Demo-Stack) http://luki-ai:9090 unauth (LAN) Scrape-Targets + PromQL-Eingabe 🟢
Grafana (avs-grafana, Demo-Stack) http://luki-ai:3000 Login (Demo-Admin-Passwort) Dashboards (vLLM, GPU, API-Latency) 🟢
Platform-API /metrics https://platform.kora.luki-net.org/metrics IP-Allowlist FastAPI-Prometheus-Counter (Requests, RLS-Hits, …) 🟢
GPU-Exporter local http://luki-ai:9835/metrics unauth (LAN) NVIDIA SMI-Werte luki-ai 🟢
GPU-Exporter remote http://192.168.0.223:9835/metrics unauth + iptables-Gate NVIDIA SMI-Werte 5090 🟢
Keycloak Admin-Events siehe Admin-Console (Events-Tab) Master-Realm User-Provisioning + Login-Audit 🟢
platform_audit_log (DB-Tabelle) direkter SQL-Zugriff DB-Admin Operator-Mutationen (tenant.created, …) 🟢 (UI 🟢 unter /admin/operator/audit)

Prometheus-Konfig liegt in monitoring/prometheus/prometheus.yml. Die Demo-Prometheus-Instanz scrapet sowohl Demo- als auch Platform-Targets über die Cross-Network-Bridge — Platform-Stack braucht keinen eigenen Prometheus.


8. Status-Legende

Marker Bedeutung
🟢 live Heute erreichbar, in Production-Nutzung oder lokal-dev getestet
🟡 geplant NPMplus-Roll-Out aus Block 14 (Phase-B-tail) — alle Operator-UI-Routen sind seit Block-7.4-Merge live unter dem FastAPI-StaticFiles-Mount auf platform.kora.luki-net.org
🔵 intern Nur im Docker-Network sichtbar, nicht extern routebar; Operator-Tools, Health-Check-Subsysteme, Container-zu-Container-Kommunikation

Phase-D-Endpunkte (Tenant-User-Provisioning, Connector-Subsystem, Knowledge-Hub) sind in dieser Tabelle bewusst nicht enthalten — sie kommen erst nach Block 7-Abschluss in Reichweite.


Letzte Aktualisierung

2026-04-25 · initialer Merge 9c0c51d, §6-Audit-SA-Korrektur + operator-ui-Status-Caveat in Branch docs/todos-from-routing-discovery (Merge b3c6ebd), operator-ui-Live-Import + Status-Reset auf 🟢 in Branch platform/fix-operator-ui-client-live-import (Merge 3e2398b), /admin/operator/modules 🟡 → 🟢 nach Block-7.3-Merge, /admin/operator/audit + /admin/operator/connectors + Bulk-Routen 🟡 → 🟢 nach Block-7.4-Merge 0b93d60.

2026-04-26 · §1a /auth/* als „nicht bedient" explizit dokumentiert, §6 Auth-Subdomain-Klarstellung (operator-ui & tenant-ui nutzen auth.kora.luki-net.org, nicht platform.kora.luki-net.org/auth), Drift-Pattern um den dritten Datenpunkt erweitert (Frontend-Konfig + Test-Suite-Realismus, TODO-Platform-06 Merge 283ca47).

2026-04-26 · §6 Drift-Pattern um Datenpunkt #4 erweitert (Frontend-OIDC-Scope ↔ Realm-Architektur, TODO-Platform-08 Merge e287c3b37355b673b377fc1ddc761f1e6e0adc81). Lessons-Learned-Block formalisiert; TODO-Platform-09 (systematische Auth-Stack-Verifikation, Trigger vor Block 8) als Konsequenz hinzugefügt. Status /admin/operator/* bleibt 🟡 bis -09.

2026-04-27 · TODO-Platform-09 abgeschlossen (Merge 7909ce852590aed5e65684a8dbe9ed160bf7d227). §6 Drift-Pattern auf 7 Datenpunkte finalisiert (Drifts #5/#6/#7 hinzu); Anti-Drift-Disziplin etabliert via scripts/verify-auth-stack.sh (57 Checks über 6 Schichten + 2 Realms, exit 0 = sauber) und neuer Soll-Zustand-Doku auth-stack-soll-zustand.md. TODO-Platform-07 + Tenant-UI Scope-Patch (analog -06/-08) im selben Lauf gefixt; tenant-ui erhielt erstmalig E2E-Anti-Regression-Specs. Status /admin/operator/* und /tenant/* jetzt vollständig 🟢.

Stand reflektiert Block 7.4 (Audit-Log-Viewer + Bulk-Ops + Connectors- Stub, Merge 0b93d60) als jüngsten relevanten Code-Stand. Block 7 ist mit diesem Merge vollständig abgeschlossen — alle Operator-UI- Routen sind 🟢. Phase-B-Tail-Tasks: NPMplus-Path-Routing-Konsolidierung (Block 14), Tier/Limits-UI (TODO-Block-7-3-01 → Block 12).