Kansho/docs/architecture/technical/technische_zielarchitektur.md

262 lines
13 KiB
Markdown
Raw Normal View History

---
title: "Kanshō – Technische Zielarchitektur"
version: "0.1"
status: "Arbeitsstand"
date: "2026-08-19"
product_family: "Jinkendo"
document_role: "Technische Zielarchitektur / Master Structure"
parent_document: "../functional/fachliche_zielarchitektur.md"
---
# Kanshō – Technische Zielarchitektur
## 1. Zweck dieses Dokuments
Dieses Dokument definiert die **technische Zielarchitektur** von Kanshō: Umsetzung, Speicher, Schnittstellen und Betriebsform.
Es ist das führende Referenzdokument des Ordners `docs/architecture/technical/`. Die übrigen technischen Kapitel werden hier eingeordnet.
Die **fachliche Zielarchitektur bleibt führend**. Dialog-, Memory-, Space-, Output- und MVP-Schnitte sind **Arbeitsstand** und nicht final. **Datenschutz, Privacy Gateway und Guardrails** sind davon ausgenommen: Sie sind bereits eine verbindliche Architektur-Invariante (`../functional/guardrails.md`) und dürfen technisch nicht relativiert werden.
Technische Kapitel beschreiben, *wie* umgesetzt wird. Sie ersetzen, kürzen oder überschreiben keine Fachtexte.
Dieses Dokument ist bewusst **keine Implementierungsanleitung** und enthält keine SQL-Schemas, OpenAPI-Verträge oder Prompt-Texte.
---
## 2. Verhältnis zur fachlichen Konzeption
Herkunft: gemeinsam getroffene Entscheidung in der Fachdoku (`fachliche_zielarchitektur.md` §2.6, `dialogue_model.md` §8.5).
| Ebene | Zuständig für | Nicht zuständig für |
|---|---|---|
| Fachliche Architektur | Nutzererlebnis, Verantwortlichkeiten, fachliche Objekte, Nutzerkontrollen | Speicherform, Algorithmen, Deploy |
| Technische Architektur | Stack, Runtime, API, Persistenzgrenzen, Egress, Betrieb | Produktidentität, neue Fachobjekte |
Technische Vorentscheidungen sind nur dann zulässig, wenn sie:
- eine fachliche Produktgrenze unmittelbar beeinflussen,
- später nur mit sehr hohem Aufwand revidierbar wären,
- oder zwingende Auswirkungen auf Datenschutz, Offline-Fähigkeit, Sicherheit oder Integrationen haben.
Der Interviewplan (`interview_plan.md`) vertieft weiter Dialog, Datenverträge, Voice, Offline-Ausprägung, Encryption/Löschen (Phase H1) und MVP. Die **Guardrail-Invariante** (Identität lokal, Privacy Gateway, getrennte Egress-Policies) ist fachlich bereits entschieden und hier technisch bindend. Unfertige Fachobjekte (Threads, Spaces, Prompts) bleiben Arbeitsstand.
### 2.1 Fachstand: was Arbeitsstand ist, was bindet
**Status: entschieden** (Herkunft: Nutzeranforderung 2026-08-19 plus `guardrails.md`)
Nicht als finales Produktschema behandeln:
- Dialog-IA, Startroute, Memory-/Thread-Modelle, Reflection Outputs, MVP-Schnitt.
Verbindlich für jede technische Umsetzung, auch für den Mitai-Rahmen:
- Identität bleibt lokal.
- Persönlicher Kontext geht nie direkt an externe Modelle oder Tools.
- Lokales Privacy Gateway vor jedem persönlichen AI-Egress.
- Datenklassen A/B/C, Minimierung und Pseudonymisierung, lokales Mapping.
- Guardrails haben Vorrang vor Modellqualität, Kosten, Latenz und Komfort (`guardrails.md` §19).
- Ausprägungen wie Entity-Detection-Verfahren, Encryption at rest, DSFA bleiben offen – sie schwächen die Invariante nicht.
### 2.2 Produktrahmen versus MVP
Der aus Mitai übernommene Produktrahmen (PWA, Auth, Rollen, Layout-Shell, Deploy) ist ein **Umsetzungs-Slice „Produktrahmen“**. Er darf **weitgehend** der Mitai-Implementierung folgen.
Ein späterer MVP bleibt eine fachliche Entscheidung (Interview Phase I). Die dort genannte kleine Reflexionsschleife ist **aktueller Arbeitsstand**, kein technisch eingefrorener Lieferumfang. Die leere oder fast leere Mitai-Shell ist Infrastruktur, nicht der MVP.
2026-08-25 13:57:23 +02:00
**Additiv 2026-08-25:** Der erste vertikale Journal-Slice ist im Code vorhanden. Der fachliche Lieferumfang bleibt `../functional/mvp.md`. Die **technische Umsetzung** (Laufzeit, Module, API, Daten) steht in `mvp_implementation.md`. Der Ist-Stand gegen Spec und Gesamtziel (Fit-Gap) steht in `../functional/mvp_stand_und_abgleich.md`. Technische „Implementierungsstand“-Abschnitte in den Einzelkapiteln sind Ausschnitte; sie ersetzen diese beiden Homes nicht. Der MVP-Schnitt in der Tabelle unten bleibt als *fachliche* Freeze-Frage Arbeitsstand; er ist nicht „nicht gebaut“.
---
## 3. Dokumentationsprinzipien
Die technischen Kapitel folgen denselben Regeln wie die Fachdoku.
### 3.1 Keine stillschweigende Verdichtung
Änderungen erfolgen durch Ergänzung, explizite Ersetzung, Kennzeichnung als überholt, Decision Record oder Gitea-Versionierung.
### 3.2 Entscheidungen und Ideen trennen
Jedes Kapitel unterscheidet:
- **Entschieden**
- **Bevorzugte Richtung**
- **Hypothese**
- **Offen**
- **Verworfen**
- **Später prüfen**
### 3.3 Herkunft von Aussagen erhalten
Wo sinnvoll kenntlich machen, ob ein Punkt stammt aus:
- expliziter Nutzeranforderung,
- gemeinsam getroffener Entscheidung,
- Mitai-Referenzimplementierung,
- technischem Zwang,
- späterer Validierung.
### 3.4 Keine unnötige Duplizierung
Ein Thema hat ein kanonisches Home. Fachliches bleibt in `docs/architecture/functional/`. Technisches verlinkt dorthin.
### 3.5 Stabile Dateinamen
Dateinamen enthalten keine Versionsnummern. Frontmatter mindestens: Titel, Version, Status, Datum, `document_role`.
### 3.6 Schutz vor Übervereinfachung
Interne technische Modelle dürfen differenziert sein, wenn der **jeweils aktuelle** Fachstand es erfordert. Vereinfachung nur nach Capability-Check (`fachliche_zielarchitektur.md` §2.8).
Die folgenden Punkte sind fachliche **Querschnittsinvarianten** (`fachliche_zielarchitektur.md` §2.9). Privacy/Guardrails gelten für den Produktrahmen **sofort**. Die übrigen vier begrenzen spätere Domänen-Persistenz und KI-Nutzung; sie werden nicht als SQL-Schema vorgezogen und nicht abgeschwächt, sobald die jeweilige Fähigkeit gebaut wird.
| Invariante | Fachliches Home | Technisches Home |
|---|---|---|
| Context Fidelity / Re-Grounding | `../functional/context_fidelity_and_regrounding.md` | `memory_storage_and_offline.md`, `data_architecture.md`, `privacy_gateway.md` |
| Thread Resurfacing / Reflection Saturation | `../functional/resurfacing_and_saturation.md` | `data_architecture.md`, `ai_architecture.md` |
| Session Lifecycle ≠ Thread Lifecycle | `../functional/reflection_outputs.md` | `data_architecture.md` |
| Point-in-Time Self / Lived Experience | `../functional/self_model_and_lived_experience.md` | `data_architecture.md`, `privacy_gateway.md` |
| Privacy Gateway / External-AI-Guardrails | `../functional/guardrails.md` | `privacy_gateway.md`, `ai_architecture.md`, `voice_and_media.md` |
---
## 4. Referenz und bewusste Nicht-Übernahmen
**Referenzimplementierung:** Mitai Jinkendo (`C:\dev\mitai`, Gitea `Lars/mitai-jinkendo`).
**Foundation-Muster:** `C:\dev\mitai\.claude\docs\jinkendo-foundation/`.
**Produktrahmen: weitgehend von Mitai übernehmen** (Shell, Auth, Router, Compose, Migrationen, Admin-Realm, Nav-Mechanik, Breakpoint, **Registry-Muster, Prompt-/Workflow-Engine, Data-Layer-Trennung, Feature-Check an der API**). Abweichungen nur dort, wo sie zwingend sind.
**Nicht als Rahmen übernehmen bzw. zwingend ergänzen:**
- Shinkan-Vereins- und Mandantenmodell. Kanshō bleibt nutzerbezogen: ein Login = ein Profil.
- Kairo als UI-/Verhaltensvorlage.
- Mitai-**Domäne** (Körper-Tracking, Messwerte, CSV-Import, Membership-Tiers als Produktkern).
- Mitai-Auth-Lücke: Profilwahl über `X-Profile-Id` ohne Session-Bindung. Siehe `auth_identity_and_roles.md`.
- TypeScript als Pflicht-Stack.
- JWT/SSO als aktuelle Auth.
- **Direktaufrufe an LLM-Provider** wie in Mitai (`prompt_executor` → OpenRouter). Kanshō ergänzt zwingend das Privacy Gateway; das ist die zentrale Abweichung vom Mitai-KI-Pfad.
Mitai-Hauptnav-**Beschriftungen** (Erfassen, Ziele, …) sind Domäne. Die Nav-**Mechanik** (SSoT, Bottom-Nav, Sidebar, Shells) gehört zum Rahmen und wird übernommen. Welche Kanshō-Einträge später in dieser Mechanik stehen, folgt dem **dann aktuellen** Fachstand.
---
## 5. Technische Grundentscheidungen (Stack)
Herkunft: Nutzeranforderung (nahezu identischer Produktrahmen) plus Mitai-Referenz. Fachliche Vorbedingungen: PWA, Mobile First, responsive Desktop (`produktvision_und_produktidentitaet.md` §19).
| Thema | Entscheidung | Status |
|---|---|---|
| Lieferform | Progressive Web App (Mitai-Rahmen) | entschieden |
| Frontend | React 18, Vite, React Router 6, Lucide | entschieden |
| TypeScript | kein Pflicht-Stack | entschieden |
| Backend | FastAPI, Python 3.12 | entschieden |
| Datenbank | PostgreSQL 16 | entschieden |
| API-Stil | REST, API-First, Business-Logik nur Backend | entschieden |
| Auth | serverseitige Sessions, bcrypt, Rollen `user` \| `admin` | entschieden |
| Mandanten | keine Org-/Vereinsmandanten | entschieden |
| Container | Docker Compose, Dev- und Prod-Umgebung | entschieden |
| CI/CD | Gitea, Branch `develop` → Dev, `main` → Prod | entschieden |
| KI-Laufzeit | externe Inferenz grundsätzlich vorgesehen | entschieden (fachlich) |
| Prompt-/Workflow-Engine | ein Executor, DB-Konfiguration, Typen base/pipeline/workflow | entschieden (Mitai-Rahmen) |
| Komponenten-Registry | einheitliches ID-Kanon-Muster | entschieden (Mitai-Rahmen) |
| Privacy Gateway | zwingende lokale Schicht vor persönlichem AI-Egress | entschieden (fachliche Invariante) |
| OpenRouter | Kandidat, kein Architekturzwang, kein Gateway-Ersatz | entschieden (fachlich) |
| Ports / Domains | Muster wie Mitai, konkrete Werte nicht 1:1 kopieren | offen |
| Offline-Ausprägung | Anforderung entschieden, Mechanismus offen | offen |
| Transkription | Anforderung entschieden, Mechanismus offen | offen |
Details: `product_frame_and_stack.md`, `platform_extensibility.md`.
---
## 6. Kanonische Kapitelstruktur
```text
technische_zielarchitektur.md
documentation_index.md
product_frame_and_stack.md
auth_identity_and_roles.md
frontend_pwa_shell.md
backend_and_api.md
runtime_and_deploy.md
platform_extensibility.md
data_architecture.md
memory_storage_and_offline.md
privacy_gateway.md
ai_architecture.md
integrations_technical.md
admin_diagnostics.md
voice_and_media.md
security.md
2026-08-25 13:57:23 +02:00
mvp_implementation.md
```
| Datei | Kanonisches Thema | Reife v0.1 |
|---|---|---|
| `product_frame_and_stack.md` | 3-Tier, Stack, Nicht-Übernahmen | Rahmen entschieden |
| `auth_identity_and_roles.md` | Session, Rollen, Admin-Gate | Rahmen entschieden |
| `frontend_pwa_shell.md` | PWA-Shell, Breakpoint, Nav-SSoT | Mitai-Rahmen; Kanshō-IA folgt späterem Fachstand |
| `backend_and_api.md` | Router, API-First, Fehlerformat | Rahmen entschieden |
| `runtime_and_deploy.md` | Migrationen, Compose, Gitea | Muster entschieden, Ports offen |
| `platform_extensibility.md` | Registry, Prompt-/Workflow-Engine, Konfiguration, Data Layer | Mitai-Prinzipien entschieden; Fachinhalte offen |
| `data_architecture.md` | Persistenzgrenzen, Entitäten ohne Schema | Arbeitsstand, nicht final |
| `memory_storage_and_offline.md` | Dialogspeicher, Sync, Offline | Arbeitsstand, Sync offen |
| `privacy_gateway.md` | Trust Zones, Egress, Demasking | Invariante entschieden; Verfahren offen |
2026-08-26 10:42:20 +02:00
| `provenance_verification.md` | Untrusted Modellausgabe, lokale Registry, `VerifiedArtifact` | Technisch entschieden 2026-08-25; zukünftige Intent-Policies offen |
| `ai_architecture.md` | Inferenzpfad, Agenten (später) | Gateway bindend; Agenten offen |
| `integrations_technical.md` | Handoffs zur Produktfamilie | Arbeitsstand, Verträge offen |
| `admin_diagnostics.md` | Diagnoseansicht | Mitai-Admin-Realm; Kanshō-Inhalte später |
| `voice_and_media.md` | Sprache / Transkription | Bedarf im Fachstand, Ausprägung offen |
| `security.md` | Rate Limit, Secrets, Encryption | Teil entschieden, Rest offen |
2026-08-25 13:57:23 +02:00
| `mvp_implementation.md` | Technische Umsetzung des Journal-Slices (Ist-Code) | Code 2026-08-25 |
---
## 7. Capability-Check vor Vereinfachung
Vor einer technischen Modellvereinfachung ist zu prüfen:
1. Welche Fachanforderungen brauchen die Struktur – Invariante (Privacy) vs. Arbeitsstand (Dialog/MVP)?
2. Welche späteren Fähigkeiten (Memory, Self Model, Threading, Provenance, Re-Grounding) wären betroffen?
3. Welche Integrationen hängen davon ab?
4. Ist die Vereinfachung reversibel?
5. Kann wahrgenommene Komplexität stattdessen in der UX abstrahiert werden?
---
## 8. Aktueller Entscheidungsstand (übergreifend)
| Thema | Stand | Status |
|---|---|---|
| Fachlich vs. technisch getrennt | getrennte Ordner; Fachdoku führend; Guardrails bindend, Dialog/MVP nicht final | entschieden |
| Produktrahmen | Mitai weitgehend (PWA, Auth, Shell, Deploy, Registry, Prompt-Engine) | entschieden |
| Fachstand Dialog/MVP | Arbeitsstand, nicht final | entschieden |
| Datenschutz / Guardrails | Invariante, bindend | entschieden |
| Kanshō-Start-IA / Dialogmodell | folgt späterem Fachstand, nicht jetzt technisch einfrieren | offen |
| Dialogspeicher vs. mindnet | aktueller Fach-Arbeitsstand | bevorzugte Richtung |
| Originaldialog / Session ≠ Thread / Action Candidates | aktueller Fach-Arbeitsstand | nicht als Schema einfrieren |
| AI-Agentenrollen | Reflection/Memory/Journal-Agenten | offen |
| Thread-State-Machine | fachliche Zustände keine technische Vollständigkeit | offen |
| MVP-Schnitt | nach fachlicher Konzeption, nicht dieser Rahmen | offen |
---
## 9. Noch nicht in v0.1
- SQL-Schemas und Migrationsdateien
- OpenAPI
- Prompt-Texte und Modellwahl
- konkrete Ports, Domains, Serverpfade
- MVP-Feature-Schnitt
- Anwendungscode unter `frontend/` oder `backend/`
---
## 10. Querverweise
- Fachliche Governance: `../functional/fachliche_zielarchitektur.md`
- Context Bundles: `documentation_index.md`
- Interviewfortschritt: `../functional/interview_plan.md`