Bugreport-Sammler: eine Installation erzeugt auf Anfrage einen vollständigen Fehlerbericht zum Hochladen #157

Closed
opened 2026-09-27 08:46:29 +00:00 by torben · 5 comments
Owner

Teilpaket von #140. Entschieden: D10 (2026-09-27) – der Sammler ist Pflicht, die Pseudonymisierung der optionale Aufsatz #158. Dazu D22 und D23 (2026-09-28), bei D23 samt Zusatzfrage: Seitentitel stehen standardmäßig nicht im Bericht. Präzisiert am 2026-09-30 durch E1–E3 (unten).

Stand

2026-09-30: umgesetzt und veröffentlicht in 8.0.0-beta.5 (Commit f9c047b) und 8.0.0-beta.6 (Commit 4f0622d, nur ein Zusatz in der Instruktion). Windows ist auf dem Zielsystem noch von Hand zu prüfen; das trägt #151 (siehe Abhängigkeiten).

Warum

Der Installationslauf in #140 ließ sich nur analysieren, weil ein ausführlicher Tatsachenbericht vorlag. Den hatte der Betreiber von Hand angestoßen. Die Anforderung (Betreiber, 2026-09-27):

  • Eine manuelle Instruktion, mit der eine Installation einen vollständigen Bugreport erzeugt, gern mit temporären Dateien zum Hochladen.
  • Wichtig ist der Sammler.
  • Ohne Pseudonymisierung geht der Bericht über einen sicheren Kanal direkt in die Analyse, nicht über den Issue-Tracker.

Entscheidungen 2026-09-30 (Betreiber)

  • E1 Trace und Titelschutz. Der Sitzungs-Trace kommt standardmäßig in den Bericht (D23), --no-trace schließt ihn aus. Der Titelschutz gilt für alles, was der Sammler selbst erzeugt. Trace, Chronologie und Transkripte führt das Manifest als „may contain page content and titles“. Begründung: Ein Trace enthält Prompts und Tool-Ausgaben im Klartext. In einer ausgelieferten Instanz existiert er praktisch nur, weil der Mensch für die Reproduktion WIKI_TRACE=1 gesetzt hat, und dann will er ihn im Bericht haben.
  • E2 Umgebungsvariablen. Alle Namen kommen in den Bericht, Werte nur für eine Positivliste (PATH, Shell und Terminal, LANG/LC_*, PYTHON*, VIRTUAL_ENV, WIKI_*, WIKITOOL_*, CHEMENU_*, Harness-Marker, MSYSTEM, COMSPEC, PSModulePath). Alle anderen erscheinen als <not collected>. Die Namensregel für Geheimnisse gilt auch innerhalb der Positivliste (WIKITOOL_UPDATE_TOKEN → <removed>). Begründung: Ein Filter nur nach Namen verfehlt Geheimnisse wie GH_PAT oder DATABASE_URL, ein voller Dump enthält viel Privates.
  • E3 Eigene Session-ID. Die zählenden Aufrufe (instructions verify, docs verify) laufen unter WIKITOOL_SESSION_ID=bugreport-<zeitstempel>, mit demselben Stempel wie das Bündel. Die budgetfreien (version show, doctor, budget status) erben die ID des Aufrufers. Begründung:
    • Die Lage vor Ort ist oft ein erschöpftes Budget; mit geerbter ID würden die beiden Prüfungen genau dann abgelehnt, wenn der Bericht sie braucht.
    • Der Sammler verbraucht das Budget der Sitzung nicht und löst den Loop-Breaker nicht aus.
    • Die Gate-Regel bleibt gewahrt: Der Sammler kommt an nichts vorbei, er führt zwei feste Lesebefehle aus, und die ID-Grenze steht im Code, nicht in der Hand des Agenten.
    • doctor und budget status beschreiben die Sitzung des Nutzers, darum erben sie die ID.
    • Die zählenden Aufrufe schreiben ihre Trace-Ereignisse in ein eigenes Bucket; der Trace des Nutzers bleibt sauber.

Was gebaut ist

tools/bugreport.py. Nur Standardbibliothek, kein Import aus chemenu, Syntax für Python 3.8. Aufruf: python tools/bugreport.py [--chronology FILE] [--transcript FILE]... [--session ID | --no-trace] [--titles] [--root DIR] [--out DIR]. Exit 0 = Bündel geschrieben, 1 = nicht schreibbar, nie 42. Das Ergebnis ist reports/bugreport-<YYYYMMDDTHHMMSSZ>/ und daneben ein zip; bei gleichem Stempel hängt der Sammler -2, -3 an. Der Sammler lädt nichts hoch.

