dist upgrade: --take-release nimmt fuer einen lokal geaenderten Pfad die Release-Fassung (#107)
CI / verify (push) Successful in 45s
Release / release (push) Successful in 37s

Befund 3 aus dem getraceten 5.0.0-auf-6.0.0-Upgrade-Lauf. --keep-local behielt
die Drift und meldete sie bei jedem kuenftigen Upgrade erneut, der andere Weg
"reconcile by hand" hatte kein Werkzeug und kostete Handkopie, Vorbedingungs-
Commit und damit einen rohen git commit an Invariante 5 vorbei.

--take-release <pfad> ist wiederholbar, komponiert pro Pfad mit --keep-local,
lehnt einen nicht blockierten Pfad auch im --dry-run ab und beendet die Drift
statt sie zu uebergehen. Die Abbruchmeldung nennt jetzt alle drei Antworten mit
eingesetzter Kommandozeile und sagt, dass keine der Default ist.

Files changed:
- CHANGES.md
- VERSION
- instructions/upgrade-instance.md
- tools/CONTRACT.md
- tools/chemenu/commands/dist_cmd.py
- tools/chemenu/tests/test_dist_upgrade.py
This commit is contained in:
2026-09-16 17:35:14 +02:00
parent 0e09cf41ea
commit 72d01beef8
6 changed files with 292 additions and 38 deletions
+36 -1
View File
@@ -59,13 +59,14 @@ concern - readable here, never shipped as something to parse.
---
## 6.1.0-beta.2 - 2026-09-16 - Migrationsdokument prueft gegen eine festgehaltene Vorher-Ausgabe, Beispielverweis auf die .template-Form
## 6.1.0-beta.3 - 2026-09-16 - dist upgrade: --take-release nimmt fuer einen lokal geaenderten Pfad die Release-Fassung
**Author:** Torben Nehmer
<!-- wikitool:bumps -->
- Upgrade-Prozedur als eigene Instruktion statt als Prosa in INSTALL.md
- Migrationsdokument prueft gegen eine festgehaltene Vorher-Ausgabe, Beispielverweis auf die .template-Form
- dist upgrade: --take-release nimmt fuer einen lokal geaenderten Pfad die Release-Fassung
<!-- /wikitool:bumps -->
### Upgrade-Prozedur als eigene Instruktion statt als Prosa in INSTALL.md
@@ -173,6 +174,40 @@ einmal. Fuer sie lohnt der eine Befehl, mit dem der Schaden hier gefunden wurde:
`grep -c '^## Authoring guidance'` ueber `types describe <name>` fuer alle vier Typen, drei
bedeutet einen Rest-Abschnitt im eigenen Type-Spec.
### dist upgrade: --take-release nimmt fuer einen lokal geaenderten Pfad die Release-Fassung
`dist upgrade` kannte zwei Antworten auf eine lokal geaenderte Datei und die dritte, die man
eigentlich will, war keine davon. `--keep-local` *behaelt* die Aenderung - und weil der neue Stamp
die Release-Digest trotzdem schreibt, wird dieselbe Datei bei jedem kuenftigen Upgrade erneut
gemeldet. Fuer eine Datei, die der Instanz gar nicht gehoert, ist das der dauerhaft falsche
Zustand. Der andere angebotene Weg, "reconcile them by hand first", hatte kein Werkzeug: im
getraceten 5.0.0-auf-6.0.0-Lauf war eine `kb/CONTRACT.md` durch ein Format-on-Save um
Tabellen-Whitespace verschoben, und das kostete eine Handkopie aus dem entpackten Tarball, einen
Commit nur zur Herstellung der Clean-Tree-Vorbedingung des naechsten Kommandos - und damit einen
rohen `git commit`, an `AGENTS.md` Invariante 5 vorbei, die fuer "ist ja nur eine Vorbedingung"
keine Ausnahme kennt.
`--take-release <pfad>` ist die fehlende Antwort: schreibe fuer diesen Pfad die Release-Fassung,
statt abzubrechen. Wiederholbar, weil der Pfad die Entscheidung *benennt* - `--keep-local` verliert
nichts, `--take-release` verwirft eine lokale Aenderung, und die zwei sind darum nicht symmetrisch
genug fuer ein pauschales Flag. Beide gelten pro Pfad und komponieren auf einem Aufruf, was der
gemischte Fall braucht: eine Datei zuruecksetzen, eine andere behalten. Ohne `--keep-local` bricht
ein blockierter Pfad, zu dem nichts gesagt wurde, weiter ab; ein `--take-release`-Pfad, der gar
nicht blockiert ist, wird abgelehnt - auch im `--dry-run`, denn das ist ein Fehler im *Argument*
und nicht ein Zustand des Baums, und ein still ignorierter Tippfehler haette ein erfolgreiches
Upgrade gemeldet und die Aenderung behalten, die verworfen werden sollte.
Anders als bei `--keep-local` ist die Drift danach **weg** und nicht bloss uebergangen: die Datei
stimmt wieder mit der Digest ueberein, die der Stamp fuehrt, und verschwindet aus der Meldung.
Dazu die Abbruchmeldung selbst, die den Fehlgriff mitverursacht hat. Sie nannte `--keep-local` und
"reconcile by hand", sagte aber nicht, dass es zu `--keep-local` kein Gegenstueck gibt - der Lauf
kuendigte woertlich an, *"I'll let the upgrade take the release's version"*, und rief das Kommando
ohne Flag auf. Jetzt nennt sie alle drei Antworten mit fertig eingesetzter Kommandozeile, im Muster
des Mass-Update-Gates, und sagt ausdruecklich, dass keine davon der Default ist.
`instructions/upgrade-instance.md` Schritt 6 traegt entsprechend nicht mehr die Drei-Schritt-Handreparatur, sondern die Entscheidung und den Dry-Run, mit dem man sie vorher sieht.
---
## 6.0.1 - 2026-09-16 - docs toc/verify erreichen die .template-Form einer Referenzdatei