feat: additional specs
This commit is contained in:
316
SPECIFICATION_INDEX.md
Normal file
316
SPECIFICATION_INDEX.md
Normal file
@@ -0,0 +1,316 @@
|
||||
# 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`
|
||||
Reference in New Issue
Block a user