# bDS Rust Rewrite - Vollständige Spezifikationssammlung

Diese Datei dient als Index zu allen Allium-Spezifikationen und Schema-Inventarisierungen für die Rust-Implementierung.

## Verfügbare Spezifikationen

### Kern-Spezifikationen

| Datei | Scope | Status | Beschreibung |
|-------|-------|--------|--------------|
| `bds.allium` | Core | ✅ Existiert | Haupt-Spezifikation mit allen Referenzen |
| `project.allium` | Core (Wave 1) | ✅ Existiert | Projekt-Management |
| `post.allium` | Core (Wave 1) | ✅ Existiert | Post-Lifecycle, Frontmatter, Dateistruktur |
| `media.allium` | Core (Wave 1) | ✅ Existiert | Media-Import, Thumbnails, Sidecars |
| `translation.allium` | Core (Wave 1) | ✅ Existiert | Post- und Media-Übersetzungen |
| `tag.allium` | Core (Wave 1) | ✅ Existiert | Tags mit Mass-Operationen |
| `template.allium` | Core (Wave 1/4) | ✅ Existiert | Liquid-Template-Management |
| `script.allium` | Core (Wave 6) | ✅ Existiert | Skripting (Lua in Rust) |
| `menu.allium` | Core (Read) | ✅ Existiert | OPML-Navigationsmenü |
| `metadata.allium` | Core (Wave 1) | ✅ Existiert | Projekt-Konfiguration, Kategorien, Publishing |

### Infrastruktur-Spezifikationen

| Datei | Scope | Status | Beschreibung |
|-------|-------|--------|--------------|
| `search.allium` | Core (Wave 1) | ✅ Existiert | FTS5 Full-Text Search mit Snowball |
| `generation.allium` | Core (Wave 4) | ✅ Existiert | Statische Site-Generierung |
| `preview.allium` | Core (Wave 4) | ✅ Existiert | Lokaler Preview-Server |
| `publishing.allium` | Core (Wave 5) | ✅ Existiert | SSH-Upload (SCP/rsync) |
| `task.allium` | Core (Wave 1) | ✅ Existiert | Background Task Manager |
| `i18n.allium` | Core (Alle) | ✅ Existiert | Split Localization (UI vs Content) |
| `schema.allium` | Core (Wave 1) | ✨ Neu | Vollständiges SQLite-Schema |
| `frontmatter.allium` | Core (Wave 1) | ✨ Neu | Alle Frontmatter-Formate |
| `template_context.allium` | Core (Wave 4) | ✨ Neu | Liquid-Template-Kontext |
| `media_processing.allium` | Core (Wave 1) | ✨ Neu | Thumbnail-Generierung, Bildverarbeitung |

### Integration-Spezifikationen

| Datei | Scope | Status | Beschreibung |
|-------|-------|--------|--------------|
| `git.allium` | Extension A | ✅ Existiert | Git-Operationen, LFS, Reconciliation |
| `mcp.allium` | Extension G | ✅ Existiert | MCP-Server (Tools, Resources) |
| `ai.allium` | Core/Extension C | ✅ Existiert | AI One-Shot Tasks und Chat |
| `embedding.allium` | Extension D | ✅ Existiert | Semantic Similarity (HNSW) |
| `cli_sync.allium` | Core (Wave 5) | ✅ Existiert | CLI-zu-App Notification Sync |
| `metadata_diff.allium` | Core (Wave 1) | ✅ Existiert | DB/Dateisystem-Diff und Rebuild |

## Neuerstellte Spezifikationen (diese Session)

### 1. `schema.allium`

**Zweck:** Vollständige Inventarisierung des SQLite-Schemas aus dem TypeScript-Projekt.

