iris-rea-recherche: Schutz des Beweis-Speichers und fehlende Befehle (Auswertung des ersten echten Durchlaufs) #374

Open
opened 2026-11-06 13:31:04 +00:00 by alf · 2 comments
Owner

Befund

Ein echter Durchlauf (Chat-Export vom 2026-11-06: ein DOS-Spiel von 1995 als Zip, Projekt 3dcyberpuck) zeigt, dass der Ablauf trägt (Aufnahme, Entpacken von 191 Dateien, Befunde, Nachbau, Prüfung; Richtung wurde per Canvas dem Nutzer überlassen; eine eigene Vermutung wurde mit Belegen widerlegt; iris-ghidra lud eine 16-Bit-MZ-Datei mit 697 Funktionen). Er zeigt auch zwei Schwächen:

  1. Das Modell hat am Plugin vorbeigeschrieben. Im Speicher stehen Fundstellen, die das Plugin nicht erzeugen kann (ghidra:1000:0000 (entry), offset:gesamtdatei Byte-Scan …), ein „verifiziert durch“ mit Freitext statt einer Nachbau-ID (B2) und ein umgeschriebener Befund. Ursachen laut den Überlegungen des Modells: Der Skill-Text war nach der Kontextkompression weg („ich bearbeite speicher.json direkt“); dem Plugin fehlen Befehle zum Korrigieren und Widerlegen eines Befunds; Fundstellen kennen keine 16-Bit-Adressen (1000:0157, Ghidra zeigt sie so) und keine Bereiche; die Schutzregeln gelten nur im Befehl, nicht in der Datei.
  2. Die Verifikation von N1 ist zirkulär (Erwartetes mit demselben Zerschneiden der Datei berechnet wie im Nachbau); B3, B9, B10 stehen trotzdem als „verifiziert“. (Teil 3, noch offen.)

Kleiner: Der Modus wurde nicht erfragt (Standard still genommen); große Testvektoren gingen nur über ein Hilfsskript, weil die Befehlszeile zu klein ist.

Ziel (Teil 1 und 2, in diesem Issue umgesetzt; Teil 3 wird mit dem Nutzer entschieden)

Teil 1, Schutz: Befehlskarte und die Regel „speicher.json nie direkt bearbeiten“ im Systemprompt (übersteht die Kompression). Beim Laden prüft das Plugin, ob jeder „verifizierte“ Befund von einem bestandenen, unveränderten Nachbau gedeckt ist und ob die Fundstellen gültig sind; Abweichungen zeigt status, rea_speicher.py pruefen nennt sie, das Kontextpaket führt solche Befunde als „nicht belegt“. neu verlangt --modus (sonst Rückfrage, Exit-Code 3).
Teil 2, Befehle: Befund ändern (setzt „verifiziert“ zurück) und widerlegen; Fundstellen mit 16-Bit-Adressen (adresse:1000:0157), Bereichen und Offset in einer entpackten Datei (datei:PFAD@0x10-0x20); Testvektoren aus einer JSON-Datei (--eingabe-datei, --erwartet-datei) oder direkt aus Bytes des Ziels (--eingabe-aus, --erwartet-aus).

Warum

Das Plugin ist die Vorstufe, die Kontext erzeugt und Daten (zum Beispiel Dateiformate) extrahiert; ein späteres Plugin soll daraus etwa eine Rust-Anwendung machen. Das trägt nur, wenn der Speicher verlässlich ist und das Modell nicht um ihn herumschreiben muss.

