compactor.js gegen SKILL.md · Abweichung A
Regel 2 verlangt: ein geschlossener Strang WEG → WAND
wird auf die WAND zusammengezogen, die WAND erbt das Weil des WEG. Damit das
greifen kann, muss der Code von einem WEG aus seine Wand finden.
In den Daten zeigt ref vom neueren auf den
älteren Eintrag. findClosedStrand() startet beim WEG und
folgt den ausgehenden Verweisen — sucht die Wand also in der
Vergangenheit, wo sie nie liegen kann. Sie liegt immer in der Zukunft des WEG.
Gemini/TestProjektref-Verweise:
jeder Eintrag zeigt auf den älteren, auf den er antwortet — e04 WAND zeigt auf
e03 WEG, den Weg, der gegen sie lief. Der Umschalter spielt die beiden
Suchrichtungen ab dem WEG ab.
| Variante | Einträge nachher | Regel 2 gegriffen? |
|---|---|---|
| Vorher | 4 | — |
compactor.js (heute) |
4 | nein, kein einziges Mal |
nach SKILL.md, Regel 2 |
3 | ja — e03 zieht auf e04 zusammen |
TestProjekt enthält den lehrbuchhaften Strang e03 WEG → e04 WAND.
Nach Regel 2 müssten daraus drei Einträge werden. Gemessen: 4 → 4. Das ist der
Beleg, nicht die Vermutung.
Regel 2 und 3 sind die einzigen, die zusammenziehen. Fallen
sie aus, bleiben nur 6 und 7 — und die löschen. Genau das erklärt
Gemini/Blödeleini: 4 → 0, kein einziger Zusammenzug, nur
Wegnahme.
Der Unterschied zwischen dem Skill und einer gewöhnlichen Zusammenfassung hängt an den beiden Regeln, die nicht laufen. Ohne sie verdichtet der Compactor nicht, er kürzt.
SKILL.md legt die Richtung von ref nirgends
ausdrücklich fest. Deshalb ist A die einzige der vier Abweichungen, die
wirklich eine Entscheidung ist:
Ist ref so gemeint, wie die Daten es zeigen — neu zeigt
auf alt?
Falls ja: ein Zeilen-Fix — die Strang-Suche auf eingehende Verweise
umstellen.
Falls nein: die Erzeuger (journal-store.js,
auto-tagger.js) schreiben verkehrt herum, und der Fix gehört
dorthin.
B, C und D dagegen widersprechen dem, was in SKILL.md bereits
ausdrücklich steht — die vier Altersstufen, das „außer WAND" in Regel 7, das
Nachziehen der Verweise. Das sind keine Entscheidungen, sondern Abweichungen
von einer vorhandenen Spezifikation: sie brauchen Richards Durchsicht, nicht
seine Erlaubnis.
index.html sind B, C und D umgesetzt und gegen diese Daten
getestet (compactByAge(), KEEP_ALWAYS,
relinkRefs()); der Code ließe sich übernehmen. A ist dort gar
nicht betroffen, weil das Journal seine Stränge über die
eingehenden Verweise bildet — genau den Weg, den der grüne Bogen oben
zeigt.
runCompaction()
setzt data.okf.json und VERLAUF.md auf 0666,
überschreibt sie an Ort und Stelle und setzt sie zurück auf 0444 —
keine Sicherung, keine Historie. Was ein Lauf wegnimmt, ist weg, und es fällt
erst Monate später auf, wenn die Wand fehlt, die einen zweiten Anlauf verhindert
hätte. Eine Kopie vor dem Schreiben wäre billig.