- 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
129 lines
28 KiB
Markdown
129 lines
28 KiB
Markdown
# Audit 02 — Entwickler- und Anwender-Schnittstellen von tibi-admin-nova
|
||
|
||
> Audit-Agent, keine Doku-Änderung. Stand: 2026-10-16.
|
||
> Repo: `/WM_Dev/src/gitbase.de/cms/tibi-admin-nova` (= `NOVA:` unten).
|
||
> Doku: `/WM_Dev/src/gitbase.de/cms/tibi-docs` (= `DOKU:` unten).
|
||
> Verwendete Schemata: `NOVA:tibi-types/schemas/config/*.json`, `NOVA:types/admin.d.ts`,
|
||
> `NOVA:schemas/config/*.schema.json`. Frontend: `NOVA:frontend/src/`.
|
||
|
||
## 1) Entwickler-Schnittstellen
|
||
|
||
Legende Verdikt: `ok` = dokumentiert und korrekt · `thin` = erwähnt, aber unvollständig/falsch verlinkt ·
|
||
`gap` = fehlt in tibi-docs **und** in `NOVA:docs/`.
|
||
|
||
| Schnittstelle | Code-Beleg | Beschreibung | Dokuseite | Verdikt |
|
||
|---|---|---|---|---|
|
||
| Collection-Schema (`name`, `permissions` Pflicht; `fields`, `indexes`, `hooks`, `projections`, `audit`, `bulk`, `cors`, `queryLimits`, `readonlyFields`, `hiddenFields`, `strictFields`, `search`) | `NOVA:tibi-types/schemas/config/collection.schema.json:1-40` (props; `required: [name, permissions]`) | Top-Level-Sammlungsdefinition | `DOKU:projekt/sammlungen-anlegen.md` (Minimal, Meta, Indizes/Suche); Referenz `DOKU:reference/schemas.md` | ok (thin für `queryLimits`, `bulk`, `cors`, `strictFields` — nur in `NOVA:docs/collection-config.md` belegt) |
|
||
| `meta.label/group/muiIcon/hide/imageUrl/designGuide` | `NOVA:tibi-types/schemas/config/collection-meta.schema.json` (props); `NOVA:types/admin.d.ts:734ff` | Anzeige-/Gruppierungs-Meta | `DOKU:projekt/sammlungen-anlegen.md:79ff` (Tabelle Meta) | ok |
|
||
| `meta.preview` (label/secondary/tertiary/image, table-Spalten, Slots, Eval, FK-Auflösung) | `NOVA:tibi-types/schemas/config/defs.schema.json` (`previewConfig`, `previewSlots`); `NOVA:frontend/src/lib/components/entry/PreviewElement.svelte:1ff`; `NOVA:frontend/src/lib/components/ui/FieldValuePreview.svelte:1ff` | Vorschau-Auflösung inkl. FK-Badges, `_lookup`, Dot-Pfade | `DOKU:admin/customizing.md:35ff` (Tabelle, Verweis `preview-resolver`); `DOKU:projekt/sammlungen-anlegen.md:79ff` | thin (Resolver-Regeln — Auto-Detection vs. strikt, Nested-Pfade `profile.name`, FK-Badge-Auflösung — nur `NOVA:docs/test-plans/39-preview-resolver.md:1ff`) |
|
||
| `meta.viewHint` (`table`/`cards`/`{media}`/`{navigation}`) | `NOVA:types/admin.d.ts:460-470`; `NOVA:frontend/src/lib/components/CollectionView.svelte:575-607` (Default-Anwendung, URL gewinnt) | Startansicht der Liste | `DOKU:admin/ansichten-listen.md:10ff`; `DOKU:projekt/sammlungen-anlegen.md:79ff` | ok |
|
||
| `meta.views` (custom views, `AdminCollectionView`) | `NOVA:types/admin.d.ts:452-458` („custom views not yet supported“); Schema `collection-meta.schema.json` enthält **kein** `views` (`additionalProperties: false`) | Eigene Listenansichten — **nicht implementiert / schema-invalid** | `DOKU:admin/customizing.md:14` behauptet fälschlich „`meta.views` (Tabelle, Karten, Kalender …)“ | gap (**Doku-Fehler**: Behauptung ohne Code-Deckung) |
|
||
| `meta.subNavigation` (filter, defaultSort, setDefault) | `NOVA:tibi-types/schemas/config/collection-meta.schema.json` (`subNavigation`); `NOVA:types/admin.d.ts:364ff` | Reiter-Filter über der Liste | `DOKU:admin/ansichten-listen.md:29ff` | ok |
|
||
| `meta.defaultSort` (field, order inkl. `MANUALLY`) | Schema `collection-meta.schema.json` (`defaultSort`); `NOVA:types/admin.d.ts:426ff` | Standard-Sortierung, inkl. manuell per Drag | `DOKU:admin/ansichten-listen.md` (Sortierung); Drag in `DOKU:admin/customizing.md:10ff` | thin (`MANUALLY`/Drag-Freigabe nicht als Config dokumentiert) |
|
||
| `meta.singleton` (enabled, key) | Schema `collection-meta.schema.json` (`singleton`) | Ein-Eintrag-Sammlung | — (grep `singleton` in `DOKU:src/content/docs` ohne Treffer) | gap |
|
||
| `meta.sections` / `meta.sidebar` (Formular-Gruppen) | Schema (`sections`, `sidebar`); Feld-Seite `meta.position: main\|sidebar:<gruppe>` | Formular-Layout | `DOKU:projekt/sammlungen-anlegen.md:79ff` (`sidebar`-Zeile, `position`-Beispiel); `sections` ohne Treffer | thin (`sections`-Array und `collapsible/collapsed` fehlen) |
|
||
| `meta.i18n` + `i18n.entry` (languages, languageField/groupField/clearFields/copyFields) | Schema (`i18n`); `NOVA:frontend/src/lib/stores/form-i18n-support.svelte.ts:1ff`; `I18nLanguageTabs`, `TranslationBar` | Übersetzungs-Kopplung | `DOKU:admin/eintrags-editor.md:58ff`; `DOKU:projekt/sammlungen-anlegen.md:79ff` | thin (`clearFields`/`copyFields`-Semantik nur Code) |
|
||
| `meta.pagebuilder` (defaultViewport, blockTypeField, blockRegistry.file, screenshot) | Schema (`pagebuilder`); `NOVA:frontend/src/lib/components/entry/widgets/pagebuilder/load-registry.ts:14-38`; `NOVA:types/admin.d.ts:618-669` | Pagebuilder-Anbindung pro Sammlung/Feld | `DOKU:projekt/pagebuilder-dev.md:17ff` (Registry-Vertrag) | ok |
|
||
| `cssTransform`-Präzedenz (Block > Feld > Collection, Default `true`) | `NOVA:frontend/src/lib/components/entry/widgets/pagebuilder/load-registry.ts:41-60` | CSS-Umschreibung steuern | `DOKU:projekt/pagebuilder-dev.md:59ff` | ok |
|
||
| Block-Vertrag (`render/update/destroy`, `BlockRenderContext`, `css`, `previewStyles`, `label/icon/color`) | `NOVA:frontend/src/lib/components/entry/widgets/pagebuilder/BlockMount.ts:20-60` | Eigener Block (framework-agnostisch, Shadow-DOM) | `DOKU:projekt/pagebuilder-dev.md:154ff` | ok |
|
||
| Asset-Specifier (`_/` projekt-relativ, `/_/`-Alias, `/`-absolut, `https/data/blob` untouched, `{eval}`) | `NOVA:frontend/src/lib/utils/project-asset-specifier.ts:17-50`; genutzt von `load-registry.ts:30-38` und Custom-Exports | Pfadauflösung für Registry- + Export-Skripte | `DOKU:admin/exporte.md:35ff`; `DOKU:projekt/pagebuilder-dev.md:17ff` | thin (zentrale Regel nur im Code; `{eval}`-Variante nicht dokumentiert) |
|
||
| `meta.exports` (name+file Pflicht, filename-`{date}`) | Schema (`exports`); `NOVA:types/admin.d.ts:720ff` (file-Specifier, filename) | Skript-Exporte anmelden | `DOKU:admin/exporte.md:35ff` | ok |
|
||
| Export-Skript-API (`db.find/count/loadAll`, `xlsx`, `helpers`, `progress`, `signal`, `view`, kein `$auth`, genau 1 Payload + `contentType`) | `NOVA:frontend/src/lib/utils/custom-export.types.ts:17-100`; `NOVA:docs/custom-export-script.md:12-60`; `NOVA:frontend/src/lib/components/ui/ExportDialog.svelte` | Eigene Berichte schreiben | `DOKU:admin/exporte.md:48-72` (verkürzt; verweist für Details auf Repo-Doku) + `DOKU:admin/customizing.md:51ff` | thin (vollständiges `ctx`: `db.loadAll`-Batching 500er, `selector`-vs-`select`, nur `sort[0]`, `csvCell`-Injection-Guard, Dateinamen-Sanitizing nur in `NOVA:docs/custom-export-script.md`) — Hinweis: Beispiel `DOKU:admin/exporte.md:60` ruft `loadAll({filter})` ohne Collection auf (abweichend vom Typ `loadAll(collection, opts)`) |
|
||
| `meta.query` (typisierte Zusatz-Querykeys für Hooks, MCP-validiert) | Schema (`query`, description „hooks may read ctx.request().query“) | Projekt-eigene Query-Parameter deklarieren | nur Erwähnung in `DOKU:projekt/mcp-nutzen.md` | gap (für Projektentwickler) |
|
||
| `meta.agent` (purpose/instructions/fieldHints/workflows) | Schema (`agent`); ausgespielt via MCP/REST `_meta` | Editor-/Agenten-Doku pro Sammlung | nur Erwähnung in `DOKU:projekt/mcp-nutzen.md`, `DOKU:projekt/pagebuilder-dev.md` | gap (für Projektentwickler) |
|
||
| `meta.openapi` / `collection.openapi` | Schema (`openapi` → `openapi.schema.json`) | OpenAPI-Overrides | `DOKU:reference/openapi.md`, `DOKU:server/schnittstellen.md` | ok (Server-Seite; Admin-Nutzung nicht verifiziert) |
|
||
| `permissions` (public/user + Token-Rollen, methods, filter, validProjections, readonly-/hiddenFields) | `NOVA:tibi-types/schemas/config/permissions.schema.json:1-60` | Zugriffsrechte | `DOKU:projekt/rechte-tokens.md`; `DOKU:admin/benutzer-rechte.md:47ff` | ok |
|
||
| `project.admin.tokens` (`allowReload`, `allowRegenerateSearch`, `allowBackup`, `allowSnapshots`) | `NOVA:tibi-types/schemas/config/project.schema.json` (`admin`) | Token-Fähigkeiten für Backup/Snapshots/Search-Rebuild | — (grep `allowSnapshots`/`allowBackup` in Doku ohne Treffer) | gap |
|
||
| `hooks` (get/post/put/delete/audit, `{type:javascript,file,timeout}`) | `NOVA:tibi-types/schemas/config/hooks.schema.json:1-60`; Action-`hooks` ein String oder Hooks-Objekt (`action.schema.json`) | Server-Hooks | `DOKU:projekt/hooks-schreiben.md` | ok (Server-Seite) |
|
||
| `hooksTrigger` / `exportScript` (Task-Begriffe) | — (grep im gesamten `NOVA:`-Repo ohne Treffer) | nicht verifiziert — Begriffe existieren im Code nicht | — | nicht verifiziert |
|
||
| Feld-Schema (Typen, `index`, `subFields`, `validator`, `readonly/hidden` als bool-or-eval, `strictFields`) | `NOVA:tibi-types/schemas/config/field.schema.json:1-120`; `NOVA:tibi-types/schemas/config/field-meta.schema.json` (label/widget/i18n/helperText/dependsOn/choices/foreign/downscale/imageEditor/drillDown/pageSize/preview/addElementLabel/filter/pagebuilder/schemaRef/openapi) | Felddefinition + Admin-Meta | `DOKU:projekt/felder-widgets.md`; `DOKU:projekt/sammlungen-anlegen.md`; Widget-Tabelle `DOKU:admin/customizing.md:19ff` | ok (thin für `schemaRef`, `drillDown`, `pageSize`, `containerProps`, `protected`) |
|
||
| Actions (`query`/`data`-Felder, `execution.kind/cancellable`, `output.mapping.summary/details`, `output.mapping.progress` mit index-/count-/status-/messageField + fields) | `NOVA:tibi-types/schemas/config/action.schema.json` (`actionMethodMeta`, `actionOutputProgressMapping`, `actionExecutionMeta`); `NOVA:frontend/src/lib/components/ActionView.svelte:260-271,349,378-379` (SSE → Balken) | Action definieren + Fortschritt mappen | `DOKU:admin/aktionen.md:10-77`; `DOKU:projekt/jobs-actions.md:54ff` | ok (thin: `execution.kind`/`cancellable`-Semantik nur Code) |
|
||
| Jobs (`cron`, `{type:javascript,file,timeout}`) | `NOVA:tibi-types/schemas/config/job.schema.json:1-40` | Cron-Jobs | `DOKU:projekt/jobs-actions.md:22ff` | ok |
|
||
| Assets (`name`, `path`) | `NOVA:tibi-types/schemas/config/asset.schema.json` | Projekt-Assets | nicht verifiziert | nicht verifiziert |
|
||
| KI-Proxy-Profile (`chat` + `summarizer/translation/vision`, `stt`, `tts`, Pricing) | `NOVA:config/ai-proxy.config.json:1-50`; `NOVA:schemas/config/ai-proxy-config.schema.json` (chat/stt/tts Pflichtfelder) | LLM-Provider/Modelle/Preise (Server) | `DOKU:projekt/llm-nutzen.md:59ff`; `DOKU:admin/ki-funktionen.md:107ff` (Grenzen/Kosten) | thin (Profil-Vererbung summarizer/translation/vision, `chatTemplateKwargs`, Pricing-Felder nur Code) |
|
||
| Runtime-System-Config (`frontend/assets/system.config.json`, Endpunkte, Engine-Modi `auto/api/browser/none`, TTS-Stimmen) | `NOVA:frontend/src/lib/runtime-system-config.ts:205` (`loadRuntimeSystemConfig`); `NOVA:schemas/config/system-config.schema.json` | KI-Laufzeitconfig des Admins | `DOKU:admin/setup.md:63ff` (ein Absatz); `DOKU:admin/ki-funktionen.md` | thin (Engine-Modi, Endpoint-Tabelle, Fallback-Verhalten fehlen) |
|
||
| API-Anbindung (`apiBaseURL=/api/`, `apiBaseOverride`-Store, `withApiPath/buildApiUrl` mit `_/`-Prefix) | `NOVA:frontend/src/config.ts:4`; `NOVA:frontend/src/lib/store.ts:99`; `NOVA:frontend/src/lib/api/url.ts:1-30` | Wie der Admin den Server erreicht | `DOKU:admin/setup.md:24ff,63ff` (`API_BASE`, Mock-Tabelle) | thin (`apiBaseOverride`-Laufzeit-Umschaltung, `namespace → _/`-Routing nur Code) |
|
||
| Mock-Modus (`__MOCK_MODE_DEFAULT__`, `isMockMode()`, Mock-Interceptor, Demo-Projekt `t1`) | `NOVA:esbuild.config.js:83`; `NOVA:frontend/src/lib/mock/config.ts:15-34`; `NOVA:frontend/src/index.ts:54ff` (Boot mit Mock-Interceptor) | Offline-/Demo-Betrieb | `DOKU:admin/setup.md:63ff` | thin (Umschalt-Regeln, Caching, Mock-Grenzen nur Code) |
|
||
| Boot-Sequenz (`__TIBI_BOOT_MAP__`, Stages, `tibi:boot-progress`, `__TIBI_APP_READY__`) | `NOVA:frontend/src/index.ts:14-80` | Lade-/Diagnose-Haken | — | gap (nur für Admin-Entwickler relevant; nicht verifiziert ob gewollt öffentlich) |
|
||
| Theme/i18n (`loadTheme`, `themeStore`, `setupI18n`, `locales/`) | `NOVA:frontend/src/lib/store.ts:283-300`; `NOVA:frontend/src/index.ts:2`; `NOVA:frontend/src/lib/i18n/` | Eigenes Theme/Sprachen — **lädt der Admin das?** | `DOKU:admin/setup.md`, `DOKU:admin/customizing.md` ohne Theme/i18n-Customizing | gap (kein Customizing-Pfad belegt: kein Theme-Slot, keine i18n-Override-Datei im Code gefunden) |
|
||
| Navigation/Gruppen (`group`, `muiIcon`, AdminHub, Breadcrumb, `jumpTargets`) | `NOVA:frontend/src/lib/components/AdminLayout.svelte`; `NOVA:frontend/src/lib/jumpTargets.svelte.ts`; `NOVA:frontend/src/lib/components/ui/Breadcrumb.svelte` | Admin-Navigation | `DOKU:admin/konzept.md`; `DOKU:anwender/orientierung.md` | thin (eigene Navigations-Einträge/Gruppen-Reihenfolge nur via `meta.group`, dokumentiert in `sammlungen-anlegen.md`) |
|
||
| Eigene Views/Meta-Felder/Skripte laden (Registrierung, Reihenfolge) | Registry-Loader (`load-registry.ts:14-38`, lazy + Cache pro URL); Export-Loader analog (`resolveProjectAssetSpecifier`) | Lade-Reihenfolge | `DOKU:projekt/pagebuilder-dev.md:17ff`; `DOKU:admin/exporte.md:48ff` | thin (Lazy/Cache-Verhalten, Fehler-Fallback Blueprint nur Code) |
|
||
|
||
## 2) Fehlende Interface-Doku (Top-Liste für Projektentwickler)
|
||
|
||
Steht weder in `DOKU:` noch in `NOVA:docs/` — jeweils mit Code-Beleg:
|
||
|
||
1. **`meta.singleton`** — Ein-Eintrag-Sammlungen (`enabled`, `key`). Beleg: Schema `collection-meta.schema.json` (`singleton`). Doku: kein Treffer.
|
||
2. **`project.admin.tokens`-Fähigkeiten** (`allowReload`, `allowRegenerateSearch`, `allowBackup`, `allowSnapshots`) — wer Backup/Snapshot/Search-Rebuild per Token darf. Beleg: `NOVA:tibi-types/schemas/config/project.schema.json` (`admin`). Doku: kein Treffer.
|
||
3. **`meta.query`** — deklarierte Zusatz-Querykeys für Hooks (`ctx.request().query`), MCP-validiert. Beleg: Schema `collection-meta.schema.json` (`query`). Doku: nur Nebenerwähnung `DOKU:projekt/mcp-nutzen.md`.
|
||
4. **`meta.agent`** — Zweck/Workflows/Gotchas pro Sammlung für Agents (via MCP/REST `_meta`). Beleg: Schema (`agent`). Doku: nur Nebenerwähnung `mcp-nutzen.md`/`pagebuilder-dev.md`.
|
||
5. **`meta.sections`** (`group/label/collapsible/collapsed`) — zweite Formular-Gruppierung neben `sidebar`. Beleg: Schema (`sections`). Doku: kein Treffer.
|
||
6. **`meta.defaultSort.order: MANUALLY`** + Drag-Freigabe — manuelle Reihenfolge als Config. Beleg: Schema (`defaultSort` enum `ASC/DESC/MANUALLY`); `NOVA:types/admin.d.ts:426ff`. Doku: Drag nur Bedienung (`customizing.md`), nicht Config.
|
||
7. **`meta.viewHint.navigation`-Details** (`nodesField`-Default `nodes`, `declaredTrees` mit `singleton/maxLevel`) — nur angerissen (`ansichten-listen.md:21`, `sammlungen-anlegen.md`). Beleg: Schema (`viewHint.navigation`); `NOVA:types/admin.d.ts:734ff`; `NOVA:frontend/src/lib/components/entry/widgets/NavigationTreeField.svelte`.
|
||
8. **Export-`ctx` vollständig** (`db.loadAll`-Batching/Retry/`signal`, nur `sort[0]`, `selector`-vs-`select`, `csvCell`-Guard, `csvWithBom`, Dateinamen-Sanitizing, `{date}`) — nur `NOVA:docs/custom-export-script.md:12-117` + Typdatei, in `DOKU:admin/exporte.md` verkürzt **und** Beispiel mit falscher Signatur (`loadAll({filter})` ohne Collection). Beleg: `NOVA:frontend/src/lib/utils/custom-export.types.ts:17-100`.
|
||
9. **Action-`execution` (`kind`, `cancellable`) + Upload-Fortschritt** (`createByteProgressToast`, `hasInlineUploadPayload`) — Fortschritts-Balken ja, Abbruch-/Upload-Pfad nein. Beleg: Schema (`actionExecutionMeta`); `NOVA:frontend/src/lib/components/ActionView.svelte:349-379`; `upload-progress`-Util. Doku: `DOKU:admin/aktionen.md:47ff` ohne `cancellable`/`kind`.
|
||
10. **`views`-Widerspruch klären** — `DOKU:admin/customizing.md:14` verspricht `meta.views` (u. a. Kalender), aber Schema verbietet `views` (`additionalProperties: false`, `NOVA:tibi-types/schemas/config/collection-meta.schema.json`) und `NOVA:types/admin.d.ts:452-458` markiert Custom-Views als „not yet supported“. Entweder implementieren oder Doku-Zeile streichen.
|
||
|
||
Nicht verifiziert (Begriffe existieren im Code nicht / unklar): `hooksTrigger`, `exportScript` (grep `NOVA:` ohne Treffer); `assets`-Admin-Nutzung (`asset.schema.json`: nur `name`/`path`).
|
||
|
||
## 3) Anwender-Oberflächen-Inventar
|
||
|
||
Routen: `NOVA:frontend/src/App.svelte:77-141`. Komponenten: `NOVA:frontend/src/lib/components/` (u. a. `admin/`, `ai/`, `entry/`, `entry/widgets/`, `ui/`). Shortcuts: `NOVA:frontend/src/lib/shortcuts.ts:22ff` (`SHORTCUTS`), Anzeige `ui/CommandPalette.svelte`, `ui/KeyboardShortcuts.svelte`.
|
||
|
||
| UI-Bereich | Code-Beleg | Doku-Seite | Screenshot? (`DOKU:src/assets/anwender/`) |
|
||
|---|---|---|---|
|
||
| Login / Abmelden / Session-Timeout | `NOVA:frontend/src/lib/components/LoginPage.svelte`; `ui/SessionTimeoutWarning.svelte`; `lib/api/auth.ts` | `DOKU:anwender/anmelden.md`; `DOKU:anwender/hilfe.md:10ff` | ja (`anmelden-login.webp`, `anmelden-abmelden.webp`) / Timeout-Dialog **fehlt** |
|
||
| Projektübersicht / Projektwechsel | `NOVA:frontend/src/lib/components/ProjectList.svelte` (implizit via Route); `store.ts:207ff` (`navigate`) | `DOKU:anwender/orientierung.md:10ff,26ff` | ja (`orientierung-start.webp`, `orientierung-projektwechsel.webp`) |
|
||
| Globale Schnellsuche vs. Command-Palette (`Ctrl/Cmd-K`?) | `NOVA:frontend/src/lib/components/ui/CommandPalette.svelte`; `shortcuts.ts` | `DOKU:anwender/orientierung.md:58ff` (nur Schnellsuche, keine Palette) | Palette-Overlay **fehlt** (`orientierung-schnellsuche.webp` zeigt Listen-Suche) |
|
||
| Tastaturkürzel-Hilfe (`?`, `g→p`, `s`, `v`) | `NOVA:frontend/src/lib/components/ui/KeyboardShortcuts.svelte`; `shortcuts.ts:22ff` | `DOKU:reference/tastatur-kurzbefehle.md`; `DOKU:anwender/lesen-suchen-filtern.md` (?) | **fehlt** |
|
||
| Listen (Tabelle/Karten/Medien/Navigation), Suche/Filter/Sortierung/Blättern, Mehrfachauswahl, URL-State | `NOVA:frontend/src/lib/components/CollectionView.svelte`; `CollectionTable/Cards.svelte`; `ui/FilterPopover.svelte`; `ui/SortPopover.svelte`; `ui/SearchInput.svelte` | `DOKU:anwender/lesen-suchen-filtern.md`; `DOKU:admin/ansichten-listen.md:10-94` | ja (`lesen-liste/karten/filter/suche.webp`) |
|
||
| Suchindex-Hinweis (Queue/Polling) | `NOVA:frontend/src/lib/components/ui/SearchIndexBuildNotice.svelte`; `NOVA:docs/test-plans/41-search-index-status.md:1-24` | nur Server-Seite (`server/betrieb.md`, `projekt/suche.md`) | **fehlt** (Anwender sieht Banner ohne Doku) |
|
||
| Stapel-Bearbeitung (Bulk) | `NOVA:frontend/src/lib/components/BulkEditPanel.svelte` | `DOKU:admin/customizing.md` (1 Zeile); Anwender: keine | **fehlt** |
|
||
| Eintrag anlegen/bearbeiten (Widgets, Pflicht/Formate, `dependsOn`) | `NOVA:frontend/src/lib/components/EntryView.svelte`; `entry/WidgetDispatcher.svelte`; `entry/widgets/*.svelte` | `DOKU:anwender/eintrag-bearbeiten.md`; `DOKU:admin/eintrags-editor.md:10-77` | ja (`eintrag-formular/neu/gespeichert.webp`) |
|
||
| Feldsuche (`Ctrl+F`), Sprungziele (`j`), Drill-Down, Verlauf Undo/Redo, Diff-Dialog, JSON-Overlay | `NOVA:entry/FieldSearch.svelte`; `entry/DrillDownBreadcrumb.svelte`; `entry/DiffDialog.svelte`; `entry/EntryJsonOverlay.svelte`; `lib/stores/drilldown-store.ts`, `entry-history` | `DOKU:admin/eintrags-editor.md:49ff,77ff` (teilweise) | **fehlt** (kein Screenshot für Suche/Diff/JSON/Drill-Down) |
|
||
| Fremdschlüssel (Drawer, Chips, Inline-Anlage, Rückverweise) | `NOVA:entry/ForeignKeyDrawer.svelte`; `entry/widgets/ForeignKeyWidget.svelte`; `entry/InlineEntryForm.svelte`; `entry/ReferencedBy.svelte` | `DOKU:admin/eintrags-editor.md:49ff`; `DOKU:admin/customizing.md:35ff` | **fehlt** |
|
||
| Übersetzung (Sprachtabs, Übersetzungsleiste) | `NOVA:entry/I18nLanguageTabs.svelte`; `entry/TranslationBar.svelte` | `DOKU:admin/eintrags-editor.md:58ff` | **fehlt** |
|
||
| Medien (Raster, Upload+Queue, Bildeditor, Lightbox, Einbetten) | `NOVA:frontend/src/lib/components/MediaGrid.svelte`; `ui/MediaLightbox.svelte`; `entry/widgets/ImageEditor.svelte`; `FileUploadQueue.svelte` | `DOKU:anwender/medien.md`; `DOKU:admin/medien.md:10-72` | ja Raster/Upload/Editor (`medien-*.webp`); Lightbox + Queue **fehlen** |
|
||
| Dateien/Fremddateien (`foreignFile`, Fremd-Medien) | `NOVA:entry/widgets/ForeignFileWidget.svelte`; `NOVA:docs/test-plans/38-foreign-file.md:1-49` | `DOKU:admin/medien.md:50ff` (Einbetten) | **fehlt** (eigenständig) |
|
||
| Export-Dialog (generisch + Skript-Tabs, Feldauswahl, Count-Warnung) | `NOVA:frontend/src/lib/components/ui/ExportDialog.svelte`; `NOVA:docs/collection-export.md:1-60` | `DOKU:anwender/exportieren.md`; `DOKU:admin/exporte.md:10ff` | ja (`export-dialog/fertig.webp`) |
|
||
| Aktionen (Formular, SSE-Balken, Ergebnis-Mapping) | `NOVA:frontend/src/lib/components/ActionView.svelte`; `ActionProgressMapping.svelte` | `DOKU:admin/aktionen.md`; Anwender: keine eigene Seite | **fehlt** (Anwender-Seite + Screenshot) |
|
||
| KI (Chat, Zusammenfassen, Stimme/TTS, Vision, Werkzeuge, Kosten) | `NOVA:frontend/src/lib/components/ai/AiChat.svelte`; `ai/*.ts` (`aiController`, `aiTools`, `aiUIRegistry`, `aiVoiceInput`, `aiTTS`); `ui/NovaAiPill.svelte` | `DOKU:anwender/ki-nutzen.md`; `DOKU:admin/ki-funktionen.md:10-107` | ja (`ki-chat/stimme/zusammenfassen.webp`); Tool-Inspektor/Verlauf/Vision-Overlay **fehlen** |
|
||
| Seiten bauen (Pagebuilder-Editor, Overlays, Viewports, Screenshot-Pipeline) | `NOVA:entry/widgets/pagebuilder/PagebuilderWidget.svelte`; `PagebuilderOverlay.svelte`; `PagebuilderOverviewOverlay.svelte`; `PagebuilderScreenshotHost.svelte` | `DOKU:anwender/seiten-bauen.md`; `DOKU:projekt/pagebuilder-dev.md:128ff` | ja (`seiten-*.webp`, 6 Dateien) |
|
||
| Verlauf/Audit (Liste, Diff, Wiederherstellen) | `NOVA:frontend/src/lib/components/AuditView.svelte`; `AuditHistoryPanel.svelte`; `AuditSidebarHistory.svelte`; `AuditDiff.svelte`; `AuditRestoreDialog.svelte` | Anwender: keine Seite; Admin: nur implizit | **fehlt** (Seite + alle Screenshots) |
|
||
| Snapshots/Backup (Übersicht, Auslösen/SSE, Download, Restore, Import-Analyse) | `NOVA:frontend/src/lib/components/SnapshotView.svelte`; `BackupView.svelte`; `lib/api/snapshot-api.ts`; `backup-api.ts`; `NOVA:docs/test-plans/43-backup-restore.md:1-89`, `44-snapshots.md:1-89` | `DOKU:anwender/sichern.md:10-49` | ja (`sichern-uebersicht/details/statistik.webp`); Backup-Import-Dialog + Restore-Bestätigung **fehlen** |
|
||
| Benutzer/Teams/Orgs/Rollen/Tokens (AdminHub, Drawers, Chips) | `NOVA:frontend/src/lib/components/admin/AdminHub.svelte`; `UserTab/TeamTab/OrgTab.svelte`; `*DetailDrawer.svelte`; `RoleSection.svelte`; `PermissionChipsInput.svelte`; `ProjectAdminView.svelte` | `DOKU:anwender/benutzer-teams.md`; `DOKU:admin/benutzer-rechte.md:27-80` | teilweise (`benutzer-teams/profil.webp`); Drawer-Details, Token-Seite, Projekt-Admin **fehlen** |
|
||
| Stellvertretung (Button + Amber-Banner + Stopp) | `NOVA:frontend/src/lib/api/auth.ts:270-300` (`impersonate`); `NOVA:docs/test-plans/42-impersonation.md:1-47`; Banner in `AdminLayout.svelte` | `DOKU:admin/benutzer-rechte.md:81ff` | **fehlt** |
|
||
| Profilseite | `NOVA:frontend/src/lib/components/ProfilePage.svelte` (Route `/profile`, `App.svelte:114ff`) | `DOKU:anwender/benutzer-teams.md:25` | ja (`benutzer-profil.webp`) |
|
||
| Avatar/Theme-Umschalter, Toasts, Voice-Eingabe in Filtern | `NOVA:ui/ThemeToggle.svelte`; `ui/Toast.svelte`; `ui/VoiceFilterTextInput.svelte`; `ui/VoiceRecorderButton.svelte` | verstreut/keine | **fehlen** |
|
||
|
||
UI-Bereiche **ohne** Screenshot (Namen): Tastaturkürzel-Hilfe, Command-Palette-Overlay, Suchindex-Banner, Bulk-Edit-Panel, Feldsuche/Sprungziele/Drill-Down, Diff-Dialog, JSON-Overlay, FK-Drawer/Inline-Anlage/Rückverweise, Übersetzungsleiste/Sprachtabs, Medien-Lightbox, Upload-Warteschlange, Fremddatei-Widget, Action-Ansicht (Anwender), KI-Werkzeug-Inspektor/Chat-Verlauf/Vision-Overlay, Audit-/Verlaufs-UI (komplett), Backup-Import-Dialog, Restore-Bestätigung, Admin-Drawers (Benutzer/Team/Org-Details), Token-Seite, Projekt-Admin-Ansicht, Stellvertretungs-Banner, Session-Timeout-Dialog, Theme-Umschalter, Voice-Filter-Eingabe.
|
||
|
||
## 4) Löschkandidaten `NOVA:docs/` (je Datei eine Zeile)
|
||
|
||
| Datei | Inhalt (kurz) | Abdeckung in tibi-docs | Urteil |
|
||
|---|---|---|---|
|
||
| `docs/collection-config.md` (2293 Zeilen) | Vollreferenz Projekt-/Collection-/Feld-/Meta-Schema inkl. Server-Optionen | teilweise (`projekt/sammlungen-anlegen.md`, `felder-widgets.md`, `reference/schemas.md`; Server-Details in `server/*`) | **muss bleiben** (einzige Vollreferenz; Auszug nach `reference/` wäre Follow-up) |
|
||
| `docs/collection-export.md` (327) | Generischer Listen-Export: Flow, Dialog, Batch-Laden, Warnschwellen | weitgehend (`admin/exporte.md:10ff`, `anwender/exportieren.md`) | teilweise → **vorerst bleiben** (Schwellenwerte/Batch-Details nur hier) |
|
||
| `docs/custom-export-script.md` (117) | `ctx`-Vertrag für Skript-Exporte (einzige Quelle für `db.loadAll`-Semantik, Payload-Regeln, Styling) | thin (`admin/exporte.md:48ff` verweist hierher) | **muss bleiben** (bis `ctx` voll in tibi-docs steht; siehe Punkt 2.8) |
|
||
| `docs/test-plans/02-navigation-routing.md` (31) | SPA-Routing, History, Breadcrumbs, Navigation-Guard | teilweise (`anwender/orientierung.md`, `admin/ansichten-listen.md:76ff`) | teilweise → bleiben (Guard-/History-Details nur hier) |
|
||
| `docs/test-plans/05-collection-view.md` | Listen-Rendering (4 View-Modi), Suche/Sort/Filter/Pagination, URL-State | weitgehend (`admin/ansichten-listen.md`, `anwender/lesen-suchen-filtern.md`) | teilweise → bleiben (Mock-Fälle, Debounce-Details) |
|
||
| `docs/test-plans/07-entry-editor-advanced.md` | Undo/Redo, Diff, Drill-Down, Feldsuche, Jump-Targets | teilweise (`admin/eintrags-editor.md`) | teilweise → bleiben |
|
||
| `docs/test-plans/11-foreign-keys.md` | FK-Widgets, Chip-Arrays, Drawer-Flow, Inline-Create, Nested-Drawers | teilweise (`admin/eintrags-editor.md:49ff`, `customizing.md:35ff`) | teilweise → bleiben |
|
||
| `docs/test-plans/16-ai-integration.md` (41) | KI-Integration (Chat/Modelle/Werkzeuge) | weitgehend (`admin/ki-funktionen.md`, `projekt/llm-nutzen.md`) | teilweise → bleiben (Mock-/Test-Spezifika) |
|
||
| `docs/test-plans/17-ai-tts.md` (24) | TTS/Stimme | weitgehend (`admin/ki-funktionen.md:52ff`) | teilweise → bleiben |
|
||
| `docs/test-plans/25-file-upload.md` (43) | Datei-Upload-Flows | teilweise (`admin/medien.md:19ff`) | teilweise → bleiben |
|
||
| `docs/test-plans/27-media-grid.md` (40) | Medien-Raster, DnD-Upload, Inline-Edit | teilweise (`admin/medien.md:10ff`) | teilweise → bleiben |
|
||
| `docs/test-plans/34-i18n-fields.md` (34) | Mehrsprachige Felder | teilweise (`admin/eintrags-editor.md:58ff`) | teilweise → bleiben |
|
||
| `docs/test-plans/35-entry-i18n.md` (54) | Eintrags-Übersetzung (Kopplung, Leiste) | teilweise (s. o.) | teilweise → bleiben |
|
||
| `docs/test-plans/36-voice-input-fields.md` (31) | Spracheingabe in Feldern | teilweise (`admin/ki-funktionen.md:52ff`) | teilweise → bleiben |
|
||
| `docs/test-plans/37-pagebuilder.md` | Pagebuilder-Vorschau, Lookup-Hydratisierung, URL-Normalisierung | weitgehend (`anwender/seiten-bauen.md`, `projekt/pagebuilder-dev.md`) | teilweise → bleiben (Mock-/URL-Edge-Cases nur hier) |
|
||
| `docs/test-plans/38-foreign-file.md` (49) | Fremddateien/-medien | teilweise (`admin/medien.md:50ff`) | teilweise → bleiben |
|
||
| `docs/test-plans/39-preview-resolver.md` | Vorschau-Regeln (Auto-Detect vs. strikt, Slot-Pfade, FK-Badges) | thin (`admin/customizing.md:35ff`) | **muss bleiben** (Regeln sonst nirgends) |
|
||
| `docs/test-plans/40-actions.md` | Action-Routen, Methoden-Tabs, SSE-Fortschritt, Disabled-States | weitgehend (`admin/aktionen.md`, `projekt/jobs-actions.md`) | teilweise → bleiben (Routing-/State-Details) |
|
||
| `docs/test-plans/41-search-index-status.md` (24) | Suchindex-Banner (Projekt/Collection, Polling) | nicht abgedeckt (nur Server-Seite `server/betrieb.md`, `projekt/suche.md`) | **muss bleiben** (einzige UI-Quelle) |
|
||
| `docs/test-plans/42-impersonation.md` (47) | Stellvertretung (Endpoint, Drawer-Button, Banner, Rollback) | teilweise (`admin/benutzer-rechte.md:81ff`) | teilweise → bleiben (Mock-Endpoint, Rollback-Details) |
|
||
| `docs/test-plans/43-backup-restore.md` (89) | Backup-Export/Import (SSE, 6 Endpunkte, Rechte) | teilweise (`anwender/sichern.md`, `projekt/audit-backup.md`) | teilweise → bleiben (API-/SSE-Details) |
|
||
| `docs/test-plans/44-snapshots.md` (89) | Snapshot-CRUD (SSE, 10 Endpunkte, ZIP, Prune) | teilweise (s. o.) | teilweise → bleiben |
|
||
|
||
Löschkandidaten-Zählung: **0 von 21 sofort löschbar** — 3× „muss bleiben“, 18× „teilweise → vorerst bleiben“, 0× „vollständig abgedeckt“.
|