Zustands-Engine

Status: Entwurf

Vorschläge von Claude – nicht verbindlich, bis Daniel sie freigibt.

Der Zustand wird nie gespeichert, sondern immer aus den Annotationen plus der aktuellen Quelle berechnet. Die Engine macht das für jede annotierte Datei in drei Schritten.

Ablauf der Zustands-Engine: Ziel auflösen, Fingerprint vergleichen, Zustand berechnen Quelldatei+ Annotationsdatei 1 · auflösenstrukturell → Zitat → Position 2 · vergleichenFingerprint jetzt vs. damals 3 · Zustandpro Element nicht gefunden → orphaned geändert → stale / Alarm

1 · Auflösen

Vorschlag: Selektoren werden in fester Reihenfolge probiert, und der erste eindeutige Treffer gewinnt PROP_RESOLVE
status: draft
  1. Strukturell – die Elementliste des Adapters enthält ein Element mit genau diesem Selektor.

  2. Textzitat – der exakte Text kommt einmal in der Datei vor; kommt er mehrmals vor, entscheiden Präfix und Suffix. Unterschiede bei Leerzeichen werden ignoriert.

  3. Position – nur, wenn der Text an dieser Position noch zum Fingerprint passt.

Ist der Selektor, der getroffen hat, nicht der erste, meldet die Engine einen Hinweis relinked, damit deciwa die gespeicherten Selektoren aktualisieren kann (nur bei einem ausdrücklichen deciwa relink, nie still). Nichts trifft → orphaned. Textzitat und Position folgen dem W3C Web Annotation Data Model.

Verschobene Elemente

Ein Zähler in einem Selektor – ein Array-Index (json:/steps/2), die Absatznummer in md:paragraph:Setup#2 – verschiebt sich, wenn davor etwas eingefügt oder entfernt wird. Das Element unter dem alten Selektor hat dann einen neuen Fingerabdruck, obwohl das reviewte Element unverändert eine Stelle weiter steht. Hat sich das über seinen Selektor gefundene Element geändert und hat die Annotation kein Textzitat, sucht die Engine deshalb Elemente derselben Art, deren Selektor sich nur in den Zahlen unterscheidet und deren Text noch der reviewte ist. Gibt es genau eines, folgt die Annotation ihm und behält ihren Zustand; sonst zählt das Element unter dem Selektor, und es ist stale. Der Selektor ist ein Hinweis, der reviewte Text entscheidet (JSON- und YAML-Dateien werd... (DEC_DATA_ADAPTERS)). Das gilt für jedes Format.

2 · Vergleichen

Vorschlag: Der Fingerprint umfasst den Quelltext mit normalisierten Leerzeichen PROP_FINGERPRINT
status: draft
refines: PROP_RESOLVE

sha256 über den Quelltext des Elements nach Unicode-NFC, Trimmen und dem Zusammenfassen von Leerzeichenfolgen zu einem Leerzeichen. Markup bleibt drin: ein Wort fett zu machen, lässt eine Freigabe stale werden.

Frage: Sollen reine Formatierungsänderungen eine Freigabe veralten lassen? Q_FINGERPRINT_MARKUP
status: open
to: Daniel

Mit Markup im Fingerprint machen Fettdruck, ein neuer Link oder eine neu umbrochene Tabelle eine freigegebene Aussage stale. Ohne Markup tun das nur Änderungen an den Wörtern – dafür muss deciwa dann Markup pro Format entfernen. Vorschlag: Markup für 0.1 drin lassen (einfach, sicher); neu bewerten, falls es in der Wissensbasis zu viel Rauschen erzeugt.

3 · Zustand

Bewertungen und Notizen ändern den Zustand nie. Für alles andere schaut die Engine auf die offenen und die neuesten Annotationen eines Elements und nimmt die erste Regel, die zutrifft:

#

Regel

Zustand

1

Ziel nicht gefunden

orphaned

2

das neueste Einfrieren gilt, und der Fingerprint hat sich geändert

frozen, but changed

3

das neueste Einfrieren gilt

frozen

4

eine offene Lösch-Aufgabe

changes requested

5

das neueste Urteil ist ein offenes Ablehnen (noch nicht behoben)

rejected

6

das neueste Urteil ist freigeben, und der Fingerprint hat sich geändert

stale

7

das neueste Urteil ist freigeben

approved

8

eine offene Anfrage

requested

9

nichts davon

unreviewed

Vorschlag: Zustandsregeln in dieser Reihenfolge PROP_STATE_RULES
status: draft

Eine offene Anfrage wird als Badge über jedem anderen Zustand angezeigt, damit approved mit einer offenen Frage weiterhin als freigegeben erkennbar ist. Eine erledigte Schnellaktion gibt nichts frei: nach deciwa resolve fällt das Element auf seinen vorherigen Zustand zurück, und die stale-Prüfung zeigt, dass es geändert wurde.

Frage: Wie wird ein Einfrieren aufgehoben? Q_UNFREEZE
status: answered
to: Daniel

Optionen waren: (a) ein neues Urteil am Element beendet das Einfrieren; (b) ein ausdrückliches deciwa unfreeze <id>; (c) nur durch Löschen der Einfrier-Annotation. Von Daniel beantwortet (2026-10-19): (a) – siehe Ein Einfrieren endet mit ei... (DEC_FREEZE_BY_VERDICT).