Bugreport: eine nach dem Sammeln korrigierte Chronologie erzeugt ein zweites Bündel – Chronologie vorher prüfen, tools/bugreport --bundle … --chronology tauscht sie aus
#220
Reference in new issue
Block a user
Befund aus der Prüfung von Hand auf dem Windows-Arbeitsrechner (Betreiber, 2026-10-13, GitHub Copilot CLI, Stand 10.0.0). Design gegen den Baum geprüft am 2026-10-16 (Stand 10.1.0-beta.14).
Stand: erledigt. Gebaut und veröffentlicht in
b48a35b(10.1.0-beta.15, 2026-10-16). Verifiziert durch:pytestlokal 3094 passed / 4 skipped,docs verifyundinstructions verifygrün, CI-Lauf #743 aufb48a35bgrün (Jobsverifyundpwsh, darin „The bug-report collector works in the distribution“), Release-Workflow #744 auf demselben Commit grün (converters,release,wiki-mirror), nächtlicher Lauf #745 grün. Abschlussprüfung (2026-10-16):reports/CONTRACT.md§ Bug-report bundles,INSTALL.md,README.mdunddocs/explanation/gegen die Änderung gelesen – keins davon beschreibt die Modi des Sammlers, keins ist veraltet; keine Installationsanleitung berührt.Befund
bugreport-…105437Z.zipundbugreport-…105648Z.zip, gut zwei Minuten auseinander.types describe <entity|concept|…>), das gegen die Vorlage bemerkt –instructions/bug-report.md§ Chronology template verlangt`<exact command>`– die Chronologie umgeschrieben und den ganzen Sammler noch einmal gestartet.reports/samt ZIP, und nichts sagte, welches galt. Sie unterschieden sich auch über die Chronologie hinaus:doctor.txt,docs-verify.txt,instructions-verify.txt,budget-status.txtundMANIFEST.mdstammten aus einem zweiten Lauf zu einem anderen Zeitpunkt.instructions/bug-report.mdhatte für „Chronologie nach dem Sammeln falsch“ keinen Entscheidungspunkt. Der Agent hat improvisiert (AGENTS.md Invariante 7). Der Sammler konnte ein vorhandenes Bündel nur für Stufe 2 der Pseudonymisierung neu packen (--bundle <dir> --candidates <datei>,run_stage2intools/bugreport.py), nicht mit einer neuen Chronologie –parse_argsverbot--chronologyzusammen mit--bundle.Invariante
Ein Bugreport-Lauf hinterlässt genau ein gültiges Bündel. Die
wikitool-Ausgaben darin stammen aus einem Zeitpunkt. Ein Austausch der Chronologie ändert im Bündel nurCHRONOLOGY.md(und das ZIP). Er startet keinenwikitool-Aufruf und legt unter dem Ausgabeverzeichnis kein zweites Bündel an. Die neue Chronologie durchläuft dieselbe Verarbeitung wie beim Sammeln: Geheimnisse entfernt, Seitentitel ferngehalten (außer das Bündel wurde mit--titlesgesammelt), bei einem pseudonymisierten Bündel jede bekannte Identität ersetzt. Ein Austausch darf nie mehr Privates ins Bündel bringen, als ein voller Lauf mit derselben Datei hineingebracht hätte.Entscheidungen (umgesetzt)
<entity|concept|…>), mit Exit-Code und der ersten maßgeblichen Zeile wörtlich.tools/bugreport --bundle <dir> --chronology <datei> [--root DIR].--bundleverlangt genau eins von--candidates(Stufe 2, wie bisher) oder--chronology(Austausch). Beide in einem Aufruf oder keins: Fehler überparser.error(Exit 2 von argparse). Die übrigen Sammeloptionen (--transcript,--session,--no-trace,--titles,--pseudonymise,--out) bleiben neben--bundleverboten.--rootist im Austauschmodus erlaubt (für Geheimnisse und Titelschutz), neben--candidatesweiter nicht.MANIFEST.md– das Skript liest sein eigenes Format zurück, keine neue Zustandsdatei: die Zeile- page titles (--titles): included|kept outsagt, ob der Titelschutz greift. Ist eine Zeile- pseudonymisation (--pseudonymise): …vorhanden, ist das Bündel pseudonymisiert. FehltMANIFEST.mdoder die Titelzeile: Exit 1, Bündel unverändert (kein Bündel dieses Skripts)._collect(geteilter Code:clean_text,title_shield,load_pseudonymiser):Redactorlernt die Werte neu, indemcollect_environment(root, red)undcollect_stack(root, red)laufen und ihre Ausgabe verworfen wird. Sie rufen keinwikitoolund schreiben nichts. Die Werte selbst werden nie gespeichert. Danachred.scrub.--titlesim Manifest wird einTitleShieldüber einen frischen Scan vonkb/undraw/unterrootgebaut (ohneSTACK_NAMES) und angewandt.Pseudonymiser.from_jsonausbugreport-<stamp>.pseudonyms.jsonneben dem Bündel geladen und mitapply(text)angewandt – alle Einträge aus Stufe 1 und Stufe 2. Fehlt die Zuordnung oder ist sie unlesbar: Exit 1, Bündel unverändert, dieselbe Meldung wie Stufe 2. Die Zuordnung wird nicht neu geschrieben, und die Tabelle## Pseudonymsim Manifest wird nicht neu gezählt (bewusst hingenommene Ungenauigkeit der Spalte Occurrences).bugreport-<stamp>.review.txtmitbuild_reviewneu erzeugt.CHRONOLOGY.md, ggf. Manifest und Review-Liste, das ZIP über Temp-Datei +os.replace.MANIFEST.md, an genau drei festen Stellen: Options-Zeile- chronology: supplied, ZeileCHRONOLOGY.mdin der Tabelle## Files(sortiert wiebuild_manifest), der Eintragno chronology was suppliedentfällt aus## Gaps(der ganze Abschnitt entfällt, wenn er dann leer ist).Bundle:,Archive:, bei PseudonymisierungReview:und ein Hinweis auf eine erneute Stufe 2, dann der passende Datenschutzhinweis aus dem Manifest-Zustand.instructions/bug-report.md§ Decision points: „Die Chronologie ist nach dem Sammeln falsch, unvollständig oder fehlt?“ →tools/bugreport --bundle reports/bugreport-<stamp> --chronology <datei>, nie ein zweiter voller Lauf. Wurde Stufe 2 schon ausgeführt: die neueCHRONOLOGY.mdwieder vollständig lesen und Stufe 2 mit neu gefundenen Namen erneut ausführen. Exit 1 wegen fehlender Zuordnung: neu mit--pseudonymisesammeln, das alte Bündel im Bericht als überholt nennen. Der Agent löscht nichts unterreports/. Schritt 6 (Bericht) nennt genau ein Bündel.Akzeptanzkriterien
tools/bugreport --bundle <dir> --chronology <neu>enthältCHRONOLOGY.mdden neuen Text. Jede andere Datei im Bündel ist byte-gleich (insbesonderewikitool/*.txtundMANIFEST.md), das ZIP enthält die neue Chronologie, das Ausgabeverzeichnis enthält dieselben Einträge wie davor (Test:test_a_swapped_chronology_changes_nothing_else_and_makes_no_second_bundle)..wikitool-*.jsonsteht nicht in der ausgetauschtenCHRONOLOGY.md(Test:…_is_scrubbed_of_a_secret_from_a_config_file).kb/ist bei einem ohne--titlesgesammelten Bündel maskiert und bei einem mit--titleserhalten (Test:…_keeps_titles_out_unless_the_bundle_was_collected_with_them).…_in_a_pseudonymised_bundle_uses_both_stages_and_the_same_mapping).test_a_pseudonymised_bundle_without_its_mapping_is_left_as_it_was).CHRONOLOGY.mdvorhanden,MANIFEST.mdunterscheidet sich nur in Options-Zeile, Datei-Tabelle und Gaps (Tests:test_a_swap_adds_a_missing_chronology_and_touches_the_manifest_in_three_places,test_a_swap_keeps_the_other_gaps).--bundlemit beiden,--bundleallein und--bundle --chronologymit einer Sammeloption außer--rootenden inSystemExit; die Fälle vontest_bundle_and_candidates_exclude_the_collection_optionsgelten weiter (Test:test_bundle_takes_exactly_one_of_candidates_and_chronology).MANIFEST.md: Exit 1, Bündel unverändert (Test:test_a_swap_with_a_missing_file_or_no_manifest_changes_nothing).instructions/bug-report.md: Schritt 2 nennt die Prüfung vor dem Sammeln, der Entscheidungspunkt steht unter § Decision points, Schritt 6 nennt genau ein Bündel, § What the bundle holds erwähnt den Austausch.instructions verifygrün.tools/bugreport.py, Absatz „A script beside the package“ intools/README.mdund Abschnitt zum Bugreport indocs/how-to/troubleshoot.mdbeschreiben den Austausch (troubleshoot.mdist dadurch über 100 Zeilen und trägt jetzt ein Inhaltsverzeichnis, vondocs toc --applyerzeugt).pytest(inkl.test_the_script_is_standard_library_only_and_python38_syntaxundtest_the_script_starts_on_a_bare_interpreter),docs verifygrün.b48a35b: Lauf #743 (verify,pwsh).Betroffene Dateien
tools/bugreport.py–parse_args,main, neurun_exchangeundmanifest_with_chronology; herausgezogen:clean_text,title_shield,load_pseudonymiser.tools/chemenu/tests/test_bugreport.py– neue Tests hinter den Stufe-2-Tests.instructions/bug-report.md,tools/README.md,docs/how-to/troubleshoot.md.CHANGES.md,VERSIONüberversion bump.tools/bugreportundtools/bugreport.ps1(reichen Argumente unverändert durch),instructions/gates.md(keinwikitool-Aufruf, keine Session-Id),tools/CONTRACT.md(beschreibt den Sammler nicht),reports/CONTRACT.md(beschreibt Bündel und Pseudonymisierungsdateien, nicht die Modi; der Austausch legt keine neue Datei neben das Bündel).Versionsteil
MINOR (
--minor). Neue Fähigkeit, in beide Richtungen ein Drop-in: kein Befehl und keine Option fällt weg, bestehende Aufrufe verhalten sich unverändert, es entsteht keine neue Zustandsdatei (version-parts.mdSchritt 3). Der laufende Kandidat stand schon auf MINOR-Stufe; der Bump zählte nur auf10.1.0-beta.15.Changelog: Design gegen den Baum geprüft (10.1.0-beta.14). Neu:
collect_environment/collect_stack, nie gespeichert), Titelschutz (laut Manifest) und Pseudonyme. Der alte Body nannte nur die Pseudonymisierung.MANIFEST.mdgelesen.--bundleverlangt genau eins von--candidates/--chronology,--rootist im Austauschmodus erlaubt.Korrigiert: Versionsteil PATCH → MINOR (neue Fähigkeit, laut
version-parts.mdSchritt 3).tools/CONTRACT.mdist aus den Kriterien gestrichen (beschreibt den Sammler nicht), dafür isttools/README.mdaufgenommen.Labels:
kind/defect→kind/build,size/S→size/M(Instruction-Änderung plus eigener Testaufwand über drei Verarbeitungsstufen).Changelog: Gebaut und veröffentlicht (
b48a35b, 10.1.0-beta.15), CI-Lauf #743 grün. Alle Akzeptanzkriterien abgehakt, jeweils mit dem Test, der sie belegt. Entscheidungen stehen jetzt als umgesetzt, mit den Namen der geteilten Funktionen (clean_text,title_shield,load_pseudonymiser). Neu gegenüber dem Design:troubleshoot.mdträgt nun ein Inhaltsverzeichnis, weil es mit dem neuen Absatz über 100 Zeilen kam (docs toc --apply).Changelog: Abschluss. Stand auf „erledigt“; Release-Workflow #744 und nächtlicher Lauf #745 auf
b48a35bjetzt grün eingetragen (vorher „in der Warteschlange“). Befund in die Vergangenheit gesetzt. Abschlussprüfung der Dokumente:reports/CONTRACT.md,INSTALL.md,README.md,docs/explanation/nicht veraltet, keine Installationsanleitung berührt – kein Nachzug, kein weiterer Bump;reports/CONTRACT.mdunter „Unberührt“ mit Begründung aufgenommen.