Leitlinien-Export: ausgewählte Seiten als generierte Datei in Projekt-Repositories ausliefern #179

Open
opened 2026-10-04 20:40:23 +00:00 by torben · 0 comments
Owner

Teil C aus dem Design #171 (dort Entscheidungen und verworfene Alternativen). Unabhängig von #177/#178 baubar; der Export-Kopf unten ist die Konstante, die #177 bei der Erfassung ausschließt.

Problem

Projekt-Repositories tragen eigene Agentenregeln, die sich wiederholen und auseinanderlaufen (Belegt/Annahme trennen, Secrets nur in .env, kein Force-Push, Sprachregel). Die Instanz soll diese Leitlinien einmal halten und an die Repos ausliefern - so, dass jedes Repo lokal arbeitsfähig bleibt, auch in CI und ohne MCP-Zugang (Entscheidung D6 in #171: generierte Datei per PR, nicht Abruf zur Laufzeit).

Entwurf

1. Auswahl ohne neues Schema. Welche Seiten Leitlinien sind, entscheidet die Instanz mit dem, was search schon kann: export guidelines --field <k=v>... nimmt dieselben --field-Filter wie tools/wikitool search (z. B. einen Subtyp oder ein Tag, das die Instanz dafür vergibt). Der Stack legt keinen Typ und kein Feld fest; die Konvention gehört in kb/CONVENTIONS.md der Instanz.

2. Mechanisches Rendern (kein LLM) nach stdout oder --out <datei>:

  • Zeile 1: <!-- wikitool:export kind=guidelines instance=<origin-URL oder "local"> commit=<sha> generated=<ISO-8601 UTC> - generiert, nicht von Hand ändern -->
  • Danach je Seite, nach Titel sortiert: ## <Titel>, der Seitentext ohne Frontmatter; Wikilinks als Klartext (Anzeigetext bzw. Titel), [^cite-id]-Marker und der ## Footnotes-Abschnitt entfernt, stattdessen eine Zeile mit dem Seitentitel als Herkunft in der Instanz.
  • Gleiche Seiten auf gleichem Commit → byte-identische Ausgabe (bis auf generated=, das mit --no-timestamp entfällt).
  • Weigert sich bei einem schmutzigen Arbeitsbaum, weil commit= sonst lügt.

3. Auslieferung - eine kurze Instruction (oder ein Abschnitt der Instruction aus #178): Ein Repo nimmt teil, indem es die Datei GUIDELINES.md im Root enthält (Opt-in durch Vorhandensein, keine Zielliste in der Instanz). Pro teilnehmendem Repo: erzeugen, mit dem Stand im Repo vergleichen, bei Unterschied PR im Repo über das Forge-Werkzeug der Sitzung (gitea-mcp, gh). Das AGENTS.md des Repos verweist auf die Datei (Claude Code: @GUIDELINES.md). Bei einem öffentlichen Ziel-Repo ist die PR-Prüfung zugleich die Prüfung, dass nichts Privates hinausgeht - die Instruction sagt das ausdrücklich.

4. Kein Rückfluss. Eine Datei mit <!-- wikitool:export in Zeile 1 ist Ausgabe der Instanz; raw/CONTRACT.md § What does not belong here ("Anything the LLM wrote") schließt sie als Quelle aus. Mechanisch durchgesetzt in raw capture (#177).

Akzeptanzkriterien

  • Die Ausgabe enthält genau die Seiten, die search mit denselben --field-Filtern findet, nach Titel sortiert.
  • Die Ausgabe enthält keine Wikilink-Syntax, keine [^…]-Marker, keinen ## Footnotes-Abschnitt und kein Frontmatter; jede Seite nennt ihren Titel als Herkunft.
  • Zeile 1 beginnt mit <!-- wikitool:export und nennt den Commit des Arbeitsbaums; bei schmutzigem Baum Abbruch mit exit 1.
  • Zwei Läufe auf demselben Commit mit --no-timestamp sind byte-identisch.
  • Das Kommando schreibt nichts außer stdout bzw. der mit --out genannten Datei.
  • pytest, docs verify, instructions verify grün; CI grün.

Betroffene Stellen

  • neues Kommando (Arbeitsname export guidelines) unter tools/chemenu/commands/, Wiederverwendung der Filter aus search, Wikilink-/Footnote-Behandlung aus links.py/cite_cmd.py
  • Kommando-Record in tools/CONTRACT.md
  • Instruction unter instructions/ (oder Abschnitt der #178-Instruction), raw/CONTRACT.md (Export-Kopf als Ausschlussmerkmal), kb/CONTRACT.md (Verweis: Auswahl ist Instanzkonvention)
  • README.md, tools/README.md

Versionsteil

--minor: neues, nur lesendes Kommando und eine Instruction. Drop-in.

Teil C aus dem Design #171 (dort Entscheidungen und verworfene Alternativen). Unabhängig von #177/#178 baubar; der Export-Kopf unten ist die Konstante, die #177 bei der Erfassung ausschließt. ## Problem Projekt-Repositories tragen eigene Agentenregeln, die sich wiederholen und auseinanderlaufen (Belegt/Annahme trennen, Secrets nur in `.env`, kein Force-Push, Sprachregel). Die Instanz soll diese Leitlinien einmal halten und an die Repos ausliefern - so, dass jedes Repo lokal arbeitsfähig bleibt, auch in CI und ohne MCP-Zugang (Entscheidung D6 in #171: generierte Datei per PR, nicht Abruf zur Laufzeit). ## Entwurf **1. Auswahl ohne neues Schema.** Welche Seiten Leitlinien sind, entscheidet die Instanz mit dem, was `search` schon kann: `export guidelines --field <k=v>...` nimmt dieselben `--field`-Filter wie `tools/wikitool search` (z. B. einen Subtyp oder ein Tag, das die Instanz dafür vergibt). Der Stack legt keinen Typ und kein Feld fest; die Konvention gehört in `kb/CONVENTIONS.md` der Instanz. **2. Mechanisches Rendern** (kein LLM) nach stdout oder `--out <datei>`: - Zeile 1: `<!-- wikitool:export kind=guidelines instance=<origin-URL oder "local"> commit=<sha> generated=<ISO-8601 UTC> - generiert, nicht von Hand ändern -->` - Danach je Seite, nach Titel sortiert: `## <Titel>`, der Seitentext ohne Frontmatter; Wikilinks als Klartext (Anzeigetext bzw. Titel), `[^cite-id]`-Marker und der `## Footnotes`-Abschnitt entfernt, stattdessen eine Zeile mit dem Seitentitel als Herkunft in der Instanz. - Gleiche Seiten auf gleichem Commit → byte-identische Ausgabe (bis auf `generated=`, das mit `--no-timestamp` entfällt). - Weigert sich bei einem schmutzigen Arbeitsbaum, weil `commit=` sonst lügt. **3. Auslieferung** - eine kurze Instruction (oder ein Abschnitt der Instruction aus #178): Ein Repo nimmt teil, indem es die Datei `GUIDELINES.md` im Root enthält (Opt-in durch Vorhandensein, keine Zielliste in der Instanz). Pro teilnehmendem Repo: erzeugen, mit dem Stand im Repo vergleichen, bei Unterschied PR im Repo über das Forge-Werkzeug der Sitzung (`gitea-mcp`, `gh`). Das AGENTS.md des Repos verweist auf die Datei (Claude Code: `@GUIDELINES.md`). Bei einem öffentlichen Ziel-Repo ist die PR-Prüfung zugleich die Prüfung, dass nichts Privates hinausgeht - die Instruction sagt das ausdrücklich. **4. Kein Rückfluss.** Eine Datei mit `<!-- wikitool:export` in Zeile 1 ist Ausgabe der Instanz; `raw/CONTRACT.md` § What does not belong here ("Anything the LLM wrote") schließt sie als Quelle aus. Mechanisch durchgesetzt in `raw capture` (#177). ## Akzeptanzkriterien - [ ] Die Ausgabe enthält genau die Seiten, die `search` mit denselben `--field`-Filtern findet, nach Titel sortiert. - [ ] Die Ausgabe enthält keine Wikilink-Syntax, keine `[^…]`-Marker, keinen `## Footnotes`-Abschnitt und kein Frontmatter; jede Seite nennt ihren Titel als Herkunft. - [ ] Zeile 1 beginnt mit `<!-- wikitool:export` und nennt den Commit des Arbeitsbaums; bei schmutzigem Baum Abbruch mit exit 1. - [ ] Zwei Läufe auf demselben Commit mit `--no-timestamp` sind byte-identisch. - [ ] Das Kommando schreibt nichts außer stdout bzw. der mit `--out` genannten Datei. - [ ] `pytest`, `docs verify`, `instructions verify` grün; CI grün. ## Betroffene Stellen - neues Kommando (Arbeitsname `export guidelines`) unter `tools/chemenu/commands/`, Wiederverwendung der Filter aus `search`, Wikilink-/Footnote-Behandlung aus `links.py`/`cite_cmd.py` - Kommando-Record in `tools/CONTRACT.md` - Instruction unter `instructions/` (oder Abschnitt der #178-Instruction), `raw/CONTRACT.md` (Export-Kopf als Ausschlussmerkmal), `kb/CONTRACT.md` (Verweis: Auswahl ist Instanzkonvention) - `README.md`, `tools/README.md` ## Versionsteil **`--minor`**: neues, nur lesendes Kommando und eine Instruction. Drop-in.
torben added the prio/plannedsize/Marea/kbkind/build labels 2026-10-04 20:40:23 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: torben/chemenu#179