**Inhalt:**
- 22 Entity-Definitionen mit allen Feldern und Typen
- Alle Relationship-Tabellen (PostLink, PostMedia)
- Alle Metadata-Tabellen (Settings, GeneratedFileHashes)
- FTS5 Virtual Tables für Search (posts_fts, media_fts)
- AI/Chat-Tabellen (Conversations, Messages, Model Catalog)
- Embedding-Tabellen (USearch keys, dismissed duplicates)
- Import-Tabellen (WXR definitions)
- Notification-Tabellen (CLI-to-App sync)
- Alle Unique-Constraints und Indexe
- Migration-History (Version 0001-0010)

**Kritische Details:**
- `posts` Tabelle: 21 Felder inkl. Legacy-Felder
- `post_translations` Tabelle: 12 Felder
- `media` Tabelle: 17 Felder
- `media_translations` Tabelle: 6 Felder
- `scripts` Tabelle: 13 Felder (Lua in Rust)
- `templates` Tabelle: 13 Felder
- FTS5 benötigt Snowball Stemmer für 24 Sprachen
- Embedding vectors: 384-dimensional Float32 (1536 bytes)

### 2. `frontmatter.allium`

**Zweck:** Exakte Spezifikation aller YAML-Frontmatter-Formate.

**Inhalt:**
- **Post-Dateiformat:** `posts/{YYYY}/{MM}/{slug}.md`
  - Required fields: id, title, slug, status, createdAt, updatedAt, tags, categories
  - Conditional fields: excerpt, author, language, templateSlug, publishedAt
  - `doNotTranslate` nur wenn true
  
- **Translation-Dateiformat:** `posts/{YYYY}/{MM}/{slug}.{language}.md`
  - Gleiche Struktur wie Posts mit language-Override
  
- **Media-Sidecar-Format:** `media/{id}.md`
  - Required: id, filename, originalName, mimeType, size, createdAt, updatedAt, tags
  - Optional: title, alt, caption, author, language, width, height
  
- **Template-Format:** `templates/{slug}.liquid`
  - Required: id, slug, title, kind, enabled, version, createdAt, updatedAt
  
- **Script-Format:** `scripts/{slug}.lua` (Rust) / `{slug}.py` (TypeScript)
  - Required: id, slug, title, kind, entrypoint, enabled, version, createdAt, updatedAt
  
- **Tags-Dateiformat:** `meta/tags.json`
  - Sortiertes JSON-Array ohne interne IDs
  
- **Projekt-Metadaten:**
  - `meta/project.json` - Projekt-Konfiguration
  - `meta/categories.json` - Kategorie-Liste
  - `meta/category-meta.json` - Render-Einstellungen pro Kategorie
  - `meta/publishing.json` - SSH-Konfiguration
  - `meta/menu.opml` - Navigation im OPML-Format

**Format-Konventionen:**
- Timestamps als Unix-Milliseconds (ISO 8601 in YAML)
- 2-Space Indentation
- Arrays als YAML-Liste
- Booleans als lowercase true/false
- Atomare Writes (temp file + rename)

### 3. `template_context.allium`

**Zweck:** Vollständige Spezifikation des an Liquid-Templates übergebenen Datenkontexts.

**Inhalt:**
- **Global Render Context:** 30+ Top-Level-Variablen
  - `language`, `language_prefix`, `html_theme_attribute`
  - `blog_languages` (List<BlogLanguage>)
  - `alternate_links` (hreflang für SEO)
  - `menu_items` (hierarchische Struktur)
  - `post` (PostContext für Single-Post-Pages)
  - `day_blocks` (für Archiv-Seiten)
  - `canonical_post_path_by_slug` (Lookup-Map)
  - `post_data_json_by_id` (Lookup-Map)
  
- **PostContext:** 18 Felder inkl. linked_media, outgoing_links, incoming_links
  
- **MediaContext:** 11 Felder für Media in Templates
  
- **PaginationContext:** 10 Felder für Paginierung
  
- **Liquid-Filters:**
  - Built-in: `default`, `escape`, `url_encode`, `append`
  - Custom: `i18n` (Übersetzungs-Lookup)
  - Custom: `markdown` (Markdown→HTML mit Macro-Expansion)
  
