feat(site): llms.txt als Wegweiser + Charset-Fix für llms.md
Anlass war die Frage, ob `llms.md` ein guter Name ist. Zwei Befunde: 1. Der Zweck der Konvention ist ein anderer, als D43 annahm. llmstxt.org über die eigene Datei: „a markdown file that provides brief background information and guidance, along with links to markdown files providing more detailed information“ — ein Index, kein Inhalt. Der 211-Zeilen- Leitfaden ist genau eine jener verlinkten Dateien; `llms.md` ist damit der richtige Name, es fehlte der Wegweiser davor. 2. `llms.md` kam auf der stabilen Instanz falsch kodiert an: Apache kennt `.md` nicht und sendet GAR KEINEN Content-Type, der Browser rät windows-1252. Gemessen: characterSet=windows-1252, aus „notation — guide“ wurde „notation â€" guide“, 31 Zeilen betroffen. GitHub Pages liefert dieselbe Datei korrekt als text/markdown; charset=utf-8 aus. - frontend/public/llms.txt: Index nach der Konvention (Titel, Blockquote, Notation in Kurzform, ## Docs, ## Optional). Rein ASCII — er ist die Datei, die ein fremder Agent ungefragt abruft, und soll auch dort ankommen, wo ein Server die Kodierung verschweigt. Alle 5 Links: 200. - scripts/prod.htaccess: AddType für .md/.txt/.werkbaum, von deploy-prod.sh als .htaccess gespiegelt. Nicht in public/ — dort landete es wirkungslos im Pages-Artefakt. Rückweg bei 500 steht in der Datei. - Beide Deploy-Wege kopieren llms.txt mit. SPEC §13 + D43-Nachtrag 2 (mit Richtigstellung der D43-Annahme); Plan: #not.llms.index [x]. 243 Tests grün, Plan 157 Knoten, 0 Warnungen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
cb966e4e20
commit
48d3174684
+57
-1
@@ -2805,7 +2805,63 @@ und der Footer-Link rückt zwischen Versionsnummer und Copyright — zur
|
||||
Werkzeug-Ecke des Footers statt ans Ende hinter die Rechtstexte. Der
|
||||
Dateiname bleibt als Linktext (übersetzungsfrei), die Wurzel-Lage bleibt.
|
||||
|
||||
## D44 — Falt-Umschalter: „ab M abwärts“ statt einer Tiefenzahl
|
||||
**Nachtrag 2 — `llms.txt` ist ein Wegweiser, keine Referenz; er fehlte, und
|
||||
die Auslieferung von `llms.md` war kaputt.** Anlass war die Frage, ob
|
||||
`llms.md` überhaupt ein guter Name sei. Beim Nachsehen kamen zwei Dinge
|
||||
heraus, und das erste ist eine **Richtigstellung dieses Eintrags**.
|
||||
|
||||
**Der Zweck der Konvention ist ein anderer, als D43 annahm.** Der Haupttext
|
||||
oben beschreibt `llms.txt` als „eine Markdown-Datei an der Site-Wurzel, die
|
||||
die Site für Sprachmodelle beschreibt — genau der Zweck“. Das ist zu weit
|
||||
gefasst. llmstxt.org sagt über die eigene Datei wörtlich: *„a markdown file
|
||||
that provides brief background information and guidance, along with **links to
|
||||
markdown files providing more detailed information**“* — also ein **Index**,
|
||||
kein Inhalt. Werkbaums 211-Zeilen-Leitfaden ist genau eine jener
|
||||
„markdown files providing more detailed information“, auf die so ein Index
|
||||
zeigt; als `llms.txt` wäre er zweckentfremdet gewesen.
|
||||
|
||||
**Damit ist `llms.md` nicht bloß geduldet, sondern richtig** — und der erste
|
||||
Nachtrag hat aus dem falschen Grund das Richtige getan: Er begründete die
|
||||
Endung mit Format-Ehrlichkeit und gab dafür die Auffindbarkeit auf, die den
|
||||
Namen in D43 überhaupt begründet hatte. Tatsächlich musste die Kurzfassung
|
||||
diesen Namen tragen; gefehlt hat nicht die richtige Endung, sondern der
|
||||
Wegweiser davor. Der liegt jetzt als `frontend/public/llms.txt` daneben und
|
||||
wird von beiden Deploy-Wegen mitkopiert.
|
||||
|
||||
**Zweiter Befund: `llms.md` kam auf der stabilen Instanz falsch kodiert an.**
|
||||
Apache kennt die Endung nicht und sendet dann **gar keinen** `Content-Type` —
|
||||
ohne Charset rät der Browser windows-1252. Gemessen am 24.08.2026 auf
|
||||
`werkbaum.javagil.de`: `document.characterSet` = `windows-1252`, und aus
|
||||
`# Werkbaum notation — guide for AI agents` wurde `… notation â€" guide …`;
|
||||
31 Zeilen enthalten `–`, `—`, `…` oder `≥`. Dieselbe Datei von GitHub Pages:
|
||||
`text/markdown; charset=utf-8`, fehlerfrei. Es ist also **kein** Argument
|
||||
gegen die Endung, sondern ein Konfigurationsfehler auf genau einer Instanz —
|
||||
und dieselbe Falle, die D24 für `.werkbaum` längst benannt hatte („wer selbst
|
||||
ausliefert, nimmt `text/plain; charset=utf-8`“).
|
||||
|
||||
Behoben mit `scripts/prod.htaccess`, das `deploy-prod.sh` als `.htaccess` in
|
||||
die Site-Wurzel spiegelt (`.md` → `text/markdown;charset=utf-8`, dazu `.txt`
|
||||
und `.werkbaum` als `text/plain`). Bewusst **nicht** in `frontend/public/`:
|
||||
Von dort landete es über `dist/` auch im Pages-Artefakt, wo es wirkungslos
|
||||
wäre — Pages ist kein Apache und macht es ohnehin richtig. Der Rückweg steht
|
||||
in der Datei selbst: Antwortet der Server nach einem Deploy mit 500, verbietet
|
||||
seine `AllowOverride`-Einstellung `AddType`, und die drei Zeilen gehören in
|
||||
die vhost-Konfiguration.
|
||||
|
||||
**Der Wegweiser ist rein ASCII** — er ist die eine Datei, die ein fremder
|
||||
Agent ungefragt abruft, und er soll auch dann ankommen, wenn ein Server die
|
||||
Kodierung verschweigt. Das ist keine Vorsichtsmaßnahme ins Blaue: Genau dieser
|
||||
Fall ist oben gemessen. Aufbau nach der Konvention: `#`-Titel, Blockquote mit
|
||||
einem Satz, ein Absatz Notation in Kurzform, dann `## Docs` mit den Links, die
|
||||
man wirklich braucht, und `## Optional` für DECISIONS und Repo — die Konvention
|
||||
erlaubt ausdrücklich, den Optional-Abschnitt wegzulassen, wenn der Kontext
|
||||
knapp ist.
|
||||
|
||||
**Der Footer verlinkt weiterhin `llms.md`, nicht den Index.** Für einen
|
||||
Menschen ist der Leitfaden das nützliche Dokument; der Wegweiser besteht aus
|
||||
zehn Zeilen Links. Und Agenten finden ihn nicht über den Footer, sondern weil
|
||||
er an der konventionellen Adresse liegt — wie `robots.txt`, das auch niemand
|
||||
in eine Fußzeile schreibt. Falt-Umschalter: „ab M abwärts“ statt einer Tiefenzahl
|
||||
Einzeln zu falten (D38) reicht für einen Plan mit 167 Knoten nicht — man will
|
||||
den Baum am Stück auf eine Arbeitshöhe bringen. Der Diagramm-Kopf bekommt
|
||||
dafür einen **Umschalter** neben „verworfene einblenden“ und „günstigster
|
||||
|
||||
+9
-2
@@ -990,6 +990,13 @@ Eine **englische Kurzfassung dieser Spezifikation für KI-Agenten** (lesen
|
||||
**und** schreiben) liegt als Markdown in `frontend/public/llms.md` und wird
|
||||
von jeder Instanz unter der Site-Wurzel ausgeliefert
|
||||
(`https://werkbaum.javagil.de/llms.md`); der Footer verlinkt sie neben der
|
||||
Versionsnummer. Angelehnt an die llms.txt-Konvention, mit `.md` als der zum
|
||||
Inhalt ehrlichen Endung. **Diese SPEC bleibt normativ**: Bei Syntaxänderungen
|
||||
Versionsnummer. **Diese SPEC bleibt normativ**: Bei Syntaxänderungen
|
||||
wird die Agenten-Fassung im selben Zug nachgezogen (CLAUDE.md). Siehe D43.
|
||||
|
||||
Daneben liegt `llms.txt` — der **Wegweiser** der llms.txt-Konvention
|
||||
(llmstxt.org): Name, ein Satz zur Sache und Links auf die Kurzfassung, diese
|
||||
SPEC, den Editor und das Repo. Er ist bewusst kurz und **rein ASCII**, damit
|
||||
er auch dort ankommt, wo ein Server die Kodierung nicht mitschickt. Die
|
||||
Konvention meint mit `llms.txt` genau so einen Index, **nicht** den Inhalt
|
||||
selbst — die Kurzfassung ist eine der „markdown files providing more detailed
|
||||
information“, auf die er zeigt. Siehe D43-Nachtrag 2.
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
- [-] #not.store: A separate storage format for the structure (L) %% the text is the format
|
||||
- [ ] #not.ticket: Ticket references (#123,#US-123) (S) %% Taiga writes #US-123 for a user story
|
||||
- [^] #not.llms: llms.md, the notation explained to AI agents (S)
|
||||
- [x] #not.llms.index: llms.txt, the signpost that points at it (XS) %% the convention wants an index, not the content
|
||||
- [?] #not.benefit: Benefit per node, not only cost (M)
|
||||
| [?] #not.benefit.sigil: Another sigil next to the size (S)
|
||||
| [?] #not.benefit.points: Story points behind the T-shirt sizes (M)
|
||||
@@ -296,6 +297,11 @@
|
||||
AI agent can read and write Werkbaum without working through the German
|
||||
SPEC. It is not normative: the SPEC changes first and this follows.
|
||||
|
||||
#not.llms.index
|
||||
The llms.txt convention asks for a short index that links to the detailed
|
||||
files, not for the detailed file itself. This is that index, and it sits at
|
||||
the one address an agent tries on its own.
|
||||
|
||||
#not.benefit
|
||||
Sizes say what something costs; nothing yet says what it is worth. With both
|
||||
you could sort by value for money instead of only minimizing cost.
|
||||
|
||||
Reference in New Issue
Block a user