12 KiB
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:
postsTabelle: 21 Felder inkl. Legacy-Felderpost_translationsTabelle: 12 FeldermediaTabelle: 17 Feldermedia_translationsTabelle: 6 FelderscriptsTabelle: 13 Felder (Lua in Rust)templatesTabelle: 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
doNotTranslatenur 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-Konfigurationmeta/categories.json- Kategorie-Listemeta/category-meta.json- Render-Einstellungen pro Kategoriemeta/publishing.json- SSH-Konfigurationmeta/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_attributeblog_languages(List)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:
-
Built-in Macros:
gallery- Bildergalerieyoutube- YouTube-Einbettungvimeo- Vimeo-Einbettungphoto_archive- Foto-Archiv-Gridtag_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}
- Binär:
-
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:
- Validiere Dateityp
- Generiere eindeutigen Dateinamen
- Kopiere nach media/
- Generiere Thumbnail
- Erstelle Sidecar mit Metadaten
- Indexiere für Search (FTS5)
- Generiere Embedding (wenn aktiviert)
-
Media-Übersetzungen:
- Dateipfad:
media/{id}/{language}.md - Felder: title, alt, caption pro Sprache
- Dateipfad:
-
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 ✅
- Database Schema -
schema.alliumdeckt alle 22 Tabellen mit allen Feldern - File Formats -
frontmatter.alliumdeckt alle Dateitypen und Formate - Post Lifecycle -
post.allium+translation.alliumvollständig - Media Processing -
media.allium+media_processing.alliumvollständig - Template System -
template.allium+template_context.alliumvollständig - Search -
search.alliummit FTS5 und Snowball Stemming - Generation -
generation.alliummit allen Section-Typen - Publishing -
publishing.alliummit SCP und rsync - AI Integration -
ai.alliummit One-Shot Operations - i18n -
i18n.alliummit Split Localization
Spezifikations-Lücken vor dieser Session ❌
- Schema nicht dokumentiert - Nur aus TypeScript-Code lesbar
- Frontmatter-Regeln nicht explizit - Feld-Logik verstreut in Engine-Code
- Template-Kontext unvollständig - Variable-Liste existierte nicht zentral
- 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)
- Cargo-Workspace aufsetzen (bds-core, bds-editor, bds-ui, bds-cli)
- SQLite-Connection mit rusqlite (bundled, vtab)
- Refinery-Migration-Loader
- bds-editor PoC (ropey + syntect + cosmic-text)
- Iced App Shell mit muda-Menüs
- Slug-Compatibility-Tests (deunicode vs transliteration)
Wave 1 (Data Layer)
- Alle Engines implementieren (Project, Post, Media, Tag, Meta, etc.)
- Frontmatter-Parser/Writer für alle Dateitypen
- Thumbnail-Generierung mit image-crate
- FTS5-Index mit Snowball-Stemming
- Metadata-Diff und Rebuild
- Round-trip-Tests für alle Entity-Typen
Wave 2 (Native Shell)
- Muda-Menü-Bar mit allen Menüs
- rfd-Datei-Dialoge
- Iced-Message-Routing
- macOS Lifecycle-Shim (objc2)
- Tab-Management und Workspace-Layout
Wave 3 (Authoring UI)
- Post-Editor mit bds-editor
- Media-Browser und Editor
- Template-Editor
- Script-Editor
- Settings-View
- Tag/Category-Management
Wave 4 (Rendering)
- Markdown-Render mit pulldown-cmark
- Liquid-Template-Engine (subset)
- Built-in Macros (gallery, youtube, vimeo, etc.)
- Preview-Server (axum)
- Site-Generation mit rayon-Parallelisierung
- One-Shot AI Operations (reqwest)
- Pagefind-Search-Index
Wave 5 (Publishing)
- SSH/SCP Upload mit ssh2-crate
- rsync-Integration
- Publish-Progress-UI
- Validierung vor Publish
Wave 6 (Lua Scripting)
- Lua-Runtime mit mlua
- Lua-API-Bridge
- Script-Execution
- 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:
- Datenbank-Kompatibilität - Alle TypeScript-Daten lesbar
- Datei-Format-Kompatibilität - Frontmatter byte-genau gleich
- Generierungs-Kompatibilität - Output-Hashes übereinstimmend (normalisiert)
- Slug-Kompatibilität - deunicode Output muss transliteration Output entsprechen
- URL-Kompatibilität - Gleiche Routes und Canonical URLs
- Such-Kompatibilität - FTS5 mit identischem Stemming
- 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