Zurück zur Dokumentation
Guide 00

Wiki knowledge engine — Archive mit Schema, Wikilinks und Synthese

Die Wiki-Engine gibt jedem Archiv ein dreistufiges Instruktionsmodell: harte Regeln, vom Code erzwungen, ein pro-Archiv-Schema-Prompt (advisorische redaktionelle Leitlinien) und strukturierte Felder (persona, purpose, scope). Mentales Modell: schemaPromp…

3 Min. Lesezeit

Die Wiki-Engine gibt jedem Archiv ein dreistufiges Instruktionsmodell: harte Regeln, vom Code erzwungen, ein pro-Archiv-Schema-Prompt (advisorische redaktionelle Leitlinien) und strukturierte Felder (persona, purpose, scope). Mentales Modell: schemaPrompt verhält sich zum Wiki wie eine CLAUDE.md zum Code einer Repo.

Community-Funktion. Betreiber-Referenz für den Wiki Schema Layer (Phase 187, beim v0.25-Gate auditiert — WIKS-01/02, gegen den Live-Code verifiziert). Quelle: docs/WIKI_SCHEMA_LAYER.md (v0.28.1). Provenienz-Zeilen: FACT-CENSUS.md F-WIKI-1.

Das 3-Schichten-Modell

SchichtNaturEnforcementScope
Harte Regelnvom Code erzwungen, bedingungslosvalidateWritablePath + der immer injizierte Prompt-BlockJeder archiv-gebundene Schreibpfad
schemaPromptredaktionelle Leitlinien pro ArchivNur Daten + Prompt (nie ein Gate)Pro Archiv, Opt-in (leer = aus)
Strukturierte Felderkonfigurierte persona/purpose/scopedas bestehende synthesis/orchestrator-VerhaltenPro Archiv, unverändert

Harte Regeln (code-enforced)

Zwei bedingungslose Mechanismen, konfigurationsunabhängig:

  1. Die Dateisystem-Wache. validateWritablePath (packages/server/src/utils/archivePath.ts:39-54) weist jedes Schreibziel außerhalb von <archiveBase>/wiki/ zurück: zuerst der Anti-Traversal-Check (validateArchivePath), dann der wiki/-Präfix-Check — ein Ziel außerhalb von wiki/ wirft Write target outside wiki/ directory: <path>. raw_sources/ is immutable. Sowohl createPage als auch updatePage rufen sie vor jedem fs.writeFile auf. Kein API-Endpoint schreibt unter raw_sources/ — es ist per Design unveränderlich.
  2. Der Prompt-Layer-Spiegel. HARD_RULE_RAW_SOURCES (archiveConfigService.ts:52-53) ist ein immer aktiver Block, der an jeden archiv-gebundenen Prompt angehängt wird: sein Wortlaut spiegelt die Wache (raw_sources/ is immutable), sodass das Modell den Weg aus wiki/ heraus nie einmal versucht — und falls doch, garantiert der Code, dass nichts landet.

schemaPrompt (advisory)

Ein Freitextfeld, gespeichert im Config-JSON des Archivs:

  • Schema: schemaPrompt: z.string().max(10000).optional() auf archiveConfigSchema — ein additiver Schlüssel, null Migrationen. 10000 Zeichen ≈ ~2500 Tokens.
  • Validierung: Zod bei jedem Schreibzugriff (PUT /api/archives/:id/config); ein Payload über der Obergrenze → 400 { error: "Invalid config", details.schemaPrompt }.
  • Read contract: GET /api/archives/:id/config bei einem Archiv ohne gespeicherte Zeile → 200 mit der Schema-Default-Konfiguration ({ rawSourcesImmutable: true }): der Hydratations-Pfad des ersten Speicherns; Archive mit Zeile liefern den gespeicherten Blob unverändert zurück.
  • Die Injektions-Obergrenze: gespeicherte Legacy-Blobs über 10000 Zeichen werden bei der Injektion mit dem Vermerk (truncated at 10000 characters) abgeschnitten — Legacy-Zeilen werden beim Lesen nie re-validiert.
  • Advisory per Design: der Block tritt als DATEN mit expliziter Advisor-Etikettierung ein, nie als Privilegien-Grant des System-Prompts. Keine Sanitization über die Längen-Obergrenze hinaus; widersprüchliche Anweisungen = ein akzeptiertes Qualitätsrisiko, gemildert durch die Hilfetexte und Templates der UI.

Präzedenz

text
harte Regeln (Code) > schemaPrompt (advisory) > strukturierte Felder
  1. schemaPrompt kann die harten Regeln nie überstimmen (der Prompt deklariert es; der Code erzwingt es).
  2. Im Konflikt mit den strukturierten Feldern gewinnt schemaPrompt (On conflict with the structured fields (persona, purpose, scope), these guidelines take precedence over them.).
  3. Ein Archiv ohne schemaPrompt verhält sich als Baseline + harte Regel — null Enhancement, null Degradation (keine leeren Platzhalter-Abschnitte in Prompts).

Wo der Block im Prompt landet

NahtstelleWoHinweise
Chat orchestrator (non-streaming)orchestrator.ts:295-302 (runAgent)harte Regel IMMER + der advisorische Block, wenn vorhanden
Chat orchestrator (streaming)orchestrator.ts:805-812 (runAgentStreaming)der Streaming-Zwilling, dieselbe Reihenfolge
Synthesis Pass 4 (decision)synthesisStages.ts:784-788der advisorische Block reist auf der SYSTEM-Rolle; die Pässe 1/2 und das Contradiction-Judging bleiben undefined

Innerhalb des System-Prompts: nach dem MANDATORY SEARCH RULE-Block, vor dem systemPrompt-Ternär.

wiki_query und wiki_write

Die Builtins wiki_query und wiki_write sind Skills, deren execute()-Pfade keinen LLM-Aufruf machen: der Schreibpfad erzeugt deterministische Previews (wikiWriteService.ts enthält null LLM-Aufrufe) — die Per-Skill-Injektion würde kein Modell erreichen; die einzige LLM-Seite ist der System-Prompt des Orchestrators.

rawSourcesImmutable

rawSourcesImmutable: boolean (Default true) auf archiveConfigSchema ist ein Dokumentations-Flag, nie ein Enforcement-Toggle: die Immutabilitätsregel gilt unabhängig vom Flag (die validateWritablePath-Wache + der immer-aktive Block garantieren sie).

Diese Anleitung behandelt die Betriebsoberfläche der Wiki-Engine; die technische Tiefe steckt im Zwillingsbeitrag:

Provenance

AbschnittQuelle
Das 3-Schichten-Modell / harte Regelndocs/WIKI_SCHEMA_LAYER.md (§ The 3-layer model, § Layer 1) — F-WIKI-1
schemaPrompt / Präzedenz / Nahtstellendocs/WIKI_SCHEMA_LAYER.md (§ Layer 2, § Precedence chain, § Injection seams)
AuditPhase 187 commits; abgeschlossen am v0.25-Gate (WIKS-01/02, Phase 194)

---

Betreiber-Referenz — Simmetric Chat v0.28.1 (Dokumente aktualisiert am 2026-10-02, Census-SHA `aca5b8ff`).