- Introduced a wide two-column layout for the Chain Workbench modal, improving user experience and accessibility. - Added new styles for workbench components, including headers, filters, and main containers, to enhance visual organization. - Updated chain templates to allow for multiple distinct matches per template, improving flexibility in template matching. - Enhanced documentation to clarify the new settings and commands related to the Chain Workbench and edge detection features. - Implemented logging for better tracking of missing configurations, ensuring users are informed about any loading issues.
7.7 KiB
Bewertung & Empfehlung: Überschrift vs. Block-Link (Heading-Match)
Datum: Januar 2026
Kontext: Exaktes Heading-Matching in Inspect Chains / Chain Workbench vs. Obsidian-Standard und Interview-Assistent.
1. Obsidian-Standard (Dokumentation & beobachtetes Verhalten)
1.1 Drei relevante Link-Formen (bei Überschrift mit Block-ID)
Bei einer Zeile ## Überschrift ^Block in der Zieldatei:
| Link | Verhalten beim Klick |
|---|---|
[[Titel#Überschrift Block]] (ohne ^) |
Obsidian erzeugt diese Form, wenn man manuell per UI auf die Überschrift verlinkt – das Zeichen ^ wird immer entfernt. Springt auf die Überschrift, highlighted den kompletten Text unter der Überschrift. |
[[Titel#Überschrift]] (nur Text, ohne „ Block“) |
Springt in die Note, aber nicht auf die Überschrift. Entspricht dem aktuellen Interview-Assistenten. |
[[Titel#^Block]] (Block-Link) |
Springt auf die Überschrift, highlighted nur die Überschrift selbst (nicht den Abschnitt darunter). Funktioniert auch, wenn man ^ manuell einträgt (Obsidian entfernt ^ nur bei UI-erzeugten Links). |
1.2 Beobachtetes Verhalten
- Obsidian entfernt bei UI-Links das
^: Ein manuell gesetzter Wikilink auf eine Überschrift mit Block-ID wird zu[[Titel#Überschrift Block]](mit Leerzeichen, ohne Caret). - Drei Schreibweisen bezeichnen dieselbe Sektion:
Überschrift,Überschrift ^Block(im Quelldokument),Überschrift Block(in Obsidian-Links). Für Matching müssen alle drei als dieselbe Sektion gelten.
2. Aktuelles Verhalten im Plugin
2.1 Section-Parser & Graph-Index
- sectionParser: Speichert
headingals vollständige Zeile nach den#, also z. B."Überschrift ^block"(inkl. Block-ID). - graphIndex
parseTarget:- Bei
[[Datei#X]]:target.heading = X(exakt der Teil nach#). - Bei
[[#^block-id]]: Auflösung über Sektionen →heading = section.heading(ebenfalls voller Text, inkl.^block).
- Bei
- Section-Nodes: Werden aus
section.headinggebaut → ebenfalls voller Text (z. B."Überschrift ^block").
2.2 Interview-Assistent (LinkTargetPicker + renderNoteEdges)
- getHeadingsWithSectionTypes (targetTypeResolver): Liest Überschriften per eigenem Regex und entfernt den Block-Teil:
(.+?)(?:\s+\^[\w-]+)?\s*$→match[2]ist nur der Text (z. B."Überschrift"). - LinkTargetPicker: Setzt
linkTarget = basename + "#" + h.heading→ es wird nur[[Note#Überschrift]]erzeugt (ohne „ Block“ /^block). - renderNoteEdges: Schreibt
[[${toNote}]];toNoteist bereits"Note"oder"Note#Überschrift".
Fazit: Der Interview-Assistent erzeugt [[Note#Überschrift]]. In Obsidian springt dieser Link in die Note, aber nicht auf die Überschrift (siehe Abschnitt 1). Obsidian-typisches Springen auf die Überschrift (inkl. Highlight des Abschnitts) liefert nur [[Titel#Überschrift Block]] (UI-erzeugt, ohne ^).
2.3 Inspect Chains & Chain Workbench
- chainInspector vergleicht überall strikt:
edge.target.heading === context.headingund
edge.source.sectionHeading === context.heading. - dangling_target_heading: Prüfung gegen
metadataCache.getFileCache(...).headingsmit
h.heading === targetHeading(ebenfalls exakt). - Chain Workbench nutzt dieselben Konzepte (context/assignment mit
heading); keine Normalisierung.
Folge: Sobald eine Seite "Überschrift ^block" und ein Link [[Titel#Überschrift]] vorkommt (oder umgekehrt), stimmen die Strings nicht überein → kein Match, ggf. falscher dangling_target_heading.
3. Bewertung
| Aspekt | Bewertung |
|---|---|
| Obsidian (UI) | Beim manuellen Verlinken auf eine Überschrift mit Block-ID: Link wird zu [[Titel#Überschrift Block]] (ohne ^). Klick springt auf Überschrift und highlighted den Abschnitt. |
| Interview-Assistent | Erzeugt [[Note#Überschrift]]. In Obsidian springt der Link nicht auf die Überschrift (nur in die Note). Besseres Spring-Verhalten hätte [[Note#Überschrift Block]] (Obsidian-Stil) oder [[Note#^Block]]. |
| Inspect Chains / Workbench | Exaktes Match ist zu streng: „Überschrift“, „Überschrift ^Block“, „Überschrift Block“ bezeichnen dieselbe Sektion. |
| Risiko | Ohne Normalisierung matchen diese drei Schreibweisen nicht; falsche Findings / fehlende Zuordnung. |
4. Empfehlung
4.1 Eine Baustelle zuerst (keine Überladung)
Um nicht zu viele Änderungen gleichzeitig zu öffnen:
- Nur eine Baustelle: Normalisierung in Inspect Chains & Chain Workbench (zentrale Normalisierungsfunktion + alle Heading-Vergleiche und
dangling_target_headingauf normalisierte Form umstellen). - Interview-Assistent vorerst unverändert: Weiter
[[Note#Überschrift]]ausgeben. Eine spätere, optionale Anpassung (z. B. Ausgabe[[Note#Überschrift Block]]im Obsidian-Stil, damit der Klick auf die Überschrift springt) kann separat erfolgen.
4.2 Normalisierungsregel (für Vergleiche)
Drei Schreibweisen sollen als dieselbe Sektion gelten:
Überschrift(Interview, reiner Text)Überschrift ^Block(Quelldokument / sectionParser)Überschrift Block(Obsidian-UI-Link, ohne^)
Kanonische Form für Vergleiche:
- Am Ende Block-Suffix mit Caret entfernen:
\s+\^[a-zA-Z0-9_-]+$→ z. B."Überschrift ^Block"→"Überschrift". - Danach ein einzelnes Wort am Ende (nur Buchstaben, Zahlen, Bindestrich, Unterstrich) optional entfernen:
\s+[a-zA-Z0-9_-]+$→ z. B."Überschrift Block"→"Überschrift".
So werden alle drei Varianten auf "Überschrift" abgebildet. Randfall: Eine Überschrift, die wirklich „X Y“ heißt (ohne Block-ID), würde ebenfalls zu „X“ normalisiert und könnte mit „X“ matchen; in der Praxis selten. Die Funktion nur für Vergleiche/Prüfungen nutzen, nicht für Anzeige oder gespeicherte Links.
4.3 Konkrete Maßnahmen (nur diese eine Baustelle)
-
Eine zentrale Normalisierungsfunktion (z. B. in
linkHelpersoder eigenem Modul): Eingabe = Überschrift-String, Ausgabe = kanonische Form wie oben. -
Inspect Chains (chainInspector): Alle Vergleiche mit
heading/sectionHeadingauf die normalisierte Form umstellen; bei dangling_target_headingtargetHeadingund Cache-Headings vor dem Vergleich normalisieren. -
Chain Workbench: Dieselbe Normalisierung überall, wo Headings verglichen werden.
-
graphIndex / Interview: Keine Änderung in dieser Baustelle.
4.4 Optional später (separate Baustelle)
- Interview-Assistent: Wenn gewünscht, Links so erzeugen, dass Obsidian auf die Überschrift springt: z. B.
[[Note#Überschrift Block]](Block-Teil ohne^, wie Obsidian-UI) statt[[Note#Überschrift]]. Dann würde der Klick auf den vom Assistenten gesetzten Link dasselbe tun wie bei manuell gesetzten Links.
5. Kurzfassung
- Obsidian (beobachtet): Manueller Link auf Überschrift mit Block-ID →
[[Titel#Überschrift Block]](ohne^). Klick springt auf Überschrift und highlighted den Abschnitt.[[Titel#Überschrift]]springt nur in die Note, nicht auf die Überschrift.[[Titel#^Block]]highlighted nur die Überschrift. - Eine Baustelle: Nur Normalisierung in Inspect Chains & Chain Workbench umsetzen (zentrale Funktion: Block-Suffix mit
^und ggf. ein trailinges Wort entfernen; alle Heading-Vergleiche unddangling_target_headingauf diese Form umstellen). Interview-Assistent und graphIndex in dieser Runde nicht anfassen. - Optional später: Interview-Assistent so anpassen, dass er z. B.
[[Note#Überschrift Block]]erzeugt (Obsidian-Stil), damit der Klick auf den Link auf die Überschrift springt.