Files
tibi-docs/plans/audit/01-server-features.md
T
apairon 1928922e07 Audit + Umbau: Faktenfehler behoben, Server-/Admin-Lücken geschlossen, 49 Screenshots, Schema-Matrix generiert
- Audit: plans/doku-audit.md (Befunde, Phasen P1-P9, Ausführungsprotokoll) + plans/audit/ (8 Detailreports) + plans/offene-issues.md
- Werkzeuge: scripts/audit-docs.mjs (Links/Anker/Bilder/Tabellen), scripts/gen-schema-matrix.mjs (npm run gen:schemas)
- Neue Seiten: projekt/feld-rechte, reference/rest-system, reference/schema-properties, projekt/tests, 5 Anwender-Seiten
- Fehler behoben: EMBEDDING_BGE_M3_*-Env, allowSnapshots, MCP-Scopes (.read/.create/.update), meta.views, loadAll-Signatur, OpenAPI-Endpunkt, MongoDB 8, Befehlspalette
- Screenshots: 9 Admin + 10 Anwender aus Mock-Projekt corporate (t1 entfernt), 49 Bilder gesamt
- AGENTS.md: Sync-Behauptung richtiggestellt, Belegpflicht/UI-Namen/Screenshot-Regeln, Werkzeug-Abschnitt
- Build: 71 Seiten grün, 0 tote Links, 0 kaputte Tabellen
2026-10-17 01:49:35 +00:00

27 KiB
Raw Blame History

Audit: tibi-server (Code) vs. tibi-docs (Doku)

