Verdichtung als Zustandsübergang · gemessen am Quelltext

Eine Kette mit nur einem Ziel

Eine Verdichtung ist ein Zustandsübergang: jeder Eintrag geht in den nächsten Lauf und kommt entweder unverändert, zusammengezogen oder gar nicht wieder heraus. Das ist eine Markov-Kette — und als solche lässt sich fragen, wo sie auf lange Sicht landet.

Ich habe die Übergänge nicht aus SKILL.md abgelesen, sondern compactor.js mit erfundenen Einträgen gefüttert und beobachtet, was zurückkommt. Das Ergebnis unten ist gemessen, nicht vermutet.

Die gemessene Übergangsmatrix

Je ein Eintrag pro Typ, einmal ohne ref und einmal mit — sonst identisch. Überlebt oder nicht:

Typ ohne ref mit ref
MOTIV überlebt überlebt
FUNDentferntüberlebt
WEGentferntüberlebt
WANDentferntüberlebt
SETZUNGentferntüberlebt
ZWEIFELentferntüberlebt
Sechs Typen, zwei Spalten, und außer bei MOTIV steht überall dasselbe. Der Typ eines Eintrags spielt für sein Überleben keine Rolle — es entscheidet allein, ob ein ref gesetzt ist.

Die effektive Regel von compactor.js lautet: Ein Eintrag überlebt genau dann, wenn er MOTIV ist oder ein ref trägt.

Das ist keine Zusammenfassung der sieben Regeln, das ist alles, was von ihnen übrig ist. Regel 2 und 3 laufen nie (Abweichung A), Regel 5 und 6 haben keine Wirkung, weil kein Typ geprüft wird (Abweichung C), und Regel 7 übernimmt den gesamten Rest. Sechs Typen und ein Regelwerk, das faktisch eine einzige Ja/Nein-Frage stellt.

Die Kette, und wo sie landet

Damit lässt sich die Kette simulieren. Der Regler stellt ein, wie viele Einträge im Korpus ein ref tragen — der einzige Wert, auf den compactor.js reagiert.

Regelwerk
ref-Dichte 60 %
Läufe 1
Ein Korpus aus 120 Einträgen in typischer Mischung. Der Kreis entfernt ist absorbierend: was dort ankommt, kommt nicht zurück. Der wandernde Punkt zeigt einen einzelnen Eintrag auf seinem Weg durch die Kette.

Verschieb den Regler über den ganzen Bereich. Bei 0 % bleibt nur das MOTIV übrig, bei 100 % bleibt alles stehen. Dazwischen verschiebt sich nur das Verhältnis — aber die Zahl der zusammengezogenen Einträge bleibt an jeder Stelle null.

Es gibt keine Einstellung, bei der compactor.js verdichtet. Er löscht viel oder wenig. Genau das ist der Unterschied zwischen dem Skill und einer gewöhnlichen Zusammenfassung — und er hängt an einer Kante, die in der Kette fehlt.

Der Fund, der nicht in der Gesprächsgrundlage steht

Naheliegender Schluss aus alldem: Abweichung A beheben, also die Strang-Suche auf eingehende Verweise umstellen — dann greift Regel 2. Ich habe das durchgespielt, indem ich die ref-Richtung in den Testdaten umgedreht habe, sodass die Suche die Wand findet. Das kommt dabei heraus:

Fall 1 — die WAND trägt selbst keinen ref

e01 MOTIV
e03 WEG   ref→e04        "Weg, weil X"
e04 WAND                 "Die Wand"

  Regel 2 greift:  e03 wird in e04 hineingezogen
                   e04 heisst jetzt "Die Wand (Weg, weil X)"   ✓ richtig
  Regel 7 greift:  e04 hat jetzt keinen eingehenden Verweis mehr
                   und selbst keinen ausgehenden  →  folgenlos  ✗ geloescht

Ergebnis:  3 → 1     Wand und Weil sind beide weg

Fall 2 — dieselbe Lage, die WAND trägt zufällig einen ref

e01 MOTIV
e03 WEG   ref→e04        "Weg, weil X"
e04 WAND  ref→e01        "Die Wand"

  Regel 2 greift:  wie oben
  Regel 7 greift nicht:  e04 hat einen ausgehenden Verweis

Ergebnis:  3 → 2     e04 "Die Wand (Weg, weil X)" — so soll es sein
Beides gemessen, mit dem echten compactor.js.

Abweichung A lässt sich nicht allein beheben. Sobald Regel 2 greift, verliert die WAND ihren einzigen eingehenden Verweis — den vom WEG, den sie gerade geschluckt hat. Damit ist sie für isFolgenlos() folgenlos und fällt im selben Lauf weg. Die Regel zerstört genau das, was sie eben erzeugt hat.

Ob die zusammengezogene Wand überlebt, hängt an etwas völlig Unbeteiligtem: ob sie zufällig selbst einen ref trägt. A und C müssen zusammen behoben werden, sonst macht der Fix die Sache schlimmer — aus 4 → 4 wird 4 → 2, und was verlorengeht, sind die Wände.

Was das für das Gespräch heißt

Die Liste der vier Abweichungen legt nahe, man könne sie einzeln abarbeiten. Die Messung sagt: nein. A ohne C angewandt verschlechtert das Ergebnis. Das gehört auf die Tagesordnung, bevor jemand anfängt.

Und die Reihenfolge ergibt sich daraus von selbst: erst C (isFolgenlos() auch WAND und offene ZWEIFEL ausnehmen), dann A (Strang-Suche umdrehen), dann D (Verweise nachziehen), dann B (Altersstufen). C zuerst, weil es das Sicherheitsnetz ist, in das A hineinfällt.