All checks were successful
Deploy mindnet to llm-node / deploy (push) Successful in 4s
- Introduced final validation gate for edges with candidate: prefix. - Enabled automatic generation of mirror edges for explicit connections. - Added support for Note-Scope zones to facilitate global connections. - Enhanced section-based links in the multigraph system for improved edge handling. - Updated documentation and added new ENV variables for configuration. - Ensured no breaking changes for end users, maintaining full backward compatibility.
137 lines
4.9 KiB
Markdown
137 lines
4.9 KiB
Markdown
<!-- DOCUMENT 2: checklist_lint_regeln_mindnet_assistant.md -->
|
||
---
|
||
id: checklist_lint_regeln_mindnet_assistant
|
||
title: Checkliste – Lint-Regeln für Mindnet Causal Assistant
|
||
type: specification
|
||
status: draft
|
||
created: 2026-01-13
|
||
lang: de
|
||
---
|
||
|
||
# Checkliste – Lint-Regeln für Mindnet Causal Assistant
|
||
|
||
## Severity Levels
|
||
- **ERROR**: bricht Traversal/Indexer oder erzeugt falsche Nodes
|
||
- **WARN**: wahrscheinlich falsche Semantik / schlechter Retrieval-Impact
|
||
- **INFO**: Optimierung / Empfehlung
|
||
|
||
---
|
||
|
||
## A. Graph-Integrität & Naming
|
||
|
||
### L1 (ERROR) Missing Target Note
|
||
**Wenn:** Edge target `[[X]]` existiert nicht als Datei im Vault
|
||
**Dann:** Finding `missing_target`
|
||
**Fix:** „Create Stub Note“ (default `type: open_question`) oder remove edge
|
||
|
||
### L2 (ERROR) Node Splitting durch Schreibvarianten
|
||
**Wenn:** mehrere Targets im Vault sind ähnlich (slug distance), oder in Edges mehrere Varianten vorkommen
|
||
**Dann:** Finding `node_split_candidate`
|
||
**Fix:** Vorschlag canonical slug + bulk replace links
|
||
|
||
### L3 (ERROR) Invalid Filename Policy
|
||
**Wenn:** Dateiname enthält Zeichen außerhalb `[a-z0-9_]`
|
||
**Dann:** Finding `invalid_filename`
|
||
**Fix:** Rename file + update all backlinks
|
||
|
||
---
|
||
|
||
## B. Edge-Formale Regeln
|
||
|
||
### L4 (ERROR) Unknown Edge Type / Unmapped Alias
|
||
**Wenn:** raw edge type nicht im Vokabular (alias→canonical)
|
||
**Dann:** Finding `unknown_edge_type`
|
||
**Fix:** Edge type ersetzen durch best guess oder user selection
|
||
|
||
### L5 (WARN) Alias not normalized
|
||
**Wenn:** raw edge type ist Alias, canonical bekannt, aber Note enthält Alias
|
||
**Dann:** Finding `alias_not_normalized`
|
||
**Fix:** Replace raw with canonical (optional config)
|
||
|
||
### L6 (WARN) Missing Inverse Edge (optional strict mode)
|
||
**Wenn:** Edge A->B existiert, inverse nach Vokabular fehlt in B
|
||
**Dann:** Finding `missing_inverse`
|
||
**Fix:** Add inverse edge to target note (review + diff)
|
||
|
||
---
|
||
|
||
## C. Semantik: Kausalität vs Chronologie
|
||
|
||
### L7 (WARN) Chronology used as Causality
|
||
**Wenn:** Knoten/Target wirkt wie Prozessschritt („warten“, „gehen“, „ankommen“) und Edge type ist `resulted_in`
|
||
**Dann:** Finding `chronology_as_causality`
|
||
**Fix:** Vorschlag `followed_by` (inverse `preceeded_by`)
|
||
|
||
### L8 (INFO) Kausalität ohne Brücken (Gap)
|
||
**Wenn:** Pfad springt von Ereignis direkt zu Entscheidung, aber intermediäre Knoten fehlen (heuristisch)
|
||
**Dann:** Finding `missing_bridge_node`
|
||
**Fix:** Vorschlag „Create open_question bridge“ (z.B. „Was war der konkrete Auslöser…?“)
|
||
|
||
---
|
||
|
||
## D. Node-Type Regeln
|
||
|
||
### L9 (ERROR) Causal edges from open_question/hypothesis/white_spot
|
||
**Wenn:** node.type in `{open_question, hypothesis, white_spot}` und Edge type in `{caused_by, resulted_in, impacts, derived_from}`
|
||
**Dann:** Finding `invalid_causal_edge_from_uncertain`
|
||
**Fix:** Replace with `related_to` oder remove edge
|
||
|
||
### L10 (WARN) Hub/Insight Note trägt Kausalität
|
||
**Wenn:** node.type == `insight` (oder Hub-Pattern) und hat `caused_by/resulted_in`
|
||
**Dann:** Finding `hub_has_causality`
|
||
**Fix:** Replace edges with `related_to` und verschiebe Kausalität in atomare Notes
|
||
|
||
### L11 (WARN) Principle uses caused_by for origin
|
||
**Wenn:** node.type == `principle` und enthält `caused_by` zu Erlebnissen
|
||
**Dann:** Finding `principle_origin_edge`
|
||
**Fix:** Vorschlag `derived_from` oder `based_on`
|
||
|
||
### L12 (INFO) Decision without caused_by
|
||
**Wenn:** node.type == `decision` und hat keine `caused_by`-Kanten
|
||
**Dann:** Finding `decision_without_causes`
|
||
**Fix:** Wizard: „Was war der Auslöser?“ → create open_question or add edges
|
||
|
||
---
|
||
|
||
## E. Redundanz & Zyklen
|
||
|
||
### L13 (WARN) Duplicate Edges
|
||
**Wenn:** identische canonical edge mehrfach gesetzt (src,type,dst)
|
||
**Dann:** Finding `duplicate_edge`
|
||
**Fix:** remove duplicates
|
||
|
||
### L14 (WARN) Cycles in pure causality subgraph
|
||
**Wenn:** Zyklus ausschließlich über `{caused_by,resulted_in,derived_from,source_of}`
|
||
**Dann:** Finding `causal_cycle`
|
||
**Fix:** Markiere zur Review; oft ist eine Kante falsch gerichtet
|
||
|
||
---
|
||
|
||
## F. Traversal-Optimierung (Retrieval-Wirkung)
|
||
|
||
### L15 (INFO) Overuse of related_to
|
||
**Wenn:** Note enthält nur `related_to` und keine spezifischeren Kanten
|
||
**Dann:** Finding `weak_semantics`
|
||
**Fix:** Vorschlag: präzisere Beziehungstypen setzen
|
||
|
||
### L16 (INFO) Missing type metadata
|
||
**Wenn:** Frontmatter `type` fehlt
|
||
**Dann:** Finding `missing_type`
|
||
**Fix:** Prompt user to choose type; set via template
|
||
|
||
### L17 (INFO) Missing date on experience
|
||
**Wenn:** node.type == `experience` und kein Datum/Zeitraum vorhanden
|
||
**Dann:** Finding `missing_date_experience`
|
||
**Fix:** Prompt: „Wann ungefähr?“ → set `date` oder `time_range`
|
||
|
||
---
|
||
|
||
## Suggested Implementation Notes
|
||
- Jede Regel liefert:
|
||
- `ruleId`, `severity`, `message`, `location`, `evidence`, `quickFixes[]`
|
||
- QuickFixes sind Patch-Operationen:
|
||
- replaceText(range, text)
|
||
- insertBlock(atLine, block)
|
||
- createFile(path, content)
|
||
- renameFile(old, new) + updateLinks(glob)
|