## Befund Ein echter Durchlauf (Chat-Export vom 2026-11-06: ein DOS-Spiel von 1995 als Zip, Projekt `3dcyberpuck`) zeigt, dass der Ablauf trägt (Aufnahme, Entpacken von 191 Dateien, Befunde, Nachbau, Prüfung; Richtung wurde per Canvas dem Nutzer überlassen; eine eigene Vermutung wurde mit Belegen widerlegt; `iris-ghidra` lud eine 16-Bit-MZ-Datei mit 697 Funktionen). Er zeigt auch zwei Schwächen: 1. **Das Modell hat am Plugin vorbeigeschrieben.** Im Speicher stehen Fundstellen, die das Plugin nicht erzeugen kann (`ghidra:1000:0000 (entry)`, `offset:gesamtdatei Byte-Scan …`), ein „verifiziert durch“ mit Freitext statt einer Nachbau-ID (`B2`) und ein umgeschriebener Befund. Ursachen laut den Überlegungen des Modells: Der Skill-Text war nach der Kontextkompression weg („ich bearbeite speicher.json direkt“); dem Plugin fehlen Befehle zum Korrigieren und Widerlegen eines Befunds; Fundstellen kennen keine 16-Bit-Adressen (`1000:0157`, Ghidra zeigt sie so) und keine Bereiche; die Schutzregeln gelten nur im Befehl, nicht in der Datei. 2. **Die Verifikation von `N1` ist zirkulär** (Erwartetes mit demselben Zerschneiden der Datei berechnet wie im Nachbau); `B3`, `B9`, `B10` stehen trotzdem als „verifiziert“. (Teil 3, noch offen.) Kleiner: Der Modus wurde nicht erfragt (Standard still genommen); große Testvektoren gingen nur über ein Hilfsskript, weil die Befehlszeile zu klein ist. ## Ziel (Teil 1 und 2, in diesem Issue umgesetzt; Teil 3 wird mit dem Nutzer entschieden) **Teil 1, Schutz:** Befehlskarte und die Regel „speicher.json nie direkt bearbeiten“ im Systemprompt (übersteht die Kompression). Beim Laden prüft das Plugin, ob jeder „verifizierte“ Befund von einem bestandenen, unveränderten Nachbau gedeckt ist und ob die Fundstellen gültig sind; Abweichungen zeigt `status`, `rea_speicher.py pruefen` nennt sie, das Kontextpaket führt solche Befunde als „nicht belegt“. `neu` verlangt `--modus` (sonst Rückfrage, Exit-Code 3). **Teil 2, Befehle:** Befund ändern (setzt „verifiziert“ zurück) und widerlegen; Fundstellen mit 16-Bit-Adressen (`adresse:1000:0157`), Bereichen und Offset in einer entpackten Datei (`datei:PFAD@0x10-0x20`); Testvektoren aus einer JSON-Datei (`--eingabe-datei`, `--erwartet-datei`) oder direkt aus Bytes des Ziels (`--eingabe-aus`, `--erwartet-aus`). ## Warum Das Plugin ist die Vorstufe, die Kontext erzeugt und Daten (zum Beispiel Dateiformate) extrahiert; ein späteres Plugin soll daraus etwa eine Rust-Anwendung machen. Das trägt nur, wenn der Speicher verlässlich ist und das Modell nicht um ihn herumschreiben muss.
Author
Owner

PR #375 gemergt: feat(iris-rea-recherche): Selbstschutz des Speichers, befund aendern/widerlegen, Fundstellen und Testvektoren aus dem Ziel (iris/iris-plugins#374)
http://docker:3000/iris/iris-plugins/pulls/375