Datei Schicht Inhalt
MANIFEST.md – jede Datei mit Inhalt, Optionen, ob wikitool startete, Session-IDs beider Aufrufgruppen, Datenschutzhinweis, Hinweis nach E1, Lücken
environment.json 1 OS, Python-Kandidaten, Shells, Harness, PATH-Einträge (mit Existenzprüfung), Umgebungsvariablen nach E2, .wikitool-tools.json samt Pfadprüfung, git-Konfiguration und Remotes, venv, Zeilenenden, .gitattributes, unter Windows Long Paths, Execution Policy, Mark of the Web, PowerShell 5.1
stack.json 2 VERSION, alle .wikitool-*.json (bereinigt), git status, git log -n 20
tree-structure.json 2 je kb/ und raw/: Zahlen, Tiefen, Pfadlängen, Namensprobleme; keine Inhalte
tree-paths.txt 2 nur mit --titles
wikitool/<befehl>.txt 3 Befehlszeile, Session, Exit-Code, stdout, stderr, wörtlich
trace.jsonl 3 Trace der Sitzung des Aufrufers; sonst listet das Manifest die vorhandenen Sitzungsverzeichnisse (Name, Größe)
CHRONOLOGY.md, transcripts/ 4 Kopie von --chronology und --transcript
  • wikitool-Aufrufe: Reihenfolge version show (Startprobe), doctor, budget status, instructions verify, docs verify. Scheitert die Probe, gilt wikitool als nicht gestartet und die vier anderen entfallen. Der Trace des Aufrufers wird vor dem ersten Aufruf kopiert. Timeout 300 s pro Aufruf (TIMEOUT_SECONDS).
  • Geheimnisse werden immer entfernt: Schlüssel mit token|password|secret|key|auth in JSON (rekursiv), Umgebungsvariablen nach E2, Zugangsdaten in URLs (bei http(s) die ganze userinfo, sonst nur das Passwort), Authorization:- und Bearer-Werte. Ein Abschlusspass ersetzt jeden gefundenen Geheimwert (≥ 4 Zeichen) in jeder Textdatei, bevor das zip entsteht.
  • Titelschutz (ohne --titles): Pfade unter kb/ und raw/ werden durch ihre Form ersetzt (kb/<depth=3 len=40 space>.md), [[Titel]] durch [[<title len=25 space>]], Commits, die nur kb/, raw/ oder work/ berühren, durch <content commit: …>. Stack-eigene Dateinamen (CONTRACT.md, CONVENTIONS.md, COLLECTION.md, INDEX.md, index.md, log.md, provenance.md) sind ausgenommen. Grenze: Ein Titel, der als bloßer Text dasteht, wird nicht gefunden – etwa in einem Commit-Betreff eines Stack-Commits. Das nennt der Datenschutzhinweis („git remotes and commit subjects“).
  • instructions/bug-report.md (manual: true, nirgends aus AGENTS.md, CLAUDE.md oder einem Skill verlinkt): was der Bericht enthält, Ablauf in fünf Schritten, Vorlage für die Chronologie, Entscheidungspunkte (Trace abgelehnt, --titles, Exit 1, Reproduktion mit WIKI_TRACE=1). Sie sagt ausdrücklich, dass der Agent die ID bugreport-* nicht nachbildet und nichts hochlädt.
  • Dokumente nachgezogen: instructions/gates.md § Taking a new session id (zweiter zulässiger Fall, E3), reports/CONTRACT.md (dritte Art Ausgabe, keine Aufbewahrungsfrist), tools/README.md, INSTALL.md (Troubleshooting-Eintrag), setup-instance.md und upgrade-instance.md (Angebot bei unklarem Scheitern), CHANGES.md. docs/why-gates-are-code.md gelesen: E3 berührt seine Begründung nicht, unverändert.
  • CI: neuer Schritt „The bug-report collector works in the distribution“ nach dem Fresh-Instance-Schritt: python3 tools/bugreport.py --no-trace in der exportierten Instanz, prüft MANIFEST.md, environment.json, „wikitool started“ und das zip.
  • Tests: tools/chemenu/tests/test_bugreport.py, 22 Tests gegen einen Fixture-Checkout mit Fake-Launcher: Standardbibliothek und feature_version=(3, 8), Start unter -I -S, Bündel und zip, Geheimnisse in Verzeichnis und Archiv, Positivliste, Titelschutz mit und ohne --titles, Session-IDs beider Aufrufgruppen, Trace mit und ohne --no-trace, bugreport-*-Bucket nie als Trace angeboten, wikitool startet nicht, kein Launcher, Timeout, Pfadprüfung, fehlende Chronologie, Stempel-Kollision, Checkout unverändert, dist_cmd.build_plan() enthält tools/bugreport.py.

