version notes: Fallback auf den Release-Feed, wenn die Instanz keinen lokalen Eintrag hat (#107)
CI / verify (push) Successful in 46s
Release / release (push) Successful in 36s

Befund 2 aus dem getraceten 5.0.0-auf-6.0.0-Upgrade-Lauf. Eine ausgelieferte
Instanz bekommt CHANGES.md als Stub und dist upgrade ueberschreibt sie nie, der
Befehl konnte dort also nie antworten - an genau der Stelle, an der Breaking
Change und Migration gelesen werden muessen.

Fehlt der Eintrag lokal, wird der Feed aus update_url gefragt. Nur mit
Release-Stamp, damit Ursprungs-Repo und CI den Pfad nicht betreten koennen;
stdout traegt nur die Notes, Herkunft nach stderr; --offline verweigert den
Aufruf und nennt die release_url, so wie jeder Feed-Fehlerfall auch.

Dazu zwei seit ihrer Umsetzung falsche Eintraege aus tools/CONTRACT.md
"Future considerations" entfernt: MCP-Server-Wrapper und dist upgrade.

Files changed:
- CHANGES.md
- INSTALL.md
- VERSION
- instructions/upgrade-instance.md
- tools/CONTRACT.md
- tools/chemenu/commands/version_cmd.py
- tools/chemenu/tests/test_version_cmd.py
- tools/chemenu/version.py
This commit is contained in:
2026-09-16 17:54:39 +02:00
parent 72d01beef8
commit 0c98080964
8 changed files with 360 additions and 52 deletions
+45 -1
View File
@@ -59,7 +59,7 @@ concern - readable here, never shipped as something to parse.
---
## 6.1.0-beta.3 - 2026-09-16 - dist upgrade: --take-release nimmt fuer einen lokal geaenderten Pfad die Release-Fassung
## 6.1.0-beta.4 - 2026-09-16 - version notes antwortet auf einer ausgelieferten Instanz aus dem Release-Feed
**Author:** Torben Nehmer
@@ -67,6 +67,7 @@ concern - readable here, never shipped as something to parse.
- 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
- version notes antwortet auf einer ausgelieferten Instanz aus dem Release-Feed
<!-- /wikitool:bumps -->
### Upgrade-Prozedur als eigene Instruktion statt als Prosa in INSTALL.md
@@ -208,6 +209,49 @@ 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.
### version notes antwortet auf einer ausgelieferten Instanz aus dem Release-Feed
`version notes` liest die lokale `CHANGES.md`. Eine ausgelieferte Instanz bekommt die aber als
neunzeiligen Stub ohne einen einzigen Versionseintrag, und `CHANGES.md` steht in
`chemenu.ownership.is_upgrade_preserved` - `dist upgrade` ueberschreibt sie also nie. Der Stub
bleibt der Stub, dauerhaft. Der Befehl konnte dort nicht nur heute nicht antworten, sondern nie,
und das an genau der Stelle, an der die Antwort am meisten zaehlt: dem Grenzuebertritt, vor dem
**Breaking Change:** und **Migration:** gelesen werden muessen. Der getracete
5.0.0-auf-6.0.0-Lauf kam nur weiter, weil er die Release-Notes ueber einen MCP-Server holte - ein
Weg, den die Anleitung nicht nannte und den eine Instanz ohne erreichbaren Server gar nicht hat.
Fehlt der Eintrag lokal, fragt der Befehl jetzt den Feed aus `update_url` - denselben, den
`version check` benutzt - und druckt den `body` des Release, den `release.yml` im Ursprungs-Repo
ohnehin aus `version notes` baut. Drei Praezisierungen halten das von einem stillen Netzaufruf
auseinander:
- **Nur mit Release-Stamp.** Ein Baum ohne `.wikitool-release.json` ist ein Dev-Checkout und
behaelt die alte Fehlermeldung. Damit kann der neue Pfad im Ursprungs-Repo und in CI nicht
betreten werden - auch nicht von `release.yml`s eigenem `version notes`.
- **stdout traegt nur die Notes.** Die Zeile, welcher Feed gefragt wird, und die, welche Version
geantwortet hat, gehen nach stderr. `release.yml` leitet stdout in die Datei um, die es als
Release-Body postet; alles andere dort waere Inhalt im Release.
- **`--offline`** verweigert den Aufruf und scheitert mit der `release_url` aus dem Stamp. Dieselbe
Seite nennt auch jeder Fehlerfall des Feeds, damit ein Lauf, der die Notes nicht lesen kann,
wenigstens weiss, wo sie stehen. Ein leerer `body` ist ebenfalls ein Fehler: eine leere Antwort
darf nicht als "dieses Release hat nichts zu melden" durchgehen.
Gefragt werden kann nur das **neueste** Release: `update_url` ist die einzige URL, die der Stamp
fuehrt, und eine `/releases/tags/<tag>`-URL daraus zusammenzusetzen waere eine geratene
API-Form statt einer gelesenen (Invariante 7). Antwortet der Feed eine andere Version als die
gefragte, wird das auf stderr benannt und die Notes werden trotzdem gedruckt - das ist nicht der
Randfall, sondern der Hauptfall, weil die Notes *vor* dem Tausch gelesen werden, wenn `VERSION`
noch das Release nennt, das verlassen wird.
`instructions/upgrade-instance.md` Schritt 2 und INSTALL.md § "Version und Updates" tragen
entsprechend nicht mehr den Hinweis, dass der Befehl auf einer Instanz nicht antwortet; damit ist
auch die letzte der beiden Werkzeugluecken aus dieser Instruktion heraus, und ihr Vorwort nennt
keine mehr.
Bei der Gelegenheit zwei Eintraege aus `tools/CONTRACT.md` § "Future considerations (not
implemented)" entfernt, die dort seit ihrer Umsetzung falsch standen: der MCP-Server-Wrapper und
`dist upgrade` selbst. Beide sind im selben Dokument weiter oben als existierend beschrieben.
---
## 6.0.1 - 2026-09-16 - docs toc/verify erreichen die .template-Form einer Referenzdatei