mindnet_obsidian/docs/CHAIN_INSPECTOR_V042_REPORT.md
Lars 0b763511d8
Some checks are pending
Node.js build / build (20.x) (push) Waiting to run
Node.js build / build (22.x) (push) Waiting to run
v0.4.2 Enhance interview functionality and settings; add YAML dependency
- Introduced profile selection modal for creating notes from interview profiles.
- Added settings for interview configuration path, auto-starting interviews, and intercepting unresolved link clicks.
- Updated package files to include YAML dependency for configuration handling.
- Enhanced CSS for profile selection and interview wizard UI elements.
2026-01-18 21:46:20 +01:00

9.0 KiB

Chain Inspector v0.4.2 - Template Matching Profiles Implementierungsbericht

Status: Vollständig implementiert und getestet
Datum: 2025-01-XX
Version: v0.4.2.0
Basiert auf: Chain Inspector v0.4.1.0


Übersicht

Chain Inspector v0.4.2 erweitert v0.4.1 um Template Matching Profiles - eine konfigurierbare Steuerung für Template Matching-Verhalten über chain_templates.yaml defaults.profiles. Profile ermöglichen unterschiedliche Thresholds und Verhalten für "discovery" (weniger strikt) vs. "decisioning" (strikter) Szenarien.

Neue Features

1. Template Matching Profiles

Profile-Konzept:

  • discovery: Weniger strikt, mehr Findings (für Exploration)
  • decisioning: Strikter, weniger Findings (für Entscheidungen)

Profile-Konfiguration (chain_templates.yaml):

defaults:
  profiles:
    discovery:
      required_links: false
      min_slots_filled_for_gap_findings: 1
      min_score_for_gap_findings: 0
    decisioning:
      required_links: true
      min_slots_filled_for_gap_findings: 3
      min_score_for_gap_findings: 20

Profile-Parameter:

  • required_links (boolean): Steuert, ob fehlende Template-Links bestraft werden
  • min_slots_filled_for_gap_findings (number): Mindestanzahl gefüllter Slots für Findings
  • min_score_for_gap_findings (number): Mindest-Score für Findings

2. Settings Integration

Neue Setting:

  • templateMatchingProfile: "discovery" | "decisioning" (default: "discovery")
  • Erscheint in Settings UI als Dropdown
  • Wird persistiert und an inspectChains übergeben

3. Profile-basierte Findings-Logik

required_links Verhalten:

  • required_links=false (discovery):

    • Fehlende Links werden NICHT bestraft (kein -5 Score)
    • Links zählen nur positiv, wenn erfüllt (+10)
    • Findings werden nur basierend auf Slots emittiert, nicht auf fehlenden Links
  • required_links=true (decisioning):

    • Fehlende Links werden bestraft (-5 Score)
    • Findings können auch für fehlende Links emittiert werden

missing_slot Findings:

  • Werden nur emittiert, wenn:
    • slotsFilled >= profile.min_slots_filled_for_gap_findings UND
    • bestScore >= profile.min_score_for_gap_findings UND
    • missingSlots.length > 0
  • Discovery: Niedrige Thresholds → mehr Findings
  • Decisioning: Hohe Thresholds → weniger Findings

4. Report-Erweiterung

Neues Report-Feld: templateMatchingProfileUsed

{
  name: string; // "discovery" | "decisioning"
  resolvedFrom: "settings" | "default";
  profileConfig?: {
    required_links?: boolean;
    min_slots_filled_for_gap_findings?: number;
    min_score_for_gap_findings?: number;
  };
}

Technische Implementierung

Geänderte Dateien

src/dictionary/types.ts

  • Neue Interface: TemplateMatchingProfile
    • required_links?: boolean
    • min_slots_filled_for_gap_findings?: number
    • min_score_for_gap_findings?: number
  • Erweiterte Interface: ChainTemplatesConfig
    • defaults.profiles?: { discovery?: TemplateMatchingProfile; decisioning?: TemplateMatchingProfile }

src/settings.ts

  • Neue Setting: templateMatchingProfile: "discovery" | "decisioning" (default: "discovery")

src/ui/MindnetSettingTab.ts

  • Neue UI-Komponente: Dropdown für Template Matching Profile
  • Positioniert nach Chain Templates Path Setting

src/dictionary/parseChainTemplates.ts

  • Erweitert: Parsing für defaults.profiles.discovery und defaults.profiles.decisioning
  • Permissive: Unbekannte Felder werden ignoriert

src/analysis/templateMatching.ts

  • Erweiterte Funktion: matchTemplates()
    • Neuer Parameter: profile?: TemplateMatchingProfile
    • Übergibt Profile an findBestAssignment() und scoreAssignment()
  • Erweiterte Funktion: scoreAssignment()
    • Verwendet profile.required_links statt defaultsRequiredLinks
    • Priorität: profile > template.matching > defaults.matching
  • Erweiterte Funktion: findBestAssignment()
    • Übergibt Profile an scoreAssignment()

