# Audit 03: tibi-types + tibi-svelte-starter vs. tibi-docs Stand: 2026-10-16. Codebasen: `tibi-types` (schemas + `index.d.ts`), `tibi-svelte-starter` (README, AGENTS, package.json, frontend/api/Docker/Env). Doku: `tibi-docs/src/content/docs` (Seiten `einstieg/*`, `projekt/*`, `reference/schemas.md`, `reference/hooks-*.md`). Regel: Jede Aussage mit `datei:zeile` belegt; ohne Beleg steht „nicht verifiziert". ## 1) Schema-Matrix tibi-types (16 Schemas in `schemas/config/`) Quelle Top-Level-Properties: per Python aus den Schema-Dateien extrahiert. Dokustand: `reference/schemas.md:10-32` listet alle 16 Schemas nur tabellarisch (Name → Datei → Pflichtfelder), beschreibt aber keine Properties im Detail; Details liegen ggf. auf Projektseiten. | Schema (`schemas/config/*.json`) | Top-Level-Properties | in `reference/schemas.md` beschrieben? | undokumentierte Properties (vs. schemas.md + Projektseite) | |---|---|---|---| | `project.schema.json` | `namespace, meta, upload, collections, jobs, actions, assets, cors, admin, hook, audit, strictFields, snapshotPath, snapshots, legacy` (`project.schema.json:99-333` für Sub-Blöcke: `agent` :102, `assets` :174, `cors` :187, `admin` :227, `hook` :262, `audit` :303, `strictFields` :312, `snapshotPath` :315, `snapshots` :319, `legacy` :333) | nur Zeile in Tabelle (`schemas.md:18`); `hook/cache/ratelimit`-Details nur in `server/konfiguration.md`, `snapshots` nur in `projekt/audit-backup.md`, `admin` nur Server-Seiten | `snapshotPath` (String, Ablagepfad Snapshots), `snapshots` (Array, Zeitplan/Retention — nur Ablauf in `audit-backup.md`, kein Feld- mapping), `legacy` (nur in `reference/fehlercodes.md` erwähnt, sonst nicht verifiziert), `strictFields` auf Projektebene (nur `fehlercodes.md`, nicht verifiziert), `cors` auf Projektebene (nur Server-Seiten `server/sicherheit.md`, `server/konfiguration.md`), `admin`-Subkeys (nur Server-Seiten) | | `collection.schema.json` | `name, defaultLanguage, uploadPath, upload, permissions, projections, hooks, meta, imageFilter, fields, indexes, audit, bulk, cors, queryLimits, readonlyFields, hiddenFields, strictFields, search` (`collection.schema.json:17` `uploadPath`, `:63` `imageFilter`, `:103` `audit`, `:126` `bulk`, `:147` `cors`, `:187` `queryLimits`, `:201` `readonlyFields`, `:207` `hiddenFields`, `:213` `strictFields`, `:216` `search`) | nur Tabellenzeile (`schemas.md:19`); Teilabdeckung: `indexes`+`search` in `projekt/sammlungen-anlegen.md:104-150`, `imageFilter` in `projekt/dateien-bilder.md`, `audit` in `projekt/audit-backup.md`, `cors` in `projekt/jobs-actions.md` | `uploadPath` (String, veralteter Upload-Pfad neben `upload`; nicht verifiziert in Doku), `queryLimits` (`defaultLimit`/`maxLimit`; kein Treffer in Doku — nicht verifiziert), `readonlyFields`/`hiddenFields` auf Collection-Ebene (kein Treffer in Doku — nicht verifiziert), `strictFields` (nur `fehlercodes.md`, kein Konzepttext), `bulk` (`optimize.create/update/delete`; in `projekt/*` nur `bulk`-Wort in `mcp-nutzen.md`/`hooks-schreiben.md` ohne Feld-Doku), `upload.allowedMimeTypes`/`maxBodySize` (nur Server-Seite, nicht pro Collection), Index-Subkeys `dropDups/sparse/background/defaultLanguage/languageOverride` (Schema-`$defs` `indexConfig`; Doku `sammlungen-anlegen.md:106-135` zeigt nur Text/Unique-Beispiel) | | `field.schema.json` | via `$defs.field`: `name, type, index, subFields, validator, readonly, hidden, strictFields, meta` (Typ-Enum `string…any`, `index`-Enum `single/unique/text/sparse/background`) | nur Tabellenzeile (`schemas.md:20`) | `readonly`/`hidden` als Bool-oder-eval (`BoolOrEval`, `index.d.ts:13`); Doku `felder-widgets.md`/`sammlungen-anlegen.md` enthalten kein `readonly`/`hidden` (grep ohne Treffer) — nicht verifiziert; `strictFields` auf Feldebene (nur `fehlercodes.md`); `index`-Enum-Details (`sparse/background`) ohne Doku | | `field-list.schema.json` | Array-Items `string \| field.schema` (Datei 1:20) | nur Tabellenzeile (`schemas.md:21`) | keine Properties (Wrapper); Verwendung (String-Kurzform vs. Objekt) in `felder-widgets.md:12-32` teilweise gezeigt — abgedeckt | | `field-meta.schema.json` | `label, widget, i18n, helperText, hideLabel, hide, protected, position, section, containerProps, defaultValue, dependsOn, inputProps, choices, foreign, downscale, imageEditor, drillDown, pageSize, preview, addElementLabel, filter, pagebuilder, schemaRef, openapi` (`field-meta.schema.json:14` `widget`, `:50` `hideLabel`, `:66` `containerProps`, `:131` `dependsOn`, `:183` `downscale`, `:198` `imageEditor`, `:229` `drillDown`, `:232` `pageSize`, `:239` `addElementLabel`, `:242` `filter`, `:303` `schemaRef`) | nur Tabellenzeile (`schemas.md:22`); Teilabdeckung in `projekt/felder-widgets.md` (Aufbau :12, Typen :33, Validatoren :60, Choices/FK :80, dependsOn :131, i18n :151) | `hideLabel` (Bool; kein Treffer — nicht verifiziert), `containerProps` (Objekt; kein Treffer), `position`/`section` (Layout; `section` nur `collection-meta`, Feld-`section` nicht verifiziert), `pageSize` (Zahl; kein Treffer), `addElementLabel` (String; kein Treffer), `imageEditor` (Konfig; kein Treffer), `schemaRef` (String-Ref; kein Treffer), `filter: true/false` als Admin-Filter-Opt-in (`field-meta.schema.json:242-246`; Doku zeigt nur `filter_public.js`-Hook, nicht das Flag), `inputProps`/`defaultValue`-Details nur angerissen | | `collection-meta.schema.json` | `label, muiIcon, group, exports, designGuide, imageUrl, hide, singleton, subNavigation, preview, i18n, defaultSort, viewHint, sidebar, sections, openapi, query, agent` (`collection-meta.schema.json:69` `singleton`, `:84` `subNavigation`, `:211` `defaultSort`, `:231` `viewHint`, `:423` `sidebar`, `:441` `sections`, `:465` `openapi`, `:468` `query`, `:503` `agent`) | nur Tabellenzeile (`schemas.md:23`); Teilabdeckung: `sammlungen-anlegen.md:79-103` (Label/Gruppe/Icon/Vorschau), `admin/ansichten-listen.md` (`subNavigation`, `defaultSort`, `viewHint`) | `singleton` (Bool, Ein-Dokument-Collection; kein Treffer in Doku — nicht verifiziert), `sections` (Array, Editor-Sektionen; kein Treffer), `hide` auf Collection-Ebene, `exports/designGuide/imageUrl` (nicht verifiziert), `query`-Block (Meta-Abfragen; nicht verifiziert), `agent`-Block (nicht verifiziert), `openapi`-Meta (nur Tabellenzeile) | | `permissions.schema.json` | `public, user` + `$defs.permissionSet`: `methods, filter, validProjections, readonlyFields, hiddenFields` | nur Tabellenzeile (`schemas.md:24`) | `validProjections` (String-Array; kein Treffer — nicht verifiziert), `filter` (Mongo-Filter je Permission-Set; nur `rechte-tokens.md` grob, kein Feld-Mapping — teilweise), `readonlyFields`/`hiddenFields` je Permission-Set (kein Treffer) | | `hooks.schema.json` | `get, post, put, delete, audit` + `$defs`: `hook(type/file/timeout)`, `getHooks(handle/read/return/file)`, `postHooks(bind/validate/handle/create/return/bulkCreate/bulkReturn)`, `putHooks(bind/validate/update/return/bulkUpdate/bulkReturn)`, `deleteHooks(delete/return/bulkDelete/bulkReturn)`, `auditHooks(return)` | nur Tabellenzeile (`schemas.md:25`); Hook-Protokoll in `projekt/hooks-schreiben.md` | `bulkCreate/bulkReturn`, `bulkUpdate/bulkReturn`, `bulkDelete/bulkReturn` (Stufen im Schema, in `hooks-schreiben.md` nur `bulk`-Wort ohne Stufen-Mapping — teilweise), `bind` vs. `validate` vs. `handle`-Reihenfolge (Schema-`$defs`, Doku-Erwähnung prüfen — teilweise), `audit.return`-Hook (Schema vorhanden; Doku nur `audit-backup.md`, kein Hook-Stufen-Text) | | `job.schema.json` | `cron, type, file, timeout, meta` | nur Tabellenzeile (`schemas.md:26`); Ablauf in `projekt/jobs-actions.md` | `timeout` (Sekunden; in `jobs-actions.md` erwähnt — abgedeckt/teilweise), `meta` (frei; nicht verifiziert) | | `action.schema.json` | `name, meta, permissions, hooks, audit, cors` + `$defs`: `actionField`, `actionMappedField(source/name/...)`, `actionFieldSection`, `actionExecutionMeta(kind/cancellable)`, `actionOutputProgressMapping(indexField/countField/statusField/messageField/fields)`, `actionOutputMapping(summary/details/progress)`, `actionOutputMeta(title/mapping)`, `actionMethodMeta(query/data/execution/output)`, `actionMeta(label/muiIcon/description/group/hide/methods)` | nur Tabellenzeile (`schemas.md:27`); Actions in `projekt/jobs-actions.md`, Admin-Ansicht in `admin/aktionen.md` | `actionOutputMapping`/`actionOutputProgressMapping`-Felder (`indexField/countField/statusField/messageField/fields`; nur `admin/aktionen.md`-Treffer für „mapping", kein Feld-Mapping — teilweise/nicht verifiziert), `actionExecutionMeta.kind/cancellable` (nicht verifiziert), `actionMappedField.source` vs. `name` (Dot-Path vs. Legacy; nicht verifiziert), `cors`/`audit` je Action (nicht verifiziert) | | `asset.schema.json` | `name, path` | nur Tabellenzeile (`schemas.md:28`) | keine weiteren Properties; Verwendung (`config.yml`-Assets) in `server/schnittstellen.md`/`neues-projekt.md` — abgedeckt | | `image-filter.schema.json` | Array von Filter-Objekten (kein Top-Level-Props-Objekt) | nur Tabellenzeile (`schemas.md:29`); Anwendung in `projekt/dateien-bilder.md` | Filter-Parameter (`width/height/fit/fill/resampling/anchor/…/quality/outputType` aus `ImageFilterParams`, `index.d.ts:314-358`) sind in `dateien-bilder.md` nur als `filter`-Query-Param gezeigt, kein Parameter-Mapping — teilweise | | `projections.schema.json` | Pattern-Key `{name: {select: {feld: 0\|1}}}` (Wrapper-Datei 1:30) | nur Tabellenzeile (`schemas.md:30`); Nutzung in `projekt/abfragen-lesen.md` | `select: null`-Variante (Schema erlaubt `object|null`; Doku nur 0/1 — teilweise) | | `snapshot.schema.json` | `name, description, collections, includeMedia, collectionDedup, mode, retention, schedule, permissions, enabled` | nur Tabellenzeile (`schemas.md:31`); Ablauf in `projekt/audit-backup.md`, Endpunkte in `server/schnittstellen.md` | `includeMedia` (Bool), `collectionDedup` (Bool/Strategie), `mode`, `retention`, `schedule`, `permissions`, `enabled` — Feld-für-Feld-Mapping in `audit-backup.md` prüfen, per Stichprobe nur Ablauf erzählt — teilweise (genaue Abdeckung nicht verifiziert) | | `openapi.schema.json` | `disabled, get, getOne, post, put, delete` + `$defs`: `codeSample(lang/label/source)`, `responseObject`, `operationObject(disabled/tags/summary/description/x-codeSamples/parameters/responses/security)`, `fieldOpenapi(disabled/description/example/format/enum/deprecated)` | nur Tabellenzeile (`schemas.md:32`); generierte Referenz in `reference/openapi.md` | `x-codeSamples`, `getOne`-Trennung (`get` vs. `getOne`), `fieldOpenapi.example/format/enum/deprecated` — Detail-Mapping nicht verifiziert (teilweise) | | `defs.schema.json` | nur `$ref`-Bausteine, kein Ziel (`schemas.md:33` sagt das explizit) | abgedeckt (`schemas.md:33`) | — | Wichtigste undokumentierte Schema-Properties (Top-10, mit Typ/Wirkung aus Schema): 1. `collection.queryLimits` (`collection.schema.json:187`) — Objekt `{defaultLimit, maxLimit}` (Zahlen): GET-Limits je Collection. Kein Treffer in Doku — nicht verifiziert. 2. `collection.readonlyFields` / `hiddenFields` (`collection.schema.json:201-207`) — String-Arrays: Collection-weite Schreib-/Sichtschutz-Felder. Kein Treffer in Doku — nicht verifiziert. 3. `collection.uploadPath` (`collection.schema.json:17`) — String: Legacy-Upload-Pfad neben `upload:{maxBodySize, allowedMimeTypes}`. Nicht verifiziert in Doku. 4. `collection.strictFields` + Feld-`strictFields` (`collection.schema.json:213`; Feld-`$defs`) — Bool: unbekannte Felder ablehnen. Nur `fehlercodes.md`-Treffer, kein Konzept — faktisch undokumentiert. 5. `collection-meta.singleton` (`collection-meta.schema.json:69`) — Bool: Collection auf ein Dokument begrenzen. Kein Treffer — nicht verifiziert. 6. `collection-meta.sections` (`collection-meta.schema.json:441`) — Array: Editor-Sektionen. Kein Treffer — nicht verifiziert. 7. `field-meta.hideLabel` (`field-meta.schema.json:50`) — Bool: Label im Editor verstecken. Kein Treffer — nicht verifiziert. 8. `field-meta.imageEditor` (`field-meta.schema.json:198`) — Objekt: Bildeditor-Konfig je Feld. Kein Treffer — nicht verifiziert. 9. `permissionSet.validProjections` (Schema-`$defs.permissionSet`) — String-Array: erlaubte Projections je Rolle. Kein Treffer — nicht verifiziert. 10. `action.actionOutputMapping`/`actionOutputProgressMapping` (`action.schema.json`-`$defs`) — `{summary/details/progress{indexField/countField/statusField/messageField/fields}}`: Fortschritts-/Ergebnis-Mapping von Actions. Nur „mapping"-Wort in `admin/aktionen.md`, kein Feld-Mapping — faktisch undokumentiert. ## 2) Hook-Typen (`tibi-types/index.d.ts`, 1716 Zeilen) Die `reference/hooks-*.md` dokumentieren Pakete/Funktionen (`db.find` …), nicht Typen. `reference/schemas.md` listet nur Schema-Dateien. `reference/hook-kontexte.md:8-28` listet Pakete aus `internal/hook` (Server-Code), nicht `index.d.ts`-Typen. Ergebnis: fast alle globalen Typen sind als Typen undokumentiert (Verwendung teils in Beispielen, aber kein Typ-Mapping). | Typ (`index.d.ts`) | Zeilen | in hooks-*/schemas.md dokumentiert? | |---|---|---| | `CollectionDocument` | `index.d.ts:2-7` | nicht verifiziert (nirgends als Typ; implizit in Beispielen) | | `BoolOrEval` | `index.d.ts:13` | nein — `readonly`/`hidden`-Felder selbst fehlen (s. §1) | | `FieldImageValidator` (`minWidth/maxWidth/minHeight/maxHeight/allowNonImages/allowUnknownDimensions`) | `index.d.ts:16-29` + Schema `field.schema.json:130-142` | nein — `felder-widgets.md:60-78` kennt nur `maxFileSize/accept`, keine Bildmaß-Validatoren | | `FieldValidator` (alle Schlüssel) | `index.d.ts:31-68` | teilweise — `felder-widgets.md:60-78` listet `required/pattern/in/minLength/maxLength/min/max/minDate/maxDate/minItems/maxItems/format/maxFileSize/minFileSize/accept/eval/allowZero`, aber **nicht** `image: FieldImageValidator` als Unterschlüssel | | `SearchConfig` + `RrfConfig`/`SourceFusionConfig`/`VectorConfig`/`NgramConfig`/`NormalizeConfig`/`RegexConfig`/`ScoreConfig` | `index.d.ts:70-184` | teilweise — `projekt/suche.md:33-38` zeigt `autoRegenerate`, `:74` nennt `score_rrf/score_sum/rank_score/hybrid`, `minmax/zscore`, `scoreWeight`, `sourceConfig` als „existiert im Code", ohne Feld-Mapping | | `SearchExplainSource/SearchExplanation/SearchMeta` (`qExplain`) | `index.d.ts:120-147` | nicht verifiziert (kein Treffer `qExplain`/`SearchExplanation` in Doku-Stichprobe) | | `QueryLimitsConfig/BulkOptimizeConfig/BulkConfig` | `index.d.ts:187-209` | nein (s. §1 `queryLimits`/`bulk`) | | `CollectionIndex` (`name/key/unique/dropDups/background/sparse/defaultLanguage/languageOverride`) | `index.d.ts:211-228` | teilweise — `sammlungen-anlegen.md:106-135` zeigt Text-/Unique-Beispiel, keine Subkey-Tabelle | | `AuditCollectionConfig` | `index.d.ts:231-243` | teilweise — `audit-backup.md` erzählt Ablauf, kein Feld-Mapping (`enabled/actions`-Liste) | | `UploadConfig` (`maxBodySize/allowedMimeTypes`) | `index.d.ts:245-248` | teilweise — Server-Seite ja, Collection-Ebene nein | | `LocalizedText/ChoiceValue/ChoiceStyle/ChoiceItem` | `index.d.ts:250-272` | teilweise — `felder-widgets.md:82-110` zeigt Choices, aber kein `badgeVariant/chipVariant/badgeStyle/chipStyle`-Mapping | | `PreviewTableColumn/PreviewSlots/PreviewConfig/EvalStringConfig/EvalHtmlConfig` | `index.d.ts:274-311` | teilweise — `sammlungen-anlegen.md:79-103` + `admin/ansichten-listen.md` zeigen Vorschau, kein Slot-Mapping (`label/secondary/tertiary/badge/image/table/select`) | | `ImageFilterParams` | `index.d.ts:314-358` | teilweise (s. §1 `image-filter`) | | `CollectionInfo` (inkl. `imageFilter/indexes/audit/bulk/queryLimits/readonlyFields/hiddenFields/search/strictFields`) | `index.d.ts:361-388` | nein als Typ; Felder s. §1 | | `ActionInfo/ActionMeta/ActionMethodMeta/ActionExecutionMeta/ActionMappedField/ActionOutputProgressMapping/ActionOutputMapping/ActionOutputMeta` | `index.d.ts:391-465` | nein als Typen; Ablauf in `jobs-actions.md`/`admin/aktionen.md` | | `MethodPermission/SimpleMethodPermission/AllowedMethodPermission/CollectionYourPermissions/ActionYourPermissions/ProjectYourPermissions/PermissionSet/ProjectionConfig` | `index.d.ts:467-521` | teilweise — `rechte-tokens.md` + `abfragen-lesen.md` (Projections) behandeln Konzepte, kein Typ-Mapping (`bulk`-Flag, `filter`, `validProjections` fehlen) | | `CollectionFieldInfo` (`readonly/hidden/strictFields`) | `index.d.ts:523-536` | teilweise (s. Feld-§1) | | `ApiInfo/ProjectInfo` | `index.d.ts:539-562` | nicht verifiziert als Typen | | `AuditLogEntry` | `index.d.ts:565-611` | teilweise — `audit-backup.md` (Eintrags-Felder `userId/action/snapshot/changes` erzählt, kein Typ-Mapping) | | `DbReadOptions` (`filter/selector/projection/offset/limit/sort/pipelineMod`) | `index.d.ts:613-627` | teilweise — `hooks-daten.md:8-113` dokumentiert `find/count/…`-Signaturen, `pipelineMod` als Option nicht verifiziert | | `GetHookData/GetHookGetOnlyData/PostHookData/JobConfig/JobData` | `index.d.ts:629-737` | teilweise — `hooks-schreiben.md` (Stufen), `jobs-actions.md` (Jobs); `bulkReturn`-Felder (`created/ids/modified/deleted`) ohne Typ-Mapping | | `ConfigPackage/DbPackage/SmtpPackage/FsPackage/TplPackage/HttpPackage` | `index.d.ts:738-1062` | ja (Funktionen) — `hooks-daten.md`, `hooks-netze.md`, `hooks-medien.md`, `hooks-sicherheit.md` | | `DebugPackage/ResponsePackage/UserPackage/BcryptPackage/JwtPackage/CharsetPackage/ImagePackage/XmlPackage/CookiePackage/PdfPackage/CryptoPackage/JsonPackage/ExecPackage/Base64Package` | `index.d.ts:1064-1474` | ja (Funktionen) — `hooks-meta.md`, `hooks-medien.md`, `hooks-sicherheit.md` | | `CachePackage/RatelimitPackage/ChannelSubscribeOptions/ChannelSubscription/ChannelPackage` (+ Rest ab `:1616`) | `index.d.ts:1481-1640` | ja (Funktionen) — `hooks-daten.md:114-195` (cache), `hooks-netze.md:69-176` (channel, ratelimit) | Undokumentierte Typen (als Typ-Mapping): `CollectionDocument`, `BoolOrEval`, `FieldImageValidator`, `SearchExplainSource/SearchExplanation/SearchMeta`, `QueryLimitsConfig`, `BulkOptimizeConfig/BulkConfig`, `ChoiceItem` (Varianten/Styles), `PreviewSlots/PreviewConfig`, `CollectionInfo`, `ActionInfo`-Familie (8 Interfaces), `*YourPermissions`-Familie, `ApiInfo/ProjectInfo`, `AuditLogEntry` (als Typ), `DbReadOptions.pipelineMod`. ## 3) Felder-Widgets / Validator-Optionen vs. `projekt/felder-widgets.md` Widget-Enum (`field-meta.schema.json:14-25`): `text, textarea, number, checkbox, switch, select, selectArray, chipArray, date, datetime, file, image, json, richtext, html, foreignKey, foreignKeyChipArray, foreignFile, foreignMedia, pagebuilder, pageBuilder, templateProps, containerLessObject, containerLessObjectArray, color` — alle in `felder-widgets.md` + `admin/eintrags-editor.md` per grep nachweisbar (Stichprobe §-Befund: alle 20+ Treffer). Lücken: `pagebuilder` vs. `pageBuilder` (beide im Enum, Doku unterscheidet nicht — nicht verifiziert), `containerLessObject` vs. `containerLessObjectArray` (beide erwähnt, Unterschied nicht verifiziert), `image` vs. `file` vs. `foreignFile` vs. `foreignMedia` (alle erwähnt, Abgrenzung nur in `dateien-bilder.md` angerissen — teilweise). Validatoren (`felder-widgets.md:60-78`): `required, pattern, in, minLength/maxLength, min/max, minDate/maxDate, minItems/maxItems, format(email/url/uuid/slug), maxFileSize/minFileSize, accept, eval, allowZero` — alle dokumentiert. Fehlt: `image`-Unterschlüssel (`minWidth/maxWidth/minHeight/maxHeight/allowNonImages/allowUnknownDimensions`, `field.schema.json:130-142`, `index.d.ts:16-29`) — kein Treffer in Doku außer `minWidth`-Messung in `dateien-bilder.md:93` (Medialib-Anzeige, kein Validator). Meta-Lücken (s. §1): `hideLabel, containerProps, position, pageSize, addElementLabel, imageEditor, schemaRef, filter-Flag (field-meta.schema.json:242-246), drillDown (nur pagebuilder-dev.md-Treffer), downscale (nur dateien-bilder.md-Treffer)`. ## 4) Starter-Abgleich (`tibi-svelte-starter` → Doku) | Thema | Beleg (Starter) | Dokuseite | Verdikt | fehlt | |---|---|---|---|---| | Klonen + Platzhalter (`__PROJECT_NAME__`, `__TIBI_NAMESPACE__`, `.env`, `api/config.yml`, `.htaccess`) | `README.md:7-22`, `.env` (`PROJECT_NAME=__PROJECT_NAME__` etc.) | `einstieg/schnellstart.md:16-52`, `einstieg/neues-projekt.md:12-43` | abgedeckt | nichts | | Token-Köpfe (`Token` vs. `X-Admin-Token` vs. `X-Auth-Token`, `ADMIN_TOKEN` in `config.yml.env`) | `AGENTS.md: Token header distinction`, `README-Checkliste` | `einstieg/schnellstart.md:85-94`, `projekt/deploy.md:95-110`, `projekt/rechte-tokens.md` | abgedeckt | nichts | | `make docker-up`, Docker-Profile, Traefik-Routen | `Makefile`, `docker-compose-local.yml`, `AGENTS.md: Quick reference` | `schnellstart.md:53-74`, `neues-projekt.md:44-54` | teilweise | Traefik-/Router-Details, Profile (`tibi` vs. `tibi-dev`), `docker-restart-frontend`/`docker-logs` nur Starter-lokal | | `yarn validate` / `yarn build` / `yarn build:server` (`app.server.js`, `buildInfo`) | `package.json: scripts` (`validate`, `build`, `build:server`, `dev/start/start:mock/start:ssr`), `esbuild.config*.js`, `scripts/esbuild-wrapper.js` | `schnellstart.md:75-84`, `ssr-website.md:105-121`, `deploy.md` | abgedeckt (Basis) | `start:mock`/`MOCK=1`-Modus, `esbuild-wrapper`-Flags, `buildInfo.ts`-Mechanik nur angerissen | | SSR-Hook (`api/hooks/ssr/get_read.js`, ``, ``, Cache-Collection `ssr`) | `README.md:24-40`, `api/hooks/ssr/`, `frontend/src/ssr.ts` | `projekt/ssr-website.md` (Routen :23, Lookups :36, Blöcke :70, Bundle :105, Cache :122, Abnahme :146) | abgedeckt | SSR-Cache-Invalidierungsregeln (`PUT/DELETE` vs. `POST`, `?clear=1`) stehen nur als Code-Kommentar in `ssr-website.md:153-164` — ok, aber `ssr.yml`-Felder nicht gemappt | | Mock-Modus (`MOCK=1`, `__MOCK__`, `frontend/mocking/*.json`, `lib/mock.ts`) | `frontend/src/lib/mock.ts:4-8`, `frontend/src/lib/api.ts:88-89`, `package.json: start:mock` | `einstieg/begriffe.md`, `einstieg/was-ist-tibi.md` (nur Wort-Treffer) | fehlt | Mock-Aktivierung, `mocking/`-Verzeichnis-Format, `__MOCK__`-Flag — kein eigenes Doku-Kapitel (nur Wort in `begriffe.md`) | | Playwright-Tests (`tests/e2e`, `tests/api`, `test:e2e/test:api/test:visual/tour`, `global-setup.ts`) | `package.json: scripts (test/test:e2e/test:api/test:visual/tour)`, `tests/`, `playwright.config.ts` | keine (kein Treffer `playwright` in `einstieg/*`, `ssr-website.md`, `deploy.md`) | fehlt | gesamtes Test-Setup (Spec-Ordner, `global-setup`, CI ohne Playwright It. `AGENTS.md`) in Projekt-Doku nicht verziehen | | Frontend-Struktur (`App.svelte`, `routes/`, `blocks/`, `widgets/`, `lib/api.ts`, `store.ts`, `i18n`, Tailwind, Sentry, `svelte:head`) | `frontend/src/` (`App.svelte`, `blocks/*`, `widgets/`, `lib/*`, `config.ts`, `ssr.ts`, `sentry.ts`) | `ssr-website.md` (Routen/Blöcke/i18n/Tailwind angerissen) | teilweise | `widgets/`-Katalog, `lib/`-Module (`api.ts`, `store.ts`, `navigation.ts`, `versionCheck.ts`), Sentry-Verdrahtung, `svelte:head`-Pflicht nur Checklisten-Zeile | | API-Verzeichnis (`api/collections/*.yml`, `api/hooks/*`, `api/templates/`, `config.yml.env`, `ssr.yml`, `medialib.yml`) | `api/` (`collections/`, `hooks/`, `templates/`, `config.yml`, `config.yml.env`) | `neues-projekt.md:55-104` (Dateien vs. registriert), `sammlungen-anlegen.md`, `ssr-website.md` | teilweise | `templates/`-Verzeichnis, `config.yml.env`-Mechanik (`ADMIN_ASSET_VERSION`), `medialib.yml`-Felder nur Beispiel | | Env/Deploy (`CODING_URL`, `LIVE_URL`/`STAGING_URL`, `ADMIN_ASSET_VERSION`, `.basic-auth-*`, CI-Skripte `scripts/ci-*.sh`, `validate-schemas.mjs` in tibi-types) | `.env`, `scripts/ci-*.sh`, `AGENTS.md: Required secrets` | `neues-projekt.md`, `deploy.md:12-110` (URL-Bild, Ablauf, Reload-Endpunkte, Token-Trennung) | teilweise | `.basic-auth-*`-Dateien, `ADMIN_ASSET_VERSION`-Mechanik, CI-Skript-Details (`ci-modify-config.sh`, `ci-upload-sourcemaps.sh`), BrowserSync-Proxy — Starter-lokal, Doku schweigt | | `.agents/`-Wissen (BUILD_CHECKLIST, Skills, `tibi-project-setup`) | `.agents/BUILD_CHECKLIST.md`, `.agents/skills/`, `AGENTS.md` | keine Entsprechung | fehlt (bewusst?) | Build-Checklisten-Phasen und Skill-Pflege sind Starter-intern; Doku muss entscheiden, ob das Projekt-Delivery-Wissen je in `neues-projekt.md` gehört | Top-5 Starter-Lücken (für Projekt-Doku `schnellstart`/`neues-projekt`/`ssr-website`/`deploy`): 1. Playwright-Test-Setup (`tests/e2e|api|visual`, `test:e2e/test:api/tour`-Skripte) — kein Doku-Kapitel. 2. Mock-Modus (`MOCK=1`/`start:mock`, `mocking/*.json`, `lib/mock.ts`) — nur Wort-Treffer. 3. `api/templates/` + `ssr.yml`-Felder + Cache-Invalidierung als Konzept (nur Code-Kommentar in `ssr-website.md:153-164`). 4. CI/Env-Mechanik (`.basic-auth-*`, `ADMIN_ASSET_VERSION`, `scripts/ci-*.sh`, `esbuild-wrapper`-Flags). 5. Frontend-`lib/`-Module + `widgets/`-Katalog + Sentry-Verdrahtung (nur angerissen). ## 5) Löschkandidaten (Datei → Inhalt → Doku-Status) tibi-types: - `index.d.ts` (1716 Zeilen: alle Hook-Typen) → in tibi-docs **teilweise** (Funktionen ja, Typen nein) → **muss bleiben** (einzige Typquelle; Starter referenziert via `types/global.d.ts` + `tibi-types/`-Submodul lt. `AGENTS.md`). - `schemas/config/*.json` (16 Dateien) → in tibi-docs **teilweise** (`schemas.md:10-33` listet, Details fehlen) → **muss bleiben** (einzige Form-Quelle; Doku verlinkt per `$schema`-Zeile). - `scripts/validate-schemas.mjs` → Inhalt nicht verifiziert (nicht gelesen) → **nicht verifiziert** (vermutlich Build-Hilfe → muss bleiben). - `demo-api/` (`config.yml`, `collections/mycol.yml`, `collections/fields|global/`, `actions/`, `hooks/`, `testfiles/`) → Doku-Beispiele nutzen Starter-`api/`, nicht `demo-api` → **teilweise/nicht abgedeckt**; vor Löschen prüfen, ob Tests/Validierung sie nutzen (nicht verifiziert) → **nicht löschen ohne Prüfung**. - `package.json`/`tsconfig.json`/`README` (falls vorhanden) → Paket-Metadaten → **muss bleiben**. tibi-svelte-starter: - `README.md` (Setup-Checkliste :7-22, Architektur/SSR :24-40) → in tibi-docs **abgedeckt** (`schnellstart.md`, `neues-projekt.md`, `ssr-website.md`) → **muss bleiben** (Einstiegspunkt im Repo; Doku dupliziert mit Absicht für Website-Kontext). - `AGENTS.md` (Token-Köpfe, Medialib-URL-Pattern, Constraints, Secrets, Skills-Pflege) → in tibi-docs **teilweise** (Token-Köpfe abgedeckt, Medialib-Pattern in `dateien-bilder.md`, Skill-/Constraint-Wissen nicht) → **muss bleiben** (Agenten-Arbeitsanweisung im Repo). - `api/` (`collections/*.yml`, `hooks/ssr/*`, `templates/`, `config.yml`, `config.yml.env`) → in tibi-docs **teilweise** (Konzepte ja, Feld-Mapping nein) → **muss bleiben** (lauffähiges Beispiel). - `frontend/src/` (App/blocks/widgets/lib/routes) → **teilweise** → **muss bleiben**. - `.agents/` (`BUILD_CHECKLIST.md`, `STARTER_ALIGNMENT_*.md`, `skills/`) → in tibi-docs **nicht abgedeckt** → **muss bleiben** (Starter-interne Liefer-/Pflege-Doku, kein Doku-Duplikat). - `docker-compose-*.yml`, `Dockerfile`, `Makefile`, `esbuild.config*.js`, `scripts/esbuild-wrapper.js`, `.env` → **teilweise** (Befehle ja, Details nein) → **muss bleiben**. - `tests/` + `playwright.config.ts` + `video-tours/` → in tibi-docs **nicht abgedeckt** → **muss bleiben** (kein Ersatz in Doku). - `tibi-types/`-Submodul + `types/global.d.ts` → Typ-Brückenkopf → **muss bleiben**. Zählung: 0 Dateien mit Verdikt „löschen". 2× „muss bleiben" (Typ-/Schema-Quellen), Rest „teilweise/nicht abgedeckt, muss bleiben" (lauffähige Beispiele, Tests, Ops-Dateien). Einziger Klärungsfall: `tibi-types/demo-api/` (Nutzung durch Tests/CI vor Lösch-Entscheidung prüfen — nicht verifiziert).