- **Built-in Macros:**
  - `gallery` - Bildergalerie
  - `youtube` - YouTube-Einbettung
  - `vimeo` - Vimeo-Einbettung
  - `photo_archive` - Foto-Archiv-Grid
  - `tag_cloud` - Tag-Cloud mit Größen-Faktoren
  
- **Template-Lookup-Regeln:**
  - Priority: post-specific → tag-specific → category-specific → default
  - Partials via `{% render 'partial' %}`

### 4. `media_processing.allium`

**Zweck:** Exakte Spezifikation der Media-Verarbeitung (Thumbnails, Format-Konversion, EXIF).

**Inhalt:**
- **Datei-Organisation:**
  - Binär: `media/{timestamp}_{random}.{ext}`
  - Sidecar: `media/{id}.md`
  - Thumbnail: `thumbnails/{id}.webp`
  - Thumbnail-Source: `thumbnails/{id}_source.{ext}`
  
- **Thumbnail-Konfiguration:**
  - Größe: 400x300 (default)
  - Fit: "cover" (crop to fill)
  - Qualität: 80% WEBP
  - Format: WEBP
  
- **Bildverarbeitung:**
  - Input-Formate: JPEG, PNG, GIF, WEBP, TIFF, BMP, HEIC, HEIF
  - EXIF-Orientierung muss berücksichtigt werden
  - EXIF wird aus Thumbnails entfernt (Privacy)
  - Original-Format bleibt erhalten
  
- **Import-Flow:**
  1. Validiere Dateityp
  2. Generiere eindeutigen Dateinamen
  3. Kopiere nach media/
  4. Generiere Thumbnail
  5. Erstelle Sidecar mit Metadaten
  6. Indexiere für Search (FTS5)
  7. Generiere Embedding (wenn aktiviert)
  
- **Media-Übersetzungen:**
  - Dateipfad: `media/{id}/{language}.md`
  - Felder: title, alt, caption pro Sprache
  
- **Validierungs-Regeln:**
  - Fehlende Binary-Dateien
  - Fehlende Sidecar-Dateien
  - Fehlende Thumbnails
  - Korrupte Bilddateien
  - Orphan Media (nicht verlinkt)

## Verfügbare Rust-Plan-Dokumente

| Datei | Beschreibung |
|-------|--------------|
| `RUST_PLAN.md` | Haupt-Plan mit Non-Negotiable Constraints |
| `RUST_PLAN_CORE.md` | Detaillierter Core-Plan (886 Zeilen) |
| `RUST_PLAN_EXTENSION.md` | Extension Buckets A-J |
| `RUST_EXECUTION_BACKLOG.md` | Milestone-basierte Aufgabenliste |
| `RUST_COMPATIBILITY_MATRIX_TEMPLATE.md` | Vorlage für Metadata-Inventory |

## Spezifikations-Abdeckungs-Analyse

### Vollständig Abgedeckt ✅

1. **Database Schema** - `schema.allium` deckt alle 22 Tabellen mit allen Feldern
2. **File Formats** - `frontmatter.allium` deckt alle Dateitypen und Formate
3. **Post Lifecycle** - `post.allium` + `translation.allium` vollständig
4. **Media Processing** - `media.allium` + `media_processing.allium` vollständig
5. **Template System** - `template.allium` + `template_context.allium` vollständig
6. **Search** - `search.allium` mit FTS5 und Snowball Stemming
7. **Generation** - `generation.allium` mit allen Section-Typen
8. **Publishing** - `publishing.allium` mit SCP und rsync
9. **AI Integration** - `ai.allium` mit One-Shot Operations
10. **i18n** - `i18n.allium` mit Split Localization

### Spezifikations-Lücken vor dieser Session ❌

1. **Schema nicht dokumentiert** - Nur aus TypeScript-Code lesbar
2. **Frontmatter-Regeln nicht explizit** - Feld-Logik verstreut in Engine-Code
3. **Template-Kontext unvollständig** - Variable-Liste existierte nicht zentral
4. **Media-Processing-Regeln implizit** - Thumbnail-Größen, EXIF-Handling nicht spezifiziert

