- Revamped the README to provide comprehensive documentation for the Mindnet Causal Assistant plugin, including user, administrator, developer, and architect guides. - Added specialized documentation sections for installation, deployment, and troubleshooting. - Enhanced the chain inspection logic to determine effective required links based on template definitions, profiles, and defaults, improving the accuracy of findings related to link completeness.
684 lines
19 KiB
Markdown
684 lines
19 KiB
Markdown
# Mindnet Causal Assistant - Architektur-Dokumentation
|
|
|
|
> **Version:** 1.0.0
|
|
> **Stand:** 2025-01-XX
|
|
> **Zielgruppe:** Architekten, Entwickler, System-Designer
|
|
|
|
---
|
|
|
|
## Inhaltsverzeichnis
|
|
|
|
1. [System-Überblick](#system-überblick)
|
|
2. [Architektur-Prinzipien](#architektur-prinzipien)
|
|
3. [Komponenten-Architektur](#komponenten-architektur)
|
|
4. [Datenfluss](#datenfluss)
|
|
5. [Konfigurations-Management](#konfigurations-management)
|
|
6. [Erweiterbarkeit](#erweiterbarkeit)
|
|
|
|
---
|
|
|
|
## System-Überblick
|
|
|
|
### Zweck
|
|
|
|
Das **Mindnet Causal Assistant** Plugin ist ein Authoring-Tool für Obsidian, das kausale/argumentative Zusammenhänge als Graph abbildet und daraus nützliche Diagnosen ableitet.
|
|
|
|
### Kern-Funktionen
|
|
|
|
1. **Note-Erstellung:** Strukturierte Notes mit Frontmatter, IDs, Typen
|
|
2. **Interview-Wizard:** Konfigurierbare Interviews zur Inhaltserfassung
|
|
3. **Semantic Mapping:** Section-basierte Gruppierung von Links nach Edge-Typen
|
|
4. **Chain Inspector:** Analyse kausaler Ketten mit Template Matching
|
|
5. **Findings & Fixes:** Automatische Erkennung und Behebung von Problemen
|
|
|
|
### Technologie-Stack
|
|
|
|
- **Sprache:** TypeScript (strict mode)
|
|
- **Framework:** Obsidian Plugin API
|
|
- **Bundler:** esbuild
|
|
- **Testing:** Vitest
|
|
- **Config-Format:** YAML, Markdown
|
|
|
|
---
|
|
|
|
## Architektur-Prinzipien
|
|
|
|
### 1. Modularität
|
|
|
|
**Prinzip:** Klare Trennung von Verantwortlichkeiten
|
|
|
|
- **Analysis:** Chain Inspector, Template Matching
|
|
- **Dictionary:** Config Loading & Parsing
|
|
- **Graph:** Graph Building & Traversal
|
|
- **Interview:** Wizard & State Management
|
|
- **Mapping:** Semantic Mapping Builder
|
|
- **Parser:** Markdown Parsing
|
|
|
|
### 2. Konfigurierbarkeit
|
|
|
|
**Prinzip:** Externe Konfiguration über Vault-Dateien
|
|
|
|
- **Edge Vocabulary:** Edge-Typen & Aliases
|
|
- **Graph Schema:** Empfehlungen für Edge-Types
|
|
- **Interview Config:** Profile, Steps, Loops
|
|
- **Chain Roles:** Edge-Type → Role Mapping
|
|
- **Chain Templates:** Vordefinierte Kettenmuster
|
|
|
|
### 3. Live-Reload
|
|
|
|
**Prinzip:** Automatisches Neuladen bei Config-Änderungen
|
|
|
|
- **Debounced Reload:** 200ms Delay für Performance
|
|
- **Last-Known-Good:** Fallback bei Fehlern
|
|
- **Error-Handling:** Graceful Degradation
|
|
|
|
### 4. Extensibility
|
|
|
|
**Prinzip:** Erweiterbar durch neue Module
|
|
|
|
- **Lint Rules:** Neue Regeln hinzufügbar
|
|
- **Findings:** Neue Finding-Codes definierbar
|
|
- **Templates:** Neue Chain-Templates konfigurierbar
|
|
- **UI Components:** Modals/Views erweiterbar
|
|
|
|
---
|
|
|
|
## Komponenten-Architektur
|
|
|
|
### High-Level-Architektur
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────┐
|
|
│ Obsidian Plugin API │
|
|
└─────────────────────────────────────────────────────────┘
|
|
│
|
|
▼
|
|
┌─────────────────────────────────────────────────────────┐
|
|
│ MindnetCausalAssistantPlugin │
|
|
│ (main.ts) │
|
|
│ - Settings Management │
|
|
│ - Command Registration │
|
|
│ - Event Handlers │
|
|
└─────────────────────────────────────────────────────────┘
|
|
│
|
|
┌───────────────────┼───────────────────┐
|
|
│ │ │
|
|
▼ ▼ ▼
|
|
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
|
│ Analysis │ │ Dictionary │ │ Graph │
|
|
│ │ │ │ │ │
|
|
│ - Inspector │ │ - Loaders │ │ - Builder │
|
|
│ - Matching │ │ - Parsers │ │ - Traversal │
|
|
│ - Findings │ │ - Types │ │ - Index │
|
|
└──────────────┘ └──────────────┘ └──────────────┘
|
|
│ │ │
|
|
└───────────────────┼───────────────────┘
|
|
│
|
|
┌───────────────────┼───────────────────┐
|
|
│ │ │
|
|
▼ ▼ ▼
|
|
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
|
│ Interview │ │ Mapping │ │ Parser │
|
|
│ │ │ │ │ │
|
|
│ - Wizard │ │ - Builder │ │ - Edges │
|
|
│ - State │ │ - Extractor │ │ - Frontmatter│
|
|
│ - Renderer │ │ - Selector │ │ - Links │
|
|
└──────────────┘ └──────────────┘ └──────────────┘
|
|
│ │ │
|
|
└───────────────────┼───────────────────┘
|
|
│
|
|
┌───────────────────┼───────────────────┐
|
|
│ │ │
|
|
▼ ▼ ▼
|
|
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
|
│ Vocabulary │ │ Lint │ │ Export │
|
|
│ │ │ │ │ │
|
|
│ - Loader │ │ - Engine │ │ - Graph │
|
|
│ - Normalize │ │ - Rules │ │ - Serialize │
|
|
│ - Cache │ │ - Findings │ │ - JSON │
|
|
└──────────────┘ └──────────────┘ └──────────────┘
|
|
│ │ │
|
|
└───────────────────┼───────────────────┘
|
|
│
|
|
┌───────────────────┼───────────────────┐
|
|
│ │ │
|
|
▼ ▼ ▼
|
|
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
|
│ Schema │ │UnresolvedLink│ │EntityPicker │
|
|
│ │ │ │ │ │
|
|
│ - Loader │ │ - Handler │ │ - Index │
|
|
│ - Lookup │ │ - Adoption │ │ - Filters │
|
|
│ - Cache │ │ - Resolution │ │ - Tree │
|
|
└──────────────┘ └──────────────┘ └──────────────┘
|
|
```
|
|
|
|
### Komponenten-Details
|
|
|
|
#### 1. Plugin Core (`main.ts`)
|
|
|
|
**Verantwortlichkeiten:**
|
|
- Plugin Lifecycle (onload/onunload)
|
|
- Settings Management
|
|
- Command Registration
|
|
- Event Handler Registration
|
|
- Config Loading Coordination
|
|
|
|
**Abhängigkeiten:**
|
|
- Obsidian Plugin API
|
|
- Alle anderen Module
|
|
|
|
#### 2. Analysis (`src/analysis/`)
|
|
|
|
**Verantwortlichkeiten:**
|
|
- Chain Inspector (Haupt-Analyse-Engine)
|
|
- Template Matching (Slot-basiertes Matching)
|
|
- Graph Indexierung (für Traversal)
|
|
- Section Context Extraction
|
|
- Findings Generation
|
|
|
|
**Abhängigkeiten:**
|
|
- Dictionary (Chain Roles, Templates)
|
|
- Graph (Traversal, Index)
|
|
- Parser (Edge Extraction)
|
|
|
|
**Datenfluss:**
|
|
```
|
|
Context → Graph Building → Traversal → Template Matching → Findings
|
|
```
|
|
|
|
#### 3. Dictionary (`src/dictionary/`)
|
|
|
|
**Verantwortlichkeiten:**
|
|
- Config Loading (YAML, Markdown)
|
|
- Config Parsing (YAML → TypeScript Types)
|
|
- Error Handling (Last-Known-Good)
|
|
- Live-Reload Coordination
|
|
|
|
**Abhängigkeiten:**
|
|
- Obsidian Vault API
|
|
- YAML Parser
|
|
|
|
**Datenfluss:**
|
|
```
|
|
Vault File → Loader → Parser → TypeScript Types → Cache
|
|
```
|
|
|
|
#### 4. Graph (`src/graph/`)
|
|
|
|
**Verantwortlichkeiten:**
|
|
- Graph Building (aus Vault)
|
|
- Graph Indexierung (für Traversal)
|
|
- Traversal (BFS/DFS)
|
|
- Target Resolution (Link → File)
|
|
- Report Rendering
|
|
|
|
**Abhängigkeiten:**
|
|
- Parser (Edge Extraction)
|
|
- Obsidian Metadata Cache
|
|
|
|
**Datenfluss:**
|
|
```
|
|
Vault → Graph Builder → Graph Index → Traversal → Paths
|
|
```
|
|
|
|
#### 5. Interview (`src/interview/`)
|
|
|
|
**Verantwortlichkeiten:**
|
|
- Wizard State Management
|
|
- Loop State Management (nested loops)
|
|
- Output Rendering (Section-basiert)
|
|
- Frontmatter Writing
|
|
- Section Key Resolution
|
|
- Target Extraction from Anchors
|
|
|
|
**Abhängigkeiten:**
|
|
- Dictionary (Interview Config)
|
|
- UI (Wizard Modal)
|
|
- Parser (Frontmatter)
|
|
|
|
**Datenfluss:**
|
|
```
|
|
Config → Wizard State → User Input → Loop State → Renderer → Note Content
|
|
```
|
|
|
|
**Hauptkomponenten:**
|
|
- `InterviewConfigLoader.ts` - Lädt interview_config.yaml
|
|
- `parseInterviewConfig.ts` - YAML → InterviewConfig Parser
|
|
- `wizardState.ts` - Wizard State Management (Steps, Loops)
|
|
- `loopState.ts` - Loop State Management (nested loops)
|
|
- `renderer.ts` - Output-Rendering (Section-basiert)
|
|
- `writeFrontmatter.ts` - Frontmatter-Generierung
|
|
- `sectionKeyResolver.ts` - Section-Key-Auflösung
|
|
- `extractTargetFromAnchor.ts` - Target-Extraktion aus Anchors
|
|
- `slugify.ts` - Slug-Generierung für Dateinamen
|
|
|
|
#### 6. Mapping (`src/mapping/`)
|
|
|
|
**Verantwortlichkeiten:**
|
|
- Semantic Mapping Builder
|
|
- Mapping Extraction (aus existierenden Blöcken)
|
|
- Edge Type Selection (UI)
|
|
- Mapping Block Updates
|
|
|
|
**Abhängigkeiten:**
|
|
- Parser (Link Extraction)
|
|
- Schema (Graph Schema für Empfehlungen)
|
|
- UI (Edge Type Selector)
|
|
|
|
**Datenfluss:**
|
|
```
|
|
Note Content → Link Extraction → Edge Type Assignment → Mapping Blocks
|
|
```
|
|
|
|
#### 7. Parser (`src/parser/`)
|
|
|
|
**Verantwortlichkeiten:**
|
|
- Edge Extraction (aus Callouts)
|
|
- Frontmatter Parsing
|
|
- Link Parsing (Relative Links)
|
|
- Section Detection
|
|
|
|
**Abhängigkeiten:**
|
|
- Obsidian Metadata Cache
|
|
- Vocabulary (Edge Normalization)
|
|
|
|
**Datenfluss:**
|
|
```
|
|
Markdown → Parser → Structured Data (Edges, Links, Frontmatter)
|
|
```
|
|
|
|
#### 8. Vocabulary (`src/vocab/`)
|
|
|
|
**Verantwortlichkeiten:**
|
|
- Edge Vocabulary Loading (aus Markdown)
|
|
- Edge Type Normalization (Alias → Canonical)
|
|
- Inverse Edge Type Resolution
|
|
- Vocabulary Caching
|
|
|
|
**Abhängigkeiten:**
|
|
- Obsidian Vault API
|
|
- Markdown Parser
|
|
|
|
**Datenfluss:**
|
|
```
|
|
Vault File → VocabularyLoader → Parser → Vocabulary Instance → Cache
|
|
```
|
|
|
|
**Hauptkomponenten:**
|
|
- `Vocabulary.ts` - Wrapper-Klasse für Lookup-Methoden
|
|
- `VocabularyLoader.ts` - Lädt Vocabulary-Datei
|
|
- `parseEdgeVocabulary.ts` - Parst Markdown zu EdgeVocabulary-Struktur
|
|
|
|
#### 9. Lint (`src/lint/`)
|
|
|
|
**Verantwortlichkeiten:**
|
|
- Linting Engine für Note-Validierung
|
|
- Regel-basierte Prüfungen
|
|
- Findings Generation
|
|
|
|
**Abhängigkeiten:**
|
|
- Vocabulary (Edge Type Validation)
|
|
- Parser (Edge Extraction)
|
|
- Obsidian Metadata Cache
|
|
|
|
**Datenfluss:**
|
|
```
|
|
Note Content → Parser → Lint Rules → Findings
|
|
```
|
|
|
|
**Hauptkomponenten:**
|
|
- `LintEngine.ts` - Haupt-Linting-Engine
|
|
- `rules/` - Einzelne Lint-Regeln
|
|
- `rule_hub_has_causality.ts` - Prüft auf kausale Edges
|
|
- `rule_missing_target.ts` - Prüft auf fehlende Targets
|
|
- `rule_unkown_edge.ts` - Prüft auf unbekannte Edge-Types
|
|
|
|
#### 10. Export (`src/export/`)
|
|
|
|
**Verantwortlichkeiten:**
|
|
- Graph Export zu JSON
|
|
- Node/Edge Serialisierung
|
|
- Export-Datei-Erstellung
|
|
|
|
**Abhängigkeiten:**
|
|
- Graph (Graph Building)
|
|
- Vocabulary (Edge Normalization)
|
|
- Parser (Edge Extraction)
|
|
|
|
**Datenfluss:**
|
|
```
|
|
Vault → Graph Builder → Export Serialization → JSON File
|
|
```
|
|
|
|
**Hauptkomponenten:**
|
|
- `exportGraph.ts` - Haupt-Export-Funktion
|
|
- `types.ts` - Export-Types (ExportBundle, ExportNode, ExportEdge)
|
|
|
|
#### 11. Schema (`src/schema/`)
|
|
|
|
**Verantwortlichkeiten:**
|
|
- Graph Schema Loading (aus Markdown)
|
|
- Schema-basierte Empfehlungen für Edge-Types
|
|
- Typical/Prohibited Edge-Type-Lookup
|
|
|
|
**Abhängigkeiten:**
|
|
- Obsidian Vault API
|
|
- Markdown Parser
|
|
|
|
**Datenfluss:**
|
|
```
|
|
Vault File → GraphSchemaLoader → Schema Instance → Cache
|
|
```
|
|
|
|
**Hauptkomponenten:**
|
|
- `GraphSchemaLoader.ts` - Lädt Graph-Schema-Datei
|
|
- Verwendet von `mapping/graphSchema.ts` für Empfehlungen
|
|
|
|
#### 12. Unresolved Link (`src/unresolvedLink/`)
|
|
|
|
**Verantwortlichkeiten:**
|
|
- Unresolved Link Detection
|
|
- Link Click Interception (Reading View, Editor)
|
|
- Note Adoption Flow
|
|
- Link Target Resolution
|
|
|
|
**Abhängigkeiten:**
|
|
- Obsidian Metadata Cache
|
|
- Interview (Note Creation)
|
|
- Entity Picker (Target Selection)
|
|
|
|
**Datenfluss:**
|
|
```
|
|
Link Click → Detection → Profile Selection → Note Creation → Adoption
|
|
```
|
|
|
|
**Hauptkomponenten:**
|
|
- `unresolvedLinkHandler.ts` - Haupt-Handler für Link-Clicks
|
|
- `linkHelpers.ts` - Link-Parsing und -Normalisierung
|
|
- `adoptHelpers.ts` - Note-Adoption-Logik
|
|
|
|
#### 13. Entity Picker (`src/entityPicker/`)
|
|
|
|
**Verantwortlichkeiten:**
|
|
- Entity Selection UI (Notes, Folders)
|
|
- Note Index Building
|
|
- Folder Tree Navigation
|
|
- Wikilink Parsing
|
|
|
|
**Abhängigkeiten:**
|
|
- Obsidian Vault API
|
|
- UI (EntityPickerModal)
|
|
|
|
**Datenfluss:**
|
|
```
|
|
Vault → Note Index → Filters → Entity Selection → Result
|
|
```
|
|
|
|
**Hauptkomponenten:**
|
|
- `noteIndex.ts` - Baut Index aller Notes
|
|
- `folderTree.ts` - Folder-Tree-Struktur
|
|
- `filters.ts` - Filter-Logik für Entity-Selection
|
|
- `wikilink.ts` - Wikilink-Parsing
|
|
|
|
#### 14. Commands (`src/commands/`)
|
|
|
|
**Verantwortlichkeiten:**
|
|
- Command Implementations
|
|
- Command Execution Coordination
|
|
- Error Handling für Commands
|
|
|
|
**Abhängigkeiten:**
|
|
- Alle anderen Module (je nach Command)
|
|
|
|
**Hauptkomponenten:**
|
|
- `inspectChainsCommand.ts` - Chain Inspector Command
|
|
- `fixFindingsCommand.ts` - Fix Findings Command
|
|
|
|
---
|
|
|
|
## Datenfluss
|
|
|
|
### Workflow 1: Chain Inspector
|
|
|
|
```
|
|
1. User: Command "Inspect Chains"
|
|
↓
|
|
2. main.ts: executeInspectChains()
|
|
↓
|
|
3. sectionContext.ts: Extract Context (file, heading)
|
|
↓
|
|
4. parser/: Extract Edges from Section
|
|
↓
|
|
5. graphIndex.ts: Build Index from Edges
|
|
↓
|
|
6. traverse.ts: BFS/DFS Traversal
|
|
↓
|
|
7. templateMatching.ts: Match Templates
|
|
↓
|
|
8. chainInspector.ts: Generate Findings
|
|
↓
|
|
9. Console: Output Report
|
|
```
|
|
|
|
### Workflow 2: Note Creation
|
|
|
|
```
|
|
1. User: Command "Create Note from Profile"
|
|
↓
|
|
2. main.ts: Profile Selection Modal
|
|
↓
|
|
3. dictionary/: Load Interview Config
|
|
↓
|
|
4. interview/: Write Frontmatter
|
|
↓
|
|
5. vault.create(): Create File
|
|
↓
|
|
6. interview/: Start Wizard (if enabled)
|
|
↓
|
|
7. wizardState.ts: Collect User Input
|
|
↓
|
|
8. renderer.ts: Render Output
|
|
↓
|
|
9. vault.modify(): Write Content
|
|
↓
|
|
10. mapping/: Run Edger (if enabled)
|
|
```
|
|
|
|
### Workflow 3: Semantic Mapping
|
|
|
|
```
|
|
1. User: Command "Build Semantic Mapping"
|
|
↓
|
|
2. mappingExtractor.ts: Extract Existing Mappings
|
|
↓
|
|
3. sectionParser.ts: Parse Sections
|
|
↓
|
|
4. parseRelLinks.ts: Extract Links
|
|
↓
|
|
5. edgeTypeSelector.ts: Assign Edge Types
|
|
↓
|
|
6. mappingBuilder.ts: Build Mapping Blocks
|
|
↓
|
|
7. updateMappingBlocks.ts: Update Note
|
|
↓
|
|
8. vault.modify(): Write Content
|
|
```
|
|
|
|
### Workflow 4: Config Reload
|
|
|
|
```
|
|
1. Vault: File Modified (edge_vocabulary.md)
|
|
↓
|
|
2. main.ts: Vault Modify Event
|
|
↓
|
|
3. Debounce Timer (200ms)
|
|
↓
|
|
4. VocabularyLoader: Load File
|
|
↓
|
|
5. parseEdgeVocabulary: Parse Markdown
|
|
↓
|
|
6. Vocabulary: Create Instance
|
|
↓
|
|
7. Cache: Update Vocabulary
|
|
↓
|
|
8. Notice: "Vocabulary reloaded"
|
|
```
|
|
|
|
---
|
|
|
|
## Konfigurations-Management
|
|
|
|
### Config-Loading-Pattern
|
|
|
|
**Basis-Pattern:**
|
|
```typescript
|
|
interface DictionaryLoadResult<T> {
|
|
status: "loaded" | "error" | "using-last-known-good";
|
|
data: T | null;
|
|
errors: string[];
|
|
warnings: string[];
|
|
resolvedPath: string;
|
|
loadedAt: number | null;
|
|
}
|
|
```
|
|
|
|
**Last-Known-Good:**
|
|
- Bei Fehlern wird letzte gültige Config verwendet
|
|
- `lastKnownGood` Parameter für Fallback
|
|
- Graceful Degradation statt Crash
|
|
|
|
**Live-Reload:**
|
|
- Debounced (200ms) für Performance
|
|
- Automatisches Neuladen bei Dateiänderungen
|
|
- Error-Handling mit Last-Known-Good
|
|
|
|
### Config-Hierarchie
|
|
|
|
```
|
|
1. Vault File (YAML/Markdown)
|
|
↓
|
|
2. Loader (File → Text)
|
|
↓
|
|
3. Parser (Text → TypeScript Types)
|
|
↓
|
|
4. Validator (Type Checking)
|
|
↓
|
|
5. Cache (In-Memory)
|
|
↓
|
|
6. Consumer (Plugin Components)
|
|
```
|
|
|
|
---
|
|
|
|
## Erweiterbarkeit
|
|
|
|
### Erweiterungspunkte
|
|
|
|
#### 1. Lint Rules
|
|
|
|
**Schnittstelle:**
|
|
```typescript
|
|
interface LintRule {
|
|
id: string;
|
|
name: string;
|
|
severity: "ERROR" | "WARN" | "INFO";
|
|
check: (app: App, file: TFile, vocabulary: Vocabulary) => Promise<LintFinding[]>;
|
|
}
|
|
```
|
|
|
|
**Erweiterung:**
|
|
- Neue Regel-Datei in `src/lint/rules/`
|
|
- Regel in `src/lint/rules/index.ts` registrieren
|
|
|
|
#### 2. Findings
|
|
|
|
**Schnittstelle:**
|
|
```typescript
|
|
interface Finding {
|
|
code: string;
|
|
severity: "ERROR" | "WARN" | "INFO";
|
|
message: string;
|
|
evidence: Record<string, unknown>;
|
|
}
|
|
```
|
|
|
|
**Erweiterung:**
|
|
- Neuen Finding-Code definieren
|
|
- Finding in Chain Inspector generieren
|
|
- Optional: Fix Action hinzufügen
|
|
|
|
#### 3. Chain Templates
|
|
|
|
**Erweiterung:**
|
|
- Neues Template in `chain_templates.yaml` hinzufügen
|
|
- Slots und Links definieren
|
|
- Template Matching unterstützt automatisch
|
|
|
|
#### 4. UI Components
|
|
|
|
**Schnittstelle:**
|
|
```typescript
|
|
class MyModal extends Modal {
|
|
constructor(app: App, onResult: (result: MyResult) => void);
|
|
onOpen(): void;
|
|
onClose(): void;
|
|
}
|
|
```
|
|
|
|
**Erweiterung:**
|
|
- Neue Modal-Klasse erstellen
|
|
- In Commands verwenden
|
|
|
|
---
|
|
|
|
## Performance-Überlegungen
|
|
|
|
### Optimierungen
|
|
|
|
1. **Debouncing:** Config-Reload (200ms)
|
|
2. **Caching:** In-Memory Cache für Configs
|
|
3. **Lazy Loading:** Configs werden bei Bedarf geladen
|
|
4. **BFS-Limit:** Template Matching (max 30 Nodes)
|
|
5. **Tree-Shaking:** Unused Code wird entfernt
|
|
|
|
### Bottlenecks
|
|
|
|
1. **Graph Building:** Kann bei großen Vaults langsam sein
|
|
2. **Template Matching:** Backtracking kann bei vielen Templates langsam sein
|
|
3. **Live-Reload:** Zu viele Reloads können Performance beeinträchtigen
|
|
|
|
---
|
|
|
|
## Sicherheit & Robustheit
|
|
|
|
### Error-Handling
|
|
|
|
- **Last-Known-Good:** Fallback bei Config-Fehlern
|
|
- **Try-Catch:** Alle async Operations
|
|
- **Graceful Degradation:** Plugin funktioniert auch bei Teilfehlern
|
|
|
|
### Validierung
|
|
|
|
- **YAML-Syntax:** Wird beim Laden geprüft
|
|
- **Type-Checking:** TypeScript strict mode
|
|
- **Runtime-Validierung:** Config-Struktur wird geprüft
|
|
|
|
### Isolation
|
|
|
|
- **Module-Grenzen:** Klare Trennung von Verantwortlichkeiten
|
|
- **Keine zirkulären Dependencies**
|
|
- **Obsidian API:** Isoliert von anderen Plugins
|
|
|
|
---
|
|
|
|
## Weitere Ressourcen
|
|
|
|
- **Benutzerhandbuch:** Endnutzer-Workflows
|
|
- **Administratorhandbuch:** Konfiguration und Wartung
|
|
- **Entwicklerhandbuch:** Code-Struktur und Erweiterungen
|
|
- **Installation & Deployment:** Setup-Anleitung
|
|
|
|
---
|
|
|
|
**Ende der Architektur-Dokumentation**
|