Kansho/docs/architecture/functional/mvp_freeze_candidate.md
Lars 29e3d0ff74 Document the laptop-to-home transfer without moving personal data into git.
SQLite restore stays wave 1; Docker and Postgres stay wave 2. Session bootstrap for the switch is environment_handover.md plus the laptop and home work orders.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-07 08:25:20 +02:00

72 lines
4.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "Kanshō MVP Freeze Candidate (lokale Urlaubs-Testphase)"
status: "Abnahme / Freeze Candidate"
date: "2026-08-25"
product_family: "Jinkendo"
document_role: "Kurze Abnahme-Checkliste für den lokalen Journal-MVP Freeze Candidate"
parent_document: "mvp_stand_und_abgleich.md"
---
# Kanshō MVP Freeze Candidate
Dieses Blatt ersetzt weder `mvp.md` noch `mvp_stand_und_abgleich.md`. Es sagt, was für die **lokale Urlaubs-Testphase** automatisch, manuell und später in Produktion zu prüfen ist, und was bewusst nicht zu diesem Slice gehört.
**Stand:** 2026-08-25. Kein Docker, kein PostgreSQL, keine echten Provider-Aufrufe in der automatischen Suite.
## 1. Automatisierte lokale Prüfungen
Einstieg: `.\scripts\test-mvp.ps1`
Die Suite setzt UTF-8, leere Provider-Keys und isolierte Temp-Daten. Suites, die einen Fake-Provider brauchen, setzen ihn selbst; Fail-closed bleibt prüfbar. Sie darf `backend/data/kansho.sqlite` und echte Medien nicht verändern.
- alle `backend/tests/test_*.py` (Abbruch beim ersten Fehler)
- `frontend/src/journal/document.test.js`
- Frontend-Produktions-Build
- `git diff --check` (separat, vor einem späteren Commit)
Neu in diesem Freeze: Backup/Restore, Papierkorb/Purge, Entry-Liste, Opening-Invarianten, `include_existing` beider Varianten.
## 2. Spätere manuelle Modell-/Browserprüfungen
Nicht durch Fake-Provider bewiesen:
- Erster Impuls mit einem echten Modell: belegter Plan, offener Tagesfaden, neutraler Fallback
- Dialogqualität der sechs Operationen (Cases C/D/E bleiben modellabhängig)
- Journalentwurf Stufe 1 lokal / Stufe 2 mit einem echten Modell: Quelltreue, keine Assistentenfakten, höchstens ein Narrations-Call im Normalfall
- `include_existing` in der Oberfläche: Checkbox aus, Checkbox an, Nutzerfassung unangetastet
- Papierkorb: Soft Delete, Wiederherstellen, endgültiges Löschen inkl. Medien
- Startseite: Fortsetzen wenn ein Day existiert, sonst Space-Einstieg
- Backup erzeugen und an einem zweiten Temp-Pfad wiederherstellen, inkl. Bestätigung
- Browser: ungespeicherte Editoränderungen, `beforeunload`; Zurück bleibt bewusst ohne Router-Migration
## 3. Spätere Produktions-Gates
Kein Codefehler des Freeze Candidate, sondern Betriebsreife:
- PostgreSQL, Docker/Compose, TLS, Reverse Proxy — **nach** SQLite-Restore der Urlaubsdaten (`../technical/environment_handover.md`, `../technical/runtime_and_deploy.md` §7.2)
- Gitea-Pipelines / CI
- Ollama bzw. lokales Detect-Modell
- Verschlüsselung at rest, DSFA, persistentes Audit ohne Prompts
- Quasi-Identifikatoren, vollständige Platzhalterprüfung, inhaltliche Minimierung
- Vollständiger Datenexport für ein öffentliches Produkt
## 4. Bewusst ausgeschlossene Funktionen des nächsten Slices
- Neue Reflection-Intents, universelle Continuation-Engine
- Self Model, semantisches Retrieval, Space Content Memory
- Chunk-and-Merge
- Voice und visuelle LLM-Verarbeitung
- Dialogmedien als direkte Dialogquelle (Bilder/Videos gehören im MVP in den Journal Editor)
- Frühere Space-Entries als Faktenquelle der Journalgenerierung
## 5. Bewusste MVP-Grenzen dieses Freeze
- Browser-Zurück: vorhandene Unsaved-Warnung und `beforeunload` reichen; keine Data-Router-Migration.
- Space-Kontext darf den Dialogzug stützen, nicht still die Generate-Quelle werden.
- Stufe 1 ist lokal (`local_source_artifact`); autoritativ sind lokale Source Registry und `VerifiedArtifact`. Es gibt keinen externen Rekonstruktions-Call im Runtime-Pfad. Abbruch nur ohne Nutzertext.
- Semantische Detection jedes persönlichen Egress; Detect-Treffer nicht automatisch bestätigt; Legacy-Mappings lokal reviewen (`/admin/identities`)
- Response Validation nach dem Generate normalisiert aktiven Klartext lokal. Das verhindert keinen bereits erfolgten Egress. Pre-Egress bleibt fail-closed.
- Journal-Generate muss eine inhaltstreue, redaktionell verbesserte Fassung liefern, keine Dialogkopie. Faktentreue bleibt; Wortlaut darf (und soll) lesbar werden. `prose_edit` und `notes_to_journal` sind lokal. Ein überwiegend stichpunktartiger Dialog bleibt `notes_to_journal`. Unvollständige Sätze dürfen ohne neue Tatsache umgebaut werden. Ähnlichkeit ist Diagnose, kein Retry-Grund. Ein nicht übernommener Modelltext ist kein stiller Rohtext-Entwurf.
- **Additiv 2026-08-27 (Mischquellen):** Die lokale Zuordnung eines gesamten Tages zu `prose_edit` oder `notes_to_journal` war eine technische Zwischenlösung und gilt als ersetzt. Mischquellen sind der Normalfall und werden in einem Generate-Aufruf verarbeitet. Keine dritte Mischkategorie.
- Qualitative Modellfälle nicht als automatisch vollständig bewiesen bezeichnen. Vergleich: `backend/journal_eval.py` (Baseline, vorheriger Vertrag, aktueller Prompt; `--profile-ab` für Stilvorgaben). Live-Qualität ist unbestätigt, bis ein kontrollierter Modellvergleich mit `--live --profile-id` über das Privacy Gateway läuft. Das Harness erklärt keinen Sieger. Fake-Läufe beweisen den Vertrag, nicht die Modellprosa.