MAJOR ist in der Doku als Inhaltsmigration definiert, nicht als Kompatibilitätsbruch #26
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Beobachtung aus der Umsetzung von #3 (Stack 2.0.0).
Die Doku des Stacks führt für die Wahl der Versionsstelle zwei Fragen zusammen, die nicht dasselbe sind:
An allen Stellen, die einer Session bei der Entscheidung begegnen, steht nur die erste:
instructions/dev/stack-dev/SKILL.md, Schritt 3--major⇔ „Existing content must be migrated"tools/chemenu/version.py, Modul-Docstring1.0.0on the same rule reads as the familiar 'MAJOR means migration'"INSTALL.md§ Version und Updates1.0.0liest sich dieselbe Regel als das gewohnte 'MAJOR heißt Migration'"Nur
version bump --helpformuliert es korrekt („A bump that crosses the compatibility boundary additionally requires a migration document … or--no-migration") — also ausgerechnet die Stelle, die man erst liest, wenn die Entscheidung schon gefallen ist.Warum das zählt
Bei #3 hat genau diese Lücke zu einer falschen Einschätzung geführt. Der Rebranding-Wechsel migriert keinen Inhalt, brach aber drei Dinge:
.wikitool-release.jsonjeder bestehenden Instanz zeigt auf den alten Repo-Pfad —version checkerfährt dort nichts mehr, und die Instanz kann den Stempel nicht reparieren (Invariante 1).llm-wiki-stack-*→chemenu-stack-*).wiki_tools→chemenu).Nach der Tabelle im Skill war das
--minor. Nach der tatsächlichen Regel ist es--major --no-migration. Der Fehler wurde vom Nutzer gefangen, nicht von der Doku — und die Existenz von--no-migrationbeweist, dass das Werkzeug den Fall längst kennt: es gibt boundary-crossing Bumps ohne Inhaltsmigration. Die Prosa kennt ihn nicht.Was „fertig" heißt
instructions/dev/stack-dev/SKILL.md: Tabellenzeile für--majorformuliert die Kompatibilitätsfrage, nicht die Migrationsfrage. Die Inhaltsmigration wird als Folge genannt („und dann zusätzlich: Migrationsdokument oder--no-migration"), nicht als Auslöser.tools/chemenu/version.py: Docstring trennt beides ausdrücklich — die leftmost-non-zero-Regel beschreibt Kompatibilität; ob Inhalt migriert werden muss, ist eine zweite, unabhängige Frage.INSTALL.md§ Version und Updates: dieselbe Trennung, aus Leserperspektive („ein MAJOR-Sprung kann eine leere Migrationskette haben und trotzdem Handarbeit verlangen" — genau der Fall, den der neue Abschnitt „Sonderfall: Update von 1.x auf 2.0.0" beschreibt).kb/unangetastet bleibt — Update-Pfad, Artefaktnamen, Import-/Kommandonamen, Envvars, Stempeldateien.Nicht Teil dieses Issues
docs verifymaschinell prüfen zu lassen, ob eine Versionsstelle richtig gewählt wurde — das ist eine Urteilsfrage und kein hartes Orakel. Hier geht es um die Prosa, die dieses Urteil anleitet.Kontext
9a7abe6)CHANGES.md-Eintrag zu 2.0.0 enthält unter „Warum das trotzdem MAJOR ist" die Begründung im Volltext und kann als Fallbeispiel dienen.torben referenced this issue2026-09-02 06:07:30 +00:00
Umgesetzt in
2.5.0(Commit31662dc).Neu:
instructions/dev/version-parts.md- einzige Quelle der Regel. Trennt dieKompatibilitätsfrage (ist die neue Version ein Drop-in-Ersatz - vorwärts ohne Handarbeit,
rückwärts noch downgradebar?) von der Migrationsfrage (muss
kb/sich bewegen?). Enthält denKatalog der Brüche, die die Grenze bei unangetastetem
kb/überschreiten (Update-Pfad,Artefaktname, Import-Name, Flags, Envvars, Shape maschinengelesener Dateien) und den
2.0.0-Fallals Fallbeispiel. Liegt unter
instructions/dev/, also nicht in einer verteilten Instanz - dieausgelieferten Artefakte (
stack-dev,version.py-Docstring,INSTALL.md) tragen die Kurzformder Regel, aber keinen Verweis auf die Datei, sonst hätte
instructions verifyeinendangelnden Verweis nach
dist exportgemeldet.Über die vier "fertig heißt"-Punkte hinaus, weil beim Schreiben klar wurde, dass reine Prosa
wieder drifted:
version bump --breaking "<was aufhört zu funktionieren>"ist bei jedem GrenzübertrittPflicht (verweigert auf jedem anderen Bump), schreibt
**Breaking Change:**vor dieMigrationszeile in den
CHANGES.md-Eintrag.docs verifybekommt eine zweite, unabhängige Prüfung(
check_breaking_change_for_boundary) neben der bestehenden Migrationsprüfung - einRebranding wie
2.0.0besteht die eine und fällt ohne--breakingdurch die andere.stack-devbekommt einen Entscheidungspunkt: stellt sich eine Änderung als nicht drop-inheraus, wird nicht aus eigener Initiative gebumpt. Vorzulegen sind der konkrete Bruch, die
Handarbeit je Instanz und drei Alternativen (Shim, aufschieben/bündeln, kompatibel/brechend
aufspalten mit Deprecation-Fenster), dazu eine Empfehlung - erst dann Freigabe.
Sechs neue Tests, volle Suite grün (806),
docs verify/instructions verifysauber.docs verifyprüft weiterhin nicht, ob die Stelle richtig gewählt wurde - das bleibtausdrücklich Urteil, wie im Issue verlangt ("Nicht Teil dieses Issues").