# Frontmatter-Schema Obsidian nennt Frontmatter „Properties". Es ist YAML zwischen zwei `---`-Zeilen am Dateianfang. Der Index liest genau diese Felder — was hier fehlt, muss der Agent sich durch Öffnen der Datei erarbeiten, und genau das kostet Kontext. ## Pflichtfelder (alle Notiztypen) | Feld | Typ | Bedeutung | |---|---|---| | `uid` | String | Stabile ID, Format `YYYYMMDD-slug`. Überlebt Umbenennen und Verschieben; Verweise in Skripten hängen daran. | | `type` | Enum | Steuert Gruppierung, Templates und Abfragen. Gewinnt gegen die Ableitung aus dem Ordner. | | `title` | String | Anzeigename. Fehlt er, nimmt der Index die erste `#`-Überschrift, sonst den Dateinamen. | | `status` | Enum | Lebenszyklus, siehe unten. | | `summary` | String | **Ein Satz, max. 160 Zeichen.** Worum geht es und wofür macht man die Notiz auf. | | `tags` | Liste | Kleingeschrieben, ohne `#`, Technologie/Thema. 3–6 Stück, nicht 20. | | `created` | Datum | `YYYY-MM-DD` | | `updated` | Datum | `YYYY-MM-DD`, bei inhaltlichen Änderungen mitziehen. | ### Erlaubte `type`-Werte `project-code`, `template-project`, `note-template`, `research`, `area`, `resource`, `moc`, `decision`, `inbox`, `archive` Neue Typen nur bewusst einführen und dann in `scripts/vaultlib.py` unter `KNOWN_TYPES` eintragen, sonst meldet der Doctor sie als unbekannt. ### Erlaubte `status`-Werte | Wert | Bedeutung | |---|---| | `idea` | notiert, noch nicht begonnen | | `active` | wird gerade bearbeitet | | `paused` | bewusst liegengelassen, kommt zurück | | `done` | abgeschlossen, noch am Platz | | `archived` | abgeschlossen und nach `90_Archive/` verschoben | | `reference` | Dauerhaftes ohne Fortschritt (Areas, Ressourcen, Templates) | ## Zusätzliche Felder je Typ ### `project-code` | Feld | Beispiel | Zweck | |---|---|---| | `repo` | `git@github.com:me/auth-service.git` | Sprung ins Repo ohne Suche | | `lang` | `go` | Hauptsprache | | `stack` | `[postgres, keycloak, docker]` | Umgebung auf einen Blick | | `template_of` | `go-service-starter` | aus welchem Template-Projekt entstanden | | `area` | `infrastruktur` | zugehöriger Dauerbereich | ### `research` | Feld | Beispiel | Zweck | |---|---|---| | `question` | `Welche Rate-Limiting-Strategie passt zu Gateway X?` | die eine Frage | | `sources` | `[https://…, "Buch, S. 40"]` | Belege | | `confidence` | `low` / `medium` / `high` | wie belastbar die Antwort ist | | `project` | `auth-service` | auslösendes Projekt | ### `template-project` | Feld | Beispiel | Zweck | |---|---|---| | `use_when` | `Neuer Go-Service mit HTTP-API und Postgres` | Auswahl ohne Öffnen | | `stack` | `[go, postgres, docker]` | | | `template_of` | — | bleibt leer; wird in den abgeleiteten Projekten gesetzt | ### `decision` (ADR) | Feld | Beispiel | |---|---| | `project` | `auth-service` | | `decided` | `2026-08-03` | | `supersedes` | `20260101-mongo-als-store` | ### `area`, `resource`, `moc`, `note-template` Nur die Pflichtfelder. Bei `moc` ist `summary` besonders wichtig, weil MOCs Einstiegspunkte sind. ## Beispiel ```yaml --- uid: 20260803-auth-service type: project-code title: Auth Service status: active summary: OIDC-Auth-Service für die interne Toolchain, Go + Keycloak, löst die verteilten Basic-Auth-Setups ab. tags: [go, oidc, keycloak, infrastruktur] repo: git@github.com:me/auth-service.git lang: go stack: [postgres, keycloak, docker] template_of: go-service-starter area: infrastruktur created: 2026-08-03 updated: 2026-08-03 --- ``` ## Was nicht ins Frontmatter gehört - Fließtext oder mehrzeilige Beschreibungen — dafür ist der Body da. - Werte, die sich täglich ändern (Fortschritt in Prozent, laufende Zahlen). - Secrets, Tokens, Passwörter, Zugangsdaten. Nie, auch nicht „nur kurz". - Duplikate von Wikilinks — Links stehen im Body unter `## Referenzen`. ## Massenpflege `vault_doctor.py --fix-missing` ergänzt fehlende Felder konservativ: `type` aus dem Ordner, `title` aus der ersten Überschrift, `summary` aus dem ersten Absatz, `uid` aus Datum + Slug. Es überschreibt nie vorhandene Werte und rührt den Body nicht an. Standard ist ein Trockenlauf; erst `--apply` schreibt. Danach die generierten `summary`-Werte durchsehen — automatisch abgeleitete Sätze sind brauchbar, aber selten so gut wie ein bewusst geschriebener.