- Updated `parseEdgesFromCallouts.ts` to support edge extraction from both callout blocks and plain lines, allowing for more flexible edge definitions. - Introduced new settings in `settings.ts` for maximum assignments collected per template, enhancing loop protection during edge processing. - Enhanced documentation in `Entwicklerhandbuch.md` to reflect changes in edge parsing and settings. - Improved UI components to utilize the new settings for better user experience in the Chain Workbench and related features.
120 lines
4.9 KiB
Markdown
120 lines
4.9 KiB
Markdown
# Status gegen DoD - guides Edge Erkennung
|
|
|
|
## DoD Anforderungen
|
|
|
|
### ✅ DoD 2: Alle Link-Formate erkennen
|
|
**Status: ERFÜLLT**
|
|
- ✅ `[[Note]]` Format wird erkannt
|
|
- ✅ `[[Note#Abschnitt]]` Format wird erkannt
|
|
- ✅ `[[Note#Abschnitt ^BlockID]]` Format wird erkannt
|
|
- ✅ `[[#^BlockID]]` Format wird erkannt
|
|
- ✅ Mehrere Links in einer Edge werden erkannt
|
|
- **Tests:** 14/14 bestehen (`parseEdgesFromCallouts.comprehensive.test.ts`)
|
|
|
|
### ✅ DoD 3: Kanten außerhalb von Wrappern erkennen
|
|
**Status: ERFÜLLT**
|
|
- ✅ Edge ohne `>` (plain `[!edge]`) wird erkannt
|
|
- ✅ Edge mit `>` außerhalb Abstract-Block wird erkannt
|
|
- ✅ Edge mitten im Text wird erkannt
|
|
- **Tests:** Alle bestehen
|
|
|
|
### ✅ DoD 4: Verschiedene Wrapper-Typen erkennen
|
|
**Status: ERFÜLLT**
|
|
- ✅ `[!abstract]` Block wird erkannt
|
|
- ✅ `[!info]` Block wird erkannt
|
|
- ✅ `[!note]` Block wird erkannt
|
|
- ✅ `[!tip]` Block wird erkannt
|
|
- **Tests:** Alle bestehen
|
|
|
|
### ✅ DoD 5: Edge-Erstellung mit konfiguriertem Wrapper
|
|
**Status: ERFÜLLT**
|
|
- ✅ `insertEdgeIntoSectionContent.ts` verwendet `wrapperCalloutType`, `wrapperTitle`, `wrapperFolded`
|
|
- ✅ Settings enthalten `mappingWrapperCalloutType`, `mappingWrapperTitle`, `mappingWrapperFolded`
|
|
- ✅ `buildMappingBlock` und `insertMappingBlock` unterstützen Wrapper-Konfiguration
|
|
|
|
### ✅ DoD 1: Sämtliche Kanten werden richtig erkannt und auch in der Chain richtig zugeordnet
|
|
**Status: ERFÜLLT**
|
|
|
|
**Was funktioniert:**
|
|
- ✅ guides Edge wird korrekt geparst (`parseEdgesFromCallouts`)
|
|
- ✅ guides Edge wird in `buildNoteIndex` gefunden
|
|
- ✅ Candidate Nodes werden korrekt erstellt
|
|
- ✅ Slot-Candidates werden korrekt gefunden
|
|
- ✅ guides Edge wird in `findEdgeBetween` gefunden, auch wenn sie später in der Liste kommt
|
|
- ✅ guides Edge wird in `scoreAssignment` gefunden (`satisfiedLinks: 1`)
|
|
- ✅ guides Edge wird in `roleEvidence` aufgenommen
|
|
- ✅ Template Match zeigt `satisfiedLinks: 1/1`
|
|
|
|
**Gelöstes Problem:**
|
|
- Problem: `foundation_for` Edge (Index 11) wurde zuerst gefunden und zurückgegeben, bevor die guides Edge (Index 12) geprüft wurde
|
|
- Lösung: Wenn `allowedEdgeRoles` gesetzt ist, wird nur zurückgegeben, wenn die Edge-Rolle in den erlaubten Rollen ist. Wenn `edgeRole` null ist, wird `inferRoleFromRawType` verwendet, um die Rolle zu bestimmen
|
|
- Ergebnis: guides Edge wird jetzt korrekt gefunden, auch wenn sie später in der Liste kommt
|
|
|
|
## Gelöste Probleme
|
|
|
|
### 1. guides Edge Problem - BEHOBEN ✅
|
|
**Problem:** `findEdgeBetween` fand guides Edge nicht in `scoreAssignment`, wenn sie später in der Liste kam
|
|
|
|
**Root Cause:**
|
|
- `foundation_for` Edge (Index 11) wurde zuerst gefunden und zurückgegeben
|
|
- `getEdgeRole` gab `null` für `foundation_for` zurück (nicht in `chainRoles` definiert)
|
|
- Die Lösung prüfte nur `edgeRole`, nicht `inferRoleFromRawType`
|
|
- Da `edgeRole` `null` war, wurde die Bedingung `hasAllowedRoles && edgeRole` falsch und die Edge wurde zurückgegeben
|
|
- Die guides Edge (Index 12) wurde nie geprüft
|
|
|
|
**Lösung:**
|
|
- Wenn `hasAllowedRoles` true ist, wird auch `inferRoleFromRawType` geprüft, wenn `edgeRole` null ist
|
|
- Wenn die Edge-Rolle nicht in den erlaubten Rollen ist, wird weiter gesucht
|
|
- Die guides Edge wird jetzt korrekt gefunden und `satisfiedLinks: 1` ist korrekt
|
|
|
|
**Test:** ✅ `templateMatching.guidesEdgeComprehensive.test.ts` besteht
|
|
|
|
### 2. DoD 5: Edge-Erstellung testen
|
|
**Priorität: MITTEL**
|
|
|
|
**Status:** Implementiert, aber nicht getestet
|
|
- Prüfen, ob `insertEdgeIntoSectionContent` die Wrapper-Konfiguration richtig verwendet
|
|
- Test erstellen, der prüft, dass neue Edges mit konfiguriertem Wrapper erstellt werden
|
|
|
|
### 3. Integrationstest mit echter Datei
|
|
**Priorität: HOCH**
|
|
|
|
**Test:** Die echte Datei `Geburt unserer Kinder Rouven und Rohan.md` muss vollständig funktionieren:
|
|
- guides Edge wird geparst ✅
|
|
- guides Edge wird in Template Matching gefunden ❌
|
|
- guides Edge wird in Chain Workbench angezeigt ❌
|
|
|
|
## Aktuelle Test-Ergebnisse
|
|
|
|
```
|
|
✅ parseEdgesFromCallouts.comprehensive.test.ts: 14/14 Tests bestehen
|
|
✅ templateMatching.guidesEdgeComprehensive.test.ts: 1/1 Test besteht
|
|
- satisfiedLinks: 1 (erwartet: > 0) ✅
|
|
- guides Edge wird in roleEvidence gefunden ✅
|
|
```
|
|
|
|
## Technische Details
|
|
|
|
**Edge-Struktur (aus Datei):**
|
|
```
|
|
>> [!edge] guides
|
|
>> [[Geburt unserer Kinder Rouven und Rohan#Nächster Schritt ^next]]
|
|
```
|
|
|
|
**Parsed Edge:**
|
|
- `rawEdgeType: "guides"`
|
|
- `source.file: "03_experience/Geburt unserer Kinder Rouven und Rohan.md"`
|
|
- `source.sectionHeading: "Reflexion & Learning (Was lerne ich daraus?) ^learning"`
|
|
- `target.file: "Geburt unserer Kinder Rouven und Rohan"`
|
|
- `target.heading: "Nächster Schritt ^next"`
|
|
|
|
**Template Match:**
|
|
- `templateName: "insight_to_decision"`
|
|
- `slotAssignments: { learning: {...}, next: {...} }`
|
|
- `satisfiedLinks: 1/1` ✅
|
|
- `roleEvidence: [{ from: "learning", to: "next", edgeRole: "guides", rawEdgeType: "guides" }]` ✅
|
|
|
|
**Erreichtes Ergebnis:**
|
|
- `satisfiedLinks: 1/1` ✅
|
|
- `roleEvidence: [{ from: "learning", to: "next", edgeRole: "guides", rawEdgeType: "guides" }]` ✅
|