Wikilinks ohne Dateiendung werden nicht als Chips angezeigt #8

Closed
alf wants to merge 0 commits from fix/wikilink-chips-missing-extension into main
Owner

Problem

Obsidian-Wikilinks wie [[Brain Dump]] werden in Chat-Bubbles nicht als klickbare Chips gerendet — sie erscheinen als reiner Text [[Brain Dump]].

Ursache

_resolveVaultWikilink() in MediaReferenceParser.swift sucht nur nach dem exakten Stem-Namen aus dem Wikilink. Obsidian-Wikilinks haben aber keine Dateiendung (z.B. [[Brain Dump]]), während die Dateien .md als Endung haben (Brain Dump.md). Die Funktion findet keinen Treffer → kein Chip.

Fix

_resolveVaultWikilink() prüft jetzt bei Stems ohne Endung beide Varianten: den nackten Stem und stem + ".md". Betrifft alle drei Suchstrategien (vault-relativ, gleiches Verzeichnis, rekursive Suche).

Wikilinks mit Endung (z.B. [[Bild.png]]) funktionieren unverändert.

## Problem Obsidian-Wikilinks wie `[[Brain Dump]]` werden in Chat-Bubbles nicht als klickbare Chips gerendet — sie erscheinen als reiner Text `[[Brain Dump]]`. ## Ursache `_resolveVaultWikilink()` in `MediaReferenceParser.swift` sucht nur nach dem exakten Stem-Namen aus dem Wikilink. Obsidian-Wikilinks haben aber keine Dateiendung (z.B. `[[Brain Dump]]`), während die Dateien `.md` als Endung haben (`Brain Dump.md`). Die Funktion findet keinen Treffer → kein Chip. ## Fix `_resolveVaultWikilink()` prüft jetzt bei Stems ohne Endung beide Varianten: den nackten Stem und `stem + ".md"`. Betrifft alle drei Suchstrategien (vault-relativ, gleiches Verzeichnis, rekursive Suche). Wikilinks mit Endung (z.B. `[[Bild.png]]`) funktionieren unverändert.
Portiert das vault_management.ipynb Jupyter-Notebook vollständig in Iris:
- VaultMaintenanceScanner: statischer Vault-Scanner mit Qualitätsprüfung
  (fehlende Frontmatter, kaputte Wikilinks, verwaiste Notizen, fehlende Beschreibungen)
- VaultMaintenanceFrontmatterEngine: Dry-Run + Repair für Frontmatter-Probleme
- VaultIndexUpdater: _Index.md-Generierung (Port von generate_index.py)
- VaultMaintenanceViewModel: @MainActor-Orchestrator mit VaultLLMConfig-Snapshot
  für thread-sicheren Background-Task-Übergang; alle LLM-Backends unterstützt
- VaultMaintenanceWindowController: NSWindow-Singleton (680×600)
- VaultMaintenanceView: SwiftUI-UI mit Scan, Reparatur, Index, Enrichment
- CompanionPanelView: "Vault Wartung"-Button im Config-Tab ergänzt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
CocoaError(.fileReadUnknown, userInfo:) ist kein gültiger Initializer.
Das ließ VaultMaintenanceFrontmatterEngine.swift nicht kompilieren und
erzeugte einen Kaskaden-Fehler im WindowController
("VaultMaintenanceViewModel does not conform to ObservableObject").

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Mit -enable-upcoming-feature InferIsolatedConformances wird die ObservableObject-Conformance
einer @MainActor-Klasse als actor-isolated eingestuft. SwiftUI's @ObservedObject-Wrapper
(pre-isolated-conformances) akzeptiert diese isolierte Conformance nicht, was zu
"does not conform to ObservableObject" im WindowController führt.

Fix: @Observable-Makro statt ObservableObject+@Published — kein Conformance-Problem,
SwiftUI trackt @Observable-Eigenschaften automatisch ohne @ObservedObject-Wrapper.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- vmLog.debug in init() braucht self.vaultPath / self.llmConfig wegen @Observable-Autoclosure-Captures
- writeDescriptionToFrontmatter ist nonisolated (nur File-I/O) — war mit @MainActor-default
  nicht aus Task.detached aufrufbar

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Obsidian wikilinks typically omit the .md extension. The resolver only
searched for the exact stem, so [[Brain Dump]] never matched
'Brain Dump.md' on disk. Now both the bare stem and stem+'.md' are
tried at each lookup stage (vault-relative path, notebook dir, and
recursive vault search).
alf closed this pull request 2026-06-02 22:44:27 +00:00

Pull request closed

Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
iris/Iris!8
No description provided.