wiki-query: Wortlaut geführt in der Rohdatei nachlesen – über Seite, Source-Seite und Gliederung, nie freies Suchen in raw/ #227

Closed
opened 2026-10-13 20:59:04 +00:00 by torben · 4 comments
Owner

Abgespalten aus #224 (Entscheidung E1 = Variante (b), 2026-10-13). Drittes und letztes Glied der Kette „Große Dokumente“. Baut auf der Gliederung mit Zeilennummern im Kopf von derived.md aus #225 (ausgeliefert in 10.1.0-beta.1) und der Längenschwelle aus #226 (ausgeliefert in 10.1.0-beta.10) auf.

Ergebnis

Ausgeliefert in 10.1.0-beta.11, Commit ca12c54. Verifiziert lokal durch pytest (3080 passed), instructions verify und docs verify, auf dem Commit durch die CI-Läufe 733 und 734, beide grün. Abschlussprüfung: kein weiteres Dokument (Contracts, COLLECTION.md, Ingest-Anweisungen, docs/) widerspricht der Änderung.

Ausgangslage (vor diesem Paket)

kb/CONTRACT.md Z. 7–8 lautete: „a page should answer a future question without re-reading the source it came from. If answering still requires the raw file, the page is incomplete.“ wiki-query sagte nichts über raw/; search ist rg über kb/.

Bei Regelwerken und Anleitungen zielt die typische Frage aber auf den Wortlaut („Was sagt Regel 16:3e genau?“, „Welcher Wert steht in Tabelle 4 der Anleitung?“). Eine Seite, die jeden Wortlaut trägt, wäre eine Kopie des Dokuments. Eine Seite, die ihn nicht trägt, machte die Antwort unvollständig.

Eine Fußnote (cite add) nennt Source-Seite und ggf. Datei (--file), aber keine Seitenzahl. Das gilt weiterhin (siehe unten); ohne Hilfe hätte eine Query 96 Seiten lesen müssen, um einen Absatz zu zitieren. Die Gliederung aus #225 ist diese Hilfe.

