Wiki-Review — Obsidian-Integritaet, Content-Drift, Abdeckungsanalyse, Migrationsplan
Wiki-Review ist ein diagnostischer Skill zur semantischen Analyse des Wikis. Er identifiziert Qualitaetsprobleme, Content-Drift und Abdeckungsluecken. Kein Gate ist aktiv — der Skill ist read-only (ausser Report-Write in
wiki/_reviews/).
| Gate | Durchsetzung | Wie | Bedingung |
|---|---|---|---|
| KEIN-BUCH-OHNE-VOLLSTAENDIGE-LESUNG | ⚪ N/A | Review liest keine neuen Buecher | — |
| KEIN-INHALT-OHNE-SEITENANGABE | ⚪ N/A | Review prueft, modifiziert aber nicht | — |
| KEIN-ZAHLENWERT-OHNE-QUELLE | ⚪ N/A | Review prueft, modifiziert aber nicht | — |
| KEIN-NORMBEZUG-OHNE-ABSCHNITT | ⚪ N/A | Review prueft, modifiziert aber nicht | — |
| KEINE-KONZEPTSEITE-OHNE-QUERVERWEIS | ⚪ N/A |
| Review prueft, meldet Luecken |
| — |
| KEIN-SCHLAGWORT-OHNE-VOKABULAR | ⚪ N/A | Review prueft, meldet Probleme | — |
| KEIN-UPDATE-OHNE-DIFF | ⚪ N/A | Keine Aenderungen durch Review | — |
| KEIN-WIDERSPRUCH-OHNE-MARKIERUNG | ⚪ N/A | Review prueft Format, korrigiert nicht | — |
| KEINE-WIKI-AENDERUNG-OHNE-QUELLENLESUNG | ⚪ N/A | Review aendert keine Wiki-Seiten | — |
| KORREKTE-UMLAUTE | ⚪ N/A | Review-Report ist Chat-Output (Stufe 1) bzw. Markdown (Stufe 2) | — |
Schritt 0.1 — Konzeptseiten-Standard extrahieren:
governance/synthese-dispatch-template.mdFrontmatter (alle Felder PFLICHT): bis zum naechsten ----Delimiter nach den Feldern:) → PFLICHT_FELDER_KONZEPTSchritt 0.2 — Quellenseiten-Standard extrahieren:
governance/ingest-dispatch-template.mdFrontmatter (alle Felder PFLICHT): → PFLICHT_FELDER_QUELLESchritt 0.3 — Body-Struktur-Reihenfolge extrahieren:
governance/synthese-dispatch-template.mdBody-Struktur bis zum naechsten ═══-Delimiter## [Headername]-Zeilen in Reihenfolge → SOLL_REIHENFOLGESchritt 0.4 — Erlaubte Seitentypen laden:
hooks/config/valid-types.txt#)Schritt 0.5 — Hard Gates laden:
governance/hard-gates.md<HARD-GATE: ...>-Marker → ACTIVE_GATES (Liste der Gate-Namen)Schritt 0.6 — Link- und Dateinamen-Konventionen laden:
governance/naming-konvention.mdSchritt 0.7 — Obsidian-Setup-Standard laden:
governance/obsidian-setup.mdapp.json-Block → SOLL_APP_JSON (Key-Value-Paare)Schritt 0.8 — Wiki-Inventar erstellen:
.md-Dateien unter wiki/ zaehlen und kategorisieren_log.md, _vokabular.md, _pending.jsonSchritt 0.9 — Typ→Verzeichnis-Mapping extrahieren (dynamisch):
governance/seitentypen.mdTyp → Verzeichnis-Paare → TYP_VERZEICHNIS_MAP_index/, pdfs/Schritt 0.10 — Discovery-Dateien laden (v1.1):
wiki/_konzept-reife.md (falls vorhanden) → YAML parsen → KONZEPT_REIFEwiki/_schlagwort-vorschlaege.md (falls vorhanden) → YAML parsen → SCHLAGWORT_VORSCHLAEGEJEDE .md-Datei in wiki/ wird geprueft. Ausnahmen: _log.md, _reviews/-Dateien.
Ein einziger Fund reicht fuer Full-Audit-Empfehlung.
1.1 Frontmatter-Schema:
type: quelle → gegen PFLICHT_FELDER_QUELLEtype: konzept → gegen PFLICHT_FELDER_KONZEPTtype, title, schlagworte, reviewedtype:-Wert gegen VALID_TYPES pruefenschlagworte:, synonyme:, mocs:, versagensart: → YAML-Array (nicht String)created:, updated:, ingest-datum:, synth-datum: → ISO-Format (YYYY-MM-DD)reviewed: → boolean (true/false) oder ISO-Datumquellen-anzahl:, seiten:, jahr: → Zahl (nicht String)| Seite | Fehlende Felder | Typfehler | Status |1.2 Link-Integritaet:
[[...]]-Wikilink extrahieren (Regex: \[\[([^\]]+)\]\])|) splitten: Teil VOR | ist der Dateiname/Ziel, Teil NACH | ist der Anzeigename[[datei.pdf#page=N|Autor Jahr, S. N]][[konzeptname|Anzeigename]][[quellenseite|Autor Jahr]][text](url)) statt Wikilinks? → meldenwiki/pdfs/)?| Quelle | Link | Problem |1.3 Dateinamen-Konventionen:
.md? (Regex: ^[a-z0-9-]+\.md$)| Datei | Verstoesse |1.4 Graph-Konnektivitaet:
_index/-Dateien, _log.md, _vokabular.mdtype: konzept, type: verfahren, type: baustoffmocs:-Feld1.5 Dataview-Kompatibilitaet:
schlagworte: → YAML-Array [Term1, Term2], nicht String "Term1, Term2"mocs: → YAML-Arrayreviewed: → boolean oder ISO-Datum, nicht String "ja" oder "nein"quellen-anzahl: → Zahl, nicht String "5"| Seite | Feld | Ist-Typ | Soll-Typ |1.6 Obsidian-Vault-Konfiguration:
Schritt 1.6.1 — .obsidian/ Existenz:
wiki/.obsidian/? Falls nein → ERROR: "Vault-Konfiguration fehlt.
Obsidian erkennt wiki/ ohne .obsidian/ nicht als Vault."Schritt 1.6.2 — app.json Pflicht-Keys:
wiki/.obsidian/app.jsongovernance/obsidian-setup.md, extrahiere den app.json-BlockuseMarkdownLinks, newLinkFormat, strictLineBreaks, showFrontmatter[key] nicht gesetzt"[key]: ist [ist], soll [soll]"defaultOpenFile: "home" nur pruefen wenn wiki/home.md existiert| Key | Soll | Ist | Status |Schritt 1.6.3 — Graph-View-Gruppen:
wiki/.obsidian/graph.json (falls vorhanden)path:verzeichnisname/-Query? → OK[verzeichnis]/ nicht konfiguriert —
Seiten dieses Typs haben keine eigene Farbe im Graph View"-path:quellen/ und -path:_index/?
Falls nein → INFO: "Empfohlener Graph-Filter fehlt (Quellen/Index ausblenden)"graph.json fehlt komplett → WARN: "Keine Graph-View-Konfiguration.
Alle Seitentypen erscheinen in gleicher Farbe."| Seitentyp | Verzeichnis | Graph-Gruppe | Status |Zufaellige Auswahl von 15 Seiten, gemischt ueber alle Typen:
_index/-Dateien, keine MOCs, keine _log.mdFalls das Wiki <15 inhaltliche Seiten hat: alle pruefen.
2.1 H2-Reihenfolge (nur Konzeptseiten):
## -Header extrahieren| Seite | Ist-Reihenfolge | Abweichungen |2.2 check-wiki-output.sh (alle Stichproben-Seiten):
bash hooks/check-wiki-output.sh <datei>| Seite | Ergebnis | Befunde |2.3 Quellenqualitaet (nur Konzeptseiten):
quellen-anzahl: Wert lesen## Quellen-Abschnitt zaehlen| Seite | quellen-anzahl | Tatsaechlich | Wikilink-Dichte |2.4 Widerspruchs-Format:
[WIDERSPRUCH (Plaintext-Format) → akzeptabel (hard-gates.md verwendet dieses Format)> [!CAUTION] (Obsidian Callout-Syntax) → bevorzugt (besser sichtbar in Obsidian)| Seite | Format | Status |2.6 PDF-Link-Drift (nur Quellenseiten mit pdf:-Feld):
\(S\.\s*\d+ (matcht (S. 32), (S. 42-48))\[\[[^\]]+\.pdf#page=\d+pdf: im Frontmatter → PDF-Dateinameautor: + jahr: → Link-Alias(S. N) → #page=N| Seite | Plaintext-Refs | PDF-Links | Status | Migrierbar |2.5 Review-Freshness:
reviewed: Wert lesen
false → seit wann? (synth-datum: oder ingest-datum: als Referenz)30 Tage seit Erstellung ohne Review → WARN
| Seite | reviewed | Alter (Tage) | Status |3.1 _log.md — Offene Marker:
wiki/_log.md (falls vorhanden)[INGEST UNVOLLSTAENDIG] und [SYNTHESE UNVOLLSTAENDIG]3.2 _index/ — Eintraege vs. Seiten:
_index/*.md-Datei:
| Index-Datei | Verwaiste Eintraege | Fehlende Eintraege |3.3 _pending.json — Verwaist?
wiki/_pending.json?
timestamp aelter als 2 Stunden → WARN: Vermutlich verwaist3.5 Bootstrap-Vollstaendigkeit (content-driven):
Nutze TYP_VERZEICHNIS_MAP aus Phase 0.9 und INVENTAR aus Phase 0.8. Kein Verzeichnis wird pauschal als fehlend gemeldet — die Bewertung haengt davon ab ob das Wiki Inhalte hat die das Verzeichnis brauchen.
Fuer jedes Typ→Verzeichnis-Paar aus der Map:
type: norm in wiki/konzepte/ statt wiki/normen/)
→ ERROR: "N Seiten vom Typ X liegen falsch. Verzeichnis anlegen und verschieben."normen/ fehlt)
→ WARN: "Verzeichnis nicht angelegt, aber N Quellen verweisen auf Inhalte dieses Typs."Sonderregeln:
moc/ → erst ab >=10 Konzeptseiten als WARN melden ("Navigation via MOCs empfohlen"),
darunter nur INFO
_index/ und pdfs/ (Infrastruktur) → immer ERROR wenn fehlend
(ohne Index keine Katalog-Uebersicht, ohne pdfs/ keine PDF-Verlinkung)
Output: | Verzeichnis | Soll-Typ | Status | Seiten | Empfehlung |
3.6 config/valid-types.txt — Sync mit seitentypen.md:
hooks/config/valid-types.txt (aus Phase 0.4)| Typ | valid-types.txt | seitentypen.md | Status |3.4 _vokabular.md — Aggregierte Nutzungsanalyse:
wiki/_vokabular.md ladenschlagworte:-Feld verwendet?
schlagworte:-Werte aus allen Seiten sammeln
_vokabular.md definiert? → melden als "undefiniert"| Term | Definiert | Verwendet (Anzahl Seiten) | Status |Prueft ob die persistente Discovery-Logik funktioniert oder stillschweigend uebersprungen wird.
3b.1 DATEIEN-CHECK:
_konzept-reife.md?_schlagwort-vorschlaege.md?_log.md enthaelt mindestens einen synthese-Eintrag:
→ ERROR: "Discovery-Dateien nicht angelegt obwohl Synthese gelaufen ist."| Datei | Status |3b.2 STALE-CHECK:
aktualisiert:-Datum in _konzept-reife.md YAML extrahieren_log.md zaehlen (Eintraege mit synthese |)| Letztes Update | Synthese-Laeufe seitdem | Status |3b.3 REIFE-CHECK:
status: reif aus _konzept-reife.md lesenwiki/konzepte/<term>.md?
status sollte erstellt sein, nicht reif → WARN: "Status-Drift"aktualisiert-Datum zaehlen)
2 Synthese-Laeufe → WARN: "[Term] ist seit [Datum] reif (N Quellen), aber noch keine Konzeptseite. /synthese empfohlen."
| Kandidat | Quellen | Reif seit | Synthese-Laeufe | Status |3b.4 RUECKSTAU-CHECK:
status: offen aus _schlagwort-vorschlaege.md zaehlen| Typ | Offen | Aeltester | Status |3b.5 KONSISTENZ-CHECK:
konzept-kandidaten:-Eintraege aus wiki/quellen/*.md sammeln_konzept-reife.md abgleichen| Term | In Quellenseiten | In _konzept-reife.md | Status |3b.6 GHOST-CHECK:
status: erstellt aus _konzept-reife.md lesen| Term | Status | Konzeptseite existiert | Ergebnis |3b.7 BIBTEX-KEY-CHECK (bedingt):
Nur aktiv wenn literatur.bib ODER literatur/QUELLEN-MATRIX.md im Projekt-Root
oder unter Masterarbeit/literatur/ existiert.
bibtex-key: Feld im Frontmatter?4.1 Konzept-Kandidaten ohne eigene Seite:
_konzept-reife.md → alle Eintraege mit status: reif ohne Konzeptseite_konzept-reife.md nicht existiert):
Alle konzept-kandidaten:-Eintraege aus allen Quellenseiten sammeln,
gruppieren nach term:, Terme mit >=2 Quellen und ohne Konzeptseite → melden| Kandidat | Quellen (Anzahl) | Quellenseiten | Quelle (Reife-Datei/Frontmatter) |4.2 Verwaiste Quellenseiten:
## Quellen-Abschnitt verlinkt werden| Quellenseite | Eingehende Konzept-Links |Quick-Scan Report (Chat-Output, kein File):
## Quick-Scan: [DATUM]
### Obsidian-Integritaet (exhaustiv, N Seiten)
- Frontmatter: X/N vollstaendig, Y fehlende Felder
- Links: X aufloesbar, Y gebrochen
- Dateinamen: X/N konform, Y Verstoesse
- Graph: X Waisen, Y Sackgassen, Z MOC-lose Konzepte
- Dataview: X/N kompatibel, Y Typfehler
- Vault-Konfiguration: .obsidian/ [vorhanden|fehlt], app.json [X/Y Keys korrekt], Graph-Gruppen [X/Y Typen konfiguriert]
### Content-Qualitaet (Stichprobe, M Seiten)
- Struktur (Konzeptseiten): X/M aktuelle H2-Reihenfolge
- check-wiki-output: X/M PASS
- Quellenqualitaet: Durchschnitt N Quellen pro Konzeptseite
- PDF-Link-Drift: X/M Quellenseiten mit Plaintext-Refs statt PDF-Links
- Widerspruchs-Format: X aktuell (Callout), Y veraltet (Plaintext)
- Reviews: X ueberfaellig (>30 Tage)
### Meta-Konsistenz
- _log.md: X offene Marker
- _index/: X verwaiste Eintraege, Y fehlende Eintraege
- _pending.json: [frei | verwaist seit HH:MM | nicht vorhanden]
- _vokabular.md: X unbenutzte Terme, Y undefinierte Schlagworte
- Bootstrap: X ERROR, Y WARN, Z INFO [Details pro Verzeichnis]
### Discovery-Gesundheit
- Discovery-Dateien: [vorhanden | fehlen (Synthese gelaufen: ja/nein)]
- Stale: [aktuell | N Synthese-Laeufe seit letztem Update]
- Reife Kandidaten ohne Seite: X (aeltester seit [Datum])
- Schlagwort-Rueckstau: X offene Vorschlaege (aeltester seit [Datum])
- Konsistenz: X Kandidaten nicht in Reife-Datei
- Ghosts: X "erstellt"-Eintraege ohne Konzeptseite
### Abdeckung
- Konzept-Kandidaten mit >=2 Quellen ohne Seite: X
- Verwaiste Quellenseiten: Y
### Empfehlung
[Alles OK — kein Full-Audit noetig]
ODER
[Full-Audit empfohlen:
- Obsidian: N Probleme (Frontmatter: X, Links: Y, Dateinamen: Z)
- Content-Drift: M gleiche Muster in Stichprobe (Typ: [Beschreibung])
- Abdeckung: K Synthese-Kandidaten]
Schwellwerte fuer Full-Audit-Empfehlung:
.obsidian/ → sofortige Empfehlung (kein Full-Audit noetig,
sondern direkte Behebung: Konfiguration anlegen). Falsche Keys/fehlende Graph-Gruppen
→ als Obsidian-Fix in den Migrationsplan aufnehmen (kein Full-Audit-Trigger,
da die Loesung immer dieselbe ist: Setup korrigieren)Nutzer entscheidet ob Full-Audit durchgefuehrt wird.
Batch-Strategie (nach Verzeichnis, wegen Token-Budget):
| Batch | Verzeichnis | Beschreibung |
|---|---|---|
| 1 | wiki/quellen/ | Alle Quellenseiten |
| 2 | wiki/konzepte/ | Alle Konzeptseiten |
| 3 | wiki/normen/ + wiki/verfahren/ + wiki/baustoffe/ | Spezialseiten |
| 4 | wiki/_index/ + MOCs + Sonderdateien | Navigationsstruktur |
Pro Batch: Report generieren, dann naechster Batch. Grund: Token-Budget. 50 Seiten x 500 Zeilen = 25K Zeilen → Split noetig.
Pro Seite (Obsidian + Content komplett):
(S. N) statt [[pdf#page=N|Autor Jahr, S. N]]quellen-anzahl, Wikilink-Dichte, offene Markerreviewed: false seit wann?Befunde kategorisieren:
| Kategorie | Behebbar | Beispiel |
|---|---|---|
| Obsidian-Fix | Automatisch (Frontmatter, Links) | materialgruppe: fehlt, Link-Alias korrigieren |
| PDF-Link-Migration | Automatisch (mechanisch) | (S. 32) → [[pdf#page=32|Autor Jahr, S. 32]] |
| Restrukturierung | Semi-automatisch (/synthese) | Randbedingungen nach statt vor Formeln |
| Inhaltsluecke | Manuell (/ingest, /synthese) | Konzept hat nur 1 Quelle |
| Veraltet | Review noetig | reviewed: false seit >30 Tagen |
Migrationsplan generieren:
## Full-Audit Report: [DATUM]
### Befund-Uebersicht
- N Seiten geprueft
- X Migrationen (automatisch behebbar)
- Y Restrukturierungen (Synthese noetig)
- Z Inhaltsluecken (Ingest/Synthese noetig)
- W Reviews ueberfaellig
### Migration-Batch: Frontmatter (automatisch)
Die folgenden X Seiten brauchen nur Frontmatter-Ergaenzungen.
Soll ich das als Batch durchfuehren? (Schreibt via /synthese oder direkt)
| Seite | Fehlend | Aktion |
|---|---|---|
| [pfad] | [felder] | Ergaenze: `[feld]: [wert]` |
| ... | ... | ... |
### Migration-Batch: PDF-Links (automatisch)
Die folgenden X Seiten haben Plaintext-Seitenangaben `(S. N)` die
mechanisch in klickbare PDF-Links umgewandelt werden koennen.
Alle noetigten Daten stehen auf der Seite selbst:
- `pdf:` Frontmatter-Feld → PDF-Dateiname
- `autor:` + `jahr:` → Link-Alias
- Seitenzahl aus `(S. N)` → `#page=N`
Transformation: `(S. N)` → `([[pdf-datei.pdf#page=N|Autor Jahr, S. N]])`
Soll ich das als Batch durchfuehren?
| Seite | Plaintext-Refs | PDF-Datei | Migrierbar |
|---|---|---|---|
| [pfad] | [anzahl] | [pdf-feld] | ja/nein (pdf:-Feld vorhanden?) |
| ... | ... | ... | ... |
Nicht migrierbar (kein `pdf:`-Feld, z.B. Markdown/URL-Quellen): separat listen.
### Restrukturierungen (manuell — Nutzer entscheidet)
| Seite | Problem | Vorschlag |
|---|---|---|
| [pfad] | [beschreibung] | `/synthese [konzept]` mit aktualisiertem Template |
| ... | ... | ... |
### Inhaltsluecken
| Konzept-Kandidat | Quellen | Vorschlag |
|---|---|---|
| [term] | [anzahl] Quellen | `/synthese [term]` |
| ... | ... | ... |
### Review-Kandidaten
| Seite | reviewed | Alter (Tage) | Vorschlag |
|---|---|---|---|
| [pfad] | false | [n] | Review anstossen |
| ... | ... | ... | ... |
### Naechste Schritte
1. Migration-Batch ausfuehren? (X Seiten, ~Y Min)
2. Re-Synthese fuer Z Seiten einplanen?
3. Reviews fuer W Seiten terminieren?
Report speichern:
wiki/_reviews/review-[DATUM].md (YYYY-MM-DD Format)wiki/_reviews/ beim ersten Full-Audit anlegen falls nicht vorhandenwiki/_log.md:
## [DATUM] — Wiki-Review (Full-Audit)
- Seiten geprueft: N
- Befunde: X Obsidian-Fix, P PDF-Link-Migration, Y Restrukturierung, Z Inhaltsluecke, W Veraltet
- Report: [[_reviews/review-[DATUM]]]
| Situation | Verhalten |
|---|---|
| Leeres Wiki (0 Seiten) | "Wiki ist leer. Starte mit /ingest." — Kein Scan |
| Wiki nur mit Quellenseiten | Abdeckungs-Analyse betonen, Konzept-Kandidaten prominent listen |
| Wiki >200 Seiten | Obsidian-Layer bleibt exhaustiv (lightweight: nur Frontmatter + Links). Content-Layer sampelt wie gehabt (15 Seiten) |
| Template hat sich seit letztem Ingest geaendert | Genau dafuer ist der Drift-Check: alte Seiten gegen neuen Standard melden |
_pending.json offen waehrend Review | Melden, nicht loeschen (Review ist read-only) |
_log.md mit offenem Marker | Melden + Link zum letzten Ingest-Eintrag |
| Vokabular-Term in 0 Seiten | Melden als "potentiell veraltet" (nicht loeschen) |
| Review waehrend laufendem Ingest | Harmlos (read-only), aber Ergebnis kann verrauscht sein — Hinweis ausgeben |
Wiki-Review sollte regelmaessig laufen:
using-bibliothek prueft automatisch beim Session-Start:
wiki/_reviews/ → "Noch kein Review. /wiki-review empfohlen?"