# Doku-Audit — Übersicht, Lücken, Fehler, Verbesserungen **Zweck:** Vollständige Prüfung der Tibi-Doku (`tibi-docs`) gegen den Code von `tibi-server`, `tibi-admin-nova`, `tibi-types` und `tibi-svelte-starter` — mit Phasenplan und Checklisten zum Abarbeiten. **Stand:** 2026-10-16, umgesetzt am 2026-10-17. > **Zahlen in §1 sind der Audit-Stand vom 16.10.** (61 Seiten, 30 Screenshots) — bewusst als Schnappschuss stehen gelassen. > **Ist-Stand nach der Umsetzung (17.10.):** 70 Inhaltsseiten / 8.264 Zeilen, 49 Screenshots (40 Anwender, 9 Admin), 71 Build-Seiten, > 0 tote Links, 8 legitime „Platzhalter"-Marker, `npm run build` grün. Fortschritt siehe §18. **Rahmen (aus der Zielsetzung):** Die Doku **soll** beschreiben: (a) alle Funktionen des tibi-server für Entwickler und Administratoren beim Aufsetzen und Betreiben von Projekten, (b) alle tibi-admin-nova-Funktionen, die Entwickler zum korrekten Konfigurieren brauchen, (c) alle tibi-admin-nova-Funktionen aus Anwendersicht anhand von Screenshots (Mock-Projekt `corporate`, nie `t1`). Die Doku **soll nicht**: den Quellcode der Tibi-Repos für die Core-Weiterentwicklung erklären, und den alten `tibi-admin` (vor Nova) beachten. --- ## 0. Artefakte dieses Audits | Datei | Inhalt | Zeilen | |---|---|---| | `plans/doku-audit.md` | **dieses Übersichtsdokument** (Ergebnis + Phasenplan) | — | | `plans/audit/01-server-features.md` | tibi-server: Feature-Matrix, Routen, Hooks, MCP, Config, Lücken, Fehler | 200 | | `plans/audit/02-admin-interfaces.md` | tibi-admin-nova: Entwickler-Schnittstellen, fehlende Interface-Doku, UI-Inventar, Screenshot-Lücken | 128 | | `plans/audit/03-types-starter.md` | tibi-types-Schemas + Starter: undokumentierte Properties, Starter-Lücken | 125 | | `plans/audit/04-legacy-docs.md` | Alt-Doku-Inventar in den Nachbar-Repos, Wegfall-Kandidaten, Repo-Hygiene | 106 | | `plans/audit/05-review-einstieg-server.md` | Seitenreview `einstieg/` + `server/` (35 Befunde) | 68 | | `plans/audit/05-review-projekt.md` | Seitenreview `projekt/` (50 Befunde) | 88 | | `plans/audit/05-review-admin-reference.md` | Seitenreview `admin/` + `reference/` (21 Befunde) | 55 | | `plans/audit/05-review-anwender-adr.md` | Seitenreview `anwender/` + `adr/` (25 Befunde) | 58 | | `plans/audit-report.json` | Maschinenlesbarer Struktur-Befund (Skript) | — | | `scripts/audit-docs.mjs` | Audit-Skript: Frontmatter, Codeblöcke, Links, Anker, Bilder, Tabellen, Stil-Marker, Komponenten-Inventar | 268 | | `plans/coverage-report.json` | Bestehendes Coverage-Inventar (Routen/Kontexte/Tools/Schemas) | — | **Belegstatus-Legende** (durchgängig in diesem Dokument): | Symbol | Bedeutung | |---|---| | ✅ | **selbst am Code/Doku geprüft** (Datei:Zeile liegt vor) | | ⚠️ | aus Subagenten-Report übernommen, **nicht selbst nachgeprüft** | | ❌ | Report-Behauptung, die ich **widerlegt** habe (siehe §15.3) | | 🔍 | `PRUEFEN`-Punkt: offen, braucht Entscheidung/Beleg | **Reproduzieren:** ```sh cd /WM_Dev/src/gitbase.de/cms/tibi-docs node scripts/audit-docs.mjs # schreibt plans/audit-report.json npm run coverage # schreibt plans/coverage-report.json npm run build # muss grün bleiben ``` --- ## 1. Kennzahlen und Ampel | Bereich | Zahl | Ampel | |---|---|---| | Seiten / Zeilen | 61 / 7.127 | 🟢 Gerüst steht, alle Bereiche vorhanden | | Build | 62 HTML-Dateien (61 Inhaltsseiten + `404.html`), grün, Pagefind + Sitemap ok | 🟢 | | Tote interne Links / Anker | 0 | 🟢 | | Ungeschlossene Codeblöcke / Codeblöcke ohne Sprach-Tag | 0 / 0 | 🟢 | | Frontmatter fehlt | 1 Seite ohne `description` (`reference/openapi.md`) | 🟡 | | Kaputte Markdown-Tabellen | 1 (`admin/ki-funktionen.md:40`) | 🟡 | | Screenshots | 30 (`anwender/`), 9 Admin-Seiten mit **Platzhalter-Kommentar** (0 Bilder) | 🟠 | | Verifiziert-Stempel | 4 verschiedene Formate, 2 Stempelnamen („Verifiziert am" / „Geprüft an"), Hashlängen 7/8 Zeichen | 🟡 | | Faktische Fehler (selbst geprüft) | 8 | 🔴 | | Faktische Fehler (gemeldet, ungeprüft) | 7 | 🟠 | | Nicht dokumentierte Server-Fähigkeiten | 15 | 🔴 | | Fehlende Interface-Doku (Admin/Projekt) | 10 Kernpunkte | 🔴 | | Undokumentierte Schema-Properties (`tibi-types`) | 10+ | 🔴 | | UI-Bereiche ohne Screenshot | 25 | 🔴 | | Anwender-Seiten, die komplett fehlen | 5 | 🔴 | | Alt-Doku-Dateien, die sofort gelöscht werden können | **0** (nur Repo-Ebene) | ⚪ | | Seitenreview-Befunde gesamt | 131 Tabellenzeilen (35 + 50 + 21 + 25) | 🟠 | --- ## 2. Phasenplan (Übersicht) Reihenfolge nach Risiko/Nutzen — **P7 vor P6**, weil Stil-/Strukturarbeit Überschriften und Slugs ändert und damit Screenshots entwertet. P1 und P2 sind Fehlerkorrekturen (klein, hoher Effekt), P3–P5 sind Substanz, P6a ist Vorarbeit, P7 ordnet, P6b friert ein, P8/P9 sind Ordnung und Abriss. P3 und P4 sind parallelisierbar. | Phase | Name | Inhalt | Aufwand | Abhängigkeit | |---|---|---|---|---| | **P1** | Falschaussagen tilgen | 8 selbst geprüfte + 7 gemeldete Inhaltsfehler | S (½ Tag) | — | | **P2** | Markdown/Struktur/Hygiene | kaputte Tabelle, Hüllen-Rückstände, Stempel-Format, **Link-/Anker-Prüfung als fester Schritt, Redirect-Konzept** | S (1 Tag) | — | | **P3** | Server-Lücken schließen | 16 Fähigkeiten: Feld-Level-Permissions, System-CRUD, `_meta`, MIME, Snapshots, Embedding-Gruppen, Scopes, Filecleanup | M–L (2–3 Tage) | P1 | | **P4** | Admin-Interface-Lücken schließen | 12 Schnittstellen: `singleton`, `admin.tokens`, `query`, `agent`, `sections`, `MANUALLY`, Export-`ctx`, Action-`execution` | M (2 Tage) | P1 (parallel zu P3) | | **P5** | tibi-types + Starter + Fremd-Repo-Doku | undokumentierte Schema-Properties, Playwright/Mock im Starter, Interface-Doku in den Repos selbst | M (1–2 Tage) | P4 | | **P6a** | Fehlende Anwender-Seiten | 5 Seiten (Verlauf/Restore, Massenbearbeitung, Aktionen, Backup-Einspielen, Tastenkürzel) | S–M (1–2 Tage) | P2 | | **P7** | Stil + Starlight + Struktur | Ton, UI-Text-Treue, Komponenten (`LinkCard`, `Tabs syncKey`, `Icon`), Astro-Config, Slug-/Sidebar-Umbau | M (1–2 Tage) | P6a, P3/P4 (UI-Texte können sich noch ändern) | | **P6b** | Screenshots Anwender + Admin | 9 Admin-Motive + 25 UI-Bereiche, alles aus `corporate` | L (3–5 Tage) | P7 (erst nach Slug-/Text-Freeze) | | **P8** | Meta/Betrieb | AGENTS.md-Widerspruch, Sync-Skripte, Coverage v2, Stempel-Norm, Staleness-Regel, Issues an die Repos | S (1 Tag) | P2 | | **P9** | Alt-Doku-Abbau | Repo-Hygiene, Wegfall-Bedingungen je Alt-Datei | S–M | P3–P7 | **Warum diese Reihenfolge (falsifizierbar):** P7 verschiebt Slugs und ändert Überschriften/Sidebar; jede Stunde Screenshot-Arbeit davor müsste danach teilweise wiederholt werden. Umgekehrt kostet die Verschiebung nichts, weil P6b keine Inhalte mehr ändert. Falls sich zeigt, dass P7 doch Inhalte anfasst, die Bilder zeigen, ist die Reihenfolge zu revidieren (Re-Shoot-Zähler als Messgröße). --- ## 3. P1 — Faktische Fehler (selbst geprüft ✅) Diese acht Stellen widersprechen dem Code. Jede Zeile nennt Doku-Ort, Code-Beleg und Korrektur. | # | Datei:Zeile | Doku sagt | Code sagt | Korrektur | Beleg | |---|---|---|---|---|---| | 1 | `server/konfiguration.md:21` und `:99-104` | `bge-m3` → `EMBEDDING_BGE-M3_*` (Bindestrich bleibt stehen) | `normalizeEnvKeyName`: `-` → `_`, dann UPPER → `BGE_M3` (`internal/config/server.go:245-251`) | Alle 6 Beispielzeilen auf `EMBEDDING_BGE_M3_*` ändern, Regel-Satz präzisieren | ✅ | | 2 | `projekt/audit-backup.md:107,127,141` | Token-Recht heißt `AllowSnapshot` | Feld heißt `allowSnapshots` (yaml-Tag im Struct `AdminToken`, `internal/models/project.go:120`; Prüfung `AllowSnapshots`) | „`allowSnapshots` (Projekt-Admin-Recht)" durchgängig | ✅ | | 3 | `reference/hook-kontexte.md:52` | `crypto.sha256`, `crypto.md5` „(plus weitere)" | Nur 2 Funktionen registriert (`internal/hook/context_crypto.go:13-16`) | „(plus weitere)" streichen | ✅ | | 4 | `projekt/mcp-nutzen.md:63-71` | Scope-Tabelle: `.get`, `.post`, `.put`, `.delete` | `MethodToAction("GET")` → `read`, `POST` → `create`, `PUT` → `update` (`internal/config/admin_token.go:115-128`); Detailabschnitte derselben Seite (`:102,120,192,210`) nennen korrekt `.read/.create/.update/.delete` | Tabelle auf `.read/.create/.update/.delete` umstellen | ✅ | | 5 | `admin/customizing.md:14` | „`meta.views` (Tabelle, Karten, Kalender …)" steuert die Ansichten | `collection-meta.schema.json` hat **kein** `views` und `additionalProperties:false`; `types/admin.d.ts:452-458`: Custom-Views „not yet supported" | Zeile streichen oder durch die tatsächlich vorhandenen Mittel (`viewHint`, `subNavigation`) ersetzen | ✅ | | 6 | `admin/exporte.md:60` | Beispiel ruft `ctx.db.loadAll({ filter: ctx.filter })` | Signatur ist `loadAll(collection, options)` (`frontend/src/lib/utils/custom-export.types.ts:56`) | Beispiel auf `loadAll("blog", { filter: ctx.filter })` korrigieren | ✅ | | 7 | `reference/openapi.md` (ganze Seite) | Quelle `TIBI_API_URL/openapi.json`, „Erzeugen mit `npm run sync:openapi`" | Server hat nur `GET /api/v1/_openapi/:project` (`internal/controller/setup.go:692-701`); **kein** `/openapi.json`. Das Skript `scripts/sync-openapi.mjs` ruft genau diesen nicht existenten Pfad → Platzhalter bleibt ewig stehen | Skript auf `_openapi/:project` umstellen (Env `TIBI_NAMESPACE`), Seite generieren | ✅ | | 8 | `server/betrieb.md:21` | „`mongo` (MongoDB 7)" | Lokaler Stack: `image: gitbase.de/server/mongo:8` (`tibi-admin-nova/docker-compose-local.yml:133`, `tibi-svelte-starter/docker-compose-local.yml:139`) | „MongoDB 8" | ✅ | **Gemeldet, aber nicht selbst geprüft** (⚠️ — vor dem Fixen kurz verifizieren): | # | Datei:Zeile | Behauptung | Korrektur | |---|---|---|---| | 9 | `einstieg/neues-projekt.md:68,77` | `$CODING_TIBISERVER_URL` existiert in keinem `.env`/Skript | auf die realen Starter-Variablen umstellen | | 10 | `server/schnittstellen.md:62` | „Alle Antworten gzip" absolut | Ausnahmen ergänzen: `.pdf/.mp4/.jpg/.jpeg/.png`, `/metrics` (`setup.go:151-154`) | | 11 | `projekt/hooks-schreiben.md:85` | „Ohne `return` … **eingeloggte** Nutzer sehen dann alles" | „anonyme Nutzer" (Starter-Hook filtert nur Anonyme) | | 12 | `projekt/sammlungen-anlegen.md:87` | Gruppen-Beispiel „`content`, `content`, `community`" | „`content`, `community`, `system`" (Starter: `content`, `community`, `system`) — ✅ Duplikat selbst bestätigt (`grep group: api/collections/*.yml`) | | 13 | `projekt/audit-backup.md:29` | Audit-`defaultTTL: "0"` = ewig | im Code kein `0`-Sonderfall gefunden → Beleg nachreichen oder Aussage streichen (🔍) | | 14 | `projekt/deploy.md:90-91` | `POST /api/ssr?clear=1` als Server-Pfad dargestellt | als **Starter-/Proxy-Pfad** kennzeichnen; Server hat keine `ssr`-Route | | 15 | `anwender/orientierung.md:58` | Überschrift „Schnellsuche" | UI-String heißt „**Befehlspalette**" (`frontend/src/lib/i18n/locales/de.json:1207`; ✅ — „Schnellsuche" kommt dort nicht vor) | | 16 | `admin/aktionen.md` / `admin/ki-funktionen.md` | „Kurzfassung" | Locale sagt „Zusammenfassung" (⚠️) | --- ## 4. P2 — Markdown, Struktur, Hygiene-Defekte Automatisch gefunden (Skript) und im Review bestätigt: | # | Ort | Defekt | Fix | Beleg | |---|---|---|---|---| | 1 | `admin/ki-funktionen.md:40` | Tabelle mit inkonsistenter Spaltenzahl (letzte Zeile 2 statt 3 Zellen) → bricht das Rendering der dritten Stufe | Zeile auf drei Zellen umbauen (Stufe, Schwelle, Verhalten) | ✅ Skript | | 2 | `reference/hook-kontexte.md:65` | **Aufbau-Rückstand in Nutzer-Doku**: „Die Hülle nannte nur: db, http, …" | Absatz ersetzen durch: „Diese Pakete existieren zusätzlich zur Erstfassung: …" | ✅ | | 3 | `reference/openapi.md` | kein `description` in Frontmatter, „Stand: Platzhalter" | nach P1-#7 generieren | ✅ Skript | | 4 | `einstieg/neues-projekt.md:81`, `einstieg/schnellstart.md:8`, `server/uebersicht.md:12` | `:::caution` / `:::danger` / `:::note`-Direktiven — **3 Einzelfälle** im ganzen Repo (sonst 86× `