Entscheidung (E1 b): geführtes Nachlesen

  • Die Antwort stützt sich weiterhin auf eine kb/-Seite. Die Rohdatei wird nur gelesen, um den Wortlaut zu zitieren oder eine Angabe der Seite zu prüfen – nie als Ersatz für eine Seite, die zur Frage nichts sagt. Erreicht wird sie nur von einer Seite aus, mindestens der Source-Seite des Dokuments; ein Dokument, zu dem keine Seite führt, ist eines, zu dem das Wiki schweigt.
  • Der Weg ist fest: Seite → ihre Fußnote/sources: → Source-Seite → deren raw_files: → Kopf von derived.md (Gliederung mit Seite und Zeile, #225) → nur den Zeilenbereich des passenden Abschnitts lesen. Kein rg/grep/search über raw/. Zeilenbereich (beim Bau festgelegt): von der line des Eintrags bis vor den nächsten Eintrag gleicher oder höherer Ebene auf einer späteren Seite, der letzte bis Dateiende; ein Eintrag ohne Seite/Zeile wird über den umschließenden erreicht.
  • Ohne Gliederung (ältere Ableitung, Format ohne Outline): Ist der Text unter der Längenschwelle aus #226 (wc -m gegen den Wert aus raw derive -h), darf er ganz gelesen werden. Darüber sagt die Antwort, dass der Wortlaut nicht gezielt erreichbar ist, und nennt den Weg: eine neue Ableitung des Originals (raw derive, neue Ausgabe per raw accept --replaces).
  • Zitieren: wörtlich in der Originalsprache, mit Source-Seite und Seitenzahl (nächste <!-- page N -->-Marke oberhalb). Auszeichnungen aus raw derive (~~…~~, **…**, *…*; Form nach #231) werden beim Zitieren nicht als Wortlaut ausgegeben; eine Durchstreichung wird als gestrichener Text benannt.
  • Steht die Antwort nur in der Rohdatei, nicht auf einer Seite, gilt das Qualitätsziel weiter: Die Seite ist unvollständig. Query beantwortet die Frage mit dem Zitat und benennt die Lücke, mit dem Angebot, sie über wiki-manage zu schließen. Sie schreibt nichts selbst (Hard rule „read-only“ bleibt).
  • MCP-Leseserver bleibt ohne Rohzugriff. Ein Leser über MCP bekommt den Wortlaut nur, wenn er auf einer Seite steht. Kommt dafür Bedarf auf, ist das ein eigenes Paket (Bezug: #218).
  • Fundstelle in cite add (z. B. --at "S. 39"): nicht Teil dieses Pakets. Der Weg über die Gliederung reicht für gegliederte Dokumente; erweist er sich beim ersten echten Regelwerk als zu grob, folgt ein eigenes Issue.

Abweichung beim Bau: Der Entwurf stützte die Originalsprache des Zitats auf kb/CONVENTIONS.md § Language. Dieser Abschnitt sagt über Zitate nichts (er bindet Seitentext). wiki-query begründet es deshalb mit dem Gegenüber: Die Antwort folgt AGENTS.md § Conversation language, das Zitat wird nicht übersetzt.

Geänderte Dateien

  • kb/CONTRACT.md: Qualitätsziel präzisiert – Substanz auf der Seite, Wortlaut darf geführt nachgelesen werden; eine Antwort nur in der Rohdatei zeigt weiter eine unvollständige Seite.
  • instructions/wiki-query/SKILL.md: neuer Schritt 4 (der feste Weg, Fall ohne Gliederung, Zitieren und Auszeichnungen); alte Schritte 4–7 → 5–8, Verweise in Hard rule und Decision points nachgezogen; zwei neue Decision points („Wortlaut gefragt?“, „Antwort nur in der Rohdatei?“); „wikitool commands used“ unverändert.
  • docs/explanation/pipeline-rationale.md: Absatz, warum das Qualitätsziel der Substanz gilt und das Nachlesen nur über den festen Weg geht.
  • docs/how-to/query-the-wiki.md: Abschnitt „Asking for the exact wording“; der MCP-Absatz nennt die eine Abweichung (Wortlaut nur, wo eine Seite ihn trägt).
  • Geprüft und unverändert: AGENTS.md (keine Regel schließt den Rohzugriff aus), raw/CONTRACT.md (keine widersprechende Aussage).

Akzeptanzkriterien

  • kb/CONTRACT.md erlaubt das geführte Nachlesen ausdrücklich und hält zugleich fest, dass eine Antwort, die nur in der Rohdatei steht, eine unvollständige Seite anzeigt.
  • wiki-query beschreibt den Weg Seite → Source-Seite → raw_files: → Gliederung → Zeilenbereich, und verbietet ausdrücklich das Durchsuchen von raw/.
  • Der Fall „keine Gliederung“ ist mit beiden Ausgängen beschrieben (unter/über der Längenschwelle aus #226, ohne den Wert zu wiederholen).
  • Der Fall „Antwort nur in der Rohdatei“ endet mit Zitat und benannter Lücke, ohne Schreibzugriff.
  • wiki-query sagt, wie Auszeichnungen aus raw derive beim Zitieren behandelt werden (nicht als Wortlaut, Durchstreichung benannt).
  • instructions verify, docs verify grün (lokal vor dem Publish; CI-Läufe 733/734 grün).

Versionsteil

MINOR. Drop-in: kb/CONTRACT.md wird ausgeliefert und lockert eine Regel, ohne dass bestehender Inhalt sich ändern muss; kein Befehl, kein Feld, keine Migration. Der Kandidat stand bereits auf 10.1.0 (MINOR), daher nur 10.1.0-beta.10 → beta.11.

Kette

Kette „Große Dokumente“

Abgespalten aus #224 (Entscheidung E1 = Variante (b), 2026-10-13). Drittes und letztes Glied der Kette „Große Dokumente“. Baut auf der Gliederung mit Zeilennummern im Kopf von `derived.md` aus #225 (ausgeliefert in 10.1.0-beta.1) und der Längenschwelle aus #226 (ausgeliefert in 10.1.0-beta.10) auf. ## Ergebnis Ausgeliefert in **10.1.0-beta.11**, Commit `ca12c54`. Verifiziert lokal durch `pytest` (3080 passed), `instructions verify` und `docs verify`, auf dem Commit durch die CI-Läufe [733](https://gitea.nehmer.net/torben/chemenu/actions/runs/733) und [734](https://gitea.nehmer.net/torben/chemenu/actions/runs/734), beide grün. Abschlussprüfung: kein weiteres Dokument (Contracts, `COLLECTION.md`, Ingest-Anweisungen, `docs/`) widerspricht der Änderung. ## Ausgangslage (vor diesem Paket) `kb/CONTRACT.md` Z. 7–8 lautete: „a page should answer a future question *without* re-reading the source it came from. If answering still requires the raw file, the page is incomplete.“ `wiki-query` sagte nichts über `raw/`; `search` ist `rg` über `kb/`. Bei Regelwerken und Anleitungen zielt die typische Frage aber auf den **Wortlaut** („Was sagt Regel 16:3e genau?“, „Welcher Wert steht in Tabelle 4 der Anleitung?“). Eine Seite, die jeden Wortlaut trägt, wäre eine Kopie des Dokuments. Eine Seite, die ihn nicht trägt, machte die Antwort unvollständig. Eine Fußnote (`cite add`) nennt Source-Seite und ggf. Datei (`--file`), aber keine Seitenzahl. Das gilt weiterhin (siehe unten); ohne Hilfe hätte eine Query 96 Seiten lesen müssen, um einen Absatz zu zitieren. Die Gliederung aus #225 ist diese Hilfe. ## Entscheidung (E1 b): geführtes Nachlesen - Die Antwort stützt sich **weiterhin auf eine `kb/`-Seite**. Die Rohdatei wird nur gelesen, um den **Wortlaut** zu zitieren oder eine Angabe der Seite zu **prüfen** – nie als Ersatz für eine Seite, die zur Frage nichts sagt. Erreicht wird sie nur von einer Seite aus, mindestens der Source-Seite des Dokuments; ein Dokument, zu dem keine Seite führt, ist eines, zu dem das Wiki schweigt. - **Der Weg ist fest:** Seite → ihre Fußnote/`sources:` → Source-Seite → deren `raw_files:` → Kopf von `derived.md` (Gliederung mit Seite und Zeile, #225) → nur den Zeilenbereich des passenden Abschnitts lesen. Kein `rg`/`grep`/`search` über `raw/`. Zeilenbereich (beim Bau festgelegt): von der `line` des Eintrags bis vor den nächsten Eintrag gleicher oder höherer Ebene auf einer späteren Seite, der letzte bis Dateiende; ein Eintrag ohne Seite/Zeile wird über den umschließenden erreicht. - **Ohne Gliederung** (ältere Ableitung, Format ohne Outline): Ist der Text unter der Längenschwelle aus #226 (`wc -m` gegen den Wert aus `raw derive -h`), darf er ganz gelesen werden. Darüber sagt die Antwort, dass der Wortlaut nicht gezielt erreichbar ist, und nennt den Weg: eine neue Ableitung des Originals (`raw derive`, neue Ausgabe per `raw accept --replaces`). - **Zitieren:** wörtlich in der Originalsprache, mit Source-Seite und Seitenzahl (nächste `<!-- page N -->`-Marke oberhalb). Auszeichnungen aus `raw derive` (`~~…~~`, `**…**`, `*…*`; Form nach #231) werden beim Zitieren nicht als Wortlaut ausgegeben; eine Durchstreichung wird als gestrichener Text benannt. - **Steht die Antwort nur in der Rohdatei**, nicht auf einer Seite, gilt das Qualitätsziel weiter: Die Seite ist unvollständig. Query beantwortet die Frage mit dem Zitat **und** benennt die Lücke, mit dem Angebot, sie über `wiki-manage` zu schließen. Sie schreibt nichts selbst (Hard rule „read-only“ bleibt). - **MCP-Leseserver bleibt ohne Rohzugriff.** Ein Leser über MCP bekommt den Wortlaut nur, wenn er auf einer Seite steht. Kommt dafür Bedarf auf, ist das ein eigenes Paket (Bezug: #218). - **Fundstelle in `cite add`** (z. B. `--at "S. 39"`): nicht Teil dieses Pakets. Der Weg über die Gliederung reicht für gegliederte Dokumente; erweist er sich beim ersten echten Regelwerk als zu grob, folgt ein eigenes Issue. **Abweichung beim Bau:** Der Entwurf stützte die Originalsprache des Zitats auf `kb/CONVENTIONS.md` § Language. Dieser Abschnitt sagt über Zitate nichts (er bindet Seitentext). `wiki-query` begründet es deshalb mit dem Gegenüber: Die Antwort folgt `AGENTS.md` § Conversation language, das Zitat wird nicht übersetzt. ## Geänderte Dateien - `kb/CONTRACT.md`: Qualitätsziel präzisiert – Substanz auf der Seite, Wortlaut darf geführt nachgelesen werden; eine Antwort nur in der Rohdatei zeigt weiter eine unvollständige Seite. - `instructions/wiki-query/SKILL.md`: neuer Schritt 4 (der feste Weg, Fall ohne Gliederung, Zitieren und Auszeichnungen); alte Schritte 4–7 → 5–8, Verweise in Hard rule und Decision points nachgezogen; zwei neue Decision points („Wortlaut gefragt?“, „Antwort nur in der Rohdatei?“); „wikitool commands used“ unverändert. - `docs/explanation/pipeline-rationale.md`: Absatz, warum das Qualitätsziel der Substanz gilt und das Nachlesen nur über den festen Weg geht. - `docs/how-to/query-the-wiki.md`: Abschnitt „Asking for the exact wording“; der MCP-Absatz nennt die eine Abweichung (Wortlaut nur, wo eine Seite ihn trägt). - Geprüft und unverändert: `AGENTS.md` (keine Regel schließt den Rohzugriff aus), `raw/CONTRACT.md` (keine widersprechende Aussage). ## Akzeptanzkriterien - [x] `kb/CONTRACT.md` erlaubt das geführte Nachlesen ausdrücklich und hält zugleich fest, dass eine Antwort, die nur in der Rohdatei steht, eine unvollständige Seite anzeigt. - [x] `wiki-query` beschreibt den Weg Seite → Source-Seite → `raw_files:` → Gliederung → Zeilenbereich, und verbietet ausdrücklich das Durchsuchen von `raw/`. - [x] Der Fall „keine Gliederung“ ist mit beiden Ausgängen beschrieben (unter/über der Längenschwelle aus #226, ohne den Wert zu wiederholen). - [x] Der Fall „Antwort nur in der Rohdatei“ endet mit Zitat **und** benannter Lücke, ohne Schreibzugriff. - [x] `wiki-query` sagt, wie Auszeichnungen aus `raw derive` beim Zitieren behandelt werden (nicht als Wortlaut, Durchstreichung benannt). - [x] `instructions verify`, `docs verify` grün (lokal vor dem Publish; CI-Läufe 733/734 grün). ## Versionsteil MINOR. Drop-in: `kb/CONTRACT.md` wird ausgeliefert und lockert eine Regel, ohne dass bestehender Inhalt sich ändern muss; kein Befehl, kein Feld, keine Migration. Der Kandidat stand bereits auf 10.1.0 (MINOR), daher nur 10.1.0-beta.10 → beta.11. ## Kette Kette „Große Dokumente“ - Vorgänger: #226 - Nachfolger: keiner - letztes Glied
torben added the prio/plannedsize/Sarea/kbkind/buildstatus/blocked labels 2026-10-13 20:59:04 +00:00
Author
Owner

Changelog: Blocker präzisiert: #225 ist geschlossen; status/blocked bleibt, jetzt wegen der Längenschwelle aus #226, die der Fall „ohne Gliederung“ braucht. Neu: ein Kriterium, wie Auszeichnungen aus raw derive (~~, **, *; Form nach #231) beim Zitieren behandelt werden. Eine Durchstreichung ist bei Regelwerken gestrichener Wortlaut und darf nicht als geltender Text zitiert werden.

**Changelog:** Blocker präzisiert: #225 ist geschlossen; `status/blocked` bleibt, jetzt wegen der Längenschwelle aus #226, die der Fall „ohne Gliederung“ braucht. Neu: ein Kriterium, wie Auszeichnungen aus `raw derive` (`~~`, `**`, `*`; Form nach #231) beim Zitieren behandelt werden. Eine Durchstreichung ist bei Regelwerken gestrichener Wortlaut und darf nicht als geltender Text zitiert werden.
torben removed the status/blocked label 2026-10-15 19:59:31 +00:00
Author
Owner

status/blocked abgenommen: #226 (letzter offener Blocker) ist geschlossen und ausgeliefert in 10.1.0-beta.10. Für den Fall „ohne Gliederung“: Die Längenschwelle ist die CHECK-Zeile von raw derive/raw fetch bzw. long: in raw pending; der Wert steht in raw derive -h (Konstante LONG_TEXT_CHARS in tools/chemenu/commands/raw/_common.py), gezählt in Zeichen der .md wie geschrieben – darauf verweisen, nicht den Wert wiederholen.

`status/blocked` abgenommen: #226 (letzter offener Blocker) ist geschlossen und ausgeliefert in 10.1.0-beta.10. Für den Fall „ohne Gliederung“: Die Längenschwelle ist die `CHECK`-Zeile von `raw derive`/`raw fetch` bzw. `long:` in `raw pending`; der Wert steht in `raw derive -h` (Konstante `LONG_TEXT_CHARS` in `tools/chemenu/commands/raw/_common.py`), gezählt in Zeichen der `.md` wie geschrieben – darauf verweisen, nicht den Wert wiederholen.
Author
Owner

Changelog: Gebaut und veröffentlicht in 10.1.0-beta.11 (ca12c54), CI-Läufe 733/734 grün. wiki-query hat einen neuen Schritt 4 (geführtes Nachlesen über Seite → Source-Seite → raw_files: → Gliederung → Zeilenbereich, nie Suche in raw/), zwei neue Decision points; kb/CONTRACT.md präzisiert das Qualitätsziel auf die Substanz. Doku: pipeline-rationale.md (Begründung), query-the-wiki.md (Abschnitt zum Wortlaut, MCP-Abweichung). Eine Abweichung vom Entwurf: Die Originalsprache des Zitats stützt sich nicht auf kb/CONVENTIONS.md § Language (sagt nichts über Zitate), sondern auf den Gegensatz zu AGENTS.md § Conversation language. Festgelegt beim Bau: die Regel für das Ende des Zeilenbereichs eines Gliederungseintrags.

**Changelog:** Gebaut und veröffentlicht in 10.1.0-beta.11 (`ca12c54`), CI-Läufe 733/734 grün. `wiki-query` hat einen neuen Schritt 4 (geführtes Nachlesen über Seite → Source-Seite → `raw_files:` → Gliederung → Zeilenbereich, nie Suche in `raw/`), zwei neue Decision points; `kb/CONTRACT.md` präzisiert das Qualitätsziel auf die Substanz. Doku: `pipeline-rationale.md` (Begründung), `query-the-wiki.md` (Abschnitt zum Wortlaut, MCP-Abweichung). Eine Abweichung vom Entwurf: Die Originalsprache des Zitats stützt sich nicht auf `kb/CONVENTIONS.md` § Language (sagt nichts über Zitate), sondern auf den Gegensatz zu `AGENTS.md` § Conversation language. Festgelegt beim Bau: die Regel für das Ende des Zeilenbereichs eines Gliederungseintrags.
Author
Owner

Changelog: Abgeschlossen. Body in den Endzustand gebracht: Ausgangslage in der Vergangenheit, Abschnitt „Ergebnis“ mit Version, Commit und den CI-Läufen. Bei der Abschlussprüfung widerspricht kein weiteres Dokument der Änderung (Contracts, COLLECTION.md, Ingest-Anweisungen, docs/); kein eigener Durchzug, kein weiterer Bump. Kette „Große Dokumente“ ist damit vollständig.

**Changelog:** Abgeschlossen. Body in den Endzustand gebracht: Ausgangslage in der Vergangenheit, Abschnitt „Ergebnis“ mit Version, Commit und den CI-Läufen. Bei der Abschlussprüfung widerspricht kein weiteres Dokument der Änderung (Contracts, `COLLECTION.md`, Ingest-Anweisungen, `docs/`); kein eigener Durchzug, kein weiterer Bump. Kette „Große Dokumente“ ist damit vollständig.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: torben/chemenu#227