[Docgen] Obsidian-Graph: Frontmatter + Wikilinks + MATRIX — inkl. Fix: TenantVMRange bei Mandantenzuordnung ignoriert #209
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Baut auf dem bestehenden Docgen (#17,
server/services/docgen.py) auf. Ziel: die erzeugte Doku so rendern, dass sie in Obsidian einen sinnvollen Graphen ergibt (Mandant ↔ Node ↔ VM/CT) und am Ende eine vollwertige Matrix als Übersicht liefert.Ausgangslage
docgen.pyerzeugt heutemandanten/<mandant>/<node>/node.md,.../vms/<vmid>-<name>.md,backups.csv+backups.md. Verlinkt wird nur per relativem Markdown-Link von_mandant_md→node.md. VMs verlinken gar nicht zurück. Kein Frontmatter, keine Tags, kein Graph.Fachlicher Bug (wichtigster Teil dieses Issues)
_fetch()indocgen.pybaut die Mandantenzuordnung ausschließlich überTenantNode:TenantVMRange(VMID-Bereich auf einer Node → Mandant, sieheserver/models/tenant.py) wird komplett ignoriert. Auf geteilten Nodes ist die Mandantenzuordnung der VMs damit falsch. Das ist die zentrale Achse der Matrix und muss zuerst korrekt werden.Regel (neu): Ein Guest gehört zum Mandanten des passenden
TenantVMRange(node_id + vmid_min ≤ vmid ≤ vmid_max). Gibt es keinen Treffer, gilt der Mandant der Node überTenantNode. Gibt es auch den nicht →_OHNE-MANDANT.Feld "Funktion"
Existiert nirgends strukturiert. Für v1 abgeleitet aus vorhandenen Daten, in dieser Reihenfolge:
VMCardOverride(falls dort ein Label/Rolle gepflegt ist — Modell prüfen)vm_scans[vmid].docker.containersVMPortSnapshot(80/443 → web, 5432/3306 → db, 22 → ssh-only, …)unbekanntAls
role:ins Frontmatter + als Tag. Keine KI hier — die kommt separat.Dateibenennung (Nachtrag — blockiert alles andere)
Im Ziel-Repo
chinux/Dokumentationtragen aktuell 23 von 132 Dateien einen von drei Namen: 8×node.md, 8×backups.md, 7×README.md. Obsidian nutzt den Dateinamen als Label im Graphen und als Ziel von Kurz-Wikilinks. Damit waere der Graph unbrauchbar (acht ununterscheidbare "node"-Knoten) und[[node]]mehrdeutig.Neues Schema — Datei traegt den Namen der Ebene, die sie beschreibt:
<m-slug>/README.md<m-slug>/<m-slug>.md<node>/node.md<node>/<node>.md<node>/backups.{md,csv}<node>/<node>-backups.{md,csv}vms/<vmid>-<slug>.mdvms/<node>-<vmid>-<slug>.mdBegruendung:
bau-prox01undbau-prox02. Heute kollidiert es nur zufaellig nicht, weil die Guest-Namen unterschiedlich sind.&,+und Kommas enthalten (Trendsetzer Marketing GmbH & Co. KG) und diese in Wikilinks und Git-Pfaden Aerger machen. Der Klarname steht im Frontmatter untername:und alsaliases:.Migrationsfalle: Backup-Historie
_build_and_push()liest vorhandene CSVs vor dem Wipe vonmandanten/ein, um sie per UPID zu mergen — Lookup-Key ist der relative Pfad<m-slug>/<node>/backups.csv. Nach der Umbenennung greift dieser Lookup ins Leere,_merge_backups()bekommt einen leerenexisting_csvund der erste Lauf schreibt eine frische CSV ohne die fortgeschriebene Historie. In der Git-Historie bleibt sie, im Arbeitsstand ist sie weg.Der Einleseschritt muss beide Pfade akzeptieren (alt und neu), damit der Uebergang verlustfrei ist. Nach einem erfolgreichen Lauf ist nur noch der neue Pfad relevant, der Fallback kann aber dauerhaft drin bleiben — er kostet nichts.
Matrix: Bases statt Dataview
Im Vault ist kein Dataview installiert (
.obsidian/community-plugins.jsonenthaelt nurgithub-sync). Aktiv ist dagegen der Core-Pluginbases— Obsidians native Tabellen-/Datenbankansicht.Statt
MATRIX-DATAVIEW.mddaher eineMATRIX.baseerzeugen (YAML), die auf#theprox/vmfiltert und die Frontmatter-Properties als Spalten zeigt (tenant, node, vmid, role, status, open_ports, agent_version). Keine Community-Plugin-Abhaengigkeit, und sie liest exakt das Frontmatter, das dieses Issue ohnehin schreibt. Das aktuelle Base-Dateiformat vor der Umsetzung in der Obsidian-Doku pruefen — es hat sich seit Einfuehrung mehrfach geaendert.Die statische
MATRIX.mdbleibt zusaetzlich bestehen: sie funktioniert in jedem Markdown-Viewer, auch ohne Obsidian, und ist im Git-Diff lesbar.Prompt für Claude Code
Definition of Done
TenantVMRangewird bei der Mandantenzuordnung berücksichtigt (+ Test).mdhaben valides YAML-FrontmatterMATRIX.md,MATRIX-DATAVIEW.md,_MOC.mdwerden erzeugtNachtrag: CVE raus, Agent rein
CVEs entfallen vollstaendig aus der Doku. Kein
cve_open/cve_criticalim Frontmatter, keine## Offene CVEs-Sektion in_vm_md()(steht aktuell in 33 der 79 generierten Dateien und muss weg), keine CVE-Spalte in der Matrix, kein CVE in der "Auffaellig"-Sektion des MOC.VMCveReportwird in_fetch()nicht mehr geladen — der komplettecves_map-Pfad faellt ersatzlos.Begruendung: CVE-Daten sind hochfrequent und kurzlebig. In einer taeglich committeten Snapshot-Doku erzeugen sie Diff-Rauschen, das echte Infrastruktur-Aenderungen ueberdeckt, und sind schon beim Lesen veraltet. CVEs gehoeren ins Dashboard, nicht ins Vault.
An ihre Stelle tritt der Agent-Status als Qualitaetsmerkmal der Doku selbst — siehe #212. Ein Guest ohne Agent liefert keine Disk-, Docker-, Update- und Service-Daten; die Doku ist an dieser Stelle also nachweislich unvollstaendig, und genau das muss sichtbar sein. Tag
theprox/no-agent, eigene Sektion im_MOC.md.Reihenfolge: #212 sollte vor diesem Issue umgesetzt werden. Sonst schreibt das neue Frontmatter
agent: falsefuer alle Guests fest — die Felder waeren dann strukturell korrekt und inhaltlich trotzdem falsch.Nachtrag:
rolewird zuroles[]Die Funktions-Ableitung wandert vollstaendig nach #216 und liefert eine Liste statt eines Einzelwerts. Grund: ein Windows-Server ist real oft gleichzeitig AD-DC, DNS, DHCP und Fileserver — ein einzelner String erzwingt eine willkuerliche Entscheidung.
Frontmatter statt
role: "...":Ein Tag pro Rolle — dadurch ist im Graphen und in
MATRIX.basenach jeder einzelnen Rolle filterbar, statt nur nach einer Hauptrolle._derive_role()aus Punkt 5 des CC-Prompts entfaellt hier ersatzlos. Docgen ruft die fertigen Werte ausguest_viewab und rendert zusaetzlich eine Sektion## Rollenmit der Evidenz (welcher Dienst / welche Windows-Rolle die Zuordnung begruendet hat). Ohne die Evidenz ist eine falsche Rolle nicht widerlegbar.Matrix-Spalte "Funktion" zeigt
primary_role, mit den weiteren Rollen als Zusatz.Abhaengigkeitskette neu: #214 → #215 → #216 → #209.
Teil 1/3 der Docgen-Ausbaustufe. Folgt: #210 (Pro-Node-Toggle + Konfig/Logging), #211 (KI-Layer).
Nachtrag Dateibenennung. Bestandsanalyse des Ziel-Repos
chinux/Dokumentation(132 Dateien): 8×node.md, 8×backups.md, 7×README.md— in Obsidian ununterscheidbar im Graphen und als Wikilink-Ziel mehrdeutig. Benennungsschema im Issue-Text ergänzt und Punkt 3 des CC-Prompts entsprechend neu gefasst.Zwei Folgepunkte mit aufgenommen:
existing_csv-Lookup in_build_and_push(). Fallback auf den alten Pfad ist Pflicht, sonst ist die fortgeschriebene CSV nach dem ersten Lauf im Arbeitsstand weg.basesdagegen aktiv.MATRIX-DATAVIEW.mddurchMATRIX.baseersetzt; die statischeMATRIX.mdbleibt als plugin-freier Fallback.CVE-Anteil entfernt (Frontmatter, Matrix-Spalte,
_vm_md-Sektion,_fetch-Query, MOC). Ersetzt durch den Agent-Status — Begruendung im Nachtrag am Issue-Ende.Abhaengigkeit: #212 zuerst. Die Agent-Daten sind aktuell in 78/78 generierten Dateien leer; ohne den Fix zementiert dieses Issue nur
agent: falseueber den gesamten Bestand.Abhaengigkeiten praezisiert: #212 (Agent-Daten korrekt) und #213 (Updates/Dienste/Ports vollstaendig) liefern beide Felder, die hier ins Frontmatter, in die Matrix und in die
role-Ableitung einfliessen. Reihenfolge: #212 → #213 → #209.role→roles[](Nachtrag am Issue-Ende). Ableitung liegt jetzt in #216,_derive_role()entfaellt hier. Kette: #214 → #215 → #216 → #209.chinux referenced this issue2026-07-20 23:15:03 +00:00