mindnet_obsidian/docs/09_Chain_Inspector_Workbench_Lastenheft.md
Lars 725adb5302
Some checks are pending
Node.js build / build (20.x) (push) Waiting to run
Node.js build / build (22.x) (push) Waiting to run
Enhance UI and functionality for Chain Workbench and related features
- 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.
2026-02-05 11:41:15 +01:00

13 KiB
Raw Permalink Blame History

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.0v0.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 als effective_type in 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, optional types.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: ChainInspectorReport mit 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 heading identifiziert wird, enthält ein [!section] type Callout → 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 nur extractNoteType(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 und sectionType in NoteSection liefern (vgl. FA-PL-01); aktuell fehlt sectionType in NoteSection.

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_types wird gegen effective_type des Knotens geprüft (nicht nur gegen noteType).
  • Bestehende Logik in nodeMatchesSlot(node, slot) muss mit node.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_heading
    • only_candidates, missing_edges, no_causal_roles, one_sided_connectivity
    • missing_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 effectiveType der 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.yaml oder chain_templates.yaml nicht 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.ts wurde 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.md korrekt 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).
  • Todo-Typen sind in src/workbench/types.ts bereits definiert (dangling_target, only_candidates, no_causal_roles, etc.); die Generierung aus Findings und die Integration in buildWorkbenchModel() sind umzusetzen.

LH-CW-04: Integration in buildWorkbenchModel

  • buildWorkbenchModel() soll neben Template-Match-basierten Todos auch globalTodos aus report.findings erzeugen (über generateFindingsTodos()).
  • 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 Link
    • dangling_target_heading: Create Missing Heading, Retarget
    • only_candidates: Promote Candidates, Create Explicit Edges
  • Optional: Actions für no_causal_roles (z. B. „Edge-Type ändern“) und missing_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; sobald NoteSection.sectionType existiert, 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