Aus #231 als zweiter Schritt abgetrennt (Betreiber, 2026-10-14). #231 ist geschlossen (10.1.0-beta.5/-beta.6): Der Bildseiten-CHECK nennt bei IHF genau {1, 2, 6–8, 29, 48–55, 81, 96}, also lässt sich jetzt gezielt hinsehen.
Stand (2026-10-15): Fertig und geschlossen. Gebaut in 10.1.0-beta.7 (Commit 128c7f5, CI-Lauf 721, Converters 722, Lauf 723 grün). Die ersten Probeläufe bestätigten den Halt über der Schwelle, die Auswahl und die Herkunftsangabe, zeigten aber, dass die Sitzung Schritt 3 nicht befolgte (0 von 2 Läufen). Der Betreiber entschied am 2026-10-15 Option A: Entscheidung 2 bleibt, Schritt 3 wird verbindlich. Veröffentlicht als 10.1.0-beta.8 (be694e3), CI grün (Lauf 725 und 726). Die Wiederholung des IHF-Probelaufs auf beta.8 bestätigte Schritt 3 (Subagent liest, Sitzung nie), zeigte aber eine Rückfrage vor dem Lesen trotz „ohne Rückfrage“ in Schritt 2. Ursache war der bloße Hinweis in wiki-ingest Schritt 1 (siehe „Abweichung“), behoben in 10.1.0-beta.9, Commit 9cb981a, CI grün (Lauf 727 und 728). Die Wiederholung auf beta.9 hat den Nachweis erbracht: Die Probe öffnete read-page-images.md vor ihrer Rückfrageliste, die Liste enthielt keine Frage zu den Seitenbildern, ein Subagent las die 16 Seiten, die Sitzung nie (siehe „Ergebnis der Wiederholung auf beta.9“).
Problem
raw derive ist absichtlich modellfrei und deterministisch. Was nur im Bild steht, fehlt im Text: Abbildungen, Diagramme (auch reine Vektorgrafik ohne Bildobjekt), Handzeichen-Tafeln (IHF S. 48–55), gedrehte Tabellen (Girokonten S. 7–13). Vor beta.7 meldete ein CHECK das nur; die Ingest-Sitzung musste selbst entscheiden, ob und wie sie das Original ansieht – wiki-ingest Schritt 1 sagte dazu nur „its output names what to check“.
Was nicht in Frage kommt
Ein multimodales Modell für jedes PDF und jede Seite: mehrere tausend Tokens je Seite, nicht reproduzierbar, und Bildeingabe ist je Harness verschieden. raw derive bleibt modellfrei. Was das Modell sieht, kommt nie nach raw/ und nie in derived.md (das nie von Hand bearbeitet wird, raw/CONTRACT.md).
Ausgangslage (10.1.0-beta.6)
Signale, die es gab: zwei, beide je Seite, ohne Koordinaten.
Bildseiten-CHECK: pdf_layout.image_pages() – Seite mit inhaltlichem Bildobjekt (_content_image) oder Vektor-Cluster (_drawing).
Zuordnungs-WARN: pdf_layout.annotate() meldet Seiten, deren Text zu < MIN_COVERAGE zum Layout passt.
Signale, die es nicht gibt: gedrehte Seiten, gescheiterte Tabellen, „blinde Fläche“. Logo/Hintergrund filtert Regel 6 schon heraus.
Der CHECK war flüchtig: nur auf stdout von raw derive, nicht im Header von derived.md. Nichts im Stack liest diesen Header maschinell.
Kein Renderer installiert:tools/requirements.txt hat pypdf und pdfminer.six; keins von beiden rendert.
Harness: Claude Code liest PDF-Seiten selbst als Bild (Read mit Seitenbereich, höchstens 20 Seiten je Aufruf). Codex CLI, Copilot CLI und Mistral Vibe sind nicht geprüft.
Herkunft:cite add --file <qualifier> unterscheidet schon die Dateien eines Mehrdatei-Source (original.pdf gegen derived.md).
Auswahl am Korpus (CHECK-Seiten je Datei): Azure 294 von 701, ecoDMS 221/296, Deck 42/57, Concurrency 36/205, Guide 25/90, IHF 16/96, Factsheet 8/8, Bilderservice 4/4, Girokonten 4/17 (S. 1–3, 6, nicht die gedrehten Tabellen 7–13), BHV III 3, NIST RMF 3, NIST SSDF 3, BHV I 1, BHV II 1, AGB/Einstein/IFG 0. Summe 661 Seiten, davon 515 in den beiden Handbüchern.
Entscheidungen (Betreiber, 2026-10-14/15)
Bildquelle: der Harness liest die Seiten von original.pdf selbst (Option a). Keine neue Abhängigkeit, nur ganze Seiten. Ein Renderer (pypdfium2, optional, PNGs an einen gitignorierten Ort, nie neben derived.md) ist ein eigenes Paket, das erst bei einem dieser Auslöser kommt: ein zweiter Harness braucht es, oder ganze Seiten erweisen sich am Korpus als zu teuer. „Ausschnitt statt ganzer Seite“ entfällt damit vorerst.
Modell: ein Subagent, wo der Harness einen hat; sonst liest die Sitzung selbst. Der Hauptgrund ist, dass die Seitenbilder nicht den Kontext der Ingest-Sitzung füllen. Kein Modell wird festgeschrieben. Bestätigt nach den Probeläufen (Betreiber, 2026-10-15, Option A): Hat der Harness Subagenten, öffnet die Sitzung die Seitenbilder gar nicht selbst, auch nicht zur Kontrolle; sie schreibt aus dem Bericht des Subagenten. Verworfen wurde Option B, bei der die Sitzung selbst liest: Der gemessene Kontextzuwachs (ca. 22.400 Token für 16 Seiten, bis ca. 68.800 für 8 Seiten) käme zu einem Kontext hinzu, der vor dem ersten Bild schon ca. 166.000 Token hatte.
Kein Platzhalter im Text von derived.md. Die Seitenmarke <!-- page N --> ist der Anker. Die Auswahl kommt als Header-Felder in derived.md.
Herkunft: Auf der Source-Seite steht ein eigener Abschnitt für das am Seitenbild Gelesene (Überschrift in der KB-Sprache). Je Eintrag kommen die Seitenzahl und der Vermerk dazu, dass es am Seitenbild gelesen wurde; hat ein Subagent gelesen, wird er als Mittler genannt. Die Regel steht in types/source.guidance.md, nicht im instanz-eigenen Template. Andere Seiten zitieren eine daraus gewonnene Aussage mit cite add --file original.pdf, Text aus der Ableitung mit --file derived.md. Gehedgt wird nach kb/CONVENTIONS.md § Hedging.
Auswahl der Seiten: die Seiten aus Bildseiten-CHECK und Zuordnungs-WARN, ohne Punktwert. Ein Drehungs-Signal kommt erst, wenn die Messung zeigt, dass gedrehte Tabellen am Seitenbild gelesen werden müssen.
Menge: Schwelle 20 Seiten je Source (Option ii, Betreiber 2026-10-15).
Bis 20 ausgewählte Seiten liest die Sitzung alle, ohne den Nutzer zu fragen.
Bei mehr liest sie zunächst keine Seite. Sie hält an und nennt dem Nutzer die Zahl der Seiten und eine Token-Schätzung. Der Nutzer wählt: alle, keine oder eine Auswahl. Die Auswahl schlägt die Sitzung anhand von Überschrift und Bildunterschrift neben den Seiten vor.
Bei einem großen Baum (ingest-large-tree.md) gilt die Schwelle je Einheit.
Nicht gelesene Seiten stehen mit Grund im Abschnitt „Nicht übernommen“ der Source-Seite.
Die Schwelle steht als Zahl in der Anweisung, nicht als Einstellung.
Abschluss erst nach den Probeläufen in einer frischen Sitzung (Option A, Betreiber 2026-10-15). Galt auch für die Wiederholungen nach beta.8 und beta.9; erfüllt, siehe „Stand“.
filters/pdf_layout.py:Annotation trägt zusätzlich unmatched_pages, die Seiten der Zuordnungs-WARN (vorher nur als Warnzeile).
filters/pdf.py: zwei neue Header-Felder, nur wenn nicht leer, im Format von page_ranges(): images (Seiten des Bildseiten-CHECK) und unmatched (Seiten der Zuordnungs-WARN). Reihenfolge markings, images, unmatched. CHECK- und WARN-Zeilen auf stdout unverändert, der Text von derived.md gleich dem von beta.6.
commands/raw/derive.py: Hilfetext nennt beide Felder; tools/CONTRACT.md und docs/reference/commands/raw-material-and-uploads.md neu erzeugt.
raw/CONTRACT.md: der Absatz zum CHECK nennt die Felder und verlinkt die neue Anweisung.
Neue Anweisung instructions/read-page-images.md: Auswahl, Schwelle und Halt, Lesen von original.pdf (Subagent wo vorhanden), Eintrag auf der Source-Seite, nicht gelesene Seiten mit Grund, Harness ohne Bildeingabe. Verlinkt aus wiki-ingest Schritt 1 (und Schritt 6 für „Nicht übernommen“) und ingest-large-tree.md Schritt 5a.
types/source.guidance.md: Abschnitt „Page images“ mit der Herkunftsregel.
docs/how-to/ingest-a-source.md: Aufzählung zum CHECK erweitert, neuer Punkt „Before looking at page images“.
Tests (test_raw_derive_binary.py): images genau mit den CHECK-Seiten, kein images und kein unmatched ohne Bildseite oder ohne unpassende Seite, unmatched bei erzwungener Zuordnungs-WARN.
10.1.0-beta.8 (be694e3), nach Entscheidung 2 / Option A:
instructions/read-page-images.md Schritt 3: Hat der Harness Subagenten, liest einer die Seiten. Die Sitzung öffnet sie gar nicht, weder vorher noch daneben noch danach zur Kontrolle, und schreibt Schritt 4 aus seinem Bericht.
Neuer Entscheidungspunkt „Tempted to look at a page yourself“: Den Subagenten mit der konkreten Frage erneut losschicken oder die Aussage als unsicher schreiben; selbst zu lesen ist nur für einen Harness ohne Subagenten vorgesehen.
Nicht geändert, weil es weiter stimmt:types/source.guidance.md § Page images („Where a subagent did the reading“) und docs/how-to/ingest-a-source.md („through a subagent where the harness has one“). Keine Code- und keine Teständerung.
10.1.0-beta.9 (9cb981a), gegen die Rückfrage vor dem Lesen:
instructions/wiki-ingest/SKILL.md Schritt 1: Der Verweis auf read-page-images.md war nur ein Hinweis („decides which of them are looked at, and how“). Jetzt: Die Anweisung wird an dieser Stelle geöffnet und befolgt, vor Schritt 4; bis zur Schwelle werden die Seiten ohne Rückfrage gelesen, sie sind also keine Frage für Schritt 4.
instructions/read-page-images.md, neuer Entscheidungspunkt: Wer den Nutzer fragen will, ob die Seiten angesehen werden (etwa in der Besprechung der Kernpunkte), tut es bei 20 oder weniger Seiten nicht, sondern führt die Schritte 3 bis 5 aus und legt das Gelesene mit dem Rest vor.
Nicht geändert, weil es weiter stimmt:ingest-large-tree.md Schritt 5a (verweist schon verbindlich: „is followed by“), docs/how-to/ingest-a-source.md („reads up to 20 such pages on its own“), types/source.guidance.md, raw/CONTRACT.md. Keine Code- und keine Teständerung; pytest 3074 bestanden, 4 übersprungen, docs verify und instructions verify grün.
Probeläufe (Vorgehen)
Zwei Rollen: eine Probe-Sitzung, die nur die Wegwerf-Instanz sieht (ihr Arbeitsverzeichnis ist die Instanz, nicht dieses Repo, und sie bekommt diesen Body nicht), und der Betreiber (oder eine Beobachter-Sitzung hier im Repo), der beobachtet und misst.
Instanz bauen (dev-setup.md Schritt 5), außerhalb dieses Checkouts: tools/wikitool dist export <leerer Scratch-Ordner>, dann dort tools/preflight.sh und instructions/setup-instance.md wie eine Nutzerin. KB-Sprache de, damit der Abschnitt „Am Seitenbild gelesen“ geprüft wird.
IHF:testfiles/corpus/pdf/ihf-regeln-2025.pdf nach incoming/ der Instanz kopieren, in der Probe-Sitzung nur „Ingest“ sagen. Beobachten: Liest sie ohne Rückfrage, und nur Seiten aus images: (erwartet 1, 2, 6–8, 29, 48–55, 81, 96)? Liest ein Subagent? Danach die Source-Seite: Handzeichen-Tafeln S. 48–55 mit Seitenzahl, Vermerk, Mittler; jede Tafel gegen das Original prüfen.
Guide:testfiles/corpus/pdf/d365-licensing-guide-2026-09.pdf ebenso. Beobachten: Hält sie vor dem ersten Seitenbild an, nennt sie 25 Seiten und eine Token-Schätzung, schlägt sie eine Auswahl vor? Dann eine Auswahl wählen und prüfen, dass die übrigen Seiten mit Grund unter „Nicht übernommen“ stehen.
Messen je Lauf: Seiten gelesen, Tokens laut Harness (Claude Code: /cost vor und nach dem Lesen bzw. die Token-Zahl des Subagenten), Zahl der Einträge im Abschnitt „Am Seitenbild gelesen“. Nur Zahlen in diesen Body, keine Inhalte aus dem Korpus (privat).
Nichts publizieren: Die Instanz hat kein erlaubtes Push-Ziel; danach wegwerfen.
Wiederholung (nach beta.8, ebenso nach beta.9): nur Schritt 1 und 2 (IHF); der Guide-Lauf wird nicht wiederholt, weil Schritt 2 der Anweisung nur ergänzt wurde. Kopflos (claude -p) gehören TaskundAgent in die Allowlist, dazu nur einfache tools/wikitool-Aufrufe (eine Variablenzuweisung davor oder ein verketteter Aufruf passt nicht zur Regel Bash(tools/wikitool:*) und hält die Probe an). Zusätzlich messen: die Token des Subagenten getrennt von denen der Sitzung und den Kontextzuwachs der Sitzung beim Lesen. Die Tafeln S. 48–55 werden gegen den Bericht des Subagenten, wie er auf der Source-Seite steht, am Original geprüft. Für beta.9 zu beobachten: Hat die Probe read-page-images.md geöffnet, bevor sie dem Nutzer die Kernpunkte vorlegt, und enthält ihre Rückfrageliste keine Frage zu den Seitenbildern?
Weicht das Verhalten ab (liest über der Schwelle, übersieht images:, falsche Herkunft, Rückfrage unter der Schwelle), ist das ein Fehler in read-page-images.md oder der Verlinkung und geht als Bau-Arbeit zurück an /stack-build #234.
Beobachterhinweis (kopflos): Der Lauf auf beta.9 zeigte, dass die Ausgabe einer Fortsetzung mit --resume nicht in der Datei landet, wenn sie im Terminal ohne Umleitung lief; maßgeblich ist das Protokoll der Sitzung unter ~/.claude/projects/<Pfad der Instanz>/<session_id>.jsonl (Hauptsitzung) und …/<session_id>/subagents/ (Subagent). Daraus lassen sich Werkzeugaufrufe, Zeitstempel und Token je Aufruf lesen.
Ergebnis der Probeläufe (2026-10-15, Stand beta.7; letzte Spalte beta.8)
Durchgeführt als kopflose Claude-Code-Sitzungen (claude -p, --permission-mode acceptEdits, Allowlist Bash(tools/wikitool:*), Read, Write, Edit, Glob, Grep, Agent; beim beta.8-Lauf zusätzlich Task), je Datei ein eigener Prozess, Auftrag nur „Ingest incoming/“. Den Proben wurde nichts zu Seitenbildern, images:, Schwellen oder diesem Issue gesagt. Rückfragen der Proben beantwortete der Beobachter kurz und neutral (Fidelity/Authority, Kernpunkte „passt so“; beim Guide die Auswahl auf höchstens 8 Seiten begrenzt). Instanz frisch aus dist export, Preflight Exit 0, doctor ohne Befund, KB-Sprache de, kein Push-Ziel; nichts publiziert, in diesem Repo nichts geändert.
Messwert
IHF (beta.7)
Guide (beta.7)
IHF beta.8
Seiten insgesamt / in images:
96 / 16
90 / 25
96 / 16
Halt vor dem ersten Seitenbild
nein, Schwelle nicht überschritten
ja, vor jedem Lesen von original.pdf
nein, Schwelle nicht überschritten
Rückfrage zu den Bildern vor dem Lesen
nein
– (Halt über der Schwelle, wie vorgesehen)
ja (Frage 5 der Rückfrageliste; die Probe hatte read-page-images.md noch nicht geöffnet)
Genannte Zahl und Token-Schätzung
–
25 Seiten, ca. 50.000 Token
–
Eigener Auswahlvorschlag vor dem Lesen
–
ja, 11 Seiten
–
Gelesene Seiten
16 (genau die aus images:)
8 (vom Beobachter auf höchstens 8 begrenzt)
16 (genau die aus images:, in 6 Read-Aufrufen des Subagenten)
Gelesene Seiten nicht in images:
0
0
0
Lesen durch
die Sitzung selbst
die Sitzung selbst
ein Subagent (1 Agent-Aufruf, Typ general-purpose); Sitzung: 0 Read-Aufrufe auf original.pdf
Subagent benutzt
nein (0 Task-/Agent-Aufrufe)
nein (0 Task-/Agent-Aufrufe)
ja (1 Agent-Aufruf, ohne Rückfrage des Subagenten)
7 (S. 6 dreimal, 12, 24, 46, 52); S. 5 und 27 ohne Mehrwert gegenüber derived.md, deshalb unter „Nicht übernommen“ vermerkt
7 (fassen 15 der 16 Seiten; S. 2 ohne eigenen Eintrag, unter „Nicht übernommen“ als gelesen vermerkt); Abschnittskopf nennt „einem Subagenten“ als Mittler; Unsicherheiten vermerkt
Nicht gelesene Seiten mit Grund unter „Nicht übernommen“
–
17 von 17
–
Kontextzuwachs durch die Seitenbilder (grob)
ca. 22.400 Token für 16 Seiten (ca. 1.400 je Seite)
ca. 36.100 Token für den 5-Seiten-Aufruf; der 3-Seiten-Aufruf davor +32.700, nicht sauber getrennt, daher Obergrenze ca. 68.800 für 8 Seiten
ca. 2.400 Token für den Bericht des Subagenten (7.353 Zeichen); Kontext der Sitzung 63.528 → 71.075 (+7.547) über den Schritt hinweg, darin eine weitere Werkzeugausgabe von 8.053 Zeichen, also Obergrenze ca. 7.500
Lesen und Schreiben (Fortsetzung 4 von 4): 28 / 143.449 / 2.046.148 / 15.126; Kontext der Sitzung am Ende 200.168
Kosten laut Harness
0,95 USD (Halt-Lauf), 1,70 USD (Fortsetzung)
0,34 USD (Halt-Lauf), 1,65 USD (Fortsetzung)
2,07 USD über alle vier Aufrufe (0,18 + 0,20 + 0,29 + 1,41); ob der Subagent darin steckt, ist nicht geprüft
IHF, Handzeichen-Tafeln S. 48–55 (beta.7): alle 8 Seiten vom Beobachter am Original gelesen und mit der Source-Seite verglichen; alle 17 beschriebenen Zeichen stimmen (Nummer und Bezeichnung). Keine Abweichung.
Guide, Selbstwiderspruch der Quelle: Die Probe hat Widersprüche der Quelle selbst auf der Source-Seite vermerkt, statt derived.md zu korrigieren (vgl. „Decision points“ der Anweisung).
Kein Allowlist-Eingriff nötig (beta.7): Zwei zusammengesetzte Bash-Aufrufe der Proben wurden abgelehnt, die Proben wiederholten sie als einfache tools/wikitool-Aufrufe.
Die Token-Zahlen sind grob: Die Kontextzuwächse enthalten auch die Ausgabe der Sitzung zwischen den Aufrufen; die Schätzung der Anweisung (ca. 2.000 je Seite) liegt beim IHF darunter (ca. 1.400), beim Guide darüber (ca. 7.000 je Seite am 5-Seiten-Aufruf). Beim Subagenten sind es insgesamt ca. 3.600 je Seite (57.403 / 16), im Kontext der Sitzung aber nur der Bericht.
Ergebnis der Wiederholung auf beta.8 (2026-10-15, IHF)
Instanz frisch aus dist export des Standes 10.1.0-beta.8 (VERSION, .wikitool-release.json), Preflight Exit 0, doctor ohne Befund, KB-Sprache de, Telemetrie aus, kein Push-Ziel, außerhalb dieses Checkouts. Nur ihf-regeln-2025.pdf in incoming/. Probe als kopfloser Prozess (claude -p, Modell der Sitzung claude-sonnet-5-5) mit Allowlist Bash(tools/wikitool:*), Read, Write, Edit, Glob, Grep, Task, Agent. Auftrag nur „Ingest incoming/ihf-regeln-2025.pdf“; der Probe wurde nichts zu Seitenbildern, images:, Schwellen, Subagenten oder diesem Issue gesagt. Die Sitzung lief über vier claude -p-Aufrufe (ein Start, drei Fortsetzungen mit --resume).
Subagent liest, Sitzung nicht: 1 Agent-Aufruf mit der Seitenliste 1-2, 6-8, 29, 48-55, 81, 96 (16 Seiten); der Subagent las in 6 Read-Aufrufen (1-2, 6-8, 29, 48-55, 81, 96) genau diese Seiten, ohne Rückfrage. Read-Aufrufe der Sitzung auf original.pdf: 0 (Soll erfüllt). Der Auftrag an den Subagenten nannte Pfad, Seitenliste und Frage, verbot Dateien und wikitool-Aufrufe und nannte kein Modell, wie Schritt 3 es verlangt.
Herkunft: Der Abschnitt „Am Seitenbild gelesen“ hat 7 Einträge mit Seitenzahlen und nennt im Kopf den Subagenten als Mittler („von einem Subagenten gelesen“, „Lesungen, keine Zitate“); unsichere Stellen sind als solche vermerkt. Der Abschnitt „Nicht übernommen“ führt die Seitenbilder als gelesen.
Handzeichen-Tafeln S. 48–55: 8 Seiten (zusammen mit der Liste auf S. 47) vom Beobachter am Original gelesen und mit dem Bericht des Subagenten und der Source-Seite verglichen. Alle 17 Zeichen stimmen (Nummer, Bezeichnung und Haltungsbeschreibung); die Reihenfolge der Liste und die Seitenzuordnung stimmen. 1 Detail (Fingerzahl bei Zeichen 16) ist im Bericht mit „zwei“ bevorzugt, am Original aber nicht eindeutig; die Source-Seite führt es als unsicher, enthält also keine falsche Aussage. Bei Zeichen 13 vermerkt sie die Kartenfarben als unsicher, was am Original zutrifft.
Allowlist:Agent wurde unter diesem Namen aufgerufen, die Werkzeugliste der Sitzung führte Task; es gab keine Ablehnung des Subagenten-Aufrufs. Weil beide in der Allowlist standen, ist nicht getrennt, welcher der beiden die Freigabe trug (ungeprüft).
Zwei Fortsetzungen wegen einer Berechtigung, nicht wegen Seitenbildern: Die Probe setzte eine Variablenzuweisung vor tools/wikitool sync (WIKITOOL_SESSION_ID=… tools/wikitool sync) und blieb nach zwei Ablehnungen stehen. Eine zusätzliche Regel Bash(WIKITOOL_SESSION_ID=* tools/wikitool:*) griff nicht; erst der Hinweis „nur einfache Aufrufe“ half. doctor meldet die Session-ID über CLAUDE_CODE_SESSION_ID ohnehin als gesetzt, die Zuweisung war nicht nötig.
Ende der Probe: Die Probe endete am Mass-Update-Gate (Exit 42 bei ihrem ersten publish --no-push, 309 gezählte Dateien, weil die frische Instanz noch keinen Commit hat). Das Gate wurde nicht geöffnet, nichts publiziert, in diesem Repo nichts geändert.
Abweichung von instructions/read-page-images.md (beta.8), Ursache gefunden und behoben: Schritt 2 sagt bei 20 oder weniger Seiten „read all of them, without asking“. Die Probe legte in Schritt 4 trotzdem eine Frage (Nr. 5 der Rückfrageliste) an den Nutzer vor, ob sie die Abbildungen „nach read-page-images.md nur gezielt ansehen“ oder unter „Nicht übernommen“ führen soll; erst nach der neutralen Antwort las der Subagent. Aus dem Log: Die Probe hatte read-page-images.md bis zu dieser Frage nicht geöffnet (geöffnet hatte sie session-setup.md und ingest-large-tree.md). Sie kannte nur den Verweis in wiki-ingest Schritt 1, dessen Wortlaut („decides which of them are looked at, and how“) die Entscheidung beim Nutzer vermuten ließ. wiki-ingest Schritt 4 selbst enthält nichts, was die Bilder zum Gesprächspunkt macht. Der Fehler lag also im Verweis, nicht in der Anweisung; behoben in beta.9 (siehe „Umsetzung“), und die Wiederholung auf beta.9 hat gezeigt, dass die Behebung trägt (siehe unten).
Ergebnis der Wiederholung auf beta.9 (2026-10-15, IHF)
Instanz frisch aus dist export des Standes 10.1.0-beta.9 (VERSION 10.1.0-beta.9), Preflight Exit 0, doctor ohne FAIL, KB-Sprache de (das gefüllte kb/CONVENTIONS.md dieses Repos übernommen), Personalisierung gestubbt wie in CI, Telemetrie aus, kein Push-Ziel, Basis-Commit, außerhalb dieses Checkouts. Nur ihf-regeln-2025.pdf in incoming/. Probe als kopfloser Prozess (claude -p, claude-sonnet-5-5) mit Allowlist Bash(tools/wikitool:*), Read, Write, Edit, Glob, Grep, Task, Agent. Auftrag nur „Ingest incoming/ihf-regeln-2025.pdf“; der Probe wurde nichts zu Seitenbildern, images:, Schwellen, Subagenten oder diesem Issue gesagt. Der Start und eine Fortsetzung mit --resume trugen die Auswertung; eine zweite, gleichlautende Fortsetzung (versehentlich doppelt gestartet) beantwortete nur die offenen Rückfragen noch einmal.
Messwert
IHF beta.9
Seiten insgesamt / in images:
96 / 16 (images: 1-2, 6-8, 29, 48-55, 81, 96)
Halt vor dem ersten Seitenbild
nein, Schwelle nicht überschritten
read-page-images.md geöffnet
ja, direkt nach raw derive und vor der Volllektüre von derived.md, also vor der Rückfrageliste
Frage zu den Seitenbildern in der Rückfrageliste
nein; die drei Fragen betrafen die Seitenauswahl für Wiki-Seiten, die Verpflichtung und --fidelity/--authority
Gelesene Seiten / davon nicht in images:
16 (genau die aus images:, in 6 Read-Aufrufen des Subagenten) / 0
Lesen durch
ein Subagent (1 Agent-Aufruf, general-purpose, ohne Modellnennung); Auftrag mit Pfad, Seitenliste, Frage, Verbot von Dateien und wikitool; Sitzung: 0 Read-Aufrufe auf original.pdf
5.906 Zeichen; Kontext der Sitzung 188.938 → 194.901 (+5.963) beim Eintreffen, darin die Benachrichtigung und eine Antwort der Sitzung
Kontext der Sitzung vor dem Agent-Aufruf
65.143 Token (beta.8: 63.528)
Handzeichen-Tafeln S. 48–55: alle 8 Seiten vom Beobachter am Original gelesen und mit dem Bericht des Subagenten verglichen: 17 von 17 stimmen in Nummer und Bezeichnung, die Haltungsbeschreibungen stimmen, die Seitenzuordnung (gedruckte Nummer = PDF-Seite − 1) stimmt. Zeichen 16 (Fingerzahl) ist im Bericht als nicht eindeutig lesbar vermerkt, Zeichen 13 (Kartenfarben) als nur teilweise erkennbar; beides trifft am Original zu.
Nicht geprüft in diesem Lauf: die Source-Seite. Die Probe hielt in Schritt 4 an den Rückfragen an, geschrieben, promotet oder veröffentlicht wurde nichts. Die Herkunftsregel (Abschnitt „Am Seitenbild gelesen“ mit Mittler) ist unverändert gegenüber beta.8 und dort geprüft.
Beobachtung, kein verfehltes Kriterium: Der Subagent lief im Hintergrund (asynchroner Agent-Aufruf im kopflosen Betrieb). Die Probe legte die Besprechung der Kernpunkte deshalb vor dem Bericht vor („Sein Bericht liegt mir noch nicht vor“) und trug den Bericht in einer zweiten Nachricht nach, als die Benachrichtigung eintraf. Der Entscheidungspunkt der Anweisung („legt das Gelesene mit dem Rest vor“) war damit in zwei Nachrichten erfüllt, nicht in einer. Ob das im interaktiven Betrieb ebenso auftritt, ist nicht geprüft; die Anweisung bleibt unverändert, bis ein Lauf es als Störung zeigt.
Kleine Unstimmigkeit der Probe, ohne Folge: Ihre Besprechung nennt die Handzeichen einmal „S. 47–54“ (gedruckte Nummern), sonst durchgehend den PDF-Index (48–55) wie der Subagent und images:.
Allowlist: wie bei beta.8 hielt die Probe an WIKITOOL_SESSION_ID=… tools/wikitool sync (zweimal abgelehnt); der Hinweis „nur einfache Aufrufe“ genügte. Eine Fortsetzung mehr, kein Mangel der Anweisung.
Ende der Probe: Rückfragen an den Nutzer (Seitenauswahl, Verpflichtung, Capture-Felder), nichts geschrieben oder publiziert; Wegwerf-Instanz entsorgt, in diesem Repo nichts geändert.
Akzeptanzkriterien
derived.md eines PDFs mit Bildseiten trägt images: mit genau den Seiten, die der CHECK nennt; eines ohne hat das Feld nicht. Gleiches gilt für unmatched: und die Zuordnungs-WARN (durch Tests belegt). Ohne die beiden Felder ist der Text unverändert gegenüber beta.6 (der Text-Pfad ist nicht angefasst; der Lauf Converters auf dem Commit, 722, ist grün).
Die Regel zum Lesen der Seitenbilder steht an genau einer Stelle (instructions/read-page-images.md); wiki-ingest und ingest-large-tree.md verlinken sie.
Probelauf IHF (16 Seiten, unter der Schwelle), Stand beta.7:
Die Sitzung liest ohne Rückfrage höchstens die Seiten aus images: (16 von 16, keine weitere).
Ihre Source-Seite beschreibt die Handzeichen-Tafeln S. 48–55 mit Seitenangabe und gekennzeichneter Herkunft.
Am Original geprüft stimmt jede beschriebene Tafel (alle 17 Zeichen).
Probelauf Guide (25 Seiten, über der Schwelle), Stand beta.7:
Die Sitzung liest keine Seite, bevor der Nutzer gewählt hat.
Sie nennt die Zahl 25 und eine Token-Schätzung und schlägt eine Auswahl vor.
Nach der Wahl stehen die übrigen Seiten mit Grund unter „Nicht übernommen“ (17 von 17).
Gemessen und nur als Zahlen im Body festgehalten, je Probelauf: Seiten gelesen, Tokens laut Harness, Zahl der aus dem Bild gewonnenen Aussagen (siehe Tabelle; Token-Anteil der Bilder nur grob trennbar).
read-page-images.md Schritt 3 verbietet der Sitzung, die Seitenbilder selbst zu öffnen, wenn der Harness Subagenten hat, und ein Entscheidungspunkt deckt den Versuch ab, „nur zur Kontrolle“ nachzusehen (beta.8, be694e3).
Wiederholter IHF-Probelauf auf beta.8 (frische Beobachter-Sitzung, Task und Agent in der Allowlist): Ein Subagent liest die Seiten (16 von 16, genau die aus images:), die Sitzung ruft Read auf original.pdf nicht selbst auf (0 Aufrufe), die Source-Seite nennt den Subagenten als Mittler, und jede beschriebene Tafel S. 48–55 stimmt am Original (17 von 17). Gemessen: Subagent 57.403 Token, Kontextzuwachs der Sitzung durch den Bericht ca. 2.400 (Obergrenze ca. 7.500) gegenüber ca. 22.400 beim ersten Lauf.
wiki-ingest Schritt 1 verlangt, read-page-images.md vor Schritt 4 zu öffnen und zu befolgen, und sagt, dass bis zur Schwelle keine Rückfrage zu den Seiten nötig ist; ein Entscheidungspunkt in read-page-images.md deckt die Rückfrage in der Besprechung ab (beta.9, 9cb981a).
Wiederholter IHF-Probelauf auf beta.9 (frische Beobachter-Sitzung, Vorgehen unter „Wiederholung“): Die Probe öffnete read-page-images.md vor der Rückfrageliste, ihre Rückfrageliste enthält keine Frage zu den Seitenbildern, ein Subagent las die 16 Seiten (genau die aus images:, 6 Read-Aufrufe, 53.945 Token), die Sitzung rief Read auf original.pdf nie selbst auf (0 Aufrufe), und 17 von 17 Handzeichen S. 48–55 stimmen am Original. Das Kriterium „liest bei 20 oder weniger Seiten ohne Rückfrage“ ist damit erfüllt.
CI auf dem veröffentlichten Commit von beta.7 grün: Lauf 721 (verify und pwsh), dazu Converters (Lauf 722) und Lauf 723, alle success.
CI auf be694e3 (beta.8) grün: Lauf 725 (verify und pwsh) und Lauf 726, beide success.
CI auf 9cb981a (beta.9) grün: Lauf 727 und Lauf 728, beide success. Converters startete nicht: Die Änderung berührt die Konverter-Fläche nicht.
Wo die Probeläufe stattfinden: in einer Wegwerf-Instanz außerhalb dieses Repos (dist export in den Scratch-Bereich, dev-setup.md Schritt 5). Nie in diesem kb/: Das Korpus ist privat und wird nicht ins Repo kopiert (dev-setup.md Schritt 6), und kb/ ist keine Spielfläche für Experimente (corpus-policy.md).
Versionsteil
Fällt in den laufenden Kandidaten 10.1.0 (Stufe MINOR). Neue Header-Felder, eine neue Anweisung und Guidance sind eine neue Fähigkeit und in beide Richtungen Drop-in: Bestehende Ableitungen bleiben gültig, und keine alte Version liest den Header. Daher --minor, nur der Kandidatenzähler: 10.1.0-beta.7. Die Folgeänderungen (Schritt 3 verbindlich; Verweis in wiki-ingest Schritt 1 geschärft) sind Anweisungsänderungen und ebenfalls Drop-in: --patch mit --impact low, nur der Kandidatenzähler, 10.1.0-beta.8 und 10.1.0-beta.9. Der Abschluss bringt keine Änderung im Baum und damit keinen weiteren Bump.
Aus #231 als zweiter Schritt abgetrennt (Betreiber, 2026-10-14). #231 ist geschlossen (10.1.0-beta.5/-beta.6): Der Bildseiten-CHECK nennt bei IHF genau {1, 2, 6–8, 29, 48–55, 81, 96}, also lässt sich jetzt gezielt hinsehen.
**Stand (2026-10-15):** Fertig und geschlossen. Gebaut in 10.1.0-beta.7 (Commit 128c7f5, CI-Lauf 721, `Converters` 722, Lauf 723 grün). Die ersten Probeläufe bestätigten den Halt über der Schwelle, die Auswahl und die Herkunftsangabe, zeigten aber, dass die Sitzung Schritt 3 nicht befolgte (0 von 2 Läufen). Der Betreiber entschied am 2026-10-15 Option A: Entscheidung 2 bleibt, Schritt 3 wird verbindlich. Veröffentlicht als 10.1.0-beta.8 (be694e3), CI grün (Lauf 725 und 726). Die Wiederholung des IHF-Probelaufs auf beta.8 bestätigte Schritt 3 (Subagent liest, Sitzung nie), zeigte aber eine Rückfrage vor dem Lesen trotz „ohne Rückfrage“ in Schritt 2. Ursache war der bloße Hinweis in `wiki-ingest` Schritt 1 (siehe „Abweichung“), behoben in **10.1.0-beta.9, Commit 9cb981a**, CI grün (Lauf 727 und 728). Die Wiederholung auf beta.9 hat den Nachweis erbracht: Die Probe öffnete `read-page-images.md` vor ihrer Rückfrageliste, die Liste enthielt keine Frage zu den Seitenbildern, ein Subagent las die 16 Seiten, die Sitzung nie (siehe „Ergebnis der Wiederholung auf beta.9“).
## Problem
`raw derive` ist absichtlich modellfrei und deterministisch. Was nur im Bild steht, fehlt im Text: Abbildungen, Diagramme (auch reine Vektorgrafik ohne Bildobjekt), Handzeichen-Tafeln (IHF S. 48–55), gedrehte Tabellen (Girokonten S. 7–13). Vor beta.7 meldete ein CHECK das nur; die Ingest-Sitzung musste selbst entscheiden, ob und wie sie das Original ansieht – `wiki-ingest` Schritt 1 sagte dazu nur „its output names what to check“.
## Was nicht in Frage kommt
Ein multimodales Modell für **jedes** PDF und jede Seite: mehrere tausend Tokens je Seite, nicht reproduzierbar, und Bildeingabe ist je Harness verschieden. `raw derive` bleibt modellfrei. Was das Modell sieht, kommt nie nach `raw/` und nie in `derived.md` (das nie von Hand bearbeitet wird, `raw/CONTRACT.md`).
## Ausgangslage (10.1.0-beta.6)
- **Signale, die es gab:** zwei, beide je Seite, ohne Koordinaten.
- Bildseiten-CHECK: `pdf_layout.image_pages()` – Seite mit inhaltlichem Bildobjekt (`_content_image`) oder Vektor-Cluster (`_drawing`).
- Zuordnungs-WARN: `pdf_layout.annotate()` meldet Seiten, deren Text zu \< `MIN_COVERAGE` zum Layout passt.
- **Signale, die es nicht gibt:** gedrehte Seiten, gescheiterte Tabellen, „blinde Fläche“. Logo/Hintergrund filtert Regel 6 schon heraus.
- **Der CHECK war flüchtig:** nur auf stdout von `raw derive`, nicht im Header von `derived.md`. Nichts im Stack liest diesen Header maschinell.
- **Kein Renderer installiert:** `tools/requirements.txt` hat `pypdf` und `pdfminer.six`; keins von beiden rendert.
- **Harness:** Claude Code liest PDF-Seiten selbst als Bild (Read mit Seitenbereich, höchstens 20 Seiten je Aufruf). Codex CLI, Copilot CLI und Mistral Vibe sind nicht geprüft.
- **Herkunft:** `cite add --file <qualifier>` unterscheidet schon die Dateien eines Mehrdatei-Source (`original.pdf` gegen `derived.md`).
- **Auswahl am Korpus** (CHECK-Seiten je Datei): Azure 294 von 701, ecoDMS 221/296, Deck 42/57, Concurrency 36/205, Guide 25/90, IHF 16/96, Factsheet 8/8, Bilderservice 4/4, Girokonten 4/17 (S. 1–3, 6, nicht die gedrehten Tabellen 7–13), BHV III 3, NIST RMF 3, NIST SSDF 3, BHV I 1, BHV II 1, AGB/Einstein/IFG 0. Summe 661 Seiten, davon 515 in den beiden Handbüchern.
## Entscheidungen (Betreiber, 2026-10-14/15)
1. **Bildquelle: der Harness liest die Seiten von `original.pdf` selbst** (Option a). Keine neue Abhängigkeit, nur ganze Seiten. Ein Renderer (pypdfium2, optional, PNGs an einen gitignorierten Ort, nie neben `derived.md`) ist ein eigenes Paket, das erst bei einem dieser Auslöser kommt: ein zweiter Harness braucht es, oder ganze Seiten erweisen sich am Korpus als zu teuer. „Ausschnitt statt ganzer Seite“ entfällt damit vorerst.
2. **Modell: ein Subagent, wo der Harness einen hat; sonst liest die Sitzung selbst.** Der Hauptgrund ist, dass die Seitenbilder nicht den Kontext der Ingest-Sitzung füllen. Kein Modell wird festgeschrieben. **Bestätigt nach den Probeläufen (Betreiber, 2026-10-15, Option A):** Hat der Harness Subagenten, öffnet die Sitzung die Seitenbilder gar nicht selbst, auch nicht zur Kontrolle; sie schreibt aus dem Bericht des Subagenten. Verworfen wurde Option B, bei der die Sitzung selbst liest: Der gemessene Kontextzuwachs (ca. 22.400 Token für 16 Seiten, bis ca. 68.800 für 8 Seiten) käme zu einem Kontext hinzu, der vor dem ersten Bild schon ca. 166.000 Token hatte.
3. **Kein Platzhalter im Text von `derived.md`.** Die Seitenmarke `<!-- page N -->` ist der Anker. Die Auswahl kommt als Header-Felder in `derived.md`.
4. **Herkunft:** Auf der Source-Seite steht ein eigener Abschnitt für das am Seitenbild Gelesene (Überschrift in der KB-Sprache). Je Eintrag kommen die Seitenzahl und der Vermerk dazu, dass es am Seitenbild gelesen wurde; hat ein Subagent gelesen, wird er als Mittler genannt. Die Regel steht in `types/source.guidance.md`, nicht im instanz-eigenen Template. Andere Seiten zitieren eine daraus gewonnene Aussage mit `cite add --file original.pdf`, Text aus der Ableitung mit `--file derived.md`. Gehedgt wird nach `kb/CONVENTIONS.md` § Hedging.
5. **Auswahl der Seiten: die Seiten aus Bildseiten-CHECK und Zuordnungs-WARN, ohne Punktwert.** Ein Drehungs-Signal kommt erst, wenn die Messung zeigt, dass gedrehte Tabellen am Seitenbild gelesen werden müssen.
6. **Menge: Schwelle 20 Seiten je Source** (Option ii, Betreiber 2026-10-15).
- Bis 20 ausgewählte Seiten liest die Sitzung alle, ohne den Nutzer zu fragen.
- Bei mehr liest sie zunächst keine Seite. Sie hält an und nennt dem Nutzer die Zahl der Seiten und eine Token-Schätzung. Der Nutzer wählt: alle, keine oder eine Auswahl. Die Auswahl schlägt die Sitzung anhand von Überschrift und Bildunterschrift neben den Seiten vor.
- Bei einem großen Baum (`ingest-large-tree.md`) gilt die Schwelle je Einheit.
- Nicht gelesene Seiten stehen mit Grund im Abschnitt „Nicht übernommen“ der Source-Seite.
- Die Schwelle steht als Zahl in der Anweisung, nicht als Einstellung.
7. **Abschluss erst nach den Probeläufen in einer frischen Sitzung** (Option A, Betreiber 2026-10-15). Galt auch für die Wiederholungen nach beta.8 und beta.9; erfüllt, siehe „Stand“.
## Umsetzung
**10.1.0-beta.7 (128c7f5):**
- **`filters/pdf_layout.py`:** `Annotation` trägt zusätzlich `unmatched_pages`, die Seiten der Zuordnungs-WARN (vorher nur als Warnzeile).
- **`filters/pdf.py`:** zwei neue Header-Felder, nur wenn nicht leer, im Format von `page_ranges()`: `images` (Seiten des Bildseiten-CHECK) und `unmatched` (Seiten der Zuordnungs-WARN). Reihenfolge `markings`, `images`, `unmatched`. CHECK- und WARN-Zeilen auf stdout unverändert, der Text von `derived.md` gleich dem von beta.6.
- **`commands/raw/derive.py`:** Hilfetext nennt beide Felder; `tools/CONTRACT.md` und `docs/reference/commands/raw-material-and-uploads.md` neu erzeugt.
- **`raw/CONTRACT.md`:** der Absatz zum CHECK nennt die Felder und verlinkt die neue Anweisung.
- **Neue Anweisung `instructions/read-page-images.md`:** Auswahl, Schwelle und Halt, Lesen von `original.pdf` (Subagent wo vorhanden), Eintrag auf der Source-Seite, nicht gelesene Seiten mit Grund, Harness ohne Bildeingabe. Verlinkt aus `wiki-ingest` Schritt 1 (und Schritt 6 für „Nicht übernommen“) und `ingest-large-tree.md` Schritt 5a.
- **`types/source.guidance.md`:** Abschnitt „Page images“ mit der Herkunftsregel.
- **`docs/how-to/ingest-a-source.md`:** Aufzählung zum CHECK erweitert, neuer Punkt „Before looking at page images“.
- **Tests** (`test_raw_derive_binary.py`): `images` genau mit den CHECK-Seiten, kein `images` und kein `unmatched` ohne Bildseite oder ohne unpassende Seite, `unmatched` bei erzwungener Zuordnungs-WARN.
**10.1.0-beta.8 (be694e3), nach Entscheidung 2 / Option A:**
- **`instructions/read-page-images.md` Schritt 3:** Hat der Harness Subagenten, liest einer die Seiten. Die Sitzung öffnet sie gar nicht, weder vorher noch daneben noch danach zur Kontrolle, und schreibt Schritt 4 aus seinem Bericht.
- **Neuer Entscheidungspunkt „Tempted to look at a page yourself“:** Den Subagenten mit der konkreten Frage erneut losschicken oder die Aussage als unsicher schreiben; selbst zu lesen ist nur für einen Harness ohne Subagenten vorgesehen.
- **Nicht geändert, weil es weiter stimmt:** `types/source.guidance.md` § Page images („Where a subagent did the reading“) und `docs/how-to/ingest-a-source.md` („through a subagent where the harness has one“). Keine Code- und keine Teständerung.
**10.1.0-beta.9 (9cb981a), gegen die Rückfrage vor dem Lesen:**
- **`instructions/wiki-ingest/SKILL.md` Schritt 1:** Der Verweis auf `read-page-images.md` war nur ein Hinweis („decides which of them are looked at, and how“). Jetzt: Die Anweisung wird an dieser Stelle geöffnet und befolgt, vor Schritt 4; bis zur Schwelle werden die Seiten ohne Rückfrage gelesen, sie sind also keine Frage für Schritt 4.
- **`instructions/read-page-images.md`, neuer Entscheidungspunkt:** Wer den Nutzer fragen will, ob die Seiten angesehen werden (etwa in der Besprechung der Kernpunkte), tut es bei 20 oder weniger Seiten nicht, sondern führt die Schritte 3 bis 5 aus und legt das Gelesene mit dem Rest vor.
- **Nicht geändert, weil es weiter stimmt:** `ingest-large-tree.md` Schritt 5a (verweist schon verbindlich: „is followed by“), `docs/how-to/ingest-a-source.md` („reads up to 20 such pages on its own“), `types/source.guidance.md`, `raw/CONTRACT.md`. Keine Code- und keine Teständerung; `pytest` 3074 bestanden, 4 übersprungen, `docs verify` und `instructions verify` grün.
## Probeläufe (Vorgehen)
Zwei Rollen: eine **Probe-Sitzung**, die nur die Wegwerf-Instanz sieht (ihr Arbeitsverzeichnis ist die Instanz, nicht dieses Repo, und sie bekommt diesen Body nicht), und der **Betreiber** (oder eine Beobachter-Sitzung hier im Repo), der beobachtet und misst.
1. **Instanz bauen** (`dev-setup.md` Schritt 5), außerhalb dieses Checkouts: `tools/wikitool dist export <leerer Scratch-Ordner>`, dann dort `tools/preflight.sh` und `instructions/setup-instance.md` wie eine Nutzerin. KB-Sprache `de`, damit der Abschnitt „Am Seitenbild gelesen“ geprüft wird.
2. **IHF:** `testfiles/corpus/pdf/ihf-regeln-2025.pdf` nach `incoming/` der Instanz kopieren, in der Probe-Sitzung nur „Ingest“ sagen. Beobachten: Liest sie ohne Rückfrage, und nur Seiten aus `images:` (erwartet 1, 2, 6–8, 29, 48–55, 81, 96)? Liest ein Subagent? Danach die Source-Seite: Handzeichen-Tafeln S. 48–55 mit Seitenzahl, Vermerk, Mittler; jede Tafel gegen das Original prüfen.
3. **Guide:** `testfiles/corpus/pdf/d365-licensing-guide-2026-09.pdf` ebenso. Beobachten: Hält sie vor dem ersten Seitenbild an, nennt sie 25 Seiten und eine Token-Schätzung, schlägt sie eine Auswahl vor? Dann eine Auswahl wählen und prüfen, dass die übrigen Seiten mit Grund unter „Nicht übernommen“ stehen.
4. **Messen je Lauf:** Seiten gelesen, Tokens laut Harness (Claude Code: `/cost` vor und nach dem Lesen bzw. die Token-Zahl des Subagenten), Zahl der Einträge im Abschnitt „Am Seitenbild gelesen“. Nur Zahlen in diesen Body, keine Inhalte aus dem Korpus (privat).
5. **Nichts publizieren:** Die Instanz hat kein erlaubtes Push-Ziel; danach wegwerfen.
**Wiederholung (nach beta.8, ebenso nach beta.9):** nur Schritt 1 und 2 (IHF); der Guide-Lauf wird nicht wiederholt, weil Schritt 2 der Anweisung nur ergänzt wurde. Kopflos (`claude -p`) gehören `Task` **und** `Agent` in die Allowlist, dazu nur einfache `tools/wikitool`-Aufrufe (eine Variablenzuweisung davor oder ein verketteter Aufruf passt nicht zur Regel `Bash(tools/wikitool:*)` und hält die Probe an). Zusätzlich messen: die Token des Subagenten getrennt von denen der Sitzung und den Kontextzuwachs der Sitzung beim Lesen. Die Tafeln S. 48–55 werden gegen den **Bericht des Subagenten**, wie er auf der Source-Seite steht, am Original geprüft. **Für beta.9 zu beobachten:** Hat die Probe `read-page-images.md` geöffnet, bevor sie dem Nutzer die Kernpunkte vorlegt, und enthält ihre Rückfrageliste keine Frage zu den Seitenbildern?
Weicht das Verhalten ab (liest über der Schwelle, übersieht `images:`, falsche Herkunft, Rückfrage unter der Schwelle), ist das ein Fehler in `read-page-images.md` oder der Verlinkung und geht als Bau-Arbeit zurück an `/stack-build #234`.
**Beobachterhinweis (kopflos):** Der Lauf auf beta.9 zeigte, dass die Ausgabe einer Fortsetzung mit `--resume` nicht in der Datei landet, wenn sie im Terminal ohne Umleitung lief; maßgeblich ist das Protokoll der Sitzung unter `~/.claude/projects/<Pfad der Instanz>/<session_id>.jsonl` (Hauptsitzung) und `…/<session_id>/subagents/` (Subagent). Daraus lassen sich Werkzeugaufrufe, Zeitstempel und Token je Aufruf lesen.
## Ergebnis der Probeläufe (2026-10-15, Stand beta.7; letzte Spalte beta.8)
Durchgeführt als kopflose Claude-Code-Sitzungen (`claude -p`, `--permission-mode acceptEdits`, Allowlist `Bash(tools/wikitool:*)`, Read, Write, Edit, Glob, Grep, Agent; beim beta.8-Lauf zusätzlich Task), je Datei ein eigener Prozess, Auftrag nur „Ingest incoming/<datei>“. Den Proben wurde nichts zu Seitenbildern, `images:`, Schwellen oder diesem Issue gesagt. Rückfragen der Proben beantwortete der Beobachter kurz und neutral (Fidelity/Authority, Kernpunkte „passt so“; beim Guide die Auswahl auf höchstens 8 Seiten begrenzt). Instanz frisch aus `dist export`, Preflight Exit 0, `doctor` ohne Befund, KB-Sprache `de`, kein Push-Ziel; nichts publiziert, in diesem Repo nichts geändert.
| Messwert | IHF (beta.7) | Guide (beta.7) | IHF beta.8 |
|---|---|---|---|
| Seiten insgesamt / in `images:` | 96 / 16 | 90 / 25 | 96 / 16 |
| Halt vor dem ersten Seitenbild | nein, Schwelle nicht überschritten | ja, vor jedem Lesen von `original.pdf` | nein, Schwelle nicht überschritten |
| Rückfrage zu den Bildern vor dem Lesen | nein | – (Halt über der Schwelle, wie vorgesehen) | ja (Frage 5 der Rückfrageliste; die Probe hatte `read-page-images.md` noch nicht geöffnet) |
| Genannte Zahl und Token-Schätzung | – | 25 Seiten, ca. 50.000 Token | – |
| Eigener Auswahlvorschlag vor dem Lesen | – | ja, 11 Seiten | – |
| Gelesene Seiten | 16 (genau die aus `images:`) | 8 (vom Beobachter auf höchstens 8 begrenzt) | 16 (genau die aus `images:`, in 6 Read-Aufrufen des Subagenten) |
| Gelesene Seiten nicht in `images:` | 0 | 0 | 0 |
| Lesen durch | die Sitzung selbst | die Sitzung selbst | ein Subagent (1 Agent-Aufruf, Typ general-purpose); Sitzung: 0 Read-Aufrufe auf `original.pdf` |
| Subagent benutzt | nein (0 Task-/Agent-Aufrufe) | nein (0 Task-/Agent-Aufrufe) | ja (1 Agent-Aufruf, ohne Rückfrage des Subagenten) |
| Einträge „Am Seitenbild gelesen“ | 4 (fassen 16 Seiten, Seitenzahlen angegeben, Vermerk „ohne Zwischeninstanz“) | 7 (S. 6 dreimal, 12, 24, 46, 52); S. 5 und 27 ohne Mehrwert gegenüber `derived.md`, deshalb unter „Nicht übernommen“ vermerkt | 7 (fassen 15 der 16 Seiten; S. 2 ohne eigenen Eintrag, unter „Nicht übernommen“ als gelesen vermerkt); Abschnittskopf nennt „einem Subagenten“ als Mittler; Unsicherheiten vermerkt |
| Nicht gelesene Seiten mit Grund unter „Nicht übernommen“ | – | 17 von 17 | – |
| Kontextzuwachs durch die Seitenbilder (grob) | ca. 22.400 Token für 16 Seiten (ca. 1.400 je Seite) | ca. 36.100 Token für den 5-Seiten-Aufruf; der 3-Seiten-Aufruf davor +32.700, nicht sauber getrennt, daher Obergrenze ca. 68.800 für 8 Seiten | ca. 2.400 Token für den Bericht des Subagenten (7.353 Zeichen); Kontext der Sitzung 63.528 → 71.075 (+7.547) über den Schritt hinweg, darin eine weitere Werkzeugausgabe von 8.053 Zeichen, also Obergrenze ca. 7.500 |
| Tokens des Subagenten | – | – | 57.403 gesamt (input 2 / cache_creation 23.395 / cache_read 29.161 / output 4.845), 6 Read-Aufrufe, 39 s |
| Tokens laut Harness, letzter Aufruf (input / cache_creation / cache_read / output) | Halt-Lauf 38 / 179.690 / 1.655.019 / 7.044; Fortsetzung 44 / 37.988 / 4.638.140 / 12.718 | Halt-Lauf 18 / 62.031 / 431.657 / 4.908; Fortsetzung 44 / 152.968 / 4.100.618 / 29.197 | Lesen und Schreiben (Fortsetzung 4 von 4): 28 / 143.449 / 2.046.148 / 15.126; Kontext der Sitzung am Ende 200.168 |
| Kosten laut Harness | 0,95 USD (Halt-Lauf), 1,70 USD (Fortsetzung) | 0,34 USD (Halt-Lauf), 1,65 USD (Fortsetzung) | 2,07 USD über alle vier Aufrufe (0,18 + 0,20 + 0,29 + 1,41); ob der Subagent darin steckt, ist nicht geprüft |
- **IHF, Handzeichen-Tafeln S. 48–55 (beta.7):** alle 8 Seiten vom Beobachter am Original gelesen und mit der Source-Seite verglichen; alle 17 beschriebenen Zeichen stimmen (Nummer und Bezeichnung). Keine Abweichung.
- **Guide, Selbstwiderspruch der Quelle:** Die Probe hat Widersprüche der Quelle selbst auf der Source-Seite vermerkt, statt `derived.md` zu korrigieren (vgl. „Decision points“ der Anweisung).
- **Kein Allowlist-Eingriff nötig (beta.7):** Zwei zusammengesetzte Bash-Aufrufe der Proben wurden abgelehnt, die Proben wiederholten sie als einfache `tools/wikitool`-Aufrufe.
- **Die Token-Zahlen sind grob:** Die Kontextzuwächse enthalten auch die Ausgabe der Sitzung zwischen den Aufrufen; die Schätzung der Anweisung (ca. 2.000 je Seite) liegt beim IHF darunter (ca. 1.400), beim Guide darüber (ca. 7.000 je Seite am 5-Seiten-Aufruf). Beim Subagenten sind es insgesamt ca. 3.600 je Seite (57.403 / 16), im Kontext der Sitzung aber nur der Bericht.
## Ergebnis der Wiederholung auf beta.8 (2026-10-15, IHF)
Instanz frisch aus `dist export` des Standes 10.1.0-beta.8 (`VERSION`, `.wikitool-release.json`), Preflight Exit 0, `doctor` ohne Befund, KB-Sprache `de`, Telemetrie aus, kein Push-Ziel, außerhalb dieses Checkouts. Nur `ihf-regeln-2025.pdf` in `incoming/`. Probe als kopfloser Prozess (`claude -p`, Modell der Sitzung `claude-sonnet-5-5`) mit Allowlist `Bash(tools/wikitool:*)`, Read, Write, Edit, Glob, Grep, Task, Agent. Auftrag nur „Ingest incoming/ihf-regeln-2025.pdf“; der Probe wurde nichts zu Seitenbildern, `images:`, Schwellen, Subagenten oder diesem Issue gesagt. Die Sitzung lief über vier `claude -p`-Aufrufe (ein Start, drei Fortsetzungen mit `--resume`).
- **Subagent liest, Sitzung nicht:** 1 Agent-Aufruf mit der Seitenliste `1-2, 6-8, 29, 48-55, 81, 96` (16 Seiten); der Subagent las in 6 Read-Aufrufen (`1-2`, `6-8`, `29`, `48-55`, `81`, `96`) genau diese Seiten, ohne Rückfrage. **Read-Aufrufe der Sitzung auf `original.pdf`: 0** (Soll erfüllt). Der Auftrag an den Subagenten nannte Pfad, Seitenliste und Frage, verbot Dateien und `wikitool`-Aufrufe und nannte kein Modell, wie Schritt 3 es verlangt.
- **Herkunft:** Der Abschnitt „Am Seitenbild gelesen“ hat 7 Einträge mit Seitenzahlen und nennt im Kopf den Subagenten als Mittler („von einem Subagenten gelesen“, „Lesungen, keine Zitate“); unsichere Stellen sind als solche vermerkt. Der Abschnitt „Nicht übernommen“ führt die Seitenbilder als gelesen.
- **Handzeichen-Tafeln S. 48–55:** 8 Seiten (zusammen mit der Liste auf S. 47) vom Beobachter am Original gelesen und mit dem Bericht des Subagenten und der Source-Seite verglichen. **Alle 17 Zeichen stimmen** (Nummer, Bezeichnung und Haltungsbeschreibung); die Reihenfolge der Liste und die Seitenzuordnung stimmen. **1 Detail** (Fingerzahl bei Zeichen 16) ist im Bericht mit „zwei“ bevorzugt, am Original aber nicht eindeutig; die Source-Seite führt es als unsicher, enthält also keine falsche Aussage. Bei Zeichen 13 vermerkt sie die Kartenfarben als unsicher, was am Original zutrifft.
- **Allowlist:** `Agent` wurde unter diesem Namen aufgerufen, die Werkzeugliste der Sitzung führte `Task`; es gab keine Ablehnung des Subagenten-Aufrufs. Weil beide in der Allowlist standen, ist nicht getrennt, welcher der beiden die Freigabe trug (ungeprüft).
- **Zwei Fortsetzungen wegen einer Berechtigung, nicht wegen Seitenbildern:** Die Probe setzte eine Variablenzuweisung vor `tools/wikitool sync` (`WIKITOOL_SESSION_ID=… tools/wikitool sync`) und blieb nach zwei Ablehnungen stehen. Eine zusätzliche Regel `Bash(WIKITOOL_SESSION_ID=* tools/wikitool:*)` griff nicht; erst der Hinweis „nur einfache Aufrufe“ half. `doctor` meldet die Session-ID über `CLAUDE_CODE_SESSION_ID` ohnehin als gesetzt, die Zuweisung war nicht nötig.
- **Ende der Probe:** Die Probe endete am Mass-Update-Gate (Exit 42 bei ihrem ersten `publish --no-push`, 309 gezählte Dateien, weil die frische Instanz noch keinen Commit hat). Das Gate wurde nicht geöffnet, nichts publiziert, in diesem Repo nichts geändert.
**Abweichung von `instructions/read-page-images.md` (beta.8), Ursache gefunden und behoben:** Schritt 2 sagt bei 20 oder weniger Seiten „read all of them, without asking“. Die Probe legte in Schritt 4 trotzdem eine Frage (Nr. 5 der Rückfrageliste) an den Nutzer vor, ob sie die Abbildungen „nach `read-page-images.md` nur gezielt ansehen“ oder unter „Nicht übernommen“ führen soll; erst nach der neutralen Antwort las der Subagent. Aus dem Log: Die Probe hatte `read-page-images.md` bis zu dieser Frage **nicht geöffnet** (geöffnet hatte sie `session-setup.md` und `ingest-large-tree.md`). Sie kannte nur den Verweis in `wiki-ingest` Schritt 1, dessen Wortlaut („decides which of them are looked at, and how“) die Entscheidung beim Nutzer vermuten ließ. `wiki-ingest` Schritt 4 selbst enthält nichts, was die Bilder zum Gesprächspunkt macht. Der Fehler lag also im Verweis, nicht in der Anweisung; behoben in beta.9 (siehe „Umsetzung“), und die Wiederholung auf beta.9 hat gezeigt, dass die Behebung trägt (siehe unten).
## Ergebnis der Wiederholung auf beta.9 (2026-10-15, IHF)
Instanz frisch aus `dist export` des Standes 10.1.0-beta.9 (`VERSION` 10.1.0-beta.9), Preflight Exit 0, `doctor` ohne FAIL, KB-Sprache `de` (das gefüllte `kb/CONVENTIONS.md` dieses Repos übernommen), Personalisierung gestubbt wie in CI, Telemetrie aus, kein Push-Ziel, Basis-Commit, außerhalb dieses Checkouts. Nur `ihf-regeln-2025.pdf` in `incoming/`. Probe als kopfloser Prozess (`claude -p`, `claude-sonnet-5-5`) mit Allowlist `Bash(tools/wikitool:*)`, Read, Write, Edit, Glob, Grep, Task, Agent. Auftrag nur „Ingest incoming/ihf-regeln-2025.pdf“; der Probe wurde nichts zu Seitenbildern, `images:`, Schwellen, Subagenten oder diesem Issue gesagt. Der Start und eine Fortsetzung mit `--resume` trugen die Auswertung; eine zweite, gleichlautende Fortsetzung (versehentlich doppelt gestartet) beantwortete nur die offenen Rückfragen noch einmal.
| Messwert | IHF beta.9 |
|---|---|
| Seiten insgesamt / in `images:` | 96 / 16 (`images: 1-2, 6-8, 29, 48-55, 81, 96`) |
| Halt vor dem ersten Seitenbild | nein, Schwelle nicht überschritten |
| `read-page-images.md` geöffnet | ja, direkt nach `raw derive` und vor der Volllektüre von `derived.md`, also vor der Rückfrageliste |
| Frage zu den Seitenbildern in der Rückfrageliste | nein; die drei Fragen betrafen die Seitenauswahl für Wiki-Seiten, die Verpflichtung und `--fidelity`/`--authority` |
| Gelesene Seiten / davon nicht in `images:` | 16 (genau die aus `images:`, in 6 Read-Aufrufen des Subagenten) / 0 |
| Lesen durch | ein Subagent (1 Agent-Aufruf, general-purpose, ohne Modellnennung); Auftrag mit Pfad, Seitenliste, Frage, Verbot von Dateien und `wikitool`; Sitzung: **0** Read-Aufrufe auf `original.pdf` |
| Tokens des Subagenten | 53.945 gesamt (input 2 / cache_creation 33.202 / cache_read 16.136 / output 4.605), 6 Read-Aufrufe |
| Bericht des Subagenten | 5.906 Zeichen; Kontext der Sitzung 188.938 → 194.901 (+5.963) beim Eintreffen, darin die Benachrichtigung und eine Antwort der Sitzung |
| Kontext der Sitzung vor dem Agent-Aufruf | 65.143 Token (beta.8: 63.528) |
- **Handzeichen-Tafeln S. 48–55:** alle 8 Seiten vom Beobachter am Original gelesen und mit dem Bericht des Subagenten verglichen: **17 von 17** stimmen in Nummer und Bezeichnung, die Haltungsbeschreibungen stimmen, die Seitenzuordnung (gedruckte Nummer = PDF-Seite − 1) stimmt. Zeichen 16 (Fingerzahl) ist im Bericht als nicht eindeutig lesbar vermerkt, Zeichen 13 (Kartenfarben) als nur teilweise erkennbar; beides trifft am Original zu.
- **Nicht geprüft in diesem Lauf:** die Source-Seite. Die Probe hielt in Schritt 4 an den Rückfragen an, geschrieben, promotet oder veröffentlicht wurde nichts. Die Herkunftsregel (Abschnitt „Am Seitenbild gelesen“ mit Mittler) ist unverändert gegenüber beta.8 und dort geprüft.
- **Beobachtung, kein verfehltes Kriterium:** Der Subagent lief im Hintergrund (asynchroner Agent-Aufruf im kopflosen Betrieb). Die Probe legte die Besprechung der Kernpunkte deshalb vor dem Bericht vor („Sein Bericht liegt mir noch nicht vor“) und trug den Bericht in einer zweiten Nachricht nach, als die Benachrichtigung eintraf. Der Entscheidungspunkt der Anweisung („legt das Gelesene mit dem Rest vor“) war damit in zwei Nachrichten erfüllt, nicht in einer. Ob das im interaktiven Betrieb ebenso auftritt, ist nicht geprüft; die Anweisung bleibt unverändert, bis ein Lauf es als Störung zeigt.
- **Kleine Unstimmigkeit der Probe, ohne Folge:** Ihre Besprechung nennt die Handzeichen einmal „S. 47–54“ (gedruckte Nummern), sonst durchgehend den PDF-Index (48–55) wie der Subagent und `images:`.
- **Allowlist:** wie bei beta.8 hielt die Probe an `WIKITOOL_SESSION_ID=… tools/wikitool sync` (zweimal abgelehnt); der Hinweis „nur einfache Aufrufe“ genügte. Eine Fortsetzung mehr, kein Mangel der Anweisung.
- **Ende der Probe:** Rückfragen an den Nutzer (Seitenauswahl, Verpflichtung, Capture-Felder), nichts geschrieben oder publiziert; Wegwerf-Instanz entsorgt, in diesem Repo nichts geändert.
## Akzeptanzkriterien
- [x] `derived.md` eines PDFs mit Bildseiten trägt `images:` mit genau den Seiten, die der CHECK nennt; eines ohne hat das Feld nicht. Gleiches gilt für `unmatched:` und die Zuordnungs-WARN (durch Tests belegt). Ohne die beiden Felder ist der Text unverändert gegenüber beta.6 (der Text-Pfad ist nicht angefasst; der Lauf `Converters` auf dem Commit, 722, ist grün).
- [x] Die Regel zum Lesen der Seitenbilder steht an genau einer Stelle (`instructions/read-page-images.md`); `wiki-ingest` und `ingest-large-tree.md` verlinken sie.
- [x] Probelauf IHF (16 Seiten, unter der Schwelle), Stand beta.7:
- [x] Die Sitzung liest ohne Rückfrage höchstens die Seiten aus `images:` (16 von 16, keine weitere).
- [x] Ihre Source-Seite beschreibt die Handzeichen-Tafeln S. 48–55 mit Seitenangabe und gekennzeichneter Herkunft.
- [x] Am Original geprüft stimmt jede beschriebene Tafel (alle 17 Zeichen).
- [x] Probelauf Guide (25 Seiten, über der Schwelle), Stand beta.7:
- [x] Die Sitzung liest keine Seite, bevor der Nutzer gewählt hat.
- [x] Sie nennt die Zahl 25 und eine Token-Schätzung und schlägt eine Auswahl vor.
- [x] Nach der Wahl stehen die übrigen Seiten mit Grund unter „Nicht übernommen“ (17 von 17).
- [x] Gemessen und nur als Zahlen im Body festgehalten, je Probelauf: Seiten gelesen, Tokens laut Harness, Zahl der aus dem Bild gewonnenen Aussagen (siehe Tabelle; Token-Anteil der Bilder nur grob trennbar).
- [x] `read-page-images.md` Schritt 3 verbietet der Sitzung, die Seitenbilder selbst zu öffnen, wenn der Harness Subagenten hat, und ein Entscheidungspunkt deckt den Versuch ab, „nur zur Kontrolle“ nachzusehen (beta.8, be694e3).
- [x] Wiederholter IHF-Probelauf auf beta.8 (frische Beobachter-Sitzung, `Task` und `Agent` in der Allowlist): Ein Subagent liest die Seiten (16 von 16, genau die aus `images:`), die Sitzung ruft `Read` auf `original.pdf` nicht selbst auf (0 Aufrufe), die Source-Seite nennt den Subagenten als Mittler, und jede beschriebene Tafel S. 48–55 stimmt am Original (17 von 17). Gemessen: Subagent 57.403 Token, Kontextzuwachs der Sitzung durch den Bericht ca. 2.400 (Obergrenze ca. 7.500) gegenüber ca. 22.400 beim ersten Lauf.
- [x] `wiki-ingest` Schritt 1 verlangt, `read-page-images.md` vor Schritt 4 zu öffnen und zu befolgen, und sagt, dass bis zur Schwelle keine Rückfrage zu den Seiten nötig ist; ein Entscheidungspunkt in `read-page-images.md` deckt die Rückfrage in der Besprechung ab (beta.9, 9cb981a).
- [x] Wiederholter IHF-Probelauf auf beta.9 (frische Beobachter-Sitzung, Vorgehen unter „Wiederholung“): Die Probe öffnete `read-page-images.md` vor der Rückfrageliste, ihre Rückfrageliste enthält keine Frage zu den Seitenbildern, ein Subagent las die 16 Seiten (genau die aus `images:`, 6 Read-Aufrufe, 53.945 Token), die Sitzung rief `Read` auf `original.pdf` nie selbst auf (0 Aufrufe), und 17 von 17 Handzeichen S. 48–55 stimmen am Original. Das Kriterium „liest bei 20 oder weniger Seiten ohne Rückfrage“ ist damit erfüllt.
- [x] `pytest` (3074 bestanden, 4 übersprungen), `docs verify`, `instructions verify` grün (beta.7, beta.8 und beta.9).
- [x] CI auf dem veröffentlichten Commit von beta.7 grün: Lauf 721 (verify und pwsh), dazu `Converters` (Lauf 722) und Lauf 723, alle `success`.
- [x] CI auf be694e3 (beta.8) grün: Lauf 725 (verify und pwsh) und Lauf 726, beide `success`.
- [x] CI auf 9cb981a (beta.9) grün: Lauf 727 und Lauf 728, beide `success`. `Converters` startete nicht: Die Änderung berührt die Konverter-Fläche nicht.
**Wo die Probeläufe stattfinden:** in einer Wegwerf-Instanz außerhalb dieses Repos (`dist export` in den Scratch-Bereich, `dev-setup.md` Schritt 5). Nie in diesem `kb/`: Das Korpus ist privat und wird nicht ins Repo kopiert (`dev-setup.md` Schritt 6), und `kb/` ist keine Spielfläche für Experimente (`corpus-policy.md`).
## Versionsteil
Fällt in den laufenden Kandidaten 10.1.0 (Stufe MINOR). Neue Header-Felder, eine neue Anweisung und Guidance sind eine neue Fähigkeit und in beide Richtungen Drop-in: Bestehende Ableitungen bleiben gültig, und keine alte Version liest den Header. Daher `--minor`, nur der Kandidatenzähler: **10.1.0-beta.7**. Die Folgeänderungen (Schritt 3 verbindlich; Verweis in `wiki-ingest` Schritt 1 geschärft) sind Anweisungsänderungen und ebenfalls Drop-in: `--patch` mit `--impact low`, nur der Kandidatenzähler, **10.1.0-beta.8** und **10.1.0-beta.9**. Der Abschluss bringt keine Änderung im Baum und damit keinen weiteren Bump.
## Kette
Kette „Konverter-Qualität“
- Vorgänger: #231
- Nachfolger: keiner - letztes Glied
Nicht mehr blockiert: #231 ist geschlossen (10.1.0-beta.5/-beta.6). Der präzise Bildseiten-CHECK und die Strukturerkennung (Fließtext, Code, Tabellengitter, Vorlagen, Vektorcluster) sind ausgeliefert; IHF nennt genau {1, 2, 6–8, 29, 48–55, 81, 96}. status/blocked entfernt.
Nicht mehr blockiert: #231 ist geschlossen (10.1.0-beta.5/-beta.6). Der präzise Bildseiten-CHECK und die Strukturerkennung (Fließtext, Code, Tabellengitter, Vorlagen, Vektorcluster) sind ausgeliefert; IHF nennt genau {1, 2, 6–8, 29, 48–55, 81, 96}. `status/blocked` entfernt.
Changelog: Body gegen den Baum von 10.1.0-beta.6 gelesen. Neu: Abschnitt „Stand im Baum“. Er zeigt: Es gibt nur zwei Seitensignale (Bildseiten-CHECK und Zuordnungs-WARN), und der CHECK steht nur auf stdout, nicht in derived.md. Für Ausschnitte fehlen Koordinaten und Renderer, und außer Claude Code ist kein Harness auf Bildeingabe geprüft. Neu ist auch Entscheidung 5 (Punktwert oder CHECK + WARN), weil der Punktwert drei Signale voraussetzt, die es nicht gibt. Zu den Entscheidungen 1–4 stehen jetzt Empfehlungen; sie sind ausdrücklich nicht entschieden. Die Option (b) rendert an einen gitignorierten Ort statt neben derived.md, weil die Bilder sonst nach raw/ kämen. Das Messkriterium ist als offen markiert, weil #233 nur raw derive misst. Der Versionsteil steht je Option fest. „Blockiert durch“ ist entfallen (#231 ist geschlossen).
**Changelog:** Body gegen den Baum von 10.1.0-beta.6 gelesen. Neu: Abschnitt „Stand im Baum“. Er zeigt: Es gibt nur zwei Seitensignale (Bildseiten-CHECK und Zuordnungs-WARN), und der CHECK steht nur auf stdout, nicht in `derived.md`. Für Ausschnitte fehlen Koordinaten und Renderer, und außer Claude Code ist kein Harness auf Bildeingabe geprüft. Neu ist auch Entscheidung 5 (Punktwert oder CHECK + WARN), weil der Punktwert drei Signale voraussetzt, die es nicht gibt. Zu den Entscheidungen 1–4 stehen jetzt Empfehlungen; sie sind ausdrücklich nicht entschieden. Die Option (b) rendert an einen gitignorierten Ort statt neben `derived.md`, weil die Bilder sonst nach `raw/` kämen. Das Messkriterium ist als offen markiert, weil #233 nur `raw derive` misst. Der Versionsteil steht je Option fest. „Blockiert durch“ ist entfallen (#231 ist geschlossen).
Changelog: Die Entscheidungen 1–6 sind getroffen (Betreiber, 2026-10-14/15, alle wie empfohlen).
Neu ist Entscheidung 6, die Schwelle von 20 Seiten je Source. Sie kam aus der Zählung am Korpus, die jetzt unter „Stand im Baum“ steht: insgesamt 661 CHECK-Seiten, davon 515 in Azure und ecoDMS.
Neu sind die Abschnitte „Umsetzung“ (Header-Felder images und unmatched, geteilte Anweisung, Guidance, Tests) und die geschärften Akzeptanzkriterien. Dazu gehören zwei Probeläufe, IHF unter und Guide über der Schwelle, beide in einer Wegwerf-Instanz außerhalb des Repos.
Der Punktwert ist verworfen.
Der Versionsteil ist festgelegt: --minor im Kandidaten 10.1.0.
Labels: kind/decision wird zu kind/build, weil alle Fragen beantwortet sind. size/L wird zu size/M: Es ist eine Sitzung mit mehreren Dateien, einer neuen Anweisung und eigenem Testaufwand.
**Changelog:** Die Entscheidungen 1–6 sind getroffen (Betreiber, 2026-10-14/15, alle wie empfohlen).
- Neu ist Entscheidung 6, die Schwelle von 20 Seiten je Source. Sie kam aus der Zählung am Korpus, die jetzt unter „Stand im Baum“ steht: insgesamt 661 CHECK-Seiten, davon 515 in Azure und ecoDMS.
- Neu sind die Abschnitte „Umsetzung“ (Header-Felder `images` und `unmatched`, geteilte Anweisung, Guidance, Tests) und die geschärften Akzeptanzkriterien. Dazu gehören zwei Probeläufe, IHF unter und Guide über der Schwelle, beide in einer Wegwerf-Instanz außerhalb des Repos.
- Der Punktwert ist verworfen.
- Der Versionsteil ist festgelegt: `--minor` im Kandidaten 10.1.0.
- Labels: `kind/decision` wird zu `kind/build`, weil alle Fragen beantwortet sind. `size/L` wird zu `size/M`: Es ist eine Sitzung mit mehreren Dateien, einer neuen Anweisung und eigenem Testaufwand.
Changelog: 10.1.0-beta.7 (128c7f5): raw derive schreibt für PDFs die Header-Felder images (Bildseiten-CHECK) und unmatched (Seiten der Zuordnungs-WARN), nur wenn nicht leer; der Text von derived.md bleibt unverändert. Neue Anweisung instructions/read-page-images.md (Schwelle 20 Seiten je Source, darüber Halt und Rückfrage; Lesen von original.pdf per Subagent, wo vorhanden), Herkunftsregel in types/source.guidance.md, verlinkt aus wiki-ingest und ingest-large-tree.md; raw/CONTRACT.md, Referenz und How-to nachgezogen. pytest, docs verify, instructions verify, CI (Lauf 721) und Converters (Lauf 722) grün. Offen: die Probeläufe IHF und Guide mit Messzahlen in einer Wegwerf-Instanz.
**Changelog:** 10.1.0-beta.7 (128c7f5): `raw derive` schreibt für PDFs die Header-Felder `images` (Bildseiten-CHECK) und `unmatched` (Seiten der Zuordnungs-WARN), nur wenn nicht leer; der Text von `derived.md` bleibt unverändert. Neue Anweisung `instructions/read-page-images.md` (Schwelle 20 Seiten je Source, darüber Halt und Rückfrage; Lesen von `original.pdf` per Subagent, wo vorhanden), Herkunftsregel in `types/source.guidance.md`, verlinkt aus `wiki-ingest` und `ingest-large-tree.md`; `raw/CONTRACT.md`, Referenz und How-to nachgezogen. pytest, `docs verify`, `instructions verify`, CI (Lauf 721) und `Converters` (Lauf 722) grün. Offen: die Probeläufe IHF und Guide mit Messzahlen in einer Wegwerf-Instanz.
Changelog: Probeläufe auf beta.7 ausgewertet und als Zahlen eingetragen; Halt, Auswahl und Herkunft tragen, Schritt 3 (Subagent) wurde in 0 von 2 Läufen befolgt. Entscheidung 2 nach Option A des Betreibers bestätigt (Option B verworfen, mit Messwerten). Neu: Umsetzung beta.8 (be694e3, CI-Läufe 725/726 grün), Schritt 3 verbindlich plus Entscheidungspunkt. Neues offenes Kriterium: wiederholter IHF-Probelauf auf beta.8 mit Task und Agent in der Allowlist (die erste Allowlist nannte nur Agent, die Probe führt das Werkzeug als Task).
**Changelog:** Probeläufe auf beta.7 ausgewertet und als Zahlen eingetragen; Halt, Auswahl und Herkunft tragen, Schritt 3 (Subagent) wurde in 0 von 2 Läufen befolgt. Entscheidung 2 nach Option A des Betreibers bestätigt (Option B verworfen, mit Messwerten). Neu: Umsetzung beta.8 (be694e3, CI-Läufe 725/726 grün), Schritt 3 verbindlich plus Entscheidungspunkt. Neues offenes Kriterium: wiederholter IHF-Probelauf auf beta.8 mit `Task` und `Agent` in der Allowlist (die erste Allowlist nannte nur `Agent`, die Probe führt das Werkzeug als `Task`).
Changelog: IHF-Probelauf auf 10.1.0-beta.8 durchgeführt und im Body eingetragen (neue Spalte „IHF beta.8“, neuer Abschnitt „Ergebnis der Wiederholung auf beta.8“, „Stand“ und Kriterien angepasst).
Erfüllt (Schritt 3): 1 Agent-Aufruf mit den 16 Seiten aus images:; der Subagent las genau diese 16 Seiten in 6 Read-Aufrufen ohne Rückfrage; die Sitzung rief Read auf original.pdf 0-mal auf; die Source-Seite nennt den Subagenten als Mittler (7 Einträge in „Am Seitenbild gelesen“); Handzeichen-Tafeln S. 48–55: 17 von 17 stimmen am Original (1 Detail bei Zeichen 16 unsicher markiert, keine falsche Aussage).
Zahlen: Subagent 57.403 Token; Kontextzuwachs der Sitzung durch den Bericht ca. 2.400 (Obergrenze ca. 7.500) gegenüber ca. 22.400 beim ersten Lauf; Kosten der vier Aufrufe zusammen 2,07 USD.
Abweichung (offen): Die Probe hielt vor dem Lesen eine Rückfrage zu den Bildern bereit, obwohl Schritt 2 bei 20 oder weniger Seiten „ohne Rückfrage“ sagt. Ein Lauf, Ursache offen. Das Kriterium „liest ohne vorher nachzufragen“ ist als nicht erfüllt markiert; weiter mit /stack-build #234. Hier nichts repariert.
Nebenbefund (Harness, kein Mangel der Anweisung): zwei Berechtigungs-Halts durch WIKITOOL_SESSION_ID=… tools/wikitool …; die Allowlist-Regel mit Variablenpräfix greift nicht, einfache Aufrufe genügen. Ob Task oder Agent den Subagenten freigab, ist nicht getrennt (beide in der Allowlist).
Instanz nicht publiziert (Mass-Update-Gate bei Exit 42 nicht geöffnet), in diesem Repo nichts geändert.
**Changelog:** IHF-Probelauf auf 10.1.0-beta.8 durchgeführt und im Body eingetragen (neue Spalte „IHF beta.8“, neuer Abschnitt „Ergebnis der Wiederholung auf beta.8“, „Stand“ und Kriterien angepasst).
- **Erfüllt (Schritt 3):** 1 Agent-Aufruf mit den 16 Seiten aus `images:`; der Subagent las genau diese 16 Seiten in 6 Read-Aufrufen ohne Rückfrage; die Sitzung rief `Read` auf `original.pdf` 0-mal auf; die Source-Seite nennt den Subagenten als Mittler (7 Einträge in „Am Seitenbild gelesen“); Handzeichen-Tafeln S. 48–55: 17 von 17 stimmen am Original (1 Detail bei Zeichen 16 unsicher markiert, keine falsche Aussage).
- **Zahlen:** Subagent 57.403 Token; Kontextzuwachs der Sitzung durch den Bericht ca. 2.400 (Obergrenze ca. 7.500) gegenüber ca. 22.400 beim ersten Lauf; Kosten der vier Aufrufe zusammen 2,07 USD.
- **Abweichung (offen):** Die Probe hielt vor dem Lesen eine Rückfrage zu den Bildern bereit, obwohl Schritt 2 bei 20 oder weniger Seiten „ohne Rückfrage“ sagt. Ein Lauf, Ursache offen. Das Kriterium „liest ohne vorher nachzufragen“ ist als **nicht erfüllt** markiert; weiter mit `/stack-build #234`. Hier nichts repariert.
- **Nebenbefund (Harness, kein Mangel der Anweisung):** zwei Berechtigungs-Halts durch `WIKITOOL_SESSION_ID=… tools/wikitool …`; die Allowlist-Regel mit Variablenpräfix greift nicht, einfache Aufrufe genügen. Ob `Task` oder `Agent` den Subagenten freigab, ist nicht getrennt (beide in der Allowlist).
- Instanz nicht publiziert (Mass-Update-Gate bei Exit 42 nicht geöffnet), in diesem Repo nichts geändert.
Changelog: 10.1.0-beta.9 (9cb981a), Build-Sitzung nach der Wiederholung auf beta.8. Die Rückfrage der Probe vor dem Lesen kam daher, dass sie read-page-images.md nie geöffnet hatte: Der Verweis in wiki-ingest Schritt 1 war nur ein Hinweis und nannte die Entscheidung, welche Seiten angesehen werden, so, dass sie beim Nutzer zu liegen schien. Schritt 1 schickt die Sitzung jetzt vor Schritt 4 in die Anweisung und sagt, dass die Seitenbilder bis zur Schwelle keine Frage sind; read-page-images.md hat dazu einen neuen Entscheidungspunkt. Keine Code- und keine Teständerung. pytest 3074 bestanden, docs verify und instructions verify grün, CI auf 9cb981a grün (Lauf 727 und 728). Body: Stand, Umsetzung (beta.9), Abweichung (Ursache) und Kriterien nachgeführt. Offen bleibt der Nachweis in einem IHF-Lauf auf beta.9 (Kriterium unter „Akzeptanzkriterien“), danach /stack-close.
**Changelog:** 10.1.0-beta.9 (9cb981a), Build-Sitzung nach der Wiederholung auf beta.8. Die Rückfrage der Probe vor dem Lesen kam daher, dass sie `read-page-images.md` nie geöffnet hatte: Der Verweis in `wiki-ingest` Schritt 1 war nur ein Hinweis und nannte die Entscheidung, welche Seiten angesehen werden, so, dass sie beim Nutzer zu liegen schien. Schritt 1 schickt die Sitzung jetzt vor Schritt 4 in die Anweisung und sagt, dass die Seitenbilder bis zur Schwelle keine Frage sind; `read-page-images.md` hat dazu einen neuen Entscheidungspunkt. Keine Code- und keine Teständerung. `pytest` 3074 bestanden, `docs verify` und `instructions verify` grün, CI auf 9cb981a grün (Lauf 727 und 728). Body: Stand, Umsetzung (beta.9), Abweichung (Ursache) und Kriterien nachgeführt. Offen bleibt der Nachweis in einem IHF-Lauf auf beta.9 (Kriterium unter „Akzeptanzkriterien“), danach `/stack-close`.
Changelog: Abschluss. IHF-Probelauf auf 10.1.0-beta.9 durchgeführt und im Body eingetragen (neuer Abschnitt „Ergebnis der Wiederholung auf beta.9“, „Stand“, Entscheidung 7 und das letzte offene Kriterium angepasst).
Erfüllt: Die Probe öffnete read-page-images.md direkt nach raw derive, vor der Rückfrageliste. Die Liste (Seitenauswahl, Verpflichtung, Capture-Felder) enthielt keine Frage zu den Seitenbildern. Ein Subagent las die 16 Seiten aus images: (6 Read-Aufrufe, 53.945 Token), die Sitzung rief Read auf original.pdf nie auf. Handzeichen S. 48–55: 17 von 17 stimmen am Original.
Beobachtung, kein verfehltes Kriterium: Der Subagent lief im kopflosen Betrieb im Hintergrund, die Besprechung kam deshalb vor seinem Bericht und der Bericht in einer zweiten Nachricht. Die Anweisung bleibt unverändert, bis ein Lauf es als Störung zeigt. Zusätzlich: die Source-Seite wurde in diesem Lauf nicht geschrieben (die Probe hielt an den Rückfragen an), die Herkunftsregel ist unverändert gegenüber beta.8.
Docs:docs/how-to/ingest-a-source.md („reads up to 20 such pages on its own, through a subagent where the harness has one“), raw/CONTRACT.md, types/source.guidance.md und die Verweise aus wiki-ingest/ingest-large-tree.md stimmen mit dem beobachteten Verhalten überein; keine Änderung, kein Bump.
Geprüft: CI auf 9cb981a (Lauf 727, 728) grün; pytest, docs verify, instructions verify grün (beta.9). Die Wegwerf-Instanz ist gelöscht, nichts publiziert, in diesem Repo nichts geändert.
Kette „Konverter-Qualität“: letztes Glied, Nachfolger keiner.
**Changelog:** Abschluss. IHF-Probelauf auf 10.1.0-beta.9 durchgeführt und im Body eingetragen (neuer Abschnitt „Ergebnis der Wiederholung auf beta.9“, „Stand“, Entscheidung 7 und das letzte offene Kriterium angepasst).
- **Erfüllt:** Die Probe öffnete `read-page-images.md` direkt nach `raw derive`, vor der Rückfrageliste. Die Liste (Seitenauswahl, Verpflichtung, Capture-Felder) enthielt keine Frage zu den Seitenbildern. Ein Subagent las die 16 Seiten aus `images:` (6 Read-Aufrufe, 53.945 Token), die Sitzung rief `Read` auf `original.pdf` nie auf. Handzeichen S. 48–55: 17 von 17 stimmen am Original.
- **Beobachtung, kein verfehltes Kriterium:** Der Subagent lief im kopflosen Betrieb im Hintergrund, die Besprechung kam deshalb vor seinem Bericht und der Bericht in einer zweiten Nachricht. Die Anweisung bleibt unverändert, bis ein Lauf es als Störung zeigt. Zusätzlich: die Source-Seite wurde in diesem Lauf nicht geschrieben (die Probe hielt an den Rückfragen an), die Herkunftsregel ist unverändert gegenüber beta.8.
- **Docs:** `docs/how-to/ingest-a-source.md` („reads up to 20 such pages on its own, through a subagent where the harness has one“), `raw/CONTRACT.md`, `types/source.guidance.md` und die Verweise aus `wiki-ingest`/`ingest-large-tree.md` stimmen mit dem beobachteten Verhalten überein; keine Änderung, kein Bump.
- **Geprüft:** CI auf 9cb981a (Lauf 727, 728) grün; `pytest`, `docs verify`, `instructions verify` grün (beta.9). Die Wegwerf-Instanz ist gelöscht, nichts publiziert, in diesem Repo nichts geändert.
- Kette „Konverter-Qualität“: letztes Glied, Nachfolger keiner.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Aus #231 als zweiter Schritt abgetrennt (Betreiber, 2026-10-14). #231 ist geschlossen (10.1.0-beta.5/-beta.6): Der Bildseiten-CHECK nennt bei IHF genau {1, 2, 6–8, 29, 48–55, 81, 96}, also lässt sich jetzt gezielt hinsehen.
Stand (2026-10-15): Fertig und geschlossen. Gebaut in 10.1.0-beta.7 (Commit
128c7f5, CI-Lauf 721,Converters722, Lauf 723 grün). Die ersten Probeläufe bestätigten den Halt über der Schwelle, die Auswahl und die Herkunftsangabe, zeigten aber, dass die Sitzung Schritt 3 nicht befolgte (0 von 2 Läufen). Der Betreiber entschied am 2026-10-15 Option A: Entscheidung 2 bleibt, Schritt 3 wird verbindlich. Veröffentlicht als 10.1.0-beta.8 (be694e3), CI grün (Lauf 725 und 726). Die Wiederholung des IHF-Probelaufs auf beta.8 bestätigte Schritt 3 (Subagent liest, Sitzung nie), zeigte aber eine Rückfrage vor dem Lesen trotz „ohne Rückfrage“ in Schritt 2. Ursache war der bloße Hinweis inwiki-ingestSchritt 1 (siehe „Abweichung“), behoben in 10.1.0-beta.9, Commit9cb981a, CI grün (Lauf 727 und 728). Die Wiederholung auf beta.9 hat den Nachweis erbracht: Die Probe öffneteread-page-images.mdvor ihrer Rückfrageliste, die Liste enthielt keine Frage zu den Seitenbildern, ein Subagent las die 16 Seiten, die Sitzung nie (siehe „Ergebnis der Wiederholung auf beta.9“).Problem
raw deriveist absichtlich modellfrei und deterministisch. Was nur im Bild steht, fehlt im Text: Abbildungen, Diagramme (auch reine Vektorgrafik ohne Bildobjekt), Handzeichen-Tafeln (IHF S. 48–55), gedrehte Tabellen (Girokonten S. 7–13). Vor beta.7 meldete ein CHECK das nur; die Ingest-Sitzung musste selbst entscheiden, ob und wie sie das Original ansieht –wiki-ingestSchritt 1 sagte dazu nur „its output names what to check“.Was nicht in Frage kommt
Ein multimodales Modell für jedes PDF und jede Seite: mehrere tausend Tokens je Seite, nicht reproduzierbar, und Bildeingabe ist je Harness verschieden.
raw derivebleibt modellfrei. Was das Modell sieht, kommt nie nachraw/und nie inderived.md(das nie von Hand bearbeitet wird,raw/CONTRACT.md).Ausgangslage (10.1.0-beta.6)
pdf_layout.image_pages()– Seite mit inhaltlichem Bildobjekt (_content_image) oder Vektor-Cluster (_drawing).pdf_layout.annotate()meldet Seiten, deren Text zu <MIN_COVERAGEzum Layout passt.raw derive, nicht im Header vonderived.md. Nichts im Stack liest diesen Header maschinell.tools/requirements.txthatpypdfundpdfminer.six; keins von beiden rendert.cite add --file <qualifier>unterscheidet schon die Dateien eines Mehrdatei-Source (original.pdfgegenderived.md).Entscheidungen (Betreiber, 2026-10-14/15)
original.pdfselbst (Option a). Keine neue Abhängigkeit, nur ganze Seiten. Ein Renderer (pypdfium2, optional, PNGs an einen gitignorierten Ort, nie nebenderived.md) ist ein eigenes Paket, das erst bei einem dieser Auslöser kommt: ein zweiter Harness braucht es, oder ganze Seiten erweisen sich am Korpus als zu teuer. „Ausschnitt statt ganzer Seite“ entfällt damit vorerst.derived.md. Die Seitenmarke<!-- page N -->ist der Anker. Die Auswahl kommt als Header-Felder inderived.md.types/source.guidance.md, nicht im instanz-eigenen Template. Andere Seiten zitieren eine daraus gewonnene Aussage mitcite add --file original.pdf, Text aus der Ableitung mit--file derived.md. Gehedgt wird nachkb/CONVENTIONS.md§ Hedging.ingest-large-tree.md) gilt die Schwelle je Einheit.Umsetzung
10.1.0-beta.7 (
128c7f5):filters/pdf_layout.py:Annotationträgt zusätzlichunmatched_pages, die Seiten der Zuordnungs-WARN (vorher nur als Warnzeile).filters/pdf.py: zwei neue Header-Felder, nur wenn nicht leer, im Format vonpage_ranges():images(Seiten des Bildseiten-CHECK) undunmatched(Seiten der Zuordnungs-WARN). Reihenfolgemarkings,images,unmatched. CHECK- und WARN-Zeilen auf stdout unverändert, der Text vonderived.mdgleich dem von beta.6.commands/raw/derive.py: Hilfetext nennt beide Felder;tools/CONTRACT.mdunddocs/reference/commands/raw-material-and-uploads.mdneu erzeugt.raw/CONTRACT.md: der Absatz zum CHECK nennt die Felder und verlinkt die neue Anweisung.instructions/read-page-images.md: Auswahl, Schwelle und Halt, Lesen vonoriginal.pdf(Subagent wo vorhanden), Eintrag auf der Source-Seite, nicht gelesene Seiten mit Grund, Harness ohne Bildeingabe. Verlinkt auswiki-ingestSchritt 1 (und Schritt 6 für „Nicht übernommen“) undingest-large-tree.mdSchritt 5a.types/source.guidance.md: Abschnitt „Page images“ mit der Herkunftsregel.docs/how-to/ingest-a-source.md: Aufzählung zum CHECK erweitert, neuer Punkt „Before looking at page images“.test_raw_derive_binary.py):imagesgenau mit den CHECK-Seiten, keinimagesund keinunmatchedohne Bildseite oder ohne unpassende Seite,unmatchedbei erzwungener Zuordnungs-WARN.10.1.0-beta.8 (
be694e3), nach Entscheidung 2 / Option A:instructions/read-page-images.mdSchritt 3: Hat der Harness Subagenten, liest einer die Seiten. Die Sitzung öffnet sie gar nicht, weder vorher noch daneben noch danach zur Kontrolle, und schreibt Schritt 4 aus seinem Bericht.types/source.guidance.md§ Page images („Where a subagent did the reading“) unddocs/how-to/ingest-a-source.md(„through a subagent where the harness has one“). Keine Code- und keine Teständerung.10.1.0-beta.9 (
9cb981a), gegen die Rückfrage vor dem Lesen:instructions/wiki-ingest/SKILL.mdSchritt 1: Der Verweis aufread-page-images.mdwar nur ein Hinweis („decides which of them are looked at, and how“). Jetzt: Die Anweisung wird an dieser Stelle geöffnet und befolgt, vor Schritt 4; bis zur Schwelle werden die Seiten ohne Rückfrage gelesen, sie sind also keine Frage für Schritt 4.instructions/read-page-images.md, neuer Entscheidungspunkt: Wer den Nutzer fragen will, ob die Seiten angesehen werden (etwa in der Besprechung der Kernpunkte), tut es bei 20 oder weniger Seiten nicht, sondern führt die Schritte 3 bis 5 aus und legt das Gelesene mit dem Rest vor.ingest-large-tree.mdSchritt 5a (verweist schon verbindlich: „is followed by“),docs/how-to/ingest-a-source.md(„reads up to 20 such pages on its own“),types/source.guidance.md,raw/CONTRACT.md. Keine Code- und keine Teständerung;pytest3074 bestanden, 4 übersprungen,docs verifyundinstructions verifygrün.Probeläufe (Vorgehen)
Zwei Rollen: eine Probe-Sitzung, die nur die Wegwerf-Instanz sieht (ihr Arbeitsverzeichnis ist die Instanz, nicht dieses Repo, und sie bekommt diesen Body nicht), und der Betreiber (oder eine Beobachter-Sitzung hier im Repo), der beobachtet und misst.
dev-setup.mdSchritt 5), außerhalb dieses Checkouts:tools/wikitool dist export <leerer Scratch-Ordner>, dann dorttools/preflight.shundinstructions/setup-instance.mdwie eine Nutzerin. KB-Sprachede, damit der Abschnitt „Am Seitenbild gelesen“ geprüft wird.testfiles/corpus/pdf/ihf-regeln-2025.pdfnachincoming/der Instanz kopieren, in der Probe-Sitzung nur „Ingest“ sagen. Beobachten: Liest sie ohne Rückfrage, und nur Seiten ausimages:(erwartet 1, 2, 6–8, 29, 48–55, 81, 96)? Liest ein Subagent? Danach die Source-Seite: Handzeichen-Tafeln S. 48–55 mit Seitenzahl, Vermerk, Mittler; jede Tafel gegen das Original prüfen.testfiles/corpus/pdf/d365-licensing-guide-2026-09.pdfebenso. Beobachten: Hält sie vor dem ersten Seitenbild an, nennt sie 25 Seiten und eine Token-Schätzung, schlägt sie eine Auswahl vor? Dann eine Auswahl wählen und prüfen, dass die übrigen Seiten mit Grund unter „Nicht übernommen“ stehen./costvor und nach dem Lesen bzw. die Token-Zahl des Subagenten), Zahl der Einträge im Abschnitt „Am Seitenbild gelesen“. Nur Zahlen in diesen Body, keine Inhalte aus dem Korpus (privat).Wiederholung (nach beta.8, ebenso nach beta.9): nur Schritt 1 und 2 (IHF); der Guide-Lauf wird nicht wiederholt, weil Schritt 2 der Anweisung nur ergänzt wurde. Kopflos (
claude -p) gehörenTaskundAgentin die Allowlist, dazu nur einfachetools/wikitool-Aufrufe (eine Variablenzuweisung davor oder ein verketteter Aufruf passt nicht zur RegelBash(tools/wikitool:*)und hält die Probe an). Zusätzlich messen: die Token des Subagenten getrennt von denen der Sitzung und den Kontextzuwachs der Sitzung beim Lesen. Die Tafeln S. 48–55 werden gegen den Bericht des Subagenten, wie er auf der Source-Seite steht, am Original geprüft. Für beta.9 zu beobachten: Hat die Proberead-page-images.mdgeöffnet, bevor sie dem Nutzer die Kernpunkte vorlegt, und enthält ihre Rückfrageliste keine Frage zu den Seitenbildern?Weicht das Verhalten ab (liest über der Schwelle, übersieht
images:, falsche Herkunft, Rückfrage unter der Schwelle), ist das ein Fehler inread-page-images.mdoder der Verlinkung und geht als Bau-Arbeit zurück an/stack-build #234.Beobachterhinweis (kopflos): Der Lauf auf beta.9 zeigte, dass die Ausgabe einer Fortsetzung mit
--resumenicht in der Datei landet, wenn sie im Terminal ohne Umleitung lief; maßgeblich ist das Protokoll der Sitzung unter~/.claude/projects/<Pfad der Instanz>/<session_id>.jsonl(Hauptsitzung) und…/<session_id>/subagents/(Subagent). Daraus lassen sich Werkzeugaufrufe, Zeitstempel und Token je Aufruf lesen.Ergebnis der Probeläufe (2026-10-15, Stand beta.7; letzte Spalte beta.8)
Durchgeführt als kopflose Claude-Code-Sitzungen (
claude -p,--permission-mode acceptEdits, AllowlistBash(tools/wikitool:*), Read, Write, Edit, Glob, Grep, Agent; beim beta.8-Lauf zusätzlich Task), je Datei ein eigener Prozess, Auftrag nur „Ingest incoming/“. Den Proben wurde nichts zu Seitenbildern,images:, Schwellen oder diesem Issue gesagt. Rückfragen der Proben beantwortete der Beobachter kurz und neutral (Fidelity/Authority, Kernpunkte „passt so“; beim Guide die Auswahl auf höchstens 8 Seiten begrenzt). Instanz frisch ausdist export, Preflight Exit 0,doctorohne Befund, KB-Sprachede, kein Push-Ziel; nichts publiziert, in diesem Repo nichts geändert.images:original.pdfread-page-images.mdnoch nicht geöffnet)images:)images:, in 6 Read-Aufrufen des Subagenten)images:original.pdfderived.md, deshalb unter „Nicht übernommen“ vermerktderived.mdzu korrigieren (vgl. „Decision points“ der Anweisung).tools/wikitool-Aufrufe.Ergebnis der Wiederholung auf beta.8 (2026-10-15, IHF)
Instanz frisch aus
dist exportdes Standes 10.1.0-beta.8 (VERSION,.wikitool-release.json), Preflight Exit 0,doctorohne Befund, KB-Sprachede, Telemetrie aus, kein Push-Ziel, außerhalb dieses Checkouts. Nurihf-regeln-2025.pdfinincoming/. Probe als kopfloser Prozess (claude -p, Modell der Sitzungclaude-sonnet-5-5) mit AllowlistBash(tools/wikitool:*), Read, Write, Edit, Glob, Grep, Task, Agent. Auftrag nur „Ingest incoming/ihf-regeln-2025.pdf“; der Probe wurde nichts zu Seitenbildern,images:, Schwellen, Subagenten oder diesem Issue gesagt. Die Sitzung lief über vierclaude -p-Aufrufe (ein Start, drei Fortsetzungen mit--resume).1-2, 6-8, 29, 48-55, 81, 96(16 Seiten); der Subagent las in 6 Read-Aufrufen (1-2,6-8,29,48-55,81,96) genau diese Seiten, ohne Rückfrage. Read-Aufrufe der Sitzung auforiginal.pdf: 0 (Soll erfüllt). Der Auftrag an den Subagenten nannte Pfad, Seitenliste und Frage, verbot Dateien undwikitool-Aufrufe und nannte kein Modell, wie Schritt 3 es verlangt.Agentwurde unter diesem Namen aufgerufen, die Werkzeugliste der Sitzung führteTask; es gab keine Ablehnung des Subagenten-Aufrufs. Weil beide in der Allowlist standen, ist nicht getrennt, welcher der beiden die Freigabe trug (ungeprüft).tools/wikitool sync(WIKITOOL_SESSION_ID=… tools/wikitool sync) und blieb nach zwei Ablehnungen stehen. Eine zusätzliche RegelBash(WIKITOOL_SESSION_ID=* tools/wikitool:*)griff nicht; erst der Hinweis „nur einfache Aufrufe“ half.doctormeldet die Session-ID überCLAUDE_CODE_SESSION_IDohnehin als gesetzt, die Zuweisung war nicht nötig.publish --no-push, 309 gezählte Dateien, weil die frische Instanz noch keinen Commit hat). Das Gate wurde nicht geöffnet, nichts publiziert, in diesem Repo nichts geändert.Abweichung von
instructions/read-page-images.md(beta.8), Ursache gefunden und behoben: Schritt 2 sagt bei 20 oder weniger Seiten „read all of them, without asking“. Die Probe legte in Schritt 4 trotzdem eine Frage (Nr. 5 der Rückfrageliste) an den Nutzer vor, ob sie die Abbildungen „nachread-page-images.mdnur gezielt ansehen“ oder unter „Nicht übernommen“ führen soll; erst nach der neutralen Antwort las der Subagent. Aus dem Log: Die Probe hatteread-page-images.mdbis zu dieser Frage nicht geöffnet (geöffnet hatte siesession-setup.mdundingest-large-tree.md). Sie kannte nur den Verweis inwiki-ingestSchritt 1, dessen Wortlaut („decides which of them are looked at, and how“) die Entscheidung beim Nutzer vermuten ließ.wiki-ingestSchritt 4 selbst enthält nichts, was die Bilder zum Gesprächspunkt macht. Der Fehler lag also im Verweis, nicht in der Anweisung; behoben in beta.9 (siehe „Umsetzung“), und die Wiederholung auf beta.9 hat gezeigt, dass die Behebung trägt (siehe unten).Ergebnis der Wiederholung auf beta.9 (2026-10-15, IHF)
Instanz frisch aus
dist exportdes Standes 10.1.0-beta.9 (VERSION10.1.0-beta.9), Preflight Exit 0,doctorohne FAIL, KB-Sprachede(das gefülltekb/CONVENTIONS.mddieses Repos übernommen), Personalisierung gestubbt wie in CI, Telemetrie aus, kein Push-Ziel, Basis-Commit, außerhalb dieses Checkouts. Nurihf-regeln-2025.pdfinincoming/. Probe als kopfloser Prozess (claude -p,claude-sonnet-5-5) mit AllowlistBash(tools/wikitool:*), Read, Write, Edit, Glob, Grep, Task, Agent. Auftrag nur „Ingest incoming/ihf-regeln-2025.pdf“; der Probe wurde nichts zu Seitenbildern,images:, Schwellen, Subagenten oder diesem Issue gesagt. Der Start und eine Fortsetzung mit--resumetrugen die Auswertung; eine zweite, gleichlautende Fortsetzung (versehentlich doppelt gestartet) beantwortete nur die offenen Rückfragen noch einmal.images:images: 1-2, 6-8, 29, 48-55, 81, 96)read-page-images.mdgeöffnetraw deriveund vor der Volllektüre vonderived.md, also vor der Rückfrageliste--fidelity/--authorityimages:images:, in 6 Read-Aufrufen des Subagenten) / 0wikitool; Sitzung: 0 Read-Aufrufe auforiginal.pdfimages:.WIKITOOL_SESSION_ID=… tools/wikitool sync(zweimal abgelehnt); der Hinweis „nur einfache Aufrufe“ genügte. Eine Fortsetzung mehr, kein Mangel der Anweisung.Akzeptanzkriterien
derived.mdeines PDFs mit Bildseiten trägtimages:mit genau den Seiten, die der CHECK nennt; eines ohne hat das Feld nicht. Gleiches gilt fürunmatched:und die Zuordnungs-WARN (durch Tests belegt). Ohne die beiden Felder ist der Text unverändert gegenüber beta.6 (der Text-Pfad ist nicht angefasst; der LaufConvertersauf dem Commit, 722, ist grün).instructions/read-page-images.md);wiki-ingestundingest-large-tree.mdverlinken sie.images:(16 von 16, keine weitere).read-page-images.mdSchritt 3 verbietet der Sitzung, die Seitenbilder selbst zu öffnen, wenn der Harness Subagenten hat, und ein Entscheidungspunkt deckt den Versuch ab, „nur zur Kontrolle“ nachzusehen (beta.8,be694e3).TaskundAgentin der Allowlist): Ein Subagent liest die Seiten (16 von 16, genau die ausimages:), die Sitzung ruftReadauforiginal.pdfnicht selbst auf (0 Aufrufe), die Source-Seite nennt den Subagenten als Mittler, und jede beschriebene Tafel S. 48–55 stimmt am Original (17 von 17). Gemessen: Subagent 57.403 Token, Kontextzuwachs der Sitzung durch den Bericht ca. 2.400 (Obergrenze ca. 7.500) gegenüber ca. 22.400 beim ersten Lauf.wiki-ingestSchritt 1 verlangt,read-page-images.mdvor Schritt 4 zu öffnen und zu befolgen, und sagt, dass bis zur Schwelle keine Rückfrage zu den Seiten nötig ist; ein Entscheidungspunkt inread-page-images.mddeckt die Rückfrage in der Besprechung ab (beta.9,9cb981a).read-page-images.mdvor der Rückfrageliste, ihre Rückfrageliste enthält keine Frage zu den Seitenbildern, ein Subagent las die 16 Seiten (genau die ausimages:, 6 Read-Aufrufe, 53.945 Token), die Sitzung riefReadauforiginal.pdfnie selbst auf (0 Aufrufe), und 17 von 17 Handzeichen S. 48–55 stimmen am Original. Das Kriterium „liest bei 20 oder weniger Seiten ohne Rückfrage“ ist damit erfüllt.pytest(3074 bestanden, 4 übersprungen),docs verify,instructions verifygrün (beta.7, beta.8 und beta.9).Converters(Lauf 722) und Lauf 723, allesuccess.be694e3(beta.8) grün: Lauf 725 (verify und pwsh) und Lauf 726, beidesuccess.9cb981a(beta.9) grün: Lauf 727 und Lauf 728, beidesuccess.Convertersstartete nicht: Die Änderung berührt die Konverter-Fläche nicht.Wo die Probeläufe stattfinden: in einer Wegwerf-Instanz außerhalb dieses Repos (
dist exportin den Scratch-Bereich,dev-setup.mdSchritt 5). Nie in diesemkb/: Das Korpus ist privat und wird nicht ins Repo kopiert (dev-setup.mdSchritt 6), undkb/ist keine Spielfläche für Experimente (corpus-policy.md).Versionsteil
Fällt in den laufenden Kandidaten 10.1.0 (Stufe MINOR). Neue Header-Felder, eine neue Anweisung und Guidance sind eine neue Fähigkeit und in beide Richtungen Drop-in: Bestehende Ableitungen bleiben gültig, und keine alte Version liest den Header. Daher
--minor, nur der Kandidatenzähler: 10.1.0-beta.7. Die Folgeänderungen (Schritt 3 verbindlich; Verweis inwiki-ingestSchritt 1 geschärft) sind Anweisungsänderungen und ebenfalls Drop-in:--patchmit--impact low, nur der Kandidatenzähler, 10.1.0-beta.8 und 10.1.0-beta.9. Der Abschluss bringt keine Änderung im Baum und damit keinen weiteren Bump.Kette
Kette „Konverter-Qualität“
Nicht mehr blockiert: #231 ist geschlossen (10.1.0-beta.5/-beta.6). Der präzise Bildseiten-CHECK und die Strukturerkennung (Fließtext, Code, Tabellengitter, Vorlagen, Vektorcluster) sind ausgeliefert; IHF nennt genau {1, 2, 6–8, 29, 48–55, 81, 96}.
status/blockedentfernt.Changelog: Body gegen den Baum von 10.1.0-beta.6 gelesen. Neu: Abschnitt „Stand im Baum“. Er zeigt: Es gibt nur zwei Seitensignale (Bildseiten-CHECK und Zuordnungs-WARN), und der CHECK steht nur auf stdout, nicht in
derived.md. Für Ausschnitte fehlen Koordinaten und Renderer, und außer Claude Code ist kein Harness auf Bildeingabe geprüft. Neu ist auch Entscheidung 5 (Punktwert oder CHECK + WARN), weil der Punktwert drei Signale voraussetzt, die es nicht gibt. Zu den Entscheidungen 1–4 stehen jetzt Empfehlungen; sie sind ausdrücklich nicht entschieden. Die Option (b) rendert an einen gitignorierten Ort statt nebenderived.md, weil die Bilder sonst nachraw/kämen. Das Messkriterium ist als offen markiert, weil #233 nurraw derivemisst. Der Versionsteil steht je Option fest. „Blockiert durch“ ist entfallen (#231 ist geschlossen).Changelog: Die Entscheidungen 1–6 sind getroffen (Betreiber, 2026-10-14/15, alle wie empfohlen).
imagesundunmatched, geteilte Anweisung, Guidance, Tests) und die geschärften Akzeptanzkriterien. Dazu gehören zwei Probeläufe, IHF unter und Guide über der Schwelle, beide in einer Wegwerf-Instanz außerhalb des Repos.--minorim Kandidaten 10.1.0.kind/decisionwird zukind/build, weil alle Fragen beantwortet sind.size/Lwird zusize/M: Es ist eine Sitzung mit mehreren Dateien, einer neuen Anweisung und eigenem Testaufwand.Changelog: 10.1.0-beta.7 (
128c7f5):raw deriveschreibt für PDFs die Header-Felderimages(Bildseiten-CHECK) undunmatched(Seiten der Zuordnungs-WARN), nur wenn nicht leer; der Text vonderived.mdbleibt unverändert. Neue Anweisunginstructions/read-page-images.md(Schwelle 20 Seiten je Source, darüber Halt und Rückfrage; Lesen vonoriginal.pdfper Subagent, wo vorhanden), Herkunftsregel intypes/source.guidance.md, verlinkt auswiki-ingestundingest-large-tree.md;raw/CONTRACT.md, Referenz und How-to nachgezogen. pytest,docs verify,instructions verify, CI (Lauf 721) undConverters(Lauf 722) grün. Offen: die Probeläufe IHF und Guide mit Messzahlen in einer Wegwerf-Instanz.Changelog: Probeläufe auf beta.7 ausgewertet und als Zahlen eingetragen; Halt, Auswahl und Herkunft tragen, Schritt 3 (Subagent) wurde in 0 von 2 Läufen befolgt. Entscheidung 2 nach Option A des Betreibers bestätigt (Option B verworfen, mit Messwerten). Neu: Umsetzung beta.8 (
be694e3, CI-Läufe 725/726 grün), Schritt 3 verbindlich plus Entscheidungspunkt. Neues offenes Kriterium: wiederholter IHF-Probelauf auf beta.8 mitTaskundAgentin der Allowlist (die erste Allowlist nannte nurAgent, die Probe führt das Werkzeug alsTask).Changelog: IHF-Probelauf auf 10.1.0-beta.8 durchgeführt und im Body eingetragen (neue Spalte „IHF beta.8“, neuer Abschnitt „Ergebnis der Wiederholung auf beta.8“, „Stand“ und Kriterien angepasst).
images:; der Subagent las genau diese 16 Seiten in 6 Read-Aufrufen ohne Rückfrage; die Sitzung riefReadauforiginal.pdf0-mal auf; die Source-Seite nennt den Subagenten als Mittler (7 Einträge in „Am Seitenbild gelesen“); Handzeichen-Tafeln S. 48–55: 17 von 17 stimmen am Original (1 Detail bei Zeichen 16 unsicher markiert, keine falsche Aussage)./stack-build #234. Hier nichts repariert.WIKITOOL_SESSION_ID=… tools/wikitool …; die Allowlist-Regel mit Variablenpräfix greift nicht, einfache Aufrufe genügen. ObTaskoderAgentden Subagenten freigab, ist nicht getrennt (beide in der Allowlist).Changelog: 10.1.0-beta.9 (
9cb981a), Build-Sitzung nach der Wiederholung auf beta.8. Die Rückfrage der Probe vor dem Lesen kam daher, dass sieread-page-images.mdnie geöffnet hatte: Der Verweis inwiki-ingestSchritt 1 war nur ein Hinweis und nannte die Entscheidung, welche Seiten angesehen werden, so, dass sie beim Nutzer zu liegen schien. Schritt 1 schickt die Sitzung jetzt vor Schritt 4 in die Anweisung und sagt, dass die Seitenbilder bis zur Schwelle keine Frage sind;read-page-images.mdhat dazu einen neuen Entscheidungspunkt. Keine Code- und keine Teständerung.pytest3074 bestanden,docs verifyundinstructions verifygrün, CI auf9cb981agrün (Lauf 727 und 728). Body: Stand, Umsetzung (beta.9), Abweichung (Ursache) und Kriterien nachgeführt. Offen bleibt der Nachweis in einem IHF-Lauf auf beta.9 (Kriterium unter „Akzeptanzkriterien“), danach/stack-close.Changelog: Abschluss. IHF-Probelauf auf 10.1.0-beta.9 durchgeführt und im Body eingetragen (neuer Abschnitt „Ergebnis der Wiederholung auf beta.9“, „Stand“, Entscheidung 7 und das letzte offene Kriterium angepasst).
read-page-images.mddirekt nachraw derive, vor der Rückfrageliste. Die Liste (Seitenauswahl, Verpflichtung, Capture-Felder) enthielt keine Frage zu den Seitenbildern. Ein Subagent las die 16 Seiten ausimages:(6 Read-Aufrufe, 53.945 Token), die Sitzung riefReadauforiginal.pdfnie auf. Handzeichen S. 48–55: 17 von 17 stimmen am Original.docs/how-to/ingest-a-source.md(„reads up to 20 such pages on its own, through a subagent where the harness has one“),raw/CONTRACT.md,types/source.guidance.mdund die Verweise auswiki-ingest/ingest-large-tree.mdstimmen mit dem beobachteten Verhalten überein; keine Änderung, kein Bump.9cb981a(Lauf 727, 728) grün;pytest,docs verify,instructions verifygrün (beta.9). Die Wegwerf-Instanz ist gelöscht, nichts publiziert, in diesem Repo nichts geändert.