Stand: 2026-10-16 · Code-Commit lt. Doku 68b42785 (nicht per git verifiziert — kein git-Check in diesem Lauf). Methode: internal/-Inventar + internal/controller/setup.go als Routen-Quelle, Hook-RegisterPackageFunctions-Blöcke, MCP-tools_*.go, internal/config/server.go + embedding_group.go; Doku: src/content/docs/{server,projekt,reference}/*.md. Jeder Code-Beleg mit datei:zeile. „nicht verifiziert" = im Code nicht prüfbar gefunden.


1) Feature-Matrix

Legende: ok = abgedeckt · thin = erwähnt, aber unvollständig/oberflächlich · gap = fehlt.

1.1 Module internal/*

Modul Code-Beleg Dokuseite(n) Verdikt Was fehlt
cache (projektweiter Hook-Cache, LRU, Default MaxEntries 10000, DefaultTTL 0) internal/cache/cache.go:23-33 reference/hooks-daten.md (cache.*), server/konfiguration.md (hook.cache.*) thin Defaults (10000/0) und LRU/Eviction nirgends genannt
config (Datei + Env, Server-Struct) internal/config/server.go:229-242 server/konfiguration.md thin siehe Config-Tabelle 1.5
dbapi (CRUD-Handler, Login, Meta) internal/dbapi/register.go:62-135 (keine eigene Seite) gap System-CRUD-Routen (user/project/org/team/token), _meta-Routen nirgends als Referenz (nur Neben­erwähnung in projekt/mcp-nutzen.md:408)
dbcrud (Index-Typen inkl. TTL) internal/dbcrud/index.go:5-37 — gap nur indirekt (Audit-TTL). Kein Dokuseiten-Eintrag nötig, aber expireAfterSeconds-Semantik fehlt bei der „"0" = ewig"-Behauptung (s. 3.5)
embedding (Registry, Gruppen, Provider-Typen) internal/embedding/registry.go (Existenz), internal/config/embedding_group.go:150+ server/konfiguration.md:98-107, projekt/suche.md:37-42, server/betrieb.md:57 thin Policies (prefer-in-order/fastest-wins/round-robin/lowest-latency/weighted, embedding_group.go:44-60), Distributions, Health-/Race-/Retry-/Bulk-Tuning (embedding_group.go:102-190+ Env server.go:489-625) fehlen komplett
filecleanup ( orphan-Dateien, SafeRemoveAll) internal/filecleanup/cleanup.go:21-149 — gap keine Dokuseite; nur Starter-Upload-Seite (projekt/dateien-bilder.md)
hook (23 Pakete + request-Fn + Legacy-Aliase) internal/hook/context_*.go, internal/hook/compatibility.go:8-35 reference/hook-kontexte.md, reference/hooks-{daten,netze,sicherheit,medien,meta}.md ok ein Fehler: crypto „(plus weitere)" (s. 3.9); Legacy-Aliase (mail, template, file, fetch, dump, header, auth, …) bewusst undokumentiert — ok
image (FilterParams: width/height/fit/quality/…) internal/hook/context_image.go:75-235 reference/hooks-medien.md:28-46, projekt/dateien-bilder.md:80 ok —
llm (nur Chat + Budgets; kein Summarizer/STT/TTS) internal/llm/{provider,registry,quota,openai,models}.go, internal/controller/llm_chat.go projekt/llm-nutzen.md ok — (Doku erfindet nichts; Preise explizit als „steht nirgends" markiert)
mcp (36 Tools, Guards, Dispatch) internal/mcp/tools_{crud,discovery,system}.go, internal/mcp/guards.go:22-51, internal/controller/mcp_handler.go:43-71 projekt/mcp-nutzen.md, server/schnittstellen.md:72-88 ok Zählung stimmt (10+12+14=36, s. 1.3)
mock, testsuite, mgocrud.old Verzeichnisse vorhanden — ok intern/Test-Helfer bzw. Altlast — keine Doku nötig; mgocrud.old ist toter Code
models (Project/Collection/Hook/Job/Action/Token/Org/Team/Audit/…) diverse, s. unten verteilt thin Feld-Level-Permissions (s. 2.3), Scope-Katalog (s. 2.4), Snapshot-Detailfelder (s. 2.5)
mongocrud Verzeichnis vorhanden — ok Treiber-Detail, keine Doku nötig
rankfusion (RRF + score_rrf/score_sum/rank_score/hybrid, minmax/zscore) internal/rankfusion/*.go, internal/controller/collection_combined_search.go:142-230 projekt/suche.md:65-75 thin Formel ok; Strategien/Normierung/scoreWeight/sourceConfig nur als „existiert" erwähnt, nicht erklärt
ratelimit (Login-Backoff + Hook-Windows) internal/ratelimit/*, internal/controller/ratelimit_middleware.go:18-57, internal/hook/context_ratelimit.go server/sicherheit.md:46-57, reference/hooks-netze.md:101-190 ok —
realtime (In-Memory-Hub, Subscribe/Send, Ringpuffer) internal/realtime/hub.go:94-179, internal/models/api.go:51-523 (Hub je Projekt-API) server/schnittstellen.md:64-70 thin Kapazität „Standard 256", LastN/MaxAge/TTL, Drop-Policy („Alt oder Neu") im Code nicht am Hub verifiziert — nur via Hook-Kontext (context_channel.go) plausibel; kein Abo-Endpunkt — korrekt dokumentiert
suexec (RunInFilesUID, kein Schalter) internal/suexec/thread.go:1-50, Nutzung internal/models/api.go:88-490, internal/filecleanup/cleanup.go:53 server/sicherheit.md:59-67, projekt/jobs-actions.md:49 ok —
utils (ParseSize, ErrorObject …) diverse — ok intern, keine Doku nötig
vectorindex (In-Memory-Vektorindex) internal/vectorindex/index.go projekt/suche.md (nur als „Vektor") thin kein eigener Doku-Eintrag (akzeptabel, da über search-Blöcke bedient)
version (GET /version) internal/controller/setup.go:703-707, internal/version/* server/schnittstellen.md:26, server/betrieb.md:35 ok —

1.2 HTTP-Routen (Quelle: internal/controller/setup.go)

Gesamt unter /api/v1: 48 (27 GET + 14 POST + 2 PUT + 4 DELETE + 1 OPTIONS) + /metrics (Root) = 49. Dazu dbapi-Systemrouten: 5 Modelle (user, project, org, team, token je GET-Liste/GET-:id/POST/PUT-:id/DELETE-:id = 25, register.go:90-94), _meta + _meta/<collection> (register.go:100-114), Login ×2 (in den 14 POST enthalten).

Methode + Pfad Handler (setup.go) Dokuseite(n) Verdikt
GET /metrics (Root, kein /api/v1) setup.go:159 server/betrieb.md:32-42 ok
GET /version setup.go:703 server/schnittstellen.md:26, server/betrieb.md:35 ok
POST /login, POST /login/impersonate setup.go:728-740 (+ models/impersonate.go:29-101) server/schnittstellen.md:28, reference/token-koepfe.md:45 thin
GET /token/_scopes setup.go:303-311 server/schnittstellen.md:28 thin
POST /llm/chat, GET /llm/providers setup.go:321-340 projekt/llm-nutzen.md:12-57 ok
GET /audit setup.go:743-751 server/schnittstellen.md:31, projekt/audit-backup.md:18-46 ok
GET+POST /mcp setup.go:754-755, mcp_handler.go:43-71 server/schnittstellen.md:72-88, projekt/mcp-nutzen.md ok
GET /admin/embedding/status, POST /admin/shutdown setup.go:769-798 server/schnittstellen.md:31 ok
GET /_/:project/:collection, POST /_/:project/:collection (+ X-HTTP-Method-Override: GET) setup.go:506-636 projekt/abfragen-lesen.md, server/schnittstellen.md:38-46 ok
GET /_/:project/:collection/_count, /_facet, /_queue setup.go:514-535 projekt/abfragen-lesen.md:95-110 ok
GET+PUT+DELETE /_/:project/:collection/:id setup.go:536-665 dto. ok
GET /_/:project/:collection/:id/:field, …/:field/*path setup.go:545-568 server/schnittstellen.md:42, projekt/dateien-bilder.md thin
PUT+DELETE /_/:project/:collection (Bulk) setup.go:645-673 server/schnittstellen.md:41 thin
GET+POST /_/:project/_actions/:action setup.go:676-690 projekt/jobs-actions.md:54-119 ok
GET /_openapi/:project setup.go:692-701 server/schnittstellen.md:90-92 thin
GET /_/:project/_/assets/:name/*path setup.go:497-504 server/schnittstellen.md:44, projekt/mcp-nutzen.md:81 ok
POST …/_/admin/reload setup.go:372-376 server/betrieb.md:54, projekt/deploy.md:84-93 ok
POST …/_/admin/regenerate-search, GET …/search-worker/status, GET …/embedding/status setup.go:378-394 server/betrieb.md:54-57, projekt/suche.md:87-90 ok
Backup: GET analyze-download, GET Download, GET download/:file, POST Analyse, POST :restoreToken, DELETE :restoreToken setup.go:398-433, admin_backup*.go projekt/audit-backup.md:110-133, server/betrieb.md:66 thin
Snapshots: GET configs, POST configs/:name/trigger, GET Liste, GET download/:file, GET :id, DELETE :id, POST :id/restore, GET :id/download, GET stats, POST prune (10 Routen) setup.go:436-495 projekt/audit-backup.md:60-108 (…/snapshots…-Sammelzeile in schnittstellen.md:57) thin
OPTIONS /*path (404 ohne echte Route) setup.go:226-230 server/sicherheit.md:44, server/schnittstellen.md (implizit) ok
System-CRUD user/project/org/team/token (je 5 Routen) dbapi/register.go:90-94 via RegisterModel (setup.go:274-312) reference/token-koepfe.md:31-42 (Projekt-Anlage), MCP-user_*-Zeilen gap
GET /_meta, GET /_meta/<collection> dbapi/register.go:100-114 nur Neben­erwähnung projekt/mcp-nutzen.md:408 gap

Routen-Bilanz (gruppiert): ca. 44/49 dokumentiert, 2 gaps (System-CRUD, _meta), Rest thin bei Detail­feldern.

1.3 Hook-Kontexte (alle context_*.go)

Pakete (23 + request-Funktion): base64, bcrypt, cache, channel, charset, config, cookie, crypto, db, debug, exec, fs, http, image, json, jwt, pdf, ratelimit, request(fn: context_request.go:12), response, smtp, tpl, user, xml — alle 23 in reference/hook-kontexte.md:36-61 + Detail­kapiteln vorhanden. Funktionen je Paket — Abgleich RegisterPackageFunctions-Blöcke gegen Referenz:

Paket Code-Funktionen Referenz Fehlend
db (7) find/count/create/update/delete/deleteMany/updateMany (context_db.go:16) hooks-daten.md:8-112 —
cache (6) set/get/has/delete/clear/count (context_cache.go:11) hooks-daten.md:114-194 —
request (1) request() (context_request.go:12) hooks-daten.md:196-217 —
response (5) header/writeHeader/write/flush/writeSSE (context_response.go:13) hooks-daten.md:219-297 —
fs (8) configDir/readFile/writeFile/stat/readDir/mkDir/remove/copy (context_fs.go:17) hooks-daten.md:299-409 —
http (2) fetch/fetchStream (context_http.go) hooks-netze.md:8-44 —
smtp (1) sendMail (context_smtp.go:18) hooks-netze.md:46-68 —
channel (2) subscribe/send (context_channel.go:13) hooks-netze.md:69-100 —
ratelimit (6) backoffCheck/backoffRecord/backoffReset/windowCheck/windowReset/windowCount (context_ratelimit.go) hooks-netze.md:101-190 —
jwt (2) create/parse hooks-sicherheit.md:8-37 —
user (1) auth → nur {id, username, role, permissions} (context_user.go:26-31) hooks-sicherheit.md:39-55 thin (Rückgabe­felder; keine Orgs/Teams)
bcrypt (2) hash/check hooks-sicherheit.md:56-86 —
crypto (2) nur sha256/md5 (context_crypto.go:13-16) hooks-sicherheit.md:87-116 („plus weitere") 1 Fehler (s. 3.9)
cookie (2) get/set hooks-sicherheit.md:117-146 —
exec (1) command hooks-sicherheit.md:147-163 —
config (3) namespace/project/server hooks-sicherheit.md:164-209 —
tpl (1) execute hooks-medien.md:8-27 —
image (1) filter hooks-medien.md:28-46 —
pdf (2) fromHTML/cpu hooks-medien.md:47-84 —
base64 (2) encode/decode hooks-meta.md:8-37 —
json (2) parse/stringify hooks-meta.md:38-67 —
xml (2) create/parse hooks-meta.md:68-97 —
charset (2) decode/iso8859ToUtf8 hooks-meta.md:98-127 —
debug (3) dump/sentryTraceId/sleep hooks-meta.md:128-173 —
Legacy-Aliase (26, compatibility.go:8-35) readCollection, mail, template, file, fetch, dump, header, auth, … — (bewusst) ok

Hook-Bilanz: alle 23 Pakete + alle 70 Funktionen dokumentiert; 1 Fehler (crypto), 1 thin (user.auth-Felder).

1.4 MCP-Tools (36 = 10 + 12 + 14)

  • crud (tools_crud.go:8-104): documents_list, document_get, documents_count, documents_facet, queue_status, document_create, document_update, document_delete, file_read, action_call — alle 10 in projekt/mcp-nutzen.md:63-72 ✓
  • discovery (tools_discovery.go:8-103): projects_list, project_get, collections_list, collection_describe, actions_list, action_describe, jobs_list, openapi_get, system_meta_get, agent_guide_get, assets_list, asset_read — alle 12 in mcp-nutzen.md:73-81 ✓
  • system (tools_system.go:8-34): users_list, user_get, user_create, user_update, user_delete, orgs_list, org_get, teams_list, team_get, audit_query, project_reload, regenerate_search, backup_create, snapshots_list — alle 14 in mcp-nutzen.md:82-90 ✓ (REST-only-Badges entsprechen den REST-only-Descriptions im Code)
  • Guards korrekt dokumentiert: PAT-only (guards.go:22-51), Admin-Token-Reject (mcp_handler.go:51-56), disabled → 404 (mcp_handler.go:45-49), GET-Probe (mcp_handler.go:63-71), Fehler­codes -32601/-32602/-32003/-32004 (mcp_handler.go:107-127) ✓

1.5 Config (config.yml + Env, Quelle internal/config/server.go)

Bereich Code (yaml-Tag) Doku Verdikt
db (dial/prefix/logging) server.go:22-24 + Env DB_DIAL(/MGO_DIAL), DB_PREFIX, DB_LOGGING (server.go:276-286) konfiguration.md:28 ok
api (port, jwtSecret, secureCookies, Lifetimes, upload, adminTokens) server.go:45-56 + Env server.go:290-318 konfiguration.md:29,79-83,109-124 thin
mail (host/username/password) server.go:97-99 + nur MAIL_HOST (server.go:320) konfiguration.md:30 thin
security (allowAbsolutePaths/allowUpperPaths) server.go:103-104 + Env (server.go:324-328) konfiguration.md:31, sicherheit.md:61-67 ok
response.error (stack/message) server.go:125-130 + Env (server.go:338-341) konfiguration.md:33 ok
audit (enabled/defaultTTL/defaultLimit/maxLimit) server.go:171-174 + Env (server.go:345-354) konfiguration.md:33, betrieb.md:44-46 ok (TTL-Default 720h ✓ setup.go:344)
ratelimit (enabled/loginInitialDelay/loginMaxDelay/loginResetAfter) server.go:201-208 + Env (server.go:627-639) konfiguration.md:34, sicherheit.md:46-57 ok (Defaults 1s/60s/15m ✓ server.go:203-207; 429+Retry-After ✓)
hook.cache/ratelimit server.go:179-188 + Env HOOK_* (server.go:642-665) konfiguration.md:35 thin
mcp (enabled/route/maxResultItems/allowAdminActions) server.go:221-224 + Env (server.go:668-686) konfiguration.md:36, schnittstellen.md:72-88 ok
sentry (dsn/environment/serverName/enableTracing/debug) server.go:108-112 (kein Env) konfiguration.md:37, betrieb.md:36 thin
cors server.go:116-121 konfiguration.md:38, sicherheit.md:34-44 thin
llm/embedding Provider + Gruppen server.go:135-167 + Env-Muster (server.go:359-625) konfiguration.md:39,85-107 1 Fehler: EMBEDDING_BGE-M3_* (s. 3.1); Gruppen-Details fehlen (s. 1.1 embedding)
Go-Version-Hinweis go.mod (go 1.25.0, Toolchain go1.25.7 — nicht verifiziert, go.mod nicht gelesen) konfiguration.md:41-43 nicht verifiziert
Datei-Fehlstart/Panic-Regeln server.go:260-296 (Default 8080/tibi/Stack-an; Port <= 0 → Panic) konfiguration.md:19-20 ok

2) Nicht dokumentierte Fähigkeiten (keine Dokustelle in tibi-docs)

  1. System-CRUD per REST (user/project/org/team/token, je 5 Routen, dbapi/register.go:90-94): nur JWT-Projekt­anlage in reference/token-koepfe.md:31-42 angerissen; Org-/Team-/Token-CRUD, token-Felder (scopes, expiresAt, token.go:39-76) fehlen.
  2. _meta-Routen (dbapi/register.go:100-114): nur Neben­erwähnung (projekt/mcp-nutzen.md:408).
  3. Feld-Level-Permissions (models/field_permissions.go; Status­codes http_status.go:53-58): null Treffer in tibi-docs. Server-Doc docs/17-field-level-permissions.md existiert, wurde nicht übernommen.
  4. Scope-Katalog (models/token_scope_catalog.go:47-90: systemScopesFor, UND-Regel Token×Besitzer): nur Beispiel in server/sicherheit.md:23-28; Katalog­logik fehlt.
  5. upload.allowedMimeTypes (config/server.go:46): null Treffer.
  6. Snapshot-Detailfelder: mode: include/exclude, collectionDedup (snapshot_config.go:34-42), permissions (snapshot_config.go:53, „Phase 2"), retention.maxAge/maxSizeBytes (snapshot_config.go:89-93), Einzel­routen (stats/prune/trigger/:id/download).
  7. Embedding-Gruppen-Tuning: Policies/Distributions/Health/Race/Retry/Bulk (config/embedding_group.go, Env server.go:489-625); nur MEMBERS/POLICY/TIMEOUT_TOTAL erwähnt.
  8. Such­modi jenseits Starter: text/regex/eval/filter (models/collection.go:314), sourceConfig/scoreWeight/Strategien im Detail, autoRegenerate, Search-Worker, Vector-Loader; aggregate fehlt in projekt/abfragen-lesen.md (nur MCP/SSR/Fehler­codes nennen es); Such-Debug (controller/search_debug.go, search_enrichment.go) fehlt.
  9. Ephemeral REST Tokens: docs/24-ephemeral-rest-tokens.md beschreibt sie — im Code kein Treffer (phemeral nur in docs/24*, tmp/diff.patch). Entweder unverified/unge­landet oder entfernt: Doku beschreibt nicht-existente Fähigkeit.
  10. SSR als Server-Fähigkeit: kein ssr-Code in internal/ (nur Starter-Hooks + program_async_test.go:1024 erwähnen ssrRequestKirby). Korrekt als Starter-Doku abgelegt, aber server/schnittstellen.md:68 („kein fertiger Abo-Endpunkt … nur über Hooks") ist die einzige Server-Aussage — ein expliziter Satz „SSR-Bundle/Cache sind Starter-Konvention, kein Server-Feature" fehlt.
  11. Gzip-Ausnahmen (setup.go:151-154: kein Gzip für .pdf/.mp4/.jpg/.jpeg/.png + /metrics): undokumentiert.
  12. NaN-Sanitizing / _search-Stripping (setup.go:814-825): undokumentiert (intern, niedrige Priorität).
  13. Backup-Restore-Token-Lebenszyklus (Analyse → :restoreToken → Restore/Cleanup, admin_backup*.go) und Snapshot-RAM-Begrenzung: nur angerissen.
  14. Sentry-Felder außer dsn, Hook-Cache-Defaults, Filecleanup, bulkCreate-Aufrufweg (controller/collection_bulk_post.go ohne eigene Route — Aufruf­weg nicht verifiziert).
  15. mgocrud.old/: toter Code im Repo, keine Doku nötig — aber Aufräum­kandidat.

3) Falsche Doku-Aussagen (12 geprüfte Behauptungen; falsche zuerst)

# Doku-Zitat (Datei:Zeile) Code (Datei:Zeile) Urteil
1 EMBEDDING_BGE-M3_* — „Bindestrich → Unterstrich + Großschrift: bge-m3 → EMBEDDING_BGE-M3_*" (server/konfiguration.md:21, Beispiel :98-105) normalizeEnvKeyName: - → _, dann UPPER (config/server.go:246-250): bge-m3 → BGE_M3, also EMBEDDING_BGE_M3_* FALSCH (Bindestrich bleibt im Doku-Beispiel stehen)
2 „braucht dein Token AllowSnapshot: true" (projekt/audit-backup.md:107; Tabelle :127-128) Projekt-Admin-Token heißt allowSnapshots (plural, klein): models/project.go:104, Prüfung t.AllowSnapshots (controller/admin_snapshot_list.go:23-40) FALSCH (Singular statt Plural; korrekt: allowSnapshots)
3 reference/openapi.md komplett: Quelle TIBI_API_URL/openapi.json, „Erzeugen mit npm run sync:openapi" Route ist GET /api/v1/_openapi/:project (controller/setup.go:692-701, openapi_project_get.go:12); kein openapi.json, kein sync:openapi im Server-Code gefunden FALSCH (Platzhalter, passt nicht zum Server-Generator; server/schnittstellen.md:90-92 ist dagegen korrekt)
4 crypto.sha256, crypto.md5 „(plus weitere)" (reference/hook-kontexte.md:52) Nur 2 Funktionen registriert (hook/context_crypto.go:13-16) FALSCH („weitere" existieren nicht)
5 audit.defaultTTL: 720h „(30 Tage, "0" = ewig)" (projekt/audit-backup.md:29) Default 720h ✓ (controller/setup.go:344); kein "0"-Sonderfall gefunden (models/auditlog.go:498-508, dbcrud/index.go:12-14 geben ttl direkt an den Index) UNKLAR, eher falsch — „ewig" nicht belegt; expireAfterSeconds: 0 liefe auf sofortigen Verfall hinaus. Nicht verifiziert, ob mongocrud 0 abfängt
6 POST /api/ssr?clear=1 / POST /api/_/admin/reload (ohne /v1, ohne Namespace) (projekt/deploy.md:90-91) Server-Routen sind /api/v1/_/:project/_/admin/reload (setup.go:372) und haben keine ssr-Route (kein ssr-Code in internal/) UNKLAR — nur als Starter-Proxy-Pfade sinnvoll; als Server-Aussage falsch. Doku markiert sie als Proxy („Live/Staging-URL"), aber der Kontrast zur Server-Tabelle fehlt
7 „ein gesetztes mcp.route/MCP_ROUTE wird ignoriert (Routing hart in setup.go)" (server/schnittstellen.md:77, projekt/mcp-nutzen.md:10) Routing fix apiGroup.GET/POST("/mcp") (setup.go:754-755); mcp.Route()-Helper existiert (mcp/server.go:27-32), wird aber im Routing nirgends verwendet (nur MaxResultItems() in mcp_tools_impl.go:701-707 genutzt) KORREKT
8 „Content-Range: mit Doppelpunkt — Tippfehler im Code" (projekt/abfragen-lesen.md:34) c.Header("Content-Range:", …) (controller/collection_get.go:32) KORREKT
9 „429 plus Retry-After-Header (Sekunden) … nur für Login" (server/sicherheit.md:52-57) Retry-After + 429 (controller/ratelimit_middleware.go:56-57); Login-Geltung via loginMiddleware nur an /login (setup.go:712-732) KORREKT
10 „model ist optional … Allowlist leer = keine Prüfung" + 403-vor-400-Reihenfolge (projekt/llm-nutzen.md:31-57,71-86) Auth+Scope vor Validierung (controller/llm_chat.go:28-57); Allowlist-Gate, Default-Redirect, Secrets-Ausschluss (llm_chat.go, setup.go:322-340) KORREKT
11 Legacy-Default: Konflikt 500/409, Validierung 400/422, Schalter legacy.httpCodes (reference/fehlercodes.md:20-21,43-45) http_status.go:13-58 (201/200, 204/200, 401/403, 422/400, 409/500, 403/400); Default true (models/project.go:80-87); Key httpCodes (project.go:77) KORREKT
12 „CORS-Kaskade /_actions/<name> → /<collection> → / → """ + „Projekt mergt feldweise (merge: true/false)" (server/sicherheit.md:36-44) Kaskaden-Reihenfolge exakt so (setup.go:193-223); CORSConfig.Merge existiert (models/project.go:107-114); globaler Server-CORS ist auskommentiert (setup.go:141-149) KORREKT (Merge-Semantik im Detail nicht verifiziert)

Weitere verifizierte Korrekt-Aussagen (Stichprobe): Port-Panic <= 0 ✓ (server.go:295-296), Not-Defaults 8080/tibi/Stack ✓ (server.go:265-268), secureCookies-Default true ✓ (server.go:61-64), Lifetimes 60m/10h ✓ (server.go:69-90), Audit-TTL-Default 720h ✓, MCP-404-bei-disabled ✓ (mcp_handler.go:45-49), X-Auth-Token-PAT-Prefix tibi_pat_ ✓ (mcp/guards.go:51), Bulk-Allow+Bulk ✓ (models/permission.go:145-182), snapshotPath-Default „snapshots" ✓ (models/project.go:65-67), collections: [] = alle ✓ (snapshot_config.go:144), Admin-Auth-Reihenfolge ✓ (admin_auth.go:20-74), 100-MB-Body-Default ✓ (middleware_bodysize.go:14-29), Kaskade Server→Projekt→Collection mit Server-Cap ✓ (middleware_bodysize.go:34-69).

4) Veraltete Doku in tibi-server/docs/*.md (je Datei eine Zeile)

Datei Inhalt (Kurz) Abdeckung in tibi-docs
01-architecture.md Architektur-Überblick teilweise (keine Architektur-Seite; verstreut in server/uebersicht.md)
02-configuration.md Vollständige Config-Referenz teilweise (server/konfiguration.md; Gruppen-Tuning/Env-Details fehlen)
03-api-endpoints.md (2406 Zeilen) Alle Endpunkte teilweise (server/schnittstellen.md + Projekt­seiten; System-CRUD/_meta fehlen)
04-collections.md Collection-Schema/Operatoren teilweise (projekt/sammlungen-anlegen.md, abfragen-lesen.md; aggregate/eval fehlen)
05-authentication.md Login/JWT/Impersonate teilweise (Login/Impersonate nur Tabellen­zeilen; Logout-Flow fehlt)
06-hooks.md (1717 Zeilen) Hook-Lifecycle + Kontexte vollständig (Lifecycle via tibi-types-Schema nicht verifiziert; Kontexte alle da)
07-realtime.md Realtime-Hub teilweise (server/schnittstellen.md:64-70 nur Überblick)
08-file-upload-images.md Upload/Bilder teilweise (Starter-Sicht in projekt/dateien-bilder.md; allowedMimeTypes/Filecleanup fehlen)
09-llm-integration.md LLM/Budgets vollständig (projekt/llm-nutzen.md, inkl. Verifizierungs­zeile)
10-audit.md Audit-Log teilweise (zweistufig + TTL ok; "0"-Claim fraglich, s. 3.5)
11-jobs.md Jobs/Cron vollständig (projekt/jobs-actions.md)
12-deployment.md Deployment/Profile teilweise (server/betrieb.md, projekt/deploy.md; Compose-Profile Starter-seitig)
13-openapi-metrics.md OpenAPI + Metriken teilweise (OpenAPI-Generator ok; Metrik-Labels/Referenz-openapi.md defekt, s. 3.3)
14-security.md Tokens/CORS/Ratelimit/Pfade vollständig (server/sicherheit.md + konfiguration.md)
15-troubleshooting.md Fehlerbilder teilweise (verteilt auf Fehler­tabellen; keine eigene Seite)
16-cookbook.md Rezepte teilweise (Rezepte in Projekt­seiten verstreut)
17-field-level-permissions.md Feld-Rechte nicht abgedeckt (null Treffer, s. 2.3)
18-orgs-teams.md Orgs/Teams teilweise (nur Überblick in projekt/rechte-tokens.md:125-142)
19-actions.md Actions vollständig (projekt/jobs-actions.md:54-119)
20-referenced-read-safety.md Lookup-Read-Safety teilweise (projekt/abfragen-lesen.md:89-93, rechte-tokens.md)
21-backup-restore.md Backup/Restore teilweise (Flows ok; Token-Lebens­zyklus fehlt)
22-personal-access-tokens.md PATs teilweise (Köpfe/Scopes ok; token-CRUD-Felder fehlen)
23-mcp.md MCP vollständig (projekt/mcp-nutzen.md, 36/36 Tools)
24-ephemeral-rest-tokens.md Ephemere REST-Tokens nicht abgedeckt — und im Code nicht existent (s. 2.9); keine Übernahme, sondern Klärung nötig (implementieren oder Doku löschen)