src/analysis/chainInspector.ts

  • Erweiterte Funktion: inspectChains()
    • Neuer Parameter: templateMatchingProfileName?: string
    • Lädt Profile aus chainTemplates.defaults.profiles[profileName]
    • Übergibt Profile an matchTemplates()
    • Findings-Logik verwendet Profile-Thresholds:
      • min_slots_filled_for_gap_findings (default: 2)
      • min_score_for_gap_findings (default: 0)
  • Erweiterte Interface: ChainInspectorReport
    • templateMatchingProfileUsed?: { name, resolvedFrom, profileConfig }

src/commands/inspectChainsCommand.ts

  • Erweiterte Funktion: executeInspectChains()
    • Übergibt settings.templateMatchingProfile an inspectChains()
  • Erweiterte Funktion: formatReport()
    • Zeigt "Template Matching Profile" Sektion mit:
      • Profile-Name
      • Resolved from (settings/default)
      • Profile-Config (wenn vorhanden)

src/tests/analysis/templateMatching.profiles.test.ts (NEU)

  • 4 Tests:
    1. should emit missing_slot findings with discovery profile (low thresholds)
    2. should NOT emit missing_slot findings with decisioning profile (high thresholds)
    3. should apply required_links=false from profile (no penalty for missing links)
    4. should apply required_links=true from profile (penalty for missing links)

Profile-Auflösung

Priorität:

  1. Settings: settings.templateMatchingProfile (wenn gesetzt)
  2. Default: "discovery" (wenn nicht gesetzt)
  3. YAML: chainTemplates.defaults.profiles[profileName] (wenn vorhanden)
  4. Fallback: Kein Profile → vorheriges Verhalten (safe default)

Resolved From:

  • "settings": Profile wurde aus Settings geladen
  • "default": Profile wurde als Default verwendet (kein Setting gesetzt)

Verwendung

In Obsidian

  1. Öffnen Sie Settings → Mindnet Settings
  2. Wählen Sie Template matching profile: "Discovery" oder "Decisioning"
  3. Öffnen Sie eine Markdown-Datei mit Edges
  4. Positionieren Sie den Cursor in einer Section
  5. Öffnen Sie die Command Palette (Strg+P / Cmd+P)
  6. Wählen Sie: "Mindnet: Inspect Chains (Current Section)"
  7. Prüfen Sie die Console (Strg+Shift+I / Cmd+Option+I) für den Report

Erwartete Ausgabe:

  • templateMatchingProfileUsed zeigt verwendetes Profile
  • missing_slot Findings erscheinen nur, wenn Profile-Thresholds erfüllt sind
  • Discovery: Mehr Findings (niedrige Thresholds)
  • Decisioning: Weniger Findings (hohe Thresholds)

Profile-Konfiguration

Erforderliche Datei: chain_templates.yaml (Standard: "_system/dictionary/chain_templates.yaml")

Beispiel-Konfiguration:

defaults:
  profiles:
    discovery:
      required_links: false
      min_slots_filled_for_gap_findings: 1
      min_score_for_gap_findings: 0
    decisioning:
      required_links: true
      min_slots_filled_for_gap_findings: 3
      min_score_for_gap_findings: 20
  matching:
    required_links: false  # Fallback, wenn Profile nicht definiert

Test-Ergebnisse

Erfolgreiche Tests (4/4 Profile-Tests)

Discovery Profile (Low Thresholds):

  • Test: Partial match mit fehlendem Slot
  • Ergebnis: missing_slot Finding wird emittiert (Thresholds erfüllt)

Decisioning Profile (High Thresholds):

  • Test: Partial match mit fehlendem Slot
  • Ergebnis: missing_slot Finding wird NICHT emittiert (Thresholds nicht erfüllt)

required_links=false:

  • Test: Missing link ohne Penalty
  • Ergebnis: Score >= 0 (keine -5 Penalty)

required_links=true:

  • Test: Missing link mit Penalty
  • Ergebnis: Score < 0 (-5 Penalty angewendet)

Bestehende Tests

Alle v0.4.x Tests bestehen weiterhin (3/3 templateMatching, 3/3 integration)

Build-Status

TypeScript kompiliert ohne Fehler
Keine Linter-Fehler
Alle neuen Tests bestehen

Vergleich v0.4.1 vs v0.4.2

Feature v0.4.1 v0.4.2
Template Matching
1-Hop Outgoing Neighbors
Profile-basierte Konfiguration
Profile-Thresholds für Findings
required_links aus Profile
Profile Provenance im Report
Settings UI für Profile

Zusammenfassung

Chain Inspector v0.4.2 erweitert v0.4.1 erfolgreich um:

Template Matching Profiles - Konfigurierbare Profile (discovery/decisioning)
Profile-basierte Findings - Thresholds steuern Findings-Emission
required_links aus Profile - Soft vs. Required Links-Verhalten
Settings Integration - UI-Dropdown für Profile-Auswahl
Profile Provenance - Verifizierbare Profile-Herkunft im Report
Permissive Config - Ignoriert unbekannte Felder sicher
Deterministic Output - Stabile Sortierung für Golden Tests

Alle neuen Tests bestehen (4/4 Profile-Tests)
TypeScript kompiliert ohne Fehler
Keine Linter-Fehler
Production Ready

Die Implementierung ermöglicht flexible Template Matching-Konfiguration für verschiedene Use Cases (Exploration vs. Entscheidungsfindung).


Erstellt: 2025-01-XX
Autor: Cursor AI Agent
Status: Production Ready