Andreas 04.09.: SilverBullet ist für die Doku nicht das Richtige — die
Doku soll aussehen wie sie soll, lesen statt editieren, und ohne
Auto-Commit-Problem. km baut deshalb je Quelle mit mkdocs.yml nach jedem
Pull mit Änderung eine statische Seite nach <data>/site/<name>; Caddy
liefert sie unter /doku/<name>/ aus. Ein Baufehler lässt die alte Seite
stehen und wird im Lauf gemeldet. Image bekommt mkdocs-material.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Entscheidung Andreas 2026-09-04 (spine/core#8): kein Datenbankdienst. Der
Index ist eine abgeleitete Sicht auf die Markdown-Ablage in einer Datei im
Volume, jederzeit neu baubar. image/km/index.py zerlegt die Dateien in
Chunks (Chunking aus info/ai/scripts/index_docs.py übernommen), hält
Volltext in FTS5 und Vektoren aus bge-m3 in sqlite-vec, inkrementell über
SHA-256 je Datei. image/km/search.py sucht Volltext führend, Vektor
ergänzend, mit Filtern vor dem Ranking (0 Treffer statt gesperrt).
Ingest: Kommentare bei der Erstbefüllung repo-weit statt je Vorgang —
die erste Fassung hing bei live/live nach 371 Vorgängen; jetzt 2175 in zwei
Minuten. Gemessen: Volltext über 61.000 Chunks in 3 s, Vektoren 0,31 s je
Chunk auf der CPU-Box. Kein Bytecode mehr im Repo.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Erster Baustein von spine/core#13: image/km/ingest_gitea.py liest Issues,
Pull Requests und Kommentare je Repo oder Organisation und schreibt je
Vorgang eine Markdown-Datei mit Frontmatter (Zustand, Labels, Milestone,
Beteiligte, Zeitstempel, Verweise auf andere Vorgänge als Kanten) unter
<ablage>/<namespace>/vorgaenge/<owner>/<repo>/<nummer>.md.
Inkrementell über since je Repo, idempotent, Stand erst nach vollständigem
Durchlauf. Zugang aus OpenBao wie beim Gitea-Helfer, nie in der Ausgabe.
Schreibt nichts nach Gitea zurück. Gemessen: 1165 Vorgänge in drei Minuten.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>