Abweichungen vom Entwurf

  • stack.json nimmt alle .wikitool-*.json (bereinigt) auf statt nur zwei, weil die Geheimnisregel ohnehin für jede gilt.
  • Der Titelschutz sucht vom Baum ausgehend (bekannte Pfade), nicht über eine Regex mit allen Titeln; das ist bei großen Korpora schneller und findet dasselbe.
  • Die Tests brauchen kein git init mit der echten .gitignore; der Fixture-Checkout prüft stattdessen per Dateisnapshot, dass der Sammler nichts verändert.
  • Die Tests stecken ein Token in .wikitool-upload.json statt in .wikitool-tasks.json; der Mechanismus (Schlüsselname) ist derselbe.
  • Das Kriterium „kaputtes venv“ ist durch einen Fake-Launcher, dessen version show scheitert, und durch den Fall ohne Launcher abgedeckt, nicht durch ein gelöschtes echtes tools/.venv.
  • Die Chronologie liegt im Beispielaufruf unter reports/chronology.md statt reports/bugreport-chronology.md.
  • Nach dem ersten Publish kam 8.0.0-beta.6 dazu: Der Entscheidungspunkt zur Reproduktion mit WIKI_TRACE=1 hatte in beta.5 gefehlt.

Akzeptanzkriterien

  • Ohne startendes wikitool erzeugt python tools/bugreport.py ein Bündel mit den Schichten 1 und 2 und vermerkt, dass wikitool nicht startete; nach dem Fehlschlag der Probe erfolgt kein weiterer Aufruf (Test mit Fake-Launcher und ohne Launcher, siehe Abweichungen).
  • Token in einer Konfigurationsdatei, in einer Umgebungsvariablen und als userinfo einer Remote-URL erscheinen in keiner Datei des Verzeichnisses und keiner des Archivs (Test).
  • Umgebungsvariablen außerhalb der Positivliste erscheinen nur mit Namen (Test).
  • Ohne ausdrückliche Option steht kein Pfad aus kb//raw/ in einer vom Sammler erzeugten Datei; das Manifest kennzeichnet Trace, Chronologie und Transkripte (Test, Lauf gegen den echten Checkout; einziger Treffer war ein Commit-Betreff, siehe Grenze).
  • Die zählenden Aufrufe laufen unter bugreport-<zeitstempel>, die budgetfreien unter der ID des Aufrufers (Test der IDs; der Zählerstand des Aufrufers ist damit nicht gemessen, folgt aber aus der eigenen ID).
  • instructions/gates.md nennt den zweiten zulässigen Fall.
  • Das Bündel liegt unter reports/, git status bleibt sauber (Test per Snapshot und Lauf gegen den echten Checkout).
  • Nur Standardbibliothek (Test mit -I -S) und Syntax feature_version=(3, 8).
  • instructions/bug-report.md trägt manual: true, besteht instructions verify, enthält die Vorlage; docs verify ist grün.
  • reports/CONTRACT.md, tools/README.md, INSTALL.md, setup-instance.md, upgrade-instance.md nachgezogen.
  • Linux-CI: pytest und die exportierte Instanz. Offen bleibt der Windows-Teil auf dem Zielsystem (Schicht 1 unter Windows, Mark of the Web, Launcher): Er wird mit #151 von Hand geprüft.

Verifiziert

docs verify, instructions verify grün; pytest 1738 bestanden, 3 übersprungen, normal und auf der leeren Maschine (env -i); Sammler einmal gegen den echten Checkout gelaufen, danach git status unverändert. Mass-Update-Gate beim ersten Publish (12 Dateien) vom Betreiber freigegeben. CI: siehe Kommentar beim Schließen.