Commits:

  • feat(iris-rea-recherche): Selbstschutz des Speichers, befund aendern/widerlegen, Fundstellen und Testvektoren aus dem Ziel (iris/iris-plugins#374)

Stand: Teil 1 und 2 umgesetzt, Version 0.2.0 veröffentlicht (Registry nach dem Pull geprüft).

Befund: Im echten Chat trug der Agent „verifiziert" direkt in speicher.json ein, weil Befehle fehlten (Befund ändern/widerlegen, 16-Bit-Adressen, Bytes aus dem Ziel als Testvektor); der Skill-Text war nach der Kontextkomprimierung weg.

Geändert:

  • Schutz: Befehlskarte und Regeln im Systemprompt; --modus Pflicht (Rückfrage statt Standard); pruefe_speicher prüft beim Laden die Invarianten (unbelegt = „nicht belegt" in Status, Liste, Kontextpaket), pruefen [--reparieren].
  • Fehlende Befehle: befund aendern (setzt „verifiziert" bei Inhaltsänderung zurück, Verlauf), befund widerlegen; Fundstellen adresse:SEG:OFF, adresse:A-B, offset:A-B, datei:PFAD@A-B mit Prüfung gegen die Dateigröße; Testvektoren mit --eingabe-datei/--erwartet-datei/--eingabe-aus/--erwartet-aus (Hash der Quelle gespeichert, Limit 2 MiB).

Geprüft: 288 Tests grün (2 übersprungen); acht Gegenproben (Regel ausgebaut → Tests rot): Verifikationsprüfung, Meldung unbelegter Verifikation, Zurücksetzen beim Ändern, Sperre widerlegter Befunde, --modus, 16-Bit-Grammatik, Größenlimit, Regelzeile im Systemprompt. Gebautes Paket entpackt und mit python3 -I durchlaufen: neu ohne --modus Exit 3, von Hand verifizierter Befund wird gemeldet und mit --reparieren zurückgesetzt. --dry-run, Veröffentlichung.

Nicht geprüft: Verhalten des Agenten im echten Chat mit dem neuen Systemprompt; Installation von 0.2.0 über die Mac-GUI; Linux-Server.

Offen: Teil 3 – neue Definition von „verifiziert" (Erwartungswerte aus einer vom Eingang unabhängigen Quelle, z. B. Dateiformat-Befunde gegen den Loader-Code in Ghidra) wird erst gegrillt. Der Befund B3/B9/B10 aus dem 3dcyberpuck-Lauf gilt als nicht verifiziert.

PR #375 gemergt: feat(iris-rea-recherche): Selbstschutz des Speichers, befund aendern/widerlegen, Fundstellen und Testvektoren aus dem Ziel (iris/iris-plugins#374) http://docker:3000/iris/iris-plugins/pulls/375 Commits: - feat(iris-rea-recherche): Selbstschutz des Speichers, befund aendern/widerlegen, Fundstellen und Testvektoren aus dem Ziel (iris/iris-plugins#374) --- **Stand: Teil 1 und 2 umgesetzt, Version 0.2.0 veröffentlicht (Registry nach dem Pull geprüft).** **Befund:** Im echten Chat trug der Agent „verifiziert" direkt in `speicher.json` ein, weil Befehle fehlten (Befund ändern/widerlegen, 16-Bit-Adressen, Bytes aus dem Ziel als Testvektor); der Skill-Text war nach der Kontextkomprimierung weg. **Geändert:** - Schutz: Befehlskarte und Regeln im Systemprompt; `--modus` Pflicht (Rückfrage statt Standard); `pruefe_speicher` prüft beim Laden die Invarianten (unbelegt = „nicht belegt" in Status, Liste, Kontextpaket), `pruefen [--reparieren]`. - Fehlende Befehle: `befund aendern` (setzt „verifiziert" bei Inhaltsänderung zurück, Verlauf), `befund widerlegen`; Fundstellen `adresse:SEG:OFF`, `adresse:A-B`, `offset:A-B`, `datei:PFAD@A-B` mit Prüfung gegen die Dateigröße; Testvektoren mit `--eingabe-datei/--erwartet-datei/--eingabe-aus/--erwartet-aus` (Hash der Quelle gespeichert, Limit 2 MiB). **Geprüft:** 288 Tests grün (2 übersprungen); acht Gegenproben (Regel ausgebaut → Tests rot): Verifikationsprüfung, Meldung unbelegter Verifikation, Zurücksetzen beim Ändern, Sperre widerlegter Befunde, `--modus`, 16-Bit-Grammatik, Größenlimit, Regelzeile im Systemprompt. Gebautes Paket entpackt und mit `python3 -I` durchlaufen: `neu` ohne `--modus` Exit 3, von Hand verifizierter Befund wird gemeldet und mit `--reparieren` zurückgesetzt. `--dry-run`, Veröffentlichung. **Nicht geprüft:** Verhalten des Agenten im echten Chat mit dem neuen Systemprompt; Installation von 0.2.0 über die Mac-GUI; Linux-Server. **Offen:** Teil 3 – neue Definition von „verifiziert" (Erwartungswerte aus einer vom Eingang unabhängigen Quelle, z. B. Dateiformat-Befunde gegen den Loader-Code in Ghidra) wird erst gegrillt. Der Befund B3/B9/B10 aus dem 3dcyberpuck-Lauf gilt als nicht verifiziert.
Author
Owner

PR #376 gemergt: feat(iris-rea-recherche): zwei Stufen belegt/bestätigt, unabhängige Quelle, kontext.json (iris/iris-plugins#374)
http://docker:3000/iris/iris-plugins/pulls/376

Commits:

  • feat(iris-rea-recherche): zwei Stufen belegt/bestätigt, unabhängige Quelle, kontext.json (iris/iris-plugins#374)

Stand: Teil 3 umgesetzt, Version 0.3.0 veröffentlicht (Registry nach dem Pull geprüft: Paket 0.3.0 und Changelog stehen drin).

Entscheidungen (im Grill-me abgestimmt): zwei Stufen statt einer; Bestätigung per Befehl mit Begründung; Hypothese nur mit bestätigtem Befund; Umbenennung verifiziert → belegt mit Migration beim Laden; maschinenlesbare kontext.json für Folgeplugins.

Geändert:

  • Stufen nicht verifiziert → belegt (bestandener, unveränderter Nachbau) → bestaetigt (zusätzlich unabhängige Quelle), daneben widerlegt. befund bestaetigen ID --durch ART:WERT --begruendung TXT; befund belegen ist neu, verifizieren bleibt Alias.
  • Maschinell geprüft: Befund schon belegt, Quelle gültige Fundstelle im Projekt, Begründung vorhanden, Quelle überlappt nicht mit den Stellen, aus denen die Testvektoren der Nachbauten dieses Befunds lesen (offset-Bereiche, Datei/Bereich, Befund-Quellen). Ob die Quelle wirklich unabhängig ist, bleibt ein Urteil; es steht mit Begründung im Kontextpaket.
  • Selbstprüfung beim Laden kennt die neue Abweichung „bestätigt ohne gültige Quelle“ (gilt dann als belegt, pruefen --reparieren stuft ab). Hypothese „bestätigt“ ohne bestätigten Befund wird gemeldet und zurückgesetzt.
  • Änderung von Titel, Text oder ersetzten Fundstellen setzt beide Stufen auf „nicht verifiziert“ (abweichend von der Absprache „fällt auf belegt zurück“: auch der Beleg bezog sich auf die alte Aussage).
  • Kontextpaket: getrennte Abschnitte „Bestätigte Befunde“ / „Belegte Befunde“, Hypothesen „gestützt, aber nicht unabhängig bestätigt“, daneben kontext.json (ungekürzt, Feld version).

Geprüft: 325 Tests grün (2 übersprungen), davon 36 neue (tests/test_rea_stufen.py). 15 Gegenproben (Regel ausgebaut → Tests rot); eine überlebte (Kontextpaket nahm die eingetragene statt der wirksamen Stufe), der Test wurde geschärft, danach rot. Durchlauf mit dem gebauten, entpackten Paket (python3 -I): Nachbau mit Testvektoren aus Bytes des Ziels, Belegen, Bestätigung mit gleicher Stelle abgelehnt, mit funktion: angenommen, kontext.json und Abschnitte stimmen, ein von Hand gesetzter Eintrag wird gemeldet und mit --reparieren abgestuft. --dry-run, Veröffentlichung.

Nicht geprüft: Verhalten des Agenten im echten Chat mit Systemprompt und Befehlskarte; Installation von 0.3.0 über die Mac-GUI; ob „bestätigt“ im Alltag tatsächlich gegen Loader-Code in Ghidra erfolgt; ein Verbraucher von kontext.json existiert noch nicht; Linux-Server. Das alte Testprojekt (3dcyberpuck) wurde bewusst nicht angepasst; es wird beim Laden migriert (alte „verifiziert“ → „belegt“, falls ein Nachbau sie deckt).

Offen: Folgeplugin, das kontext.json liest (z. B. Rust-Bau, Dateiformat-Auszug); Hinweis in iris-plugin-dev; Linux-Parität.

PR #376 gemergt: feat(iris-rea-recherche): zwei Stufen belegt/bestätigt, unabhängige Quelle, kontext.json (iris/iris-plugins#374) http://docker:3000/iris/iris-plugins/pulls/376 Commits: - feat(iris-rea-recherche): zwei Stufen belegt/bestätigt, unabhängige Quelle, kontext.json (iris/iris-plugins#374) --- **Stand: Teil 3 umgesetzt, Version 0.3.0 veröffentlicht (Registry nach dem Pull geprüft: Paket 0.3.0 und Changelog stehen drin).** **Entscheidungen (im Grill-me abgestimmt):** zwei Stufen statt einer; Bestätigung per Befehl mit Begründung; Hypothese nur mit bestätigtem Befund; Umbenennung `verifiziert` → `belegt` mit Migration beim Laden; maschinenlesbare `kontext.json` für Folgeplugins. **Geändert:** - Stufen `nicht verifiziert` → `belegt` (bestandener, unveränderter Nachbau) → `bestaetigt` (zusätzlich unabhängige Quelle), daneben `widerlegt`. `befund bestaetigen ID --durch ART:WERT --begruendung TXT`; `befund belegen` ist neu, `verifizieren` bleibt Alias. - Maschinell geprüft: Befund schon belegt, Quelle gültige Fundstelle im Projekt, Begründung vorhanden, Quelle überlappt nicht mit den Stellen, aus denen die Testvektoren der Nachbauten dieses Befunds lesen (offset-Bereiche, Datei/Bereich, Befund-Quellen). Ob die Quelle wirklich unabhängig ist, bleibt ein Urteil; es steht mit Begründung im Kontextpaket. - Selbstprüfung beim Laden kennt die neue Abweichung „bestätigt ohne gültige Quelle“ (gilt dann als belegt, `pruefen --reparieren` stuft ab). Hypothese „bestätigt“ ohne bestätigten Befund wird gemeldet und zurückgesetzt. - Änderung von Titel, Text oder ersetzten Fundstellen setzt beide Stufen auf „nicht verifiziert“ (abweichend von der Absprache „fällt auf belegt zurück“: auch der Beleg bezog sich auf die alte Aussage). - Kontextpaket: getrennte Abschnitte „Bestätigte Befunde“ / „Belegte Befunde“, Hypothesen „gestützt, aber nicht unabhängig bestätigt“, daneben `kontext.json` (ungekürzt, Feld `version`). **Geprüft:** 325 Tests grün (2 übersprungen), davon 36 neue (`tests/test_rea_stufen.py`). 15 Gegenproben (Regel ausgebaut → Tests rot); eine überlebte (Kontextpaket nahm die eingetragene statt der wirksamen Stufe), der Test wurde geschärft, danach rot. Durchlauf mit dem gebauten, entpackten Paket (`python3 -I`): Nachbau mit Testvektoren aus Bytes des Ziels, Belegen, Bestätigung mit gleicher Stelle abgelehnt, mit `funktion:` angenommen, `kontext.json` und Abschnitte stimmen, ein von Hand gesetzter Eintrag wird gemeldet und mit `--reparieren` abgestuft. `--dry-run`, Veröffentlichung. **Nicht geprüft:** Verhalten des Agenten im echten Chat mit Systemprompt und Befehlskarte; Installation von 0.3.0 über die Mac-GUI; ob „bestätigt“ im Alltag tatsächlich gegen Loader-Code in Ghidra erfolgt; ein Verbraucher von `kontext.json` existiert noch nicht; Linux-Server. Das alte Testprojekt (3dcyberpuck) wurde bewusst nicht angepasst; es wird beim Laden migriert (alte „verifiziert“ → „belegt“, falls ein Nachbau sie deckt). **Offen:** Folgeplugin, das `kontext.json` liest (z. B. Rust-Bau, Dateiformat-Auszug); Hinweis in `iris-plugin-dev`; Linux-Parität.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
iris/iris-plugins#374
No description provided.