--- 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)