### Status nach dieser Session ✅

Alle kritischen Lücken geschlossen:
- ✅ Vollständiges SQLite-Schema inventarisiert
- ✅ Alle Frontmatter-Formate spezifiziert
- ✅ Template-Kontext vollständig dokumentiert
- ✅ Media-Processing-Regeln explizit gemacht

## Nächste Schritte für die Implementierung

### Wave 0 (Foundation)
1. Cargo-Workspace aufsetzen (bds-core, bds-editor, bds-ui, bds-cli)
2. SQLite-Connection mit rusqlite (bundled, vtab)
3. Refinery-Migration-Loader
4. bds-editor PoC (ropey + syntect + cosmic-text)
5. Iced App Shell mit muda-Menüs
6. Slug-Compatibility-Tests (deunicode vs transliteration)

### Wave 1 (Data Layer)
1. Alle Engines implementieren (Project, Post, Media, Tag, Meta, etc.)
2. Frontmatter-Parser/Writer für alle Dateitypen
3. Thumbnail-Generierung mit image-crate
4. FTS5-Index mit Snowball-Stemming
5. Metadata-Diff und Rebuild
6. Round-trip-Tests für alle Entity-Typen

### Wave 2 (Native Shell)
1. Muda-Menü-Bar mit allen Menüs
2. rfd-Datei-Dialoge
3. Iced-Message-Routing
4. macOS Lifecycle-Shim (objc2)
5. Tab-Management und Workspace-Layout

### Wave 3 (Authoring UI)
1. Post-Editor mit bds-editor
2. Media-Browser und Editor
3. Template-Editor
4. Script-Editor
5. Settings-View
6. Tag/Category-Management

### Wave 4 (Rendering)
1. Markdown-Render mit pulldown-cmark
2. Liquid-Template-Engine (subset)
3. Built-in Macros (gallery, youtube, vimeo, etc.)
4. Preview-Server (axum)
5. Site-Generation mit rayon-Parallelisierung
6. One-Shot AI Operations (reqwest)
7. Pagefind-Search-Index

### Wave 5 (Publishing)
1. SSH/SCP Upload mit ssh2-crate
2. rsync-Integration
3. Publish-Progress-UI
4. Validierung vor Publish

### Wave 6 (Lua Scripting)
1. Lua-Runtime mit mlua
2. Lua-API-Bridge
3. Script-Execution
4. Generated API-Documentation

## Referenz-Implementierung

Für Implementierungsdetails immer referenzieren:
- **TypeScript-Code:** `/Users/gb/Projects/bDS/src/main/engine/`
- **Spezifikationen:** `/Users/gb/Projects/RuDS/specs/`
- **Pläne:** `/Users/gb/Projects/RuDS/RUST_*.md`

## Kompatibilitäts-Garantien

Die Rust-Implementierung muss garantieren:

1. **Datenbank-Kompatibilität** - Alle TypeScript-Daten lesbar
2. **Datei-Format-Kompatibilität** - Frontmatter byte-genau gleich
3. **Generierungs-Kompatibilität** - Output-Hashes übereinstimmend (normalisiert)
4. **Slug-Kompatibilität** - deunicode Output muss transliteration Output entsprechen
5. **URL-Kompatibilität** - Gleiche Routes und Canonical URLs
6. **Such-Kompatibilität** - FTS5 mit identischem Stemming
7. **Template-Kompatibilität** - Identisches Liquid-Subset

## Spezifikations-Quellen

Alle Spezifikationen wurden extrahiert aus:

- TypeScript-Engine-Code: `/Users/gb/Projects/bDS/src/main/engine/*.ts`
- TypeScript-Schema: `/Users/gb/Projects/bDS/src/main/database/schema.ts`
- TypeScript-Tests: `/Users/gb/Projects/bDS/tests/engine/*.test.ts`
- Bestehende Allium-Specs: `/Users/gb/Projects/RuDS/specs/*.allium`