Abhängigkeiten

  • Keine blockierende. .wikitool-tools.json und wikitool.ps1 (#151) behandelt der Sammler als „absent“, bis es sie gibt.
  • Nachzug in #151 (dort im Body eingetragen): den Verweis auf die Preflight-Ausgabe in instructions/bug-report.md ergänzen, die Windows-Startlogik des Sammlers (pwsh -NoProfile -File tools/wikitool.ps1) und seine Pfadprüfung mit dem gebauten Launcher und .wikitool-tools.json abgleichen.
  • #158 setzt auf dem Verzeichnis auf; den erneuten Pack-Schritt bringt #158 selbst mit.

Version

--minor (8.0.0-beta.5): neue Fähigkeit, in beide Richtungen drop-in. Die Erweiterung der Gate-Regel (E3) lässt etwas zusätzlich zu und bricht nichts. --impact medium. Dazu beta.6 (--patch, --impact low) für den Zusatz in der Instruktion.

Teilpaket von #140. Entschieden: D10 (2026-09-27) – der Sammler ist Pflicht, die Pseudonymisierung der optionale Aufsatz #158. Dazu D22 und D23 (2026-09-28), bei D23 samt Zusatzfrage: Seitentitel stehen standardmäßig nicht im Bericht. Präzisiert am 2026-09-30 durch E1–E3 (unten). ## Stand **2026-09-30: umgesetzt und veröffentlicht** in `8.0.0-beta.5` (Commit `f9c047b`) und `8.0.0-beta.6` (Commit `4f0622d`, nur ein Zusatz in der Instruktion). Windows ist auf dem Zielsystem noch von Hand zu prüfen; das trägt #151 (siehe Abhängigkeiten). ## Warum Der Installationslauf in #140 ließ sich nur analysieren, weil ein ausführlicher Tatsachenbericht vorlag. Den hatte der Betreiber von Hand angestoßen. Die Anforderung (Betreiber, 2026-09-27): - Eine manuelle Instruktion, mit der eine Installation einen vollständigen Bugreport erzeugt, gern mit temporären Dateien zum Hochladen. - Wichtig ist der Sammler. - Ohne Pseudonymisierung geht der Bericht über einen sicheren Kanal direkt in die Analyse, nicht über den Issue-Tracker. ## Entscheidungen 2026-09-30 (Betreiber) - **E1 Trace und Titelschutz.** Der Sitzungs-Trace kommt standardmäßig in den Bericht (D23), `--no-trace` schließt ihn aus. Der Titelschutz gilt für alles, was der Sammler selbst erzeugt. Trace, Chronologie und Transkripte führt das Manifest als „may contain page content and titles“. Begründung: Ein Trace enthält Prompts und Tool-Ausgaben im Klartext. In einer ausgelieferten Instanz existiert er praktisch nur, weil der Mensch für die Reproduktion `WIKI_TRACE=1` gesetzt hat, und dann will er ihn im Bericht haben. - **E2 Umgebungsvariablen.** Alle **Namen** kommen in den Bericht, **Werte** nur für eine Positivliste (`PATH`, Shell und Terminal, `LANG`/`LC_*`, `PYTHON*`, `VIRTUAL_ENV`, `WIKI_*`, `WIKITOOL_*`, `CHEMENU_*`, Harness-Marker, `MSYSTEM`, `COMSPEC`, `PSModulePath`). Alle anderen erscheinen als `<not collected>`. Die Namensregel für Geheimnisse gilt auch innerhalb der Positivliste (`WIKITOOL_UPDATE_TOKEN` → `<removed>`). Begründung: Ein Filter nur nach Namen verfehlt Geheimnisse wie `GH_PAT` oder `DATABASE_URL`, ein voller Dump enthält viel Privates. - **E3 Eigene Session-ID.** Die zählenden Aufrufe (`instructions verify`, `docs verify`) laufen unter `WIKITOOL_SESSION_ID=bugreport-<zeitstempel>`, mit demselben Stempel wie das Bündel. Die budgetfreien (`version show`, `doctor`, `budget status`) erben die ID des Aufrufers. Begründung: - Die Lage vor Ort ist oft ein erschöpftes Budget; mit geerbter ID würden die beiden Prüfungen genau dann abgelehnt, wenn der Bericht sie braucht. - Der Sammler verbraucht das Budget der Sitzung nicht und löst den Loop-Breaker nicht aus. - Die Gate-Regel bleibt gewahrt: Der Sammler kommt an nichts vorbei, er führt zwei feste Lesebefehle aus, und die ID-Grenze steht im Code, nicht in der Hand des Agenten. - `doctor` und `budget status` beschreiben die Sitzung des Nutzers, darum erben sie die ID. - Die zählenden Aufrufe schreiben ihre Trace-Ereignisse in ein eigenes Bucket; der Trace des Nutzers bleibt sauber. ## Was gebaut ist **`tools/bugreport.py`.** Nur Standardbibliothek, kein Import aus `chemenu`, Syntax für Python 3.8. Aufruf: `python tools/bugreport.py [--chronology FILE] [--transcript FILE]... [--session ID | --no-trace] [--titles] [--root DIR] [--out DIR]`. Exit 0 = Bündel geschrieben, 1 = nicht schreibbar, nie 42. Das Ergebnis ist `reports/bugreport-<YYYYMMDDTHHMMSSZ>/` und daneben ein zip; bei gleichem Stempel hängt der Sammler `-2`, `-3` an. Der Sammler lädt nichts hoch. | Datei | Schicht | Inhalt | |---|---|---| | `MANIFEST.md` | – | jede Datei mit Inhalt, Optionen, ob `wikitool` startete, Session-IDs beider Aufrufgruppen, Datenschutzhinweis, Hinweis nach E1, Lücken | | `environment.json` | 1 | OS, Python-Kandidaten, Shells, Harness, PATH-Einträge (mit Existenzprüfung), Umgebungsvariablen nach E2, `.wikitool-tools.json` samt Pfadprüfung, git-Konfiguration und Remotes, venv, Zeilenenden, `.gitattributes`, unter Windows Long Paths, Execution Policy, Mark of the Web, PowerShell 5.1 | | `stack.json` | 2 | `VERSION`, alle `.wikitool-*.json` (bereinigt), `git status`, `git log -n 20` | | `tree-structure.json` | 2 | je `kb/` und `raw/`: Zahlen, Tiefen, Pfadlängen, Namensprobleme; keine Inhalte | | `tree-paths.txt` | 2 | nur mit `--titles` | | `wikitool/<befehl>.txt` | 3 | Befehlszeile, Session, Exit-Code, stdout, stderr, wörtlich | | `trace.jsonl` | 3 | Trace der Sitzung des Aufrufers; sonst listet das Manifest die vorhandenen Sitzungsverzeichnisse (Name, Größe) | | `CHRONOLOGY.md`, `transcripts/` | 4 | Kopie von `--chronology` und `--transcript` | - **`wikitool`-Aufrufe:** Reihenfolge `version show` (Startprobe), `doctor`, `budget status`, `instructions verify`, `docs verify`. Scheitert die Probe, gilt `wikitool` als nicht gestartet und die vier anderen entfallen. Der Trace des Aufrufers wird vor dem ersten Aufruf kopiert. Timeout 300 s pro Aufruf (`TIMEOUT_SECONDS`). - **Geheimnisse** werden immer entfernt: Schlüssel mit `token|password|secret|key|auth` in JSON (rekursiv), Umgebungsvariablen nach E2, Zugangsdaten in URLs (bei `http(s)` die ganze userinfo, sonst nur das Passwort), `Authorization:`- und `Bearer`-Werte. Ein Abschlusspass ersetzt jeden gefundenen Geheimwert (≥ 4 Zeichen) in jeder Textdatei, bevor das zip entsteht. - **Titelschutz** (ohne `--titles`): Pfade unter `kb/` und `raw/` werden durch ihre Form ersetzt (`kb/<depth=3 len=40 space>.md`), `[[Titel]]` durch `[[<title len=25 space>]]`, Commits, die nur `kb/`, `raw/` oder `work/` berühren, durch `<content commit: …>`. Stack-eigene Dateinamen (`CONTRACT.md`, `CONVENTIONS.md`, `COLLECTION.md`, `INDEX.md`, `index.md`, `log.md`, `provenance.md`) sind ausgenommen. **Grenze:** Ein Titel, der als bloßer Text dasteht, wird nicht gefunden – etwa in einem Commit-Betreff eines Stack-Commits. Das nennt der Datenschutzhinweis („git remotes and commit subjects“). - **`instructions/bug-report.md`** (`manual: true`, nirgends aus AGENTS.md, CLAUDE.md oder einem Skill verlinkt): was der Bericht enthält, Ablauf in fünf Schritten, Vorlage für die Chronologie, Entscheidungspunkte (Trace abgelehnt, `--titles`, Exit 1, Reproduktion mit `WIKI_TRACE=1`). Sie sagt ausdrücklich, dass der Agent die ID `bugreport-*` nicht nachbildet und nichts hochlädt. - **Dokumente nachgezogen:** `instructions/gates.md` § Taking a new session id (zweiter zulässiger Fall, E3), `reports/CONTRACT.md` (dritte Art Ausgabe, keine Aufbewahrungsfrist), `tools/README.md`, `INSTALL.md` (Troubleshooting-Eintrag), `setup-instance.md` und `upgrade-instance.md` (Angebot bei unklarem Scheitern), `CHANGES.md`. `docs/why-gates-are-code.md` gelesen: E3 berührt seine Begründung nicht, unverändert. - **CI:** neuer Schritt „The bug-report collector works in the distribution“ nach dem Fresh-Instance-Schritt: `python3 tools/bugreport.py --no-trace` in der exportierten Instanz, prüft `MANIFEST.md`, `environment.json`, „`wikitool` started“ und das zip. - **Tests:** `tools/chemenu/tests/test_bugreport.py`, 22 Tests gegen einen Fixture-Checkout mit Fake-Launcher: Standardbibliothek und `feature_version=(3, 8)`, Start unter `-I -S`, Bündel und zip, Geheimnisse in Verzeichnis und Archiv, Positivliste, Titelschutz mit und ohne `--titles`, Session-IDs beider Aufrufgruppen, Trace mit und ohne `--no-trace`, `bugreport-*`-Bucket nie als Trace angeboten, `wikitool` startet nicht, kein Launcher, Timeout, Pfadprüfung, fehlende Chronologie, Stempel-Kollision, Checkout unverändert, `dist_cmd.build_plan()` enthält `tools/bugreport.py`. ## Abweichungen vom Entwurf - `stack.json` nimmt **alle** `.wikitool-*.json` (bereinigt) auf statt nur zwei, weil die Geheimnisregel ohnehin für jede gilt. - Der Titelschutz sucht vom Baum ausgehend (bekannte Pfade), nicht über eine Regex mit allen Titeln; das ist bei großen Korpora schneller und findet dasselbe. - Die Tests brauchen kein `git init` mit der echten `.gitignore`; der Fixture-Checkout prüft stattdessen per Dateisnapshot, dass der Sammler nichts verändert. - Die Tests stecken ein Token in `.wikitool-upload.json` statt in `.wikitool-tasks.json`; der Mechanismus (Schlüsselname) ist derselbe. - Das Kriterium „kaputtes venv“ ist durch einen Fake-Launcher, dessen `version show` scheitert, und durch den Fall ohne Launcher abgedeckt, nicht durch ein gelöschtes echtes `tools/.venv`. - Die Chronologie liegt im Beispielaufruf unter `reports/chronology.md` statt `reports/bugreport-chronology.md`. - Nach dem ersten Publish kam `8.0.0-beta.6` dazu: Der Entscheidungspunkt zur Reproduktion mit `WIKI_TRACE=1` hatte in `beta.5` gefehlt. ## Akzeptanzkriterien - [x] Ohne startendes `wikitool` erzeugt `python tools/bugreport.py` ein Bündel mit den Schichten 1 und 2 und vermerkt, dass `wikitool` nicht startete; nach dem Fehlschlag der Probe erfolgt kein weiterer Aufruf (Test mit Fake-Launcher und ohne Launcher, siehe Abweichungen). - [x] Token in einer Konfigurationsdatei, in einer Umgebungsvariablen und als userinfo einer Remote-URL erscheinen in keiner Datei des Verzeichnisses und keiner des Archivs (Test). - [x] Umgebungsvariablen außerhalb der Positivliste erscheinen nur mit Namen (Test). - [x] Ohne ausdrückliche Option steht kein Pfad aus `kb/`/`raw/` in einer vom Sammler erzeugten Datei; das Manifest kennzeichnet Trace, Chronologie und Transkripte (Test, Lauf gegen den echten Checkout; einziger Treffer war ein Commit-Betreff, siehe Grenze). - [x] Die zählenden Aufrufe laufen unter `bugreport-<zeitstempel>`, die budgetfreien unter der ID des Aufrufers (Test der IDs; der Zählerstand des Aufrufers ist damit nicht gemessen, folgt aber aus der eigenen ID). - [x] `instructions/gates.md` nennt den zweiten zulässigen Fall. - [x] Das Bündel liegt unter `reports/`, `git status` bleibt sauber (Test per Snapshot und Lauf gegen den echten Checkout). - [x] Nur Standardbibliothek (Test mit `-I -S`) und Syntax `feature_version=(3, 8)`. - [x] `instructions/bug-report.md` trägt `manual: true`, besteht `instructions verify`, enthält die Vorlage; `docs verify` ist grün. - [x] `reports/CONTRACT.md`, `tools/README.md`, `INSTALL.md`, `setup-instance.md`, `upgrade-instance.md` nachgezogen. - [x] Linux-CI: pytest und die exportierte Instanz. **Offen bleibt der Windows-Teil auf dem Zielsystem** (Schicht 1 unter Windows, Mark of the Web, Launcher): Er wird mit #151 von Hand geprüft. ## Verifiziert `docs verify`, `instructions verify` grün; `pytest` 1738 bestanden, 3 übersprungen, normal und auf der leeren Maschine (`env -i`); Sammler einmal gegen den echten Checkout gelaufen, danach `git status` unverändert. Mass-Update-Gate beim ersten Publish (12 Dateien) vom Betreiber freigegeben. CI: siehe Kommentar beim Schließen. ## Abhängigkeiten - Keine blockierende. `.wikitool-tools.json` und `wikitool.ps1` (#151) behandelt der Sammler als „absent“, bis es sie gibt. - **Nachzug in #151** (dort im Body eingetragen): den Verweis auf die Preflight-Ausgabe in `instructions/bug-report.md` ergänzen, die Windows-Startlogik des Sammlers (`pwsh -NoProfile -File tools/wikitool.ps1`) und seine Pfadprüfung mit dem gebauten Launcher und `.wikitool-tools.json` abgleichen. - #158 setzt auf dem Verzeichnis auf; den erneuten Pack-Schritt bringt #158 selbst mit. ## Version `--minor` (`8.0.0-beta.5`): neue Fähigkeit, in beide Richtungen drop-in. Die Erweiterung der Gate-Regel (E3) lässt etwas zusätzlich zu und bricht nichts. `--impact medium`. Dazu `beta.6` (`--patch`, `--impact low`) für den Zusatz in der Instruktion.
torben added the prio/plannedsize/Marea/distributionkind/decision labels 2026-09-27 08:46:29 +00:00
torben added kind/build and removed kind/decision labels 2026-09-28 16:54:55 +00:00
Author
Owner

Changelog:

  • Entschieden (Betreiber, 2026-09-28): D22 und D23. Darum kind/decision → kind/build.
  • Neu: Seitentitel stehen standardmäßig nicht im Bericht. Aus kb//raw/ kommen nur Länge und Zeichenklassen.
**Changelog:** - **Entschieden (Betreiber, 2026-09-28):** D22 und D23. Darum `kind/decision` → `kind/build`. - **Neu:** Seitentitel stehen standardmäßig nicht im Bericht. Aus `kb/`/`raw/` kommen nur Länge und Zeichenklassen.
Author
Owner

Changelog:

  • Neu: Abschnitt „Entwurf“, gegen den Baum geprüft (40413f9). Er legt fest: Aufruf und Exit-Codes, Python ≥ 3.8 ohne Import aus chemenu, das zip-Bündel mit seinen Dateien, den Titelschutz über Pfadformen, die Startprobe version show samt Budget (2 zählende Aufrufe, keine eigene Session-ID), den Abschlusspass für Geheimwerte, die Instruktion mit manual: true, den Doc-Pull-through, 8 Tests und einen CI-Schritt.
  • Neu: die offenen Fragen F1 (Trace gegen Titelschutz) und F2 (Umfang der Umgebungsvariablen), jeweils mit Empfehlung.
  • Präzisiert: die Akzeptanzkriterien. Neu sind das URL-Token, -I -S, die Syntax für 3.8, die Budgetgrenze und der Pull-through; das Titelkriterium hängt jetzt an F1.
  • Neu: der Abschnitt „Abhängigkeiten“ mit dem Nachzug in #151.
**Changelog:** - **Neu:** Abschnitt „Entwurf“, gegen den Baum geprüft (`40413f9`). Er legt fest: Aufruf und Exit-Codes, Python ≥ 3.8 ohne Import aus `chemenu`, das zip-Bündel mit seinen Dateien, den Titelschutz über Pfadformen, die Startprobe `version show` samt Budget (2 zählende Aufrufe, keine eigene Session-ID), den Abschlusspass für Geheimwerte, die Instruktion mit `manual: true`, den Doc-Pull-through, 8 Tests und einen CI-Schritt. - **Neu:** die offenen Fragen F1 (Trace gegen Titelschutz) und F2 (Umfang der Umgebungsvariablen), jeweils mit Empfehlung. - **Präzisiert:** die Akzeptanzkriterien. Neu sind das URL-Token, `-I -S`, die Syntax für 3.8, die Budgetgrenze und der Pull-through; das Titelkriterium hängt jetzt an F1. - **Neu:** der Abschnitt „Abhängigkeiten“ mit dem Nachzug in #151.
Author
Owner

Changelog:

  • Entschieden (Betreiber, 2026-09-30): F1 → E1 und F2 → E2, jeweils nach Empfehlung. Der Abschnitt „Offene Fragen“ entfällt.
  • Neu, E3 auf Frage des Betreibers: Die zählenden Aufrufe laufen unter der eigenen ID bugreport-<zeitstempel>, die budgetfreien unter der geerbten. Die frühere Festlegung „erbt immer, setzt nie eine eigene“ ist ersetzt.
  • Folgen von E3:
    • Der Trace wird vor dem ersten wikitool-Aufruf kopiert.
    • Neu im Doc-Pull-through: instructions/gates.md § Taking a new session id und docs/why-gates-are-code.md (prüfen).
    • Test 2 ist erweitert, Test 6 ist neu, zwei Akzeptanzkriterien sind neu.
  • Nachzug #151: dort im Body eingetragen.
**Changelog:** - **Entschieden (Betreiber, 2026-09-30):** F1 → E1 und F2 → E2, jeweils nach Empfehlung. Der Abschnitt „Offene Fragen“ entfällt. - **Neu, E3 auf Frage des Betreibers:** Die zählenden Aufrufe laufen unter der eigenen ID `bugreport-<zeitstempel>`, die budgetfreien unter der geerbten. Die frühere Festlegung „erbt immer, setzt nie eine eigene“ ist ersetzt. - **Folgen von E3:** - Der Trace wird vor dem ersten `wikitool`-Aufruf kopiert. - Neu im Doc-Pull-through: `instructions/gates.md` § Taking a new session id und `docs/why-gates-are-code.md` (prüfen). - Test 2 ist erweitert, Test 6 ist neu, zwei Akzeptanzkriterien sind neu. - **Nachzug #151:** dort im Body eingetragen.
Author
Owner

Umgesetzt und geschlossen. Der Body ist auf den Endstand umgeschrieben: E1–E3 samt Begründung, was gebaut ist, die Abweichungen vom Entwurf, alle Akzeptanzkriterien abgehakt. Veröffentlicht in 8.0.0-beta.5 (f9c047b) und 8.0.0-beta.6 (4f0622d). CI grün: Runs 449 und 450 für f9c047b, 451 und 452 für 4f0622d. Offen bleibt nur die Windows-Handprüfung auf dem Zielsystem, die #151 trägt.

Umgesetzt und geschlossen. Der Body ist auf den Endstand umgeschrieben: E1–E3 samt Begründung, was gebaut ist, die Abweichungen vom Entwurf, alle Akzeptanzkriterien abgehakt. Veröffentlicht in `8.0.0-beta.5` (`f9c047b`) und `8.0.0-beta.6` (`4f0622d`). CI grün: Runs 449 und 450 für `f9c047b`, 451 und 452 für `4f0622d`. Offen bleibt nur die Windows-Handprüfung auf dem Zielsystem, die #151 trägt.
Author
Owner

Nachprüfung der Prosa gegen den Code, als 8.0.0-beta.7 (0899c67) veröffentlicht. CI grün in den Runs 453 und 454.

  • reports/CONTRACT.md sagte, dass alle wikitool-Aufrufe des Sammlers unter bugreport-<stamp> laufen. Tatsächlich sind es nur instructions verify und docs verify. Die übrigen Aufrufe erben die ID des Aufrufers, wie es E3 vorsieht.
  • INSTALL.md behauptete, dass Seitentitel im ganzen Bündel fehlen. Das gilt nur für das, was das Skript selbst erzeugt. Der Trace ist standardmäßig dabei und kann Titel enthalten.
  • CHANGES.md ergänzt die fehlenden Changesets für beta.6 und beta.7.

Der Body bleibt wie er ist. Seine Aussagen stimmten schon vorher mit dem Code überein.

Nachprüfung der Prosa gegen den Code, als `8.0.0-beta.7` (`0899c67`) veröffentlicht. CI grün in den Runs 453 und 454. - `reports/CONTRACT.md` sagte, dass alle `wikitool`-Aufrufe des Sammlers unter `bugreport-<stamp>` laufen. Tatsächlich sind es nur `instructions verify` und `docs verify`. Die übrigen Aufrufe erben die ID des Aufrufers, wie es E3 vorsieht. - `INSTALL.md` behauptete, dass Seitentitel im ganzen Bündel fehlen. Das gilt nur für das, was das Skript selbst erzeugt. Der Trace ist standardmäßig dabei und kann Titel enthalten. - `CHANGES.md` ergänzt die fehlenden Changesets für `beta.6` und `beta.7`. Der Body bleibt wie er ist. Seine Aussagen stimmten schon vorher mit dem Code überein.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: torben/chemenu#157