5.0 KiB
Hinweis: Dieses Dokument beschreibt nur die Änderung dieses PR. Es kann veraltet sein, sobald der nächste PR gemergt ist. Historische PR-Dokumentation wird nicht nachgepflegt — sie ist eine Momentaufnahme, keine aktuelle Doku.
Das Problem
In einem geteilten Plan lief der günstigste Pfad durch #fe.accounts, ein --Kind der angefangenen Zugabe + [~] #fe.
#fe.accounts ist nur für die Erfüllung von #fe Pflicht; ist #fe optional, ist #fe.accounts effektiv auch optional.
Dasselbe galt für die angefangenen Geschwister #fe.rel und #fe.rbac.
Die Ursache war kein Baufehler, sondern die Ausnahme aus D61: Eine Zugabe lag auf dem Pfad, solange an ihr gearbeitet wurde.
pathChildren() nahm sie deshalb wie ein Pflicht-Kind mit — samt Teilbaum, weil alle Nutzer über diese eine Funktion gehen.
An einem Blatt fiel das nicht auf; an einem angefangenen Paket zog es jedes --Kind auf den Pfad.
Nicht das Ziel
- Die zweite Hälfte von D61 bleibt: Eine realisierte Alternative gewinnt ihre
|/=-Gruppe (chosenPool) — dort geht es um eine getroffene Wahl, nicht um Notwendigkeit. - Keine Änderung an der Dependency Closure (D42): Eine Abhängigkeit aus dem nötigen Teil holt einen Knoten aus einem optionalen Zweig weiterhin herein.
- Keine Änderung an Färbung oder Stationen — nur die Menge der nötigen Knoten ändert sich.
Die Szenarien
Feature: Eine angefangene Zugabe bleibt eine Zugabe
Hintergrund
+sagt „entbehrlich“,[~]sagt „daran wird gearbeitet“; die beiden Achsen sind unabhängig (SPEC §3).- Die Pfadrechnung liest nur die erste Achse.
Szenario#4.01: Das Pflicht-Kind einer angefangenen Zugabe liegt nicht auf dem Pfad
Damit der Pfad nicht durch Arbeit führt, die der Plan für entbehrlich erklärt.
- Gegeben eine Zugabe
+ [~] Zugabe (L)mit den Kindern- [~] Teil A,- [ ] Teil Bund+ Extra - Wenn der günstigste Pfad gerechnet wird
- Dann liegen weder die Zugabe noch ihre Kinder darauf
Nachgewiesen durch
tests/optional.test.js: „holt das Pflicht-Kind einer angefangenen Zugabe nicht herein“.- Headless gegen den gemeldeten Server-Stand gerechnet:
#fe,#fe.rel,#fe.rbac,#fe.accountsaußerhalb des Pfads.
Szenario#4.02: Eine angefangene Zugabe selbst liegt nicht auf dem Pfad
Damit der Status nicht über Notwendigkeit entscheidet.
- Gegeben
+ [~] Zugabe (S)bzw.+ [/] Zugabe (S)unter einer Wurzel - Wenn der günstigste Pfad gerechnet wird
- Dann liegt nur die Wurzel darauf und ist allein Station
Nachgewiesen durch
tests/optional.test.js: „lässt eine[~]-Zugabe draußen“, „lässt eine[/]-Zugabe ebenso draußen“, „die Wurzel bleibt allein Station“.
Szenario#4.03: Eine Abhängigkeit holt das Pflicht-Kind trotzdem herein
Damit die vom Nutzer benannte Ausnahme gilt: Was ein nötiger Knoten braucht, ist nötig.
- Gegeben
- [ ] Pflicht (S) :#bund unter einer angefangenen Zugabe- [ ] #b: Teil B - Wenn der günstigste Pfad gerechnet wird
- Dann liegt
Teil Bdarauf, die Zugabe selbst nicht
Nachgewiesen durch
tests/optional.test.js: „eine Abhängigkeit aus dem nötigen Teil zieht das Pflicht-Kind trotzdem herein“.
Szenario#4.04: Die Wahl in einer Alternativgruppe bleibt unverändert
Damit die Rücknahme nur die Zugaben trifft.
- Gegeben eine
|- oder=-Gruppe mit einer angefangenen und einer billigeren unangetasteten Alternative - Wenn der günstigste Pfad gerechnet wird
- Dann gewinnt weiterhin die angefangene
Nachgewiesen durch
tests/frontier.test.js, Block „Auswahl — die getroffene Wahl gewinnt“, unverändert grün.- Gegenprobe per Mutation: Die
isStarted-Ausnahme wieder eingebaut, fallen genau die fünf neuen Zusicherungen; die Alternativen-Tests bleiben grün.
Die Lösung
pathChildren()infrontend/src/model.jsfiltert optionale Kinder ohne Ausnahme heraus;isStarted()ist entfallen, es hatte keinen Abnehmer mehr.- SPEC §9 (Günstigster Pfad) beschreibt die Regel neu,
llms.mdzieht nach. - D97 hält die Entscheidung samt der verworfenen Blatt-Ausnahme und dem benannten Preis fest: Eine angefangene Zugabe steht blass ohne Station da, der Stationen-Knopf führt nicht mehr dorthin.
- Der Plan-Knoten
#ed.path.startedbeschreibt die neue Regel und steht auf[x].
Warum die allgemeine Regel und nicht eine Ausnahme nur für Blätter: Die hinge davon ab, ob jemand ein Paket zerlegt hat — dieselbe Zugabe läge vor der Zerlegung auf dem Pfad und danach nicht mehr.
Offene Fragen
- Keine.
Weitere Änderungen
- Der mitgelieferte Werkbaum-Plan ändert sich an einer Stelle:
+ [/] #not.tagtritt mit zwei Knoten vom Pfad zurück (196 → 194 Pfadknoten, 55 → 53 Stationen). CLAUDE.md: Gitea ist der Arbeitsstand; jeder Branch wird sofort nachorigingepusht, GitHub bekommt nie Branches.remote.pushDefault=originundpush.autoSetupRemote=truesind lokal gesetzt.
Vorausgesetzte PRs
- Keine.
Folge-PRs
- Keine geplant.