Angelegt am 2026-10-09 in der Design-Sitzung zu #87/#200 (Stand 9.0.0, 7cfafd7). Herausgelöst aus dem Stub #200, Punkt 2: „erstelle einen Index des Moduls, berücksichtige Subpages“ für learn.microsoft.com/.*/powershell/module/.*. Der Betreiber hat die Vorschläge am 2026-10-10 bestätigt.
Stand: erledigt. Gebaut in 10.0.0-beta.6, Commit 21cdd78, verifiziert durch die CI-Läufe 663 (verify und pwsh) und 664, beide grün. Beim Abschluss nachgezogen in 10.0.0-beta.7, Commit aed8467: raw/CONTRACT.md und wiki-ingest sagen, wer --scope anstößt (Entwurf Punkt 1). Verifiziert durch die CI-Läufe 665 und 666, beide grün.
Problem
Manche Quellen sind nicht eine Seite, sondern eine Seitenfamilie: Ein PowerShell-Modul auf learn.microsoft.com hat eine Übersichtsseite und eine Unterseite pro Cmdlet. Vorher holte raw fetch genau eine URL. Den Rest holte jede Session nach eigenem Gutdünken einzeln oder gar nicht, und die Seiten landeten als lose Bundles ohne Zusammenhang in raw/.
Entscheidungen des Betreibers (2026-10-10)
robots.txt wird für die Unterseiten beachtet, mit klarer Verweigerung statt stillem Auslassen. Für die eine Seite ohne --scope bleibt es wie zuvor.
Höchstzahl und Pause: Standard sind 200 Seiten und 1 s Pause, änderbar als Einstellung der Stufe instance (#207).
Entwurf
Der Site-Handler bietet den Umfang an, raw fetch holt ihn nur auf ausdrücklichen Wunsch.
Ein Handler (#200) kann zu einer Seite eine Liste von Unterseiten-URLs nennen. Er leitet sie deterministisch aus dem HTML der Seite ab, über Links unter einem Pfadpräfix. Der Baustein ist als Daten ausdrückbar (Feld subpages der Handler-Datei: links als Selektor, prefix mit {page} als Standard), damit Handler der Instanz (#210) ihn auch nutzen können.
Ohne Flag holt raw fetch wie bisher nur die eine Seite und gibt eine CHECK-Zeile aus: „this page is an index with N subpage(s) - rerun with --scope to fetch them as one bundle“. Die Zeile ersetzt die vorläufige Unterseiten-Zeile aus #200.
Der ausdrückliche Wunsch ist der des Nutzers: Der Agent legt ihm die CHECK-Zeile vor und holt mit --scope nur auf seine Zustimmung, nachdem er das Einzelpaar aus incoming/ entfernt hat. Das ist kein Folgen von Links aus der Quelle, weil der Handler und nicht die Seite bestimmt, welche Links zählen (raw/CONTRACT.md, wiki-ingest).
raw fetch <url> --scope holt die Seite und alle angebotenen Unterseiten und schreibt einen Ordner incoming/<stem>/: die Übersichtsseite und jede Unterseite als Paar <name>.html + <name>.md wie bei #120, dazu ein Manifest mit URL, Abrufzeit und sha256 pro Seite.
Grenzen: nur derselbe Host wie die Ausgangs-URL, nur die vom Handler genannten URLs (kein Folgen weiterer Links), robots.txt (Entscheidung 1), Höchstzahl und Pause (Entscheidung 2). Überschreitet die Liste die Höchstzahl → exit 1, nichts geschrieben. Verbietet robots.txt eine Unterseite → exit 1 mit der URL, nichts geschrieben. Ist die robots.txt nicht lesbar (5xx, nicht erreichbar), wird ebenfalls nicht geholt; eine fehlende (4xx) erlaubt alles.
Prüfung vor dem ersten Schreiben wie bei raw derive: Pfadbudget für den tiefsten Pfad unter raw/<YYYY>/<MM>/, Zielordner existiert schon → exit 1. Schlägt ein einzelner Abruf fehl → exit 1, incoming/ unverändert. Die Seiten werden erst in einen temporären Ort geholt und dann als Ganzes verschoben.
raw accept incoming/<stem> nimmt den Ordner unverändert an. Eine neue Fassung desselben Moduls ist dieselbe Frage wie #201.
Entschieden beim Bau: Name des Manifests ist _scope.json._capture.json ist die Kennung für erfasste Repositories, die raw status liest; das Manifest bekommt deshalb einen eigenen Namen, und der Weg zur neuen Fassung bleibt bei #201.
Betroffene Dateien
das Modul für raw fetch nach #206 (tools/chemenu/commands/raw/fetch.py), tools/chemenu/web_capture.py (robots.txt über urllib.robotparser)
die Site-Handler-Registry aus #200 (Baustein Unterseiten), die Daten-Handler aus #210
tools/chemenu/config_shapes.py: Höchstzahl und Pause (nach #207)
Kommando-Record von raw fetch (Flag --scope, network: yes, Exit-Status)
raw/CONTRACT.md § Getting a URL in, sites/CONTRACT.md, instructions/wiki-ingest/SKILL.md, tools/README.md, docs/how-to/ingest-a-source.md, docs/how-to/write-a-site-handler.md, docs/reference/configuration.md
Tests mit lokalem HTTP-Server wie in test_raw_fetch.py (neu: test_raw_fetch_scope.py)
Akzeptanzkriterien
Ohne --scope ist das Ergebnis von raw fetch für eine Übersichtsseite gleich wie vorher, plus genau eine CHECK-Zeile mit der Zahl der Unterseiten.
Mit --scope und einem Testserver mit Übersicht und drei Unterseiten entsteht incoming/<stem>/ mit vier Paaren und dem Manifest; jedes .html ist byte-identisch mit der Antwort des Servers.
Der Testserver erhält keine Anfrage für einen Link, den der Handler nicht genannt hat, und keine an einen anderen Host.
Verbietet die robots.txt des Testservers eine Unterseite → exit 1, die URL steht in der Ausgabe, incoming/ exakt wie vorher.
Ein Fehler beim dritten Abruf → exit 1, incoming/ exakt wie vorher.
Mehr Unterseiten als die Höchstzahl → exit 1 vor dem ersten Abruf einer Unterseite. Eine geänderte Höchstzahl in der Instanz-Einstellung wirkt.
raw accept incoming/<stem> nimmt den Ordner ohne Verweigerung an.
pytest, docs verify, instructions verify grün; CI grün (Läufe 663 und 664; nach dem Nachziehen 665 und 666).
Versionsteil
--minor. Neues Flag. Ohne Flag ändert sich nur eine zusätzliche CHECK-Zeile. Drop-in in beide Richtungen.
> Angelegt am 2026-10-09 in der Design-Sitzung zu #87/#200 (Stand `9.0.0`, `7cfafd7`). Herausgelöst aus dem Stub #200, Punkt 2: „erstelle einen Index des Moduls, berücksichtige Subpages“ für `learn.microsoft.com/.*/powershell/module/.*`. Der Betreiber hat die Vorschläge am 2026-10-10 bestätigt.
>
> **Stand: erledigt.** Gebaut in `10.0.0-beta.6`, Commit `21cdd78`, verifiziert durch die CI-Läufe [663](https://gitea.nehmer.net/torben/chemenu/actions/runs/663) (verify und pwsh) und [664](https://gitea.nehmer.net/torben/chemenu/actions/runs/664), beide grün. Beim Abschluss nachgezogen in `10.0.0-beta.7`, Commit `aed8467`: `raw/CONTRACT.md` und `wiki-ingest` sagen, wer `--scope` anstößt (Entwurf Punkt 1). Verifiziert durch die CI-Läufe [665](https://gitea.nehmer.net/torben/chemenu/actions/runs/665) und [666](https://gitea.nehmer.net/torben/chemenu/actions/runs/666), beide grün.
## Problem
Manche Quellen sind nicht eine Seite, sondern eine Seitenfamilie: Ein PowerShell-Modul auf learn.microsoft.com hat eine Übersichtsseite und eine Unterseite pro Cmdlet. Vorher holte `raw fetch` genau eine URL. Den Rest holte jede Session nach eigenem Gutdünken einzeln oder gar nicht, und die Seiten landeten als lose Bundles ohne Zusammenhang in `raw/`.
## Entscheidungen des Betreibers (2026-10-10)
1. **`robots.txt` wird für die Unterseiten beachtet**, mit klarer Verweigerung statt stillem Auslassen. Für die eine Seite ohne `--scope` bleibt es wie zuvor.
2. **Höchstzahl und Pause:** Standard sind 200 Seiten und 1 s Pause, änderbar als Einstellung der Stufe `instance` (#207).
## Entwurf
1. **Der Site-Handler bietet den Umfang an, `raw fetch` holt ihn nur auf ausdrücklichen Wunsch.**
- Ein Handler (#200) kann zu einer Seite eine Liste von Unterseiten-URLs nennen. Er leitet sie deterministisch aus dem HTML der Seite ab, über Links unter einem Pfadpräfix. Der Baustein ist als Daten ausdrückbar (Feld `subpages` der Handler-Datei: `links` als Selektor, `prefix` mit `{page}` als Standard), damit Handler der Instanz (#210) ihn auch nutzen können.
- Ohne Flag holt `raw fetch` wie bisher nur die eine Seite und gibt eine `CHECK`-Zeile aus: „this page is an index with N subpage(s) - rerun with `--scope` to fetch them as one bundle“. Die Zeile ersetzt die vorläufige Unterseiten-Zeile aus #200.
- Der ausdrückliche Wunsch ist der des Nutzers: Der Agent legt ihm die `CHECK`-Zeile vor und holt mit `--scope` nur auf seine Zustimmung, nachdem er das Einzelpaar aus `incoming/` entfernt hat. Das ist kein Folgen von Links aus der Quelle, weil der Handler und nicht die Seite bestimmt, welche Links zählen (`raw/CONTRACT.md`, `wiki-ingest`).
2. **`raw fetch <url> --scope`** holt die Seite und alle angebotenen Unterseiten und schreibt einen Ordner `incoming/<stem>/`: die Übersichtsseite und jede Unterseite als Paar `<name>.html` + `<name>.md` wie bei #120, dazu ein Manifest mit URL, Abrufzeit und sha256 pro Seite.
3. **Grenzen:** nur derselbe Host wie die Ausgangs-URL, nur die vom Handler genannten URLs (kein Folgen weiterer Links), `robots.txt` (Entscheidung 1), Höchstzahl und Pause (Entscheidung 2). Überschreitet die Liste die Höchstzahl → exit 1, nichts geschrieben. Verbietet `robots.txt` eine Unterseite → exit 1 mit der URL, nichts geschrieben. Ist die `robots.txt` nicht lesbar (5xx, nicht erreichbar), wird ebenfalls nicht geholt; eine fehlende (4xx) erlaubt alles.
4. **Prüfung vor dem ersten Schreiben** wie bei `raw derive`: Pfadbudget für den tiefsten Pfad unter `raw/<YYYY>/<MM>/`, Zielordner existiert schon → exit 1. Schlägt ein einzelner Abruf fehl → exit 1, `incoming/` unverändert. Die Seiten werden erst in einen temporären Ort geholt und dann als Ganzes verschoben.
5. `raw accept incoming/<stem>` nimmt den Ordner unverändert an. Eine neue Fassung desselben Moduls ist dieselbe Frage wie #201.
**Entschieden beim Bau: Name des Manifests ist `_scope.json`.** `_capture.json` ist die Kennung für erfasste Repositories, die `raw status` liest; das Manifest bekommt deshalb einen eigenen Namen, und der Weg zur neuen Fassung bleibt bei #201.
## Betroffene Dateien
- das Modul für `raw fetch` nach #206 (`tools/chemenu/commands/raw/fetch.py`), `tools/chemenu/web_capture.py` (`robots.txt` über `urllib.robotparser`)
- die Site-Handler-Registry aus #200 (Baustein Unterseiten), die Daten-Handler aus #210
- `tools/chemenu/config_shapes.py`: Höchstzahl und Pause (nach #207)
- Kommando-Record von `raw fetch` (Flag `--scope`, `network: yes`, Exit-Status)
- `raw/CONTRACT.md` § Getting a URL in, `sites/CONTRACT.md`, `instructions/wiki-ingest/SKILL.md`, `tools/README.md`, `docs/how-to/ingest-a-source.md`, `docs/how-to/write-a-site-handler.md`, `docs/reference/configuration.md`
- Tests mit lokalem HTTP-Server wie in `test_raw_fetch.py` (neu: `test_raw_fetch_scope.py`)
## Akzeptanzkriterien
- [x] Ohne `--scope` ist das Ergebnis von `raw fetch` für eine Übersichtsseite gleich wie vorher, plus genau eine `CHECK`-Zeile mit der Zahl der Unterseiten.
- [x] Mit `--scope` und einem Testserver mit Übersicht und drei Unterseiten entsteht `incoming/<stem>/` mit vier Paaren und dem Manifest; jedes `.html` ist byte-identisch mit der Antwort des Servers.
- [x] Der Testserver erhält keine Anfrage für einen Link, den der Handler nicht genannt hat, und keine an einen anderen Host.
- [x] Verbietet die `robots.txt` des Testservers eine Unterseite → exit 1, die URL steht in der Ausgabe, `incoming/` exakt wie vorher.
- [x] Ein Fehler beim dritten Abruf → exit 1, `incoming/` exakt wie vorher.
- [x] Mehr Unterseiten als die Höchstzahl → exit 1 vor dem ersten Abruf einer Unterseite. Eine geänderte Höchstzahl in der Instanz-Einstellung wirkt.
- [x] `raw accept incoming/<stem>` nimmt den Ordner ohne Verweigerung an.
- [x] `pytest`, `docs verify`, `instructions verify` grün; CI grün (Läufe 663 und 664; nach dem Nachziehen 665 und 666).
## Versionsteil
**`--minor`.** Neues Flag. Ohne Flag ändert sich nur eine zusätzliche `CHECK`-Zeile. Drop-in in beide Richtungen.
## Kette
Kette „Beschaffung und Konfiguration“
- Vorgänger: #210
- Nachfolger: #169
Changelog: Die Vorschläge sind bestätigt (2026-10-10): robots.txt beachten, 200 Seiten und 1 s Pause als Standard, änderbar als Instanz-Einstellung. Der Name des Manifests ist jetzt eine Prüfung im Bau mit festgelegter Folge statt einer offenen Frage. Der Baustein Unterseiten ist als Daten ausdrückbar (#210). Vorgänger ist jetzt #210, weil #210 in die Kette eingefügt wurde. kind/decision → kind/build, blockiert bleibt es durch #200.
**Changelog:** Die Vorschläge sind bestätigt (2026-10-10): `robots.txt` beachten, 200 Seiten und 1 s Pause als Standard, änderbar als Instanz-Einstellung. Der Name des Manifests ist jetzt eine Prüfung im Bau mit festgelegter Folge statt einer offenen Frage. Der Baustein Unterseiten ist als Daten ausdrückbar (#210). Vorgänger ist jetzt #210, weil #210 in die Kette eingefügt wurde. `kind/decision` → `kind/build`, blockiert bleibt es durch #200.
Nicht mehr blockiert:status/blocked entfernt. Der im Body genannte Blocker #200 ist geschlossen, und #210 (Vorgänger in der Kette, liefert die Daten-Handler, auf die dieses Paket aufbaut) ist es jetzt auch (10.0.0-beta.4/beta.5, CI grün). Der Satz „Blockiert durch #200“ im Body ist damit überholt; ihn zu bereinigen ist Sache der nächsten Sitzung, die das Paket aufnimmt.
**Nicht mehr blockiert:** `status/blocked` entfernt. Der im Body genannte Blocker #200 ist geschlossen, und #210 (Vorgänger in der Kette, liefert die Daten-Handler, auf die dieses Paket aufbaut) ist es jetzt auch (`10.0.0-beta.4`/`beta.5`, CI grün). Der Satz „Blockiert durch #200“ im Body ist damit überholt; ihn zu bereinigen ist Sache der nächsten Sitzung, die das Paket aufnimmt.
Bau-Sitzung, 2026-10-11:raw fetch <url> --scope ist in 10.0.0-beta.6 veröffentlicht (Commit 21cdd78, CI-Läufe 663 und 664 grün).
Neuer Baustein subpages in den Handler-Dateien (links-Selektor, prefix mit {page} als Standard), im Schema und in sites/CONTRACT.md; der Stack-Handler für Modulübersichten auf learn.microsoft.com nutzt ihn anstelle der vorläufigen Hinweiszeile.
Ohne --scope kommt genau eine CHECK-Zeile mit der Zahl der Unterseiten. Mit --scope entsteht incoming/<stem>/ mit einem Paar je Seite und _scope.json (Manifestname entschieden, siehe Body), zuerst in einem temporären Ordner, dann als Ganzes verschoben.
robots.txt wird für die Unterseiten beachtet (verboten oder nicht lesbar → exit 1; fehlend → erlaubt). Neue Einstellungen sites.max_pages (200) und sites.pause_seconds (1), Stufe instance.
Abweichung vom Entwurf: keine; ergänzt wurde, dass eine nicht lesbare robots.txt die Abholung verweigert.
Tests: neues test_raw_fetch_scope.py mit echtem lokalem HTTP-Server deckt alle Akzeptanzkriterien ab. Docs: raw/CONTRACT.md, sites/CONTRACT.md, How-tos, Konfigurationsreferenz und Kommandoreferenz nachgezogen.
**Bau-Sitzung, 2026-10-11:** `raw fetch <url> --scope` ist in `10.0.0-beta.6` veröffentlicht (Commit `21cdd78`, CI-Läufe 663 und 664 grün).
- Neuer Baustein `subpages` in den Handler-Dateien (`links`-Selektor, `prefix` mit `{page}` als Standard), im Schema und in `sites/CONTRACT.md`; der Stack-Handler für Modulübersichten auf learn.microsoft.com nutzt ihn anstelle der vorläufigen Hinweiszeile.
- Ohne `--scope` kommt genau eine `CHECK`-Zeile mit der Zahl der Unterseiten. Mit `--scope` entsteht `incoming/<stem>/` mit einem Paar je Seite und `_scope.json` (Manifestname entschieden, siehe Body), zuerst in einem temporären Ordner, dann als Ganzes verschoben.
- `robots.txt` wird für die Unterseiten beachtet (verboten oder nicht lesbar → exit 1; fehlend → erlaubt). Neue Einstellungen `sites.max_pages` (200) und `sites.pause_seconds` (1), Stufe `instance`.
- Abweichung vom Entwurf: keine; ergänzt wurde, dass eine nicht lesbare `robots.txt` die Abholung verweigert.
- Tests: neues `test_raw_fetch_scope.py` mit echtem lokalem HTTP-Server deckt alle Akzeptanzkriterien ab. Docs: `raw/CONTRACT.md`, `sites/CONTRACT.md`, How-tos, Konfigurationsreferenz und Kommandoreferenz nachgezogen.
Abschluss, 2026-10-11: Body geprüft und in Endfassung gebracht. Ein veralteter Satz war nachzuziehen: raw/CONTRACT.md erlaubte raw fetch nur für eine URL, die der Nutzer genannt hat, und --scope holt Links der Seite. Jetzt sagen raw/CONTRACT.md und wiki-ingest, dass --scope die Entscheidung des Nutzers ist (die CHECK-Zeile wird ihm vorgelegt, das Einzelpaar vorher entfernt) und warum es kein Folgen von Links aus der Quelle ist. Veröffentlicht in 10.0.0-beta.7, Commit aed8467, CI-Läufe 665 und 666 grün. Die übrigen Docs (sites/CONTRACT.md, How-tos, Referenzen, kb/CONTRACT.md zu raw_files eines Ordners) stimmen; docs/explanation/ beschreibt raw fetch nicht und war nicht betroffen.
Changelog: raw fetch <url> --scope holt eine Seite und die Unterseiten, die ihr Site-Handler anbietet, als einen Ordner in incoming/ (10.0.0-beta.6, nachgezogen in 10.0.0-beta.7).
**Abschluss, 2026-10-11:** Body geprüft und in Endfassung gebracht. Ein veralteter Satz war nachzuziehen: `raw/CONTRACT.md` erlaubte `raw fetch` nur für eine URL, die der Nutzer genannt hat, und `--scope` holt Links der Seite. Jetzt sagen `raw/CONTRACT.md` und `wiki-ingest`, dass `--scope` die Entscheidung des Nutzers ist (die `CHECK`-Zeile wird ihm vorgelegt, das Einzelpaar vorher entfernt) und warum es kein Folgen von Links aus der Quelle ist. Veröffentlicht in `10.0.0-beta.7`, Commit `aed8467`, CI-Läufe 665 und 666 grün. Die übrigen Docs (`sites/CONTRACT.md`, How-tos, Referenzen, `kb/CONTRACT.md` zu `raw_files` eines Ordners) stimmen; `docs/explanation/` beschreibt `raw fetch` nicht und war nicht betroffen.
Changelog: `raw fetch <url> --scope` holt eine Seite und die Unterseiten, die ihr Site-Handler anbietet, als einen Ordner in `incoming/` (`10.0.0-beta.6`, nachgezogen in `10.0.0-beta.7`).
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.
Problem
Manche Quellen sind nicht eine Seite, sondern eine Seitenfamilie: Ein PowerShell-Modul auf learn.microsoft.com hat eine Übersichtsseite und eine Unterseite pro Cmdlet. Vorher holte
raw fetchgenau eine URL. Den Rest holte jede Session nach eigenem Gutdünken einzeln oder gar nicht, und die Seiten landeten als lose Bundles ohne Zusammenhang inraw/.Entscheidungen des Betreibers (2026-10-10)
robots.txtwird für die Unterseiten beachtet, mit klarer Verweigerung statt stillem Auslassen. Für die eine Seite ohne--scopebleibt es wie zuvor.instance(#207).Entwurf
raw fetchholt ihn nur auf ausdrücklichen Wunsch.subpagesder Handler-Datei:linksals Selektor,prefixmit{page}als Standard), damit Handler der Instanz (#210) ihn auch nutzen können.raw fetchwie bisher nur die eine Seite und gibt eineCHECK-Zeile aus: „this page is an index with N subpage(s) - rerun with--scopeto fetch them as one bundle“. Die Zeile ersetzt die vorläufige Unterseiten-Zeile aus #200.CHECK-Zeile vor und holt mit--scopenur auf seine Zustimmung, nachdem er das Einzelpaar ausincoming/entfernt hat. Das ist kein Folgen von Links aus der Quelle, weil der Handler und nicht die Seite bestimmt, welche Links zählen (raw/CONTRACT.md,wiki-ingest).raw fetch <url> --scopeholt die Seite und alle angebotenen Unterseiten und schreibt einen Ordnerincoming/<stem>/: die Übersichtsseite und jede Unterseite als Paar<name>.html+<name>.mdwie bei #120, dazu ein Manifest mit URL, Abrufzeit und sha256 pro Seite.robots.txt(Entscheidung 1), Höchstzahl und Pause (Entscheidung 2). Überschreitet die Liste die Höchstzahl → exit 1, nichts geschrieben. Verbietetrobots.txteine Unterseite → exit 1 mit der URL, nichts geschrieben. Ist dierobots.txtnicht lesbar (5xx, nicht erreichbar), wird ebenfalls nicht geholt; eine fehlende (4xx) erlaubt alles.raw derive: Pfadbudget für den tiefsten Pfad unterraw/<YYYY>/<MM>/, Zielordner existiert schon → exit 1. Schlägt ein einzelner Abruf fehl → exit 1,incoming/unverändert. Die Seiten werden erst in einen temporären Ort geholt und dann als Ganzes verschoben.raw accept incoming/<stem>nimmt den Ordner unverändert an. Eine neue Fassung desselben Moduls ist dieselbe Frage wie #201.Entschieden beim Bau: Name des Manifests ist
_scope.json._capture.jsonist die Kennung für erfasste Repositories, dieraw statusliest; das Manifest bekommt deshalb einen eigenen Namen, und der Weg zur neuen Fassung bleibt bei #201.Betroffene Dateien
raw fetchnach #206 (tools/chemenu/commands/raw/fetch.py),tools/chemenu/web_capture.py(robots.txtüberurllib.robotparser)tools/chemenu/config_shapes.py: Höchstzahl und Pause (nach #207)raw fetch(Flag--scope,network: yes, Exit-Status)raw/CONTRACT.md§ Getting a URL in,sites/CONTRACT.md,instructions/wiki-ingest/SKILL.md,tools/README.md,docs/how-to/ingest-a-source.md,docs/how-to/write-a-site-handler.md,docs/reference/configuration.mdtest_raw_fetch.py(neu:test_raw_fetch_scope.py)Akzeptanzkriterien
--scopeist das Ergebnis vonraw fetchfür eine Übersichtsseite gleich wie vorher, plus genau eineCHECK-Zeile mit der Zahl der Unterseiten.--scopeund einem Testserver mit Übersicht und drei Unterseiten entstehtincoming/<stem>/mit vier Paaren und dem Manifest; jedes.htmlist byte-identisch mit der Antwort des Servers.robots.txtdes Testservers eine Unterseite → exit 1, die URL steht in der Ausgabe,incoming/exakt wie vorher.incoming/exakt wie vorher.raw accept incoming/<stem>nimmt den Ordner ohne Verweigerung an.pytest,docs verify,instructions verifygrün; CI grün (Läufe 663 und 664; nach dem Nachziehen 665 und 666).Versionsteil
--minor. Neues Flag. Ohne Flag ändert sich nur eine zusätzlicheCHECK-Zeile. Drop-in in beide Richtungen.Kette
Kette „Beschaffung und Konfiguration“
torben referenced this issue2026-10-09 21:41:18 +00:00
torben referenced this issue2026-10-10 06:15:36 +00:00
Changelog: Die Vorschläge sind bestätigt (2026-10-10):
robots.txtbeachten, 200 Seiten und 1 s Pause als Standard, änderbar als Instanz-Einstellung. Der Name des Manifests ist jetzt eine Prüfung im Bau mit festgelegter Folge statt einer offenen Frage. Der Baustein Unterseiten ist als Daten ausdrückbar (#210). Vorgänger ist jetzt #210, weil #210 in die Kette eingefügt wurde.kind/decision→kind/build, blockiert bleibt es durch #200.Nicht mehr blockiert:
status/blockedentfernt. Der im Body genannte Blocker #200 ist geschlossen, und #210 (Vorgänger in der Kette, liefert die Daten-Handler, auf die dieses Paket aufbaut) ist es jetzt auch (10.0.0-beta.4/beta.5, CI grün). Der Satz „Blockiert durch #200“ im Body ist damit überholt; ihn zu bereinigen ist Sache der nächsten Sitzung, die das Paket aufnimmt.Bau-Sitzung, 2026-10-11:
raw fetch <url> --scopeist in10.0.0-beta.6veröffentlicht (Commit21cdd78, CI-Läufe 663 und 664 grün).subpagesin den Handler-Dateien (links-Selektor,prefixmit{page}als Standard), im Schema und insites/CONTRACT.md; der Stack-Handler für Modulübersichten auf learn.microsoft.com nutzt ihn anstelle der vorläufigen Hinweiszeile.--scopekommt genau eineCHECK-Zeile mit der Zahl der Unterseiten. Mit--scopeentstehtincoming/<stem>/mit einem Paar je Seite und_scope.json(Manifestname entschieden, siehe Body), zuerst in einem temporären Ordner, dann als Ganzes verschoben.robots.txtwird für die Unterseiten beachtet (verboten oder nicht lesbar → exit 1; fehlend → erlaubt). Neue Einstellungensites.max_pages(200) undsites.pause_seconds(1), Stufeinstance.robots.txtdie Abholung verweigert.test_raw_fetch_scope.pymit echtem lokalem HTTP-Server deckt alle Akzeptanzkriterien ab. Docs:raw/CONTRACT.md,sites/CONTRACT.md, How-tos, Konfigurationsreferenz und Kommandoreferenz nachgezogen.Abschluss, 2026-10-11: Body geprüft und in Endfassung gebracht. Ein veralteter Satz war nachzuziehen:
raw/CONTRACT.mderlaubteraw fetchnur für eine URL, die der Nutzer genannt hat, und--scopeholt Links der Seite. Jetzt sagenraw/CONTRACT.mdundwiki-ingest, dass--scopedie Entscheidung des Nutzers ist (dieCHECK-Zeile wird ihm vorgelegt, das Einzelpaar vorher entfernt) und warum es kein Folgen von Links aus der Quelle ist. Veröffentlicht in10.0.0-beta.7, Commitaed8467, CI-Läufe 665 und 666 grün. Die übrigen Docs (sites/CONTRACT.md, How-tos, Referenzen,kb/CONTRACT.mdzuraw_fileseines Ordners) stimmen;docs/explanation/beschreibtraw fetchnicht und war nicht betroffen.Changelog:
raw fetch <url> --scopeholt eine Seite und die Unterseiten, die ihr Site-Handler anbietet, als einen Ordner inincoming/(10.0.0-beta.6, nachgezogen in10.0.0-beta.7).