Bugreport: eine nach dem Sammeln korrigierte Chronologie erzeugt ein zweites Bündel – Chronologie vorher prüfen, tools/bugreport --bundle … --chronology tauscht sie aus #220

Closed
opened 2026-10-13 11:53:05 +00:00 by torben · 3 comments
Owner

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: pytest lokal 3094 passed / 4 skipped, docs verify und instructions verify grün, CI-Lauf #743 auf b48a35b grün (Jobs verify und pwsh, 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.md und docs/explanation/ gegen die Änderung gelesen – keins davon beschreibt die Modi des Sammlers, keins ist veraltet; keine Installationsanleitung berührt.

Befund

  • Der Betreiber hat nach Update und Backup-Einrichtung einen Bugreport erstellen lassen und zwei ZIPs bekommen, bugreport-…105437Z.zip und bugreport-…105648Z.zip, gut zwei Minuten auseinander.
  • Verglichen: Der Agent hatte die Chronologie zuerst mit gekürzten Befehlen geschrieben (z. B. 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.
  • Das zweite Bündel ersetzte das erste nicht. Beide lagen unter 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.txt und MANIFEST.md stammten aus einem zweiten Lauf zu einem anderen Zeitpunkt.
  • instructions/bug-report.md hatte 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_stage2 in tools/bugreport.py), nicht mit einer neuen Chronologie – parse_args verbot --chronology zusammen 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 nur CHRONOLOGY.md (und das ZIP). Er startet keinen wikitool-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 --titles gesammelt), 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)

  1. Billiger Weg zuerst – Anleitung, Schritt 2: Bevor der Agent sammelt, prüft er die geschriebene Chronologie gegen die Vorlage: jeden Befehl wörtlich, so wie er lief (keine Platzhalter, keine Kürzungen wie <entity|concept|…>), mit Exit-Code und der ersten maßgeblichen Zeile wörtlich.
  2. Neuer Modus des Sammlers: tools/bugreport --bundle <dir> --chronology <datei> [--root DIR].
    • --bundle verlangt genau eins von --candidates (Stufe 2, wie bisher) oder --chronology (Austausch). Beide in einem Aufruf oder keins: Fehler über parser.error (Exit 2 von argparse). Die übrigen Sammeloptionen (--transcript, --session, --no-trace, --titles, --pseudonymise, --out) bleiben neben --bundle verboten. --root ist im Austauschmodus erlaubt (für Geheimnisse und Titelschutz), neben --candidates weiter nicht.
    • Zustand des Bündels steht im eigenen MANIFEST.md – das Skript liest sein eigenes Format zurück, keine neue Zustandsdatei: die Zeile - page titles (--titles): included|kept out sagt, ob der Titelschutz greift. Ist eine Zeile - pseudonymisation (--pseudonymise): … vorhanden, ist das Bündel pseudonymisiert. Fehlt MANIFEST.md oder die Titelzeile: Exit 1, Bündel unverändert (kein Bündel dieses Skripts).
    • Verarbeitung in der Reihenfolge von _collect (geteilter Code: clean_text, title_shield, load_pseudonymiser):
      1. Geheimnisse: Ein frischer Redactor lernt die Werte neu, indem collect_environment(root, red) und collect_stack(root, red) laufen und ihre Ausgabe verworfen wird. Sie rufen kein wikitool und schreiben nichts. Die Werte selbst werden nie gespeichert. Danach red.scrub.
      2. Titel: Ohne --titles im Manifest wird ein TitleShield über einen frischen Scan von kb/ und raw/ unter root gebaut (ohne STACK_NAMES) und angewandt.
      3. Pseudonyme: Ist das Bündel pseudonymisiert, wird Pseudonymiser.from_json aus bugreport-<stamp>.pseudonyms.json neben dem Bündel geladen und mit apply(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 ## Pseudonyms im Manifest wird nicht neu gezählt (bewusst hingenommene Ungenauigkeit der Spalte Occurrences).
      4. Bei einem pseudonymisierten Bündel wird die Review-Liste bugreport-<stamp>.review.txt mit build_review neu erzeugt.
    • Atomar soweit möglich: Prüfungen und gesamte Verarbeitung laufen im Speicher, bevor geschrieben wird. Danach CHRONOLOGY.md, ggf. Manifest und Review-Liste, das ZIP über Temp-Datei + os.replace.
    • Bündel ohne Chronologie: Der Austausch fügt sie hinzu. Nur dann ändert sich auch MANIFEST.md, an genau drei festen Stellen: Options-Zeile - chronology: supplied, Zeile CHRONOLOGY.md in der Tabelle ## Files (sortiert wie build_manifest), der Eintrag no chronology was supplied entfällt aus ## Gaps (der ganze Abschnitt entfällt, wenn er dann leer ist).
    • Ausgabe wie Stufe 2: Bundle:, Archive:, bei Pseudonymisierung Review: und ein Hinweis auf eine erneute Stufe 2, dann der passende Datenschutzhinweis aus dem Manifest-Zustand.
  3. Anleitung, neuer Entscheidungspunkt in 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 neue CHRONOLOGY.md wieder vollständig lesen und Stufe 2 mit neu gefundenen Namen erneut ausführen. Exit 1 wegen fehlender Zuordnung: neu mit --pseudonymise sammeln, das alte Bündel im Bericht als überholt nennen. Der Agent löscht nichts unter reports/. Schritt 6 (Bericht) nennt genau ein Bündel.
  4. Nicht im Umfang: Transkripte nachträglich austauschen oder hinzufügen (kein Befund dafür). Ein bereits doppelt gesammeltes Bündelpaar aufräumen.

Akzeptanzkriterien

  • Bündel mit Chronologie: Nach tools/bugreport --bundle <dir> --chronology <neu> enthält CHRONOLOGY.md den neuen Text. Jede andere Datei im Bündel ist byte-gleich (insbesondere wikitool/*.txt und MANIFEST.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).
  • Ein Geheimnis aus einer .wikitool-*.json steht nicht in der ausgetauschten CHRONOLOGY.md (Test: …_is_scrubbed_of_a_secret_from_a_config_file).
  • Ein Seitentitel aus kb/ ist bei einem ohne --titles gesammelten Bündel maskiert und bei einem mit --titles erhalten (Test: …_keeps_titles_out_unless_the_bundle_was_collected_with_them).
  • Bei einem pseudonymisierten Bündel sind Identität aus Stufe 1 und Kandidat aus Stufe 2 durch denselben Platzhalter ersetzt, Zuordnung und Manifest byte-gleich, Review-Liste neu erzeugt (Test: …_in_a_pseudonymised_bundle_uses_both_stages_and_the_same_mapping).
  • Pseudonymisiertes Bündel ohne Zuordnung: Exit 1, jede Datei und das ZIP byte-gleich (Test: test_a_pseudonymised_bundle_without_its_mapping_is_left_as_it_was).
  • Bündel ohne Chronologie: CHRONOLOGY.md vorhanden, MANIFEST.md unterscheidet 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).
  • --bundle mit beiden, --bundle allein und --bundle --chronology mit einer Sammeloption außer --root enden in SystemExit; die Fälle von test_bundle_and_candidates_exclude_the_collection_options gelten weiter (Test: test_bundle_takes_exactly_one_of_candidates_and_chronology).
  • Fehlende Chronologiedatei oder fehlendes/fremdes 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 verify grün.
  • Docstring-Synopsis in tools/bugreport.py, Absatz „A script beside the package“ in tools/README.md und Abschnitt zum Bugreport in docs/how-to/troubleshoot.md beschreiben den Austausch (troubleshoot.md ist dadurch über 100 Zeilen und trägt jetzt ein Inhaltsverzeichnis, von docs toc --apply erzeugt).
  • pytest (inkl. test_the_script_is_standard_library_only_and_python38_syntax und test_the_script_starts_on_a_bare_interpreter), docs verify grün.
  • CI grün auf b48a35b: Lauf #743 (verify, pwsh).

Betroffene Dateien

  • tools/bugreport.py – parse_args, main, neu run_exchange und manifest_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 über version bump.
  • Unberührt: tools/bugreport und tools/bugreport.ps1 (reichen Argumente unverändert durch), instructions/gates.md (kein wikitool-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.md Schritt 3). Der laufende Kandidat stand schon auf MINOR-Stufe; der Bump zählte nur auf 10.1.0-beta.15.

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: `pytest` lokal 3094 passed / 4 skipped, `docs verify` und `instructions verify` grün, **CI-Lauf #743 auf `b48a35b` grün** (Jobs `verify` und `pwsh`, 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.md` und `docs/explanation/` gegen die Änderung gelesen – keins davon beschreibt die Modi des Sammlers, keins ist veraltet; keine Installationsanleitung berührt. ## Befund - Der Betreiber hat nach Update und Backup-Einrichtung einen Bugreport erstellen lassen und **zwei** ZIPs bekommen, `bugreport-…105437Z.zip` und `bugreport-…105648Z.zip`, gut zwei Minuten auseinander. - Verglichen: Der Agent hatte die Chronologie zuerst mit gekürzten Befehlen geschrieben (z. B. `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. - Das zweite Bündel ersetzte das erste nicht. Beide lagen unter `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.txt` und `MANIFEST.md` stammten aus einem zweiten Lauf zu einem anderen Zeitpunkt. - `instructions/bug-report.md` hatte 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_stage2` in `tools/bugreport.py`), nicht mit einer neuen Chronologie – `parse_args` verbot `--chronology` zusammen 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 nur `CHRONOLOGY.md` (und das ZIP). Er startet keinen `wikitool`-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 `--titles` gesammelt), 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) 1. **Billiger Weg zuerst – Anleitung, Schritt 2:** Bevor der Agent sammelt, prüft er die geschriebene Chronologie gegen die Vorlage: jeden Befehl wörtlich, so wie er lief (keine Platzhalter, keine Kürzungen wie `<entity|concept|…>`), mit Exit-Code und der ersten maßgeblichen Zeile wörtlich. 2. **Neuer Modus des Sammlers: `tools/bugreport --bundle <dir> --chronology <datei> [--root DIR]`.** - `--bundle` verlangt **genau eins** von `--candidates` (Stufe 2, wie bisher) oder `--chronology` (Austausch). Beide in einem Aufruf oder keins: Fehler über `parser.error` (Exit 2 von argparse). Die übrigen Sammeloptionen (`--transcript`, `--session`, `--no-trace`, `--titles`, `--pseudonymise`, `--out`) bleiben neben `--bundle` verboten. `--root` ist im Austauschmodus erlaubt (für Geheimnisse und Titelschutz), neben `--candidates` weiter nicht. - **Zustand des Bündels steht im eigenen `MANIFEST.md`** – das Skript liest sein eigenes Format zurück, keine neue Zustandsdatei: die Zeile `- page titles (`--titles`): included|kept out` sagt, ob der Titelschutz greift. Ist eine Zeile `- pseudonymisation (`--pseudonymise`): …` vorhanden, ist das Bündel pseudonymisiert. Fehlt `MANIFEST.md` oder die Titelzeile: Exit 1, Bündel unverändert (kein Bündel dieses Skripts). - **Verarbeitung in der Reihenfolge von `_collect`** (geteilter Code: `clean_text`, `title_shield`, `load_pseudonymiser`): 1. *Geheimnisse:* Ein frischer `Redactor` lernt die Werte neu, indem `collect_environment(root, red)` und `collect_stack(root, red)` laufen und ihre Ausgabe verworfen wird. Sie rufen kein `wikitool` und schreiben nichts. Die Werte selbst werden **nie** gespeichert. Danach `red.scrub`. 2. *Titel:* Ohne `--titles` im Manifest wird ein `TitleShield` über einen frischen Scan von `kb/` und `raw/` unter `root` gebaut (ohne `STACK_NAMES`) und angewandt. 3. *Pseudonyme:* Ist das Bündel pseudonymisiert, wird `Pseudonymiser.from_json` aus `bugreport-<stamp>.pseudonyms.json` neben dem Bündel geladen und mit `apply(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 `## Pseudonyms` im Manifest wird nicht neu gezählt (bewusst hingenommene Ungenauigkeit der Spalte *Occurrences*). 4. Bei einem pseudonymisierten Bündel wird die Review-Liste `bugreport-<stamp>.review.txt` mit `build_review` neu erzeugt. - **Atomar soweit möglich:** Prüfungen und gesamte Verarbeitung laufen im Speicher, bevor geschrieben wird. Danach `CHRONOLOGY.md`, ggf. Manifest und Review-Liste, das ZIP über Temp-Datei + `os.replace`. - **Bündel ohne Chronologie:** Der Austausch fügt sie hinzu. Nur dann ändert sich auch `MANIFEST.md`, an genau drei festen Stellen: Options-Zeile `- chronology: supplied`, Zeile `CHRONOLOGY.md` in der Tabelle `## Files` (sortiert wie `build_manifest`), der Eintrag `no chronology was supplied` entfällt aus `## Gaps` (der ganze Abschnitt entfällt, wenn er dann leer ist). - Ausgabe wie Stufe 2: `Bundle:`, `Archive:`, bei Pseudonymisierung `Review:` und ein Hinweis auf eine erneute Stufe 2, dann der passende Datenschutzhinweis aus dem Manifest-Zustand. 3. **Anleitung, neuer Entscheidungspunkt** in `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 neue `CHRONOLOGY.md` wieder vollständig lesen und Stufe 2 mit neu gefundenen Namen erneut ausführen. Exit 1 wegen fehlender Zuordnung: neu mit `--pseudonymise` sammeln, das alte Bündel im Bericht als überholt nennen. Der Agent löscht nichts unter `reports/`. Schritt 6 (Bericht) nennt genau ein Bündel. 4. **Nicht im Umfang:** Transkripte nachträglich austauschen oder hinzufügen (kein Befund dafür). Ein bereits doppelt gesammeltes Bündelpaar aufräumen. ## Akzeptanzkriterien - [x] Bündel mit Chronologie: Nach `tools/bugreport --bundle <dir> --chronology <neu>` enthält `CHRONOLOGY.md` den neuen Text. Jede andere Datei im Bündel ist byte-gleich (insbesondere `wikitool/*.txt` und `MANIFEST.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`). - [x] Ein Geheimnis aus einer `.wikitool-*.json` steht nicht in der ausgetauschten `CHRONOLOGY.md` (Test: `…_is_scrubbed_of_a_secret_from_a_config_file`). - [x] Ein Seitentitel aus `kb/` ist bei einem ohne `--titles` gesammelten Bündel maskiert und bei einem mit `--titles` erhalten (Test: `…_keeps_titles_out_unless_the_bundle_was_collected_with_them`). - [x] Bei einem pseudonymisierten Bündel sind Identität aus Stufe 1 und Kandidat aus Stufe 2 durch denselben Platzhalter ersetzt, Zuordnung und Manifest byte-gleich, Review-Liste neu erzeugt (Test: `…_in_a_pseudonymised_bundle_uses_both_stages_and_the_same_mapping`). - [x] Pseudonymisiertes Bündel ohne Zuordnung: Exit 1, jede Datei und das ZIP byte-gleich (Test: `test_a_pseudonymised_bundle_without_its_mapping_is_left_as_it_was`). - [x] Bündel ohne Chronologie: `CHRONOLOGY.md` vorhanden, `MANIFEST.md` unterscheidet 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`). - [x] `--bundle` mit beiden, `--bundle` allein und `--bundle --chronology` mit einer Sammeloption außer `--root` enden in `SystemExit`; die Fälle von `test_bundle_and_candidates_exclude_the_collection_options` gelten weiter (Test: `test_bundle_takes_exactly_one_of_candidates_and_chronology`). - [x] Fehlende Chronologiedatei oder fehlendes/fremdes `MANIFEST.md`: Exit 1, Bündel unverändert (Test: `test_a_swap_with_a_missing_file_or_no_manifest_changes_nothing`). - [x] `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 verify` grün. - [x] Docstring-Synopsis in `tools/bugreport.py`, Absatz „A script beside the package“ in `tools/README.md` und Abschnitt zum Bugreport in `docs/how-to/troubleshoot.md` beschreiben den Austausch (`troubleshoot.md` ist dadurch über 100 Zeilen und trägt jetzt ein Inhaltsverzeichnis, von `docs toc --apply` erzeugt). - [x] `pytest` (inkl. `test_the_script_is_standard_library_only_and_python38_syntax` und `test_the_script_starts_on_a_bare_interpreter`), `docs verify` grün. - [x] CI grün auf `b48a35b`: Lauf #743 (`verify`, `pwsh`). ## Betroffene Dateien - `tools/bugreport.py` – `parse_args`, `main`, neu `run_exchange` und `manifest_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` über `version bump`. - Unberührt: `tools/bugreport` und `tools/bugreport.ps1` (reichen Argumente unverändert durch), `instructions/gates.md` (kein `wikitool`-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.md` Schritt 3). Der laufende Kandidat stand schon auf MINOR-Stufe; der Bump zählte nur auf `10.1.0-beta.15`.
torben added the prio/plannedsize/Sarea/distributionkind/defect labels 2026-10-13 11:53:05 +00:00
torben added size/Mkind/build and removed size/Skind/defect labels 2026-10-16 01:09:43 +00:00
Author
Owner

Changelog: Design gegen den Baum geprüft (10.1.0-beta.14). Neu:

  • Die Invariante verlangt jetzt, dass die neue Chronologie die volle Verarbeitung durchläuft: Geheimnisse (neu gelernt über collect_environment/collect_stack, nie gespeichert), Titelschutz (laut Manifest) und Pseudonyme. Der alte Body nannte nur die Pseudonymisierung.
  • Der Zustand des Bündels wird aus dem eigenen MANIFEST.md gelesen. --bundle verlangt genau eins von --candidates/--chronology, --root ist im Austauschmodus erlaubt.
  • Bündel ohne Chronologie: Der Austausch fügt sie hinzu, das Manifest ändert sich dann an drei festen Stellen.
  • Die Zuordnung und die Pseudonym-Tabelle bleiben unverändert, die Review-Liste wird neu erzeugt.
  • Die Akzeptanzkriterien sind auf elf prüfbare Punkte ausgebaut.

Korrigiert: Versionsteil PATCH → MINOR (neue Fähigkeit, laut version-parts.md Schritt 3). tools/CONTRACT.md ist aus den Kriterien gestrichen (beschreibt den Sammler nicht), dafür ist tools/README.md aufgenommen.

Labels: kind/defect → kind/build, size/S → size/M (Instruction-Änderung plus eigener Testaufwand über drei Verarbeitungsstufen).

**Changelog:** Design gegen den Baum geprüft (10.1.0-beta.14). Neu: - Die Invariante verlangt jetzt, dass die neue Chronologie die volle Verarbeitung durchläuft: Geheimnisse (neu gelernt über `collect_environment`/`collect_stack`, nie gespeichert), Titelschutz (laut Manifest) und Pseudonyme. Der alte Body nannte nur die Pseudonymisierung. - Der Zustand des Bündels wird aus dem eigenen `MANIFEST.md` gelesen. `--bundle` verlangt genau eins von `--candidates`/`--chronology`, `--root` ist im Austauschmodus erlaubt. - Bündel ohne Chronologie: Der Austausch fügt sie hinzu, das Manifest ändert sich dann an drei festen Stellen. - Die Zuordnung und die Pseudonym-Tabelle bleiben unverändert, die Review-Liste wird neu erzeugt. - Die Akzeptanzkriterien sind auf elf prüfbare Punkte ausgebaut. Korrigiert: Versionsteil PATCH → **MINOR** (neue Fähigkeit, laut `version-parts.md` Schritt 3). `tools/CONTRACT.md` ist aus den Kriterien gestrichen (beschreibt den Sammler nicht), dafür ist `tools/README.md` aufgenommen. Labels: `kind/defect` → `kind/build`, `size/S` → `size/M` (Instruction-Änderung plus eigener Testaufwand über drei Verarbeitungsstufen).
Author
Owner

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.md trägt nun ein Inhaltsverzeichnis, weil es mit dem neuen Absatz über 100 Zeilen kam (docs toc --apply).

**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.md` trägt nun ein Inhaltsverzeichnis, weil es mit dem neuen Absatz über 100 Zeilen kam (`docs toc --apply`).
Author
Owner

Changelog: Abschluss. Stand auf „erledigt“; Release-Workflow #744 und nächtlicher Lauf #745 auf b48a35b jetzt 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.md unter „Unberührt“ mit Begründung aufgenommen.

**Changelog:** Abschluss. Stand auf „erledigt“; Release-Workflow #744 und nächtlicher Lauf #745 auf `b48a35b` jetzt 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.md` unter „Unberührt“ mit Begründung aufgenommen.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: torben/chemenu#220