- 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
27 KiB
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 Nebenerwä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 Nebenerwähnung projekt/mcp-nutzen.md:408 |
gap |
Routen-Bilanz (gruppiert): ca. 44/49 dokumentiert, 2 gaps (System-CRUD, _meta), Rest thin bei Detailfeldern.
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 + Detailkapiteln 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ückgabefelder; 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 inprojekt/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 inmcp-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 inmcp-nutzen.md:82-90✓ (REST-only-Badges entsprechen denREST-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), Fehlercodes -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)
- System-CRUD per REST (
user/project/org/team/token, je 5 Routen,dbapi/register.go:90-94): nur JWT-Projektanlage inreference/token-koepfe.md:31-42angerissen; Org-/Team-/Token-CRUD,token-Felder (scopes,expiresAt,token.go:39-76) fehlen. _meta-Routen (dbapi/register.go:100-114): nur Nebenerwähnung (projekt/mcp-nutzen.md:408).- Feld-Level-Permissions (
models/field_permissions.go; Statuscodeshttp_status.go:53-58): null Treffer in tibi-docs. Server-Docdocs/17-field-level-permissions.mdexistiert, wurde nicht übernommen. - Scope-Katalog (
models/token_scope_catalog.go:47-90:systemScopesFor, UND-Regel Token×Besitzer): nur Beispiel inserver/sicherheit.md:23-28; Kataloglogik fehlt. upload.allowedMimeTypes(config/server.go:46): null Treffer.- 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), Einzelrouten (stats/prune/trigger/:id/download). - Embedding-Gruppen-Tuning: Policies/Distributions/Health/Race/Retry/Bulk (
config/embedding_group.go, Envserver.go:489-625); nur MEMBERS/POLICY/TIMEOUT_TOTAL erwähnt. - Suchmodi jenseits Starter:
text/regex/eval/filter(models/collection.go:314),sourceConfig/scoreWeight/Strategien im Detail,autoRegenerate, Search-Worker, Vector-Loader;aggregatefehlt inprojekt/abfragen-lesen.md(nur MCP/SSR/Fehlercodes nennen es); Such-Debug (controller/search_debug.go,search_enrichment.go) fehlt. - Ephemeral REST Tokens:
docs/24-ephemeral-rest-tokens.mdbeschreibt sie — im Code kein Treffer (phemeralnur indocs/24*,tmp/diff.patch). Entweder unverified/ungelandet oder entfernt: Doku beschreibt nicht-existente Fähigkeit. - SSR als Server-Fähigkeit: kein
ssr-Code ininternal/(nur Starter-Hooks +program_async_test.go:1024erwähnenssrRequestKirby). Korrekt als Starter-Doku abgelegt, aberserver/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. - Gzip-Ausnahmen (
setup.go:151-154: kein Gzip für.pdf/.mp4/.jpg/.jpeg/.png+/metrics): undokumentiert. - NaN-Sanitizing /
_search-Stripping (setup.go:814-825): undokumentiert (intern, niedrige Priorität). - Backup-Restore-Token-Lebenszyklus (Analyse →
:restoreToken→ Restore/Cleanup,admin_backup*.go) und Snapshot-RAM-Begrenzung: nur angerissen. - Sentry-Felder außer
dsn, Hook-Cache-Defaults, Filecleanup,bulkCreate-Aufrufweg (controller/collection_bulk_post.goohne eigene Route — Aufrufweg nicht verifiziert). mgocrud.old/: toter Code im Repo, keine Doku nötig — aber Aufräumkandidat.
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 + Projektseiten; 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 Tabellenzeilen; 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. Verifizierungszeile) |
| 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 Fehlertabellen; keine eigene Seite) |
| 16-cookbook.md | Rezepte | teilweise (Rezepte in Projektseiten 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-Lebenszyklus 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) |