feat: Die Größe bepreist den ganzen Teilbaum — Kinder zählen nicht obendrauf (D69)

Der Preis eines Knotens ist seine angegebene (oder D66-geschätzte) Größe;
die frühere Rekursion (eigene Größe plus Summe/Minimum der Kinder) zählte
doppelt und bestrafte sorgfältig zerlegte Pakete — eine zerlegte
S-Alternative verlor gegen ein grobes L. Das Vereinigungs-Maß der
Closure-Suche (D42) zählt je Knoten nur noch die Marge über seine nötigen
Teilpakete hinaus. Mitgelieferter Plan wählt identisch (per Vergleich
gemessen); SPEC §9 und llms.md nachgezogen.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
mhoennig
2026-08-25 10:45:12 +02:00
co-authored by Claude Fable 5
parent 7278e74393
commit 4aaa19becd
9 changed files with 227 additions and 33 deletions
+7 -2
View File
@@ -65,10 +65,15 @@ describe('Kosten — Erledigtes zählt nicht mehr', () => {
expect(ownCost(a)).toBe(0);
});
it('zieht nur die eigenen Kosten ab, nicht den Teilbaum', () => {
it('der erledigte Knoten bepreist 0; sein offenes Kind bleibt auf dem Pfad', () => {
/* Seit D69 bepreist die Größe den ganzen Teilbaum — der erledigte
Elternknoten kostet nichts mehr, das offene Kind bleibt trotzdem
nötig und behält seinen eigenen Preis. */
const [n] = roots(`[x] Eltern (L)
- [ ] Kind (S)`);
expect(cheapestCost(n)).toBe(cheapestCost(roots('[ ] Kind (S)')[0]));
expect(cheapestCost(n)).toBe(0);
const set = computeCheapSet([n]);
expect(set.has(n.children[0])).toBe(true);
});
});