- 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.
13 KiB
LASTENHEFT: Chain Inspector & Chain Workbench
Version: 1.0
Datum: 28. Januar 2026
Status: Entwurf
Projekt: mindnet_obsidian (Obsidian Community Plugin)
Bezug: WP-26 Integration (06_LH_WP26_Plugin_Integration.md), FA-PL-08; Chain Inspector v0.4.x / v0.4.2; Chain Workbench Findings Integration (10_Workbench_Findings_Integration.md)
1. Einleitung
1.1 Zweck
Dieses Lastenheft definiert die vollständigen fachlichen und technischen Anforderungen für die Kausal-Funktionen Chain Inspector und Chain Workbench im mindnet_obsidian Plugin. Es umfasst:
- Die Integration der Section-Type-Logik (effective_type) in Chain-Analyse und Workbench (FA-PL-08).
- Die Anforderungen aus den früheren Implementierungsberichten (Chain Inspector v0.0–v0.4.2, Chain Workbench 0.5.x).
- Offene Punkte aus dem Vorschlag Workbench Findings Integration (Findings → Todos, Actions).
- Commands, Sichtbarkeit, Dictionary-Abhängigkeiten und UX.
1.2 Geltungsbereich
- Chain Inspector: Analyse kausaler Ketten um die aktuelle Section (Template-Matching, Findings, Rollen, Gaps).
- Chain Workbench: UI für Findings, Template-Matches, TODOs und Fix-Actions.
- Section-Types: Explizite Typen pro Abschnitt (
[!section] type), Fallback auf Note-Type; Verwendung alseffective_typein Chain-Matching.
1.3 Abhängigkeiten
- Backend: WP-26 (Section Types & Intra-Note-Edges).
- Plugin: Section-Type-Callout-Parsing (FA-PL-01), Block-ID-Extraktion (FA-PL-02), Types-Loader (FA-PL-13).
- Dictionary:
chain_roles.yaml,chain_templates.yaml,edge_vocabulary.md, optionaltypes.yaml,graph_schema.md.
2. Begriffe und Definitionen
| Begriff | Definition |
|---|---|
| Effective Type | Für einen Knoten (Section/Note): sectionType || noteType. Wird für Template-Slot-Matching und Gap-Detection verwendet. |
| Section-Type | Explizit per > [!section] type definierter Typ eines Abschnitts. |
| Note-Type | Aus Frontmatter type: der Note. |
| Template Match | Zuweisung von Candidate-Nodes zu Template-Slots unter Berücksichtigung von allowed_node_types und allowed_edge_roles. |
| Finding | Ein vom Chain Inspector erzeugtes Analyseergebnis (z. B. no_causal_roles, missing_link, dangling_target). |
| Workbench Todo | Aus Finding oder Template-Match abgeleitete konkrete Aufgabe mit Priorität und optionalen Actions. |
3. Chain Inspector – Anforderungen
3.1 Kernfunktion
- Eingabe: Aktuelle Datei + aktuelle Section (Cursor-Position / Heading).
- Ausgabe:
ChainInspectorReportmit Nachbarn, Pfaden, Findings, Template-Matches, Analyse-Meta, Templates-Source, optional Template-Matching-Profile.
3.2 Effective Type (Section-Type-Integration)
LH-CI-01: Effective Type pro Knoten
- Für jeden Knoten (file + heading) muss ein effective_type ermittelt werden.
- Regel:
effectiveType = sectionType || noteType. - sectionType: Aus geparster Note: Section, die durch
headingidentifiziert wird, enthält ein[!section] typeCallout → dieser Typ. - noteType: Aus Frontmatter
type:der zugehörigen Datei. - Fallback: Wenn weder Section-Type noch Note-Type vorhanden:
"unknown".
Betroffene Stellen:
src/analysis/templateMatching.ts: Aktuell wird nurextractNoteType(content)pro Datei verwendet; für Section-Knoten (mit heading) muss pro Section der Section-Type aus dem geparsten Dokument gelesen werden.src/analysis/chainInspector.ts: Report und Findings müssen effective_type unterstützen (z. B. in SlotAssignments oder Meta).src/mapping/sectionParser.ts: Muss[!section]erkennen undsectionTypeinNoteSectionliefern (vgl. FA-PL-01); aktuell fehltsectionTypeinNoteSection.
3.3 Template-Matching mit Section-Types
LH-CI-02: Slot-Matching mit effective_type
- Beim Zuordnen von Candidate-Nodes zu Template-Slots gilt: Slot-Constraint
allowed_node_typeswird gegen effective_type des Knotens geprüft (nicht nur gegen noteType). - Bestehende Logik in
nodeMatchesSlot(node, slot)muss mitnode.effectiveType(oder äquivalent) arbeiten.
LH-CI-03: Provenance
- Im Report soll erkennbar sein, ob ein Slot-Type aus Section-Type oder Note-Type stammt (optional:
typeSource: "section" | "note" | "unknown"pro Slot-Zuordnung).
3.4 Findings
LH-CI-04: Bestehende Finding-Codes
- Folgende Finding-Codes müssen unterstützt und dokumentiert sein:
dangling_target,dangling_target_headingonly_candidates,missing_edges,no_causal_roles,one_sided_connectivitymissing_slot_<slotId>,weak_chain_roles- Optional:
slot_type_mismatch(v0.4 Report: bisher nicht implementiert, da Matching Mismatches verhindert).
LH-CI-05: Findings mit Section-Type-Kontext
- Findings können optional
effectiveTypeder betroffenen Section bzw. des Knotens enthalten (für bessere Workbench-Todos und Fix-Actions).
3.5 Gap-Detection und Section-Types
LH-CI-06: Fehlende Section-Types als Gap
- Wenn ein Template einen Slot mit z. B.
allowed_node_types: ["experience"]vorsieht und die aktuelle Section keinen Section-Type hat, aber der Note-Type z. B. "concept" ist, soll dies als Gap/Finding behandelbar sein (z. B. „Section-Type setzen oder Note-Type anpassen“). - Konkret: Gap-Detection soll erkennen, wenn effective_type nicht zu den erlaubten Slot-Types passt, und ggf. ein Finding/Todo vorschlagen (z. B. „Add Section Type experience“).
3.6 Dictionary-Abhängigkeiten
LH-CI-07: Verhalten bei fehlenden Dictionaries
- Wenn
chain_roles.yamloderchain_templates.yamlnicht geladen werden können:- Es soll eine Notice angezeigt werden (z. B. „Chain Roles nicht geladen. Bitte Pfad in den Einstellungen prüfen.“) und der Command abbrechen (kein stilles Weiterlaufen mit reduzierter Funktionalität).
- Implementierungsstand: In
main.tswurde bereits eine Prüfung und Notice eingebaut; im Lastenheft wird dies als verbindlich festgehalten.
3.7 Commands und Sichtbarkeit
LH-CI-08: Command „Mindnet: Inspect Chains (Current Section)“
- ID:
mindnet-inspect-chains. - Kontext: editorCallback (nur bei geöffneter Markdown-Datei).
- Verhalten: Führt Chain Inspector aus, gibt Report in Console aus (oder vergleichbar).
- Optional (FA-PL-12a): Zusätzlicher Command ohne editorCallback, der bei fehlender Datei eine Notice anzeigt, damit der Befehl in der Palette sichtbar bleibt.
4. Chain Workbench – Anforderungen
4.1 Kernfunktion
- Eingabe: Wie Chain Inspector (aktuelle Datei + Section) plus geladene Chain-Templates, Chain-Roles, Edge-Vocabulary.
- Ausgabe: Workbench-Model mit Matches (Template-Matches inkl. Status/Todos) und globalTodos (aus Findings).
4.2 Section-Type in Workbench-Model
LH-CW-01: WorkbenchMatch mit Section-Types
- Jeder Match soll optional effective_type (oder Section-Type) pro zugewiesenem Slot führen (für Anzeige und für Todo-Vorschläge).
- Vgl. WP26-Spezifikation:
sectionTypes?: Map<string, string>.
LH-CW-02: Todos mit Section-Type-Kontext
- Missing-Link- und Missing-Slot-Todos sollen fromSectionType / toSectionType (bzw. effective_type) enthalten, damit Edge-Type-Vorschläge aus
graph_schema.mdkorrekt berechnet werden können.
4.3 Findings → Todos (Workbench Findings Integration)
LH-CW-03: Generierung von Todos aus Findings
- Die in 10_Workbench_Findings_Integration.md beschriebene Funktion generateFindingsTodos() soll umgesetzt werden:
- Eingabe:
Finding[],IndexedEdge[], Kontext{ file, heading }. - Ausgabe:
WorkbenchTodoUnion[](u. a.DanglingTargetTodo,OnlyCandidatesTodo,NoCausalRolesTodo,MissingEdgesTodo,OneSidedConnectivityTodo).
- Eingabe:
- Todo-Typen sind in
src/workbench/types.tsbereits definiert (dangling_target,only_candidates,no_causal_roles, etc.); die Generierung aus Findings und die Integration inbuildWorkbenchModel()sind umzusetzen.
LH-CW-04: Integration in buildWorkbenchModel
buildWorkbenchModel()soll neben Template-Match-basierten Todos auch globalTodos ausreport.findingserzeugen (übergenerateFindingsTodos()).- WorkbenchModel soll
globalTodos?: WorkbenchTodoUnion[]enthalten.
LH-CW-05: UI-Anzeige
- Im Chain Workbench Modal sollen Section-Level Issues (aus Findings) getrennt von Template-Match-Todos angezeigt werden (z. B. zuerst „Section-Level Issues“, dann „Template Matches“).
4.4 TODO-Generator und Section-Types
LH-CW-06: Section-Type-Vorschläge
- Der TODO-Generator soll bei fehlendem oder unpassendem Section-Type Vorschläge liefern (z. B. „Add Section Type: experience“), vgl. FA-PL-08.
4.5 Fix-Actions
LH-CW-07: Bestehende Fix-Actions
- Die in Chain Inspector v0.3 und im Fix-Findings-Command implementierten Actions bleiben erhalten und erweiterbar:
dangling_target: Create Missing Note, Retarget Linkdangling_target_heading: Create Missing Heading, Retargetonly_candidates: Promote Candidates, Create Explicit Edges
- Optional: Actions für
no_causal_roles(z. B. „Edge-Type ändern“) undmissing_edges(„Add edges to section“) wie in 10_Workbench_Findings_Integration.md skizziert.
4.6 Command und Sichtbarkeit
LH-CW-08: Command „Mindnet: Chain Workbench (Current Section)“
- ID:
mindnet-chain-workbench. - Kontext: editorCallback.
- Verhalten: Öffnet Chain Workbench Modal mit aktuellem Report/Model.
- Optional (FA-PL-12a): Zusätzlicher Command ohne Editor, mit Notice bei fehlender Datei.
4.7 Scan Chain Gaps
LH-CW-09: Command „Mindnet: Scan Vault for Chain Gaps“
- Soll ebenfalls Notice auslösen, wenn Chain-Dictionaries fehlen; Section-Type-Logik soll bei Vault-Scan berücksichtigt werden (effective_type pro Section), sofern technisch eingebaut.
5. Abhängigkeiten von Parser und Mapping
5.1 Section-Parser (FA-PL-01)
- NoteSection muss erweitert werden um:
sectionType: string | null(aus[!section] type).blockId: string | null(aus Heading^block-id).
- Ohne diese Erweiterung kann Chain Inspector keinen Section-Type pro Section nutzen; dann bleibt nur Note-Type (bisheriges Verhalten).
5.2 Graph-Index
- buildNoteIndex nutzt
splitIntoSections; sobaldNoteSection.sectionTypeexistiert, muss der Graph-Index oder eine nachgelagerte Schicht (z. B. templateMatching) pro Section den Section-Type aus den geparsten Sections auslesen und an Candidate-Nodes weitergeben.
5.3 Types-Loader (FA-PL-13)
- Optional: Validierung von Section-Types gegen
types.yaml(z. B. Lint oder Hinweis im Workbench).
6. Nichtfunktionale Anforderungen
6.1 Performance
- Template-Matching: Max. 30 Candidate-Nodes, Backtracking für typisch ≤ 5 Slots; Top-K Matches begrenzt (z. B. 3).
- Keine Blockierung der UI; bei großen Reports ggf. asynchron oder mit Fortschrittsanzeige.
6.2 Abwärtskompatibilität
- Notes ohne Section-Types funktionieren unverändert: effective_type = noteType.
- Bestehende Chain-Templates und Chain-Roles bleiben gültig.
6.3 Dokumentation
- Benutzerhandbuch: Erklärung, dass „Inspect Chains“ und „Chain Workbench“ nur bei geöffneter Markdown-Datei in der Befehlspalette verfügbar sind.
- Dokumentation der Finding-Codes und Todo-Typen (z. B. in diesem Lastenheft oder im Konzeptdokument 03_chain_identification_and_matching.md).
7. Erfolgskriterien (Zusammenfassung)
- Chain Inspector: Verwendet effective_type (Section-Type oder Note-Type) für Template-Matching und Gap-Detection; Findings inkl. Section-Type-Kontext wo sinnvoll; Notice bei fehlenden Dictionaries.
- Chain Workbench: Zeigt Template-Matches und Section-Level-Todos (aus Findings); Todos enthalten Section-Type-Information für Edge-Vorschläge; Fix-Actions für die definierten Finding-Typen.
- Section-Type-Integration: Section-Parser liefert sectionType; Template-Matching und Workbench nutzen effective_type durchgängig.
- Offene Punkte aus Findings-Integration: generateFindingsTodos umgesetzt, in buildWorkbenchModel integriert, UI für globalTodos; Priorisierung/Deduplizierung wie in Umsetzungsplan geregelt.
8. Referenzen
- 06_LH_WP26_Plugin_Integration.md – FA-PL-08, FA-PL-12, FA-PL-12a, FA-PL-14
- WP26_Plugin_Interface_Specification.md – Abschnitte 3.4, 8.2
- 10_Workbench_Findings_Integration.md – Findings → Todos, Todo-Typen, Phasen
- CHAIN_INSPECTOR_V04_REPORT.md, CHAIN_INSPECTOR_V042_REPORT.md – Template Matching, Profiles
- 02_concepts/03_chain_identification_and_matching.md – Konzepte
- 08_Testing_Chain_Workbench.md – Testanleitung
Ende des Lastenhefts