7.9 KiB
| title | version | status | date | product_family | document_role | parent_document |
|---|---|---|---|---|---|---|
| Kanshō – Provenienz und lokale Verifikation untrusted Modellausgabe | 0.1 | Arbeitsstand | 2026-08-25 | Jinkendo | Technical Chapter / Provenance / Verification Contract | technische_zielarchitektur.md |
Kanshō – Provenienz und lokale Verifikation
Kanonisches Home für den allgemeinen technischen Vertrag: externe Modellantworten sind untrusted input; kanonischer Inhalt kommt nur aus einer lokalen Quellenregistry; Downstream-Stufen konsumieren ein lokal erzeugtes VerifiedArtifact.
Journalregeln, Writing Profile, Chronologie und Tagebuchstil gehören nicht in diese Schicht. Journal-Adapter und MVP-Nutzung: mvp_implementation.md §16.7. Privacy-Egress bleibt privacy_gateway.md. Fachliche Quellenbindung und Re-Grounding bleiben ../functional/context_fidelity_and_regrounding.md.
1. Decision Record (2026-08-25)
Entscheidung: Persönliche KI-Folgestufen dürfen freie Modellantworten nicht als Inhaltsautorität behandeln. Es gibt eine kleine, intent-neutrale Provenienz- und Verifikationsschicht (backend/provenance.py). Fachgrenzen mappen Domainfehler erst dort auf Nutzertexte und Fehlercodes.
| Thema | Stand | Status |
|---|---|---|
| Modellantworten sind untrusted input | ja | Entschieden (technisch, 2026-08-25) |
| Lokale Quellenregistry ist Autorität für Originaltext | ja | Entschieden (technisch, 2026-08-25) |
| Evidence lokal gegen Registry prüfen | ja | Entschieden (technisch, 2026-08-25) |
Downstream nur VerifiedArtifact |
ja | Entschieden (technisch, 2026-08-25) |
| Semantische Modell-Labels standardmäßig unverifiziert | ja | Entschieden (technisch, 2026-08-25) |
Vollständigkeit über explizite Policy (coverage) |
ja | Entschieden (technisch, 2026-08-25) |
| Fail Closed, keine stillen Kürzungen in dieser Schicht | ja | Entschieden (technisch, 2026-08-25) |
| Konkrete spätere Intent-Policies (Reflexion, Synthese, …) | nicht gebaut | Offen / später prüfen |
| Selektiver Evidence-Modus als Produktfunktion | nur Schnittstelle selected_evidence |
Nicht als Produkt entschieden |
Keine Vorwegnahme von Agentengraph, Workflow-Framework oder Pluginarchitektur. ai_architecture.md: Multi-Agent-Zerlegung bleibt offen.
2. Allgemeiner Vertrag
Die Schicht kennt Quellen, Rollen, Evidence-Referenzen, Coverage-Modi und ein geprüftes Artefakt. Sie kennt keine Tagebuch-, Space- oder Writing-Profile-Begriffe.
2.1 Quellenregistry
Eine Quelle hat mindestens source_id, role, kanonischen Originaltext und optionale lokale Metadaten. IDs und Texte entstehen lokal. Das Modell darf sie referenzieren, nicht ersetzen. Ein abweichender proposed_texts-Eintrag ist canonical_overwrite.
2.2 Evidence
Untrusted Input: {source_id, excerpt}. Lokal:
- Source existiert.
- Rolle ist laut Policy erlaubt.
- Excerpt kommt exakt in genau dieser Source vor.
- Excerpt nur in einer anderen Source:
wrong_source. - Excerpt in einer unzulässigen Rolle:
role_not_allowed. - Erfundener Text:
unverified_excerpt.
Spans (start/end) werden lokal aus dem bestätigten Zitat materialisiert. Modell-Offsets auf maskiertem Text werden nicht verwendet. Mehrdeutige gleiche Ausschnitte: erstes Vorkommen in der kanonischen Source.
Maskierung/Demaskierung: Verifikation läuft auf dem lokalen Klartext der Registry, nicht auf Egress-Platzhaltern. Schlägt die Demaskierung fehl, findet der Excerpt nicht, die Anfrage bleibt fail-closed.
2.3 Verification Policy
Ausdrücklich zu setzen:
| Feld | Bedeutung |
|---|---|
allowed_roles |
welche Registry-Rollen Inhaltsquelle sein dürfen |
coverage |
Vollständigkeitsmodus |
selected_ids |
welche Quellen in welcher Materialisierungsreihenfolge |
source_order |
optionale Begegnungsreihenfolge, unabhängig von selected_ids |
include_unverified_annotations |
ob Modell-Labels separat gehalten werden |
Aktuell implementierte Coverage-Modi:
all_selected_sources: der vollständige kanonische Text jeder ausgewählten zulässigen Quelle wird lokal rehydriert. Ein kurzer Evidence-Teilstring entfernt den Rest nicht.selected_evidence: Schnittstelle für spätere selektive Intents; materialisiert nur geprüfte Excerpts. Keine Produktfunktion, kein Journal-Default.
2.4 Verified Artifact
Mindestens: kind=verified_artifact, coverage, source_order, order, sources[] (source_id, role, text), geprüfte evidence[]. Unverified Annotations nur wenn die Policy das ausdrücklich verlangt, und dann unter annotations_unverified, niemals als sources[].text.
Invariante:
Verifizierter Wortlaut und modellgelieferte Interpretation sind unterschiedliche Dinge.
3. Journalspezifische Policy
Nur im Adapter journal_reconstruct.py und in den Journal-Prompts:
- zulässige Inhaltsrolle:
user - Assistent darf Stufe 1 als Dialogkontext sehen, nicht ins Artefakt
- Coverage:
all_selected_sourcesfür alle ausgewählten nichtleeren Nutzerquellen source_order= Begegnungsreihenfolge; Umordnung der Materialisierung nur mit source-lokal bestätigten Uhrzeiten- Modell-
kindund Top-Level-Kategorien (contradictions, …) nicht autoritativ; Stufe 2 erhält sie nicht - Domainfehler des Modell-JSON →
reconstruction_invalidplusdiagnostics.reason - Stufe 2 formuliert Ich-Form, Titel, Absätze, Writing Profile
Additiv 2026-08-26: Generate reicht ungültiges Stufe-1-JSON nicht an Stufe 2 weiter und repariert es nicht. Der Adapter materialisiert stattdessen lokal alle ausgewählten Nutzerquellen (local_verified_artifact). Generate-Abbruch nur, wenn es keine Nutzerquelle gibt (no_user_sources). Eine Rohantwort mit Klartext-Identität wird nach Retry ebenfalls nicht übernommen.
Additiv 2026-08-26 (Runtime ohne Rekonstruktionsmodell): Der Journal-Adapter erzeugt Stufe 1 lokal als vollständiges VerifiedArtifact (purpose=local_source_artifact). Der Runtime-Pfad ruft mvp.journal_reconstruct nicht mehr auf. Parser und Validator bleiben für Tests und Abgrenzung erhalten, sind aber nicht der aktive Modellpfad. Stufe 2 bleibt der einzige externe Narrations-Call und konsumiert ausschließlich das lokale Artefakt plus Writing Profile plus optionalen Bestand.
Additiv 2026-08-26 (Faktentreue, nicht Wortlaut): Das Artefakt autorisiert Informationen, nicht die Ausgabeformulierung. Stufe 2 darf Orthografie und Satzbau ändern, solange Ereignisse, Unsicherheit, Plan versus Vollzug und einmalige Details erhalten bleiben. Ein inaktiver historischer Name in der Narration ist kein Privacy-Leak, aber journalspezifisch unbelegter Inhalt und kein gültiger Entwurf.
Additiv 2026-08-26 (Editorial, Adapter): Journalform, Editorial Modes, Journal-Facet und historische Stilreferenzen bleiben im Adapter. Die Provenienzschicht kennt sie nicht. Stufe 2 präsentiert dem Modell CURRENT_DAY_SOURCES als Tatsachen und STYLE_EXAMPLES nur als Ton.
Das Artefakt ist geprüftes Quellenmaterial, kein ungeprüfter Rohdialog mit Assistentenzeilen.
4. Aktuelle MVP-Nutzung
Ein Gateway-Call Klasse B für die Narration, plus optionales Detect auf dem versendeten Stufe-2-Kontext. Request-scoped Trace, Budget nur für Stufe 2 (mvp_implementation.md §16, privacy_gateway.md §9.3–9.4). Stufe 2 konsumiert reconstruction = serialisiertes VerifiedArtifact. Passt der vollständige Nutzerinhalt nicht ins Budget: prompt_budget_exceeded, nichts still kürzen, kein Chunk-and-Merge.
Tests: backend/tests/test_provenance.py, backend/tests/test_journal_budget.py.
5. Bewusst nicht implementiert
Zukünftige Intent-Policies, selektive Evidence als Produktweg, Chunk-and-Merge, persistente Audit-Tabelle, semantische Klassifikation über wachsende RegEx-Listen.
6. Querverweise
- Technisch:
mvp_implementation.md§16,privacy_gateway.md,ai_architecture.md - Fachlich:
../functional/guardrails.md,../functional/context_fidelity_and_regrounding.md,../functional/writing_profile_and_journaling.md