LM-Studio-Matrix mit gemma-4-e4b: zwoelf Laeufe und vier Befunde
Skill 12.0.0 bis 12.2.0 und Adapter 2.0.0 bis 2.2.0. Werkzeugfreigabe: Die Shell-Rechte des OpenCode-Adapters sind jetzt eine Denylist wie beim Claude-Adapter statt einer Allowlist. Ausloeser war der erste Qwen-Lauf, dessen einzige beide Werkzeugaufrufe an einer Pipeline scheiterten. Kontrolltest belegt beide Richtungen: Get-ChildItem | Format-Table laeuft durch, rm wird verweigert, die Datei bleibt bestehen. Lokaler Betrieb: Der Preflight entlaedt alle Modelle vor jedem Lauf und laedt den Kontext auf das Modellmaximum. Gemessen waren zuvor beide Modelle gleichzeitig geladen - 168 MiB frei von 16,3 GB. Qwen 27B passt auf dieser Karte nicht und wurde durch qwen3.5-9b ersetzt, in Q4_K_M wie Gemma. Messinstrument: analyse-anforderungen.py erkennt Feldnamen in Markdown- Fettschrift und Modulpraefixe in IDs. Der erste lokale Lauf mit Artefakten wurde sonst mit null Anforderungen gezaehlt statt mit neun. Regressionsprobe an vier Claude-Laeufen unveraendert. Befunde: Der Standard-Ausgabeblock, mit dem Claude sieben Artefakte erzeugt, liefert bei gemma-4-e4b null von sechs Laeufen ein Ergebnis - das Modell loest den Pfad relativ zum Arbeitsverzeichnis auf. Ein Lauf startete alle sieben vorgesehenen Rollen und lieferte neun formkonforme Anforderungen. Ein anderer erzeugte sieben richtig benannte Dateien ohne eine einzige formkonforme Anforderung. Und eine Shell-Umleitung schrieb an der Denylist vorbei in den eingefrorenen Snapshot - gefunden vom Vorher/Nachher-Vergleich, nicht von der Regel. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
654339464e
commit
28e927013b
@@ -1210,6 +1210,146 @@ vollständig vorab spezifizieren.
|
||||
|
||||
---
|
||||
|
||||
### Der Ausgabepfad als Bruchstelle kleiner Modelle (01.09.2026)
|
||||
|
||||
Nach der Umstellung auf die Denylist und das Modellmaximum beim Kontext (Skill 12.0.0/12.1.0)
|
||||
lief die Gemma-Matrix zweimal vollstaendig durch – sechs Laeufe ueber drei Agentenmodi, alle mit
|
||||
**null Ergebnisdateien**. Anders als in Iteration 11 endeten sie diesmal jedoch **regulaer**
|
||||
(Exitcode 0, kein Zeitlimit) nach 3 bis 14 Minuten.
|
||||
|
||||
Die Ursache liegt weder im Modell noch im Adapter, sondern an ihrer Schnittstelle. Der zweite
|
||||
solo-Lauf (`v12.1.0-b99a`, 22 Turns, 476.051 Tokens) unternahm **acht Schreibversuche**, und
|
||||
zwar mit genau den vom Prompt geforderten Dateinamen:
|
||||
|
||||
| Schreibziel des Modells | Ergebnis |
|
||||
|---|---|
|
||||
| `Ergebnisse/Analysebericht.md` | abgewiesen |
|
||||
| `Ergebnisse/StRS.md` | abgewiesen |
|
||||
| `Ergebnisse/SyRS.md` | abgewiesen |
|
||||
| `Ergebnisse/SwRS.md` | abgewiesen |
|
||||
| `Ergebnisse/Hypothesen.md` | abgewiesen |
|
||||
| `Ergebnisse/Traceability.md` | abgewiesen |
|
||||
| `C:\...\QuellCode\CentronERP\Ergebnisse\Analysebericht.md` | abgewiesen |
|
||||
|
||||
**Das Modell hat die Analyse also geleistet und die richtigen Artefakte benannt – es legt sie nur
|
||||
konsequent am falschen Ort ab.** Es loest `Ergebnisse/` relativ zum Arbeitsverzeichnis auf,
|
||||
statt den absoluten Laufpfad zu verwenden, den Block 2 des Prompts nennt. Der Snapshot-Schutz
|
||||
wies jeden Versuch korrekt ab; haette er es nicht getan, waere die eingefrorene Codebasis
|
||||
beschrieben worden.
|
||||
|
||||
Der Befund ist **reproduzierbar**: beide solo-Laufe zeigen dasselbe Muster, in den delegierenden
|
||||
Modi endete der Hauptagent bereits vor dem ersten Schreibversuch.
|
||||
|
||||
**Warum das ein Befund ueber die Werkzeugkette ist, nicht ueber die Modellfaehigkeit.** Alle
|
||||
Claude-Laeufe haben mit **demselben Wortlaut** von Block 2 sieben Artefakte erzeugt. Die
|
||||
Anweisung ist also befolgbar; `gemma-4-e4b` befolgt sie nicht. Fuer den Aufbau bedeutet das: Eine
|
||||
Ausgabeanweisung, die fuer ein starkes Modell eindeutig ist, ist es fuer ein kleines nicht – und
|
||||
der Unterschied entscheidet ueber alles oder nichts, nicht ueber graduelle Qualitaet.
|
||||
|
||||
**Konsequenz fuer die Versuchsfuehrung.** Der Wortlaut von Block 2 wurde **nicht** geaendert; er
|
||||
bleibt die Bedingung, unter der die Claude-Laeufe gemessen wurden. Stattdessen wurde eine zweite,
|
||||
ausdruecklich gekennzeichnete Bedingung eroeffnet: Iteration 14 (V1) und 7 (V2) verwenden einen
|
||||
Ausgabeblock, der relative Pfade ausdruecklich als unwirksam benennt und den absoluten Pfad
|
||||
beispielhaft wiederholt. Beide Bedingungen stehen nebeneinander:
|
||||
|
||||
| Iteration | Ausgabeblock | Zweck |
|
||||
|---|---|---|
|
||||
| 13 / 6 | `standard` – Wortlaut der Claude-Laeufe | misst, ob das Modell die Anweisung befolgt |
|
||||
| 14 / 7 | `explizit` – relative Pfade ausdruecklich ausgeschlossen | misst die Analyseleistung, wenn die Pfadhuerde entfaellt |
|
||||
|
||||
Sie sind **nicht poolbar**. Iteration 13/6 beantwortet die Frage nach der Befolgung, Iteration
|
||||
14/7 die nach der inhaltlichen Leistung. Ohne die Trennung waere entweder der Befund verloren
|
||||
oder die Messreihe leer.
|
||||
|
||||
---
|
||||
|
||||
### Eine Shell-Umleitung im eingefrorenen Snapshot (01.09.2026)
|
||||
|
||||
Beim Erstellen der Messprotokolle fiel auf, dass das Codebasis-Root nicht mehr sauber war:
|
||||
`QuellCode/CentronERP/codebase_structure.txt`, 0 Byte, ungetrackt. Der Verursacher liess sich
|
||||
eindeutig zuordnen – Lauf `Iteration 13/.../v12.1.0-0b15` fuehrte aus:
|
||||
|
||||
dir /s > codebase_structure.txt
|
||||
|
||||
`dir /s` ist ein reines Lesekommando und deshalb zulaessig. Die **Umleitung `>` ist kein
|
||||
Kommando**, sondern Shell-Syntax, und wird von keiner kommandobasierten Regel erfasst – weder
|
||||
von einer Denylist noch von einer Allowlist. Der Agent hat damit ohne Regelverstoss eine Datei
|
||||
im eingefrorenen Untersuchungsgegenstand angelegt.
|
||||
|
||||
**Der Aufbau hat genau so funktioniert, wie er entworfen ist.** Der Skill haelt seit Version
|
||||
2.0.0 fest, dass Mustervergleich auf Kommandozeilen nicht lueckenlos ist und die belastbare
|
||||
Read-only-Garantie der Vorher/Nachher-Vergleich per `git status` bleibt. Dieser Vergleich hat
|
||||
den Eingriff gefunden – nicht die Regel, die ihn haette verhindern sollen. Der Fall ist damit
|
||||
die empirische Bestaetigung einer Annahme, die bis dahin nur eine Vorsichtsformulierung war.
|
||||
|
||||
**Was daraus folgt.** Die Denylist ist eine Risikominderung, kein Schutzmechanismus. Wer aus
|
||||
diesen Versuchen ableitet, ein Agent habe die Codebasis nicht veraendert, muss sich auf den
|
||||
Git-Vergleich stuetzen und nicht auf die Werkzeugkonfiguration. Fuer kuenftige Adapter waere
|
||||
eine echte Absicherung nur ausserhalb der Kommandoebene zu haben – etwa ein schreibgeschuetztes
|
||||
Dateisystem oder eine Arbeitskopie wie beim Codex-Adapter.
|
||||
|
||||
**Behandlung.** Die Streudatei wurde entfernt und der Snapshot damit in den eingefrorenen Zustand
|
||||
zurueckversetzt; der Commit blieb unberuehrt. Alle Laeufe, die nach `v12.1.0-0b15` starteten,
|
||||
tragen die Datei in ihrer `before.txt` und weisen deshalb *vor dem Lauf dirty: ja* aus – das ist
|
||||
korrekt und kein Fehler dieser Laeufe. Ihr eigener Vorher/Nachher-Vergleich bleibt aussagekraeftig,
|
||||
weil er Anfangs- und Endzustand desselben Laufs vergleicht.
|
||||
|
||||
---
|
||||
|
||||
### Ergebnis der LM-Studio-Matrix mit `gemma-4-e4b` (01.09.2026)
|
||||
|
||||
Zwoelf Laeufe: zwei Ausgabeblock-Bedingungen x drei Agentenmodi x zwei Wiederholungen, alle unter
|
||||
Skill 12.1.0/12.2.0, Denylist, 131.072 Kontexttokens, Q4_K_M, alleiniges Modell auf der GPU.
|
||||
|
||||
| Block | Modus | Min | Turns | Tools | Subagenten | Dateien | Anforderungen | Tokens |
|
||||
|---|---|---:|---:|---:|---:|---:|---:|---:|
|
||||
| standard | solo | 3,3 | 12 | 15 | 0 | 0 | 0 | 179.601 |
|
||||
| standard | solo | 10,7 | 22 | 21 | 0 | 0 | 0 | 476.051 |
|
||||
| standard | builtin | 5,8 | 3 | 2 | 1 | 0 | 0 | 37.658 |
|
||||
| standard | builtin | 13,5 | 4 | 3 | 2 | 0 | 0 | 88.905 |
|
||||
| standard | custom | 4,4 | 4 | 3 | 3 | 0 | 0 | 66.585 |
|
||||
| standard | custom | 6,5 | 6 | 6 | 2 | 0 | 0 | 100.908 |
|
||||
| explizit | solo | 1,5 | 4 | 3 | 0 | 0 | 0 | 55.152 |
|
||||
| explizit | solo | 8,8 | 14 | 17 | 0 | 0 | 0 | 285.072 |
|
||||
| explizit | builtin | 6,7 | 3 | 2 | 2 | **7** | 0 | 42.110 |
|
||||
| explizit | builtin | 11,8 | 3 | 2 | 2 | 0 | 0 | 54.687 |
|
||||
| explizit | custom | 2,4 | 2 | 1 | 1 | 0 | 0 | 29.656 |
|
||||
| explizit | custom | **15,1** | 7 | 14 | **7** | **4** | **9** | 171.502 |
|
||||
|
||||
**Der Ausgabeblock entscheidet ueber alles oder nichts.** Unter dem Standardwortlaut – demselben,
|
||||
mit dem alle Claude-Laeufe sieben Artefakte erzeugten – lieferten **null von sechs** Laeufen eine
|
||||
Datei. Mit dem expliziten Block waren es zwei von sechs. Die Huerde ist nicht die Analyse, sondern
|
||||
die Pfadaufloesung.
|
||||
|
||||
**Die Streuung dominiert den Modus.** Innerhalb derselben Zelle schwanken die Laeufe um Faktor 5
|
||||
bis 10 in Turns und Tokens, und dieselbe Bedingung liefert einmal sieben Dateien und einmal keine.
|
||||
Ein Moduseffekt ist bei zwei Wiederholungen je Zelle **nicht** nachweisbar; die beiden erfolgreichen
|
||||
Laeufe verteilen sich auf verschiedene Modi (`builtin` und `custom`). Mit n = 2 je Zelle ist das
|
||||
erwartbar und kein Widerspruch zu den Cloud-Befunden, sondern eine Aussage ueber die noetige
|
||||
Stichprobengroesse bei kleinen lokalen Modellen.
|
||||
|
||||
**Ein Lauf zeigt, dass die Rollenbindung technisch traegt.** Der custom-Lauf `v12.1.0-001c` startete
|
||||
**sieben Subagenten, alle sieben kamen zurueck**, und zwar genau die vorgesehenen Rollen:
|
||||
`modulinventar`, `faktenermittler`, `strs-autor`, `syrs-autor`, `swrs-autor`, `belegpruefer`,
|
||||
`konsistenzpruefer`. Er erzeugte vier Dateien mit **neun formkonformen Anforderungen** ueber alle
|
||||
drei Ebenen (2 StRS, 4 SyRS, 3 SwRS), mit Belegen, Pruefideen, Tracelinks und
|
||||
Uebernahmewuerdigkeit. Das ist der erste lokale Messpunkt der Reihe mit inhaltlichem Ertrag.
|
||||
|
||||
**Dateien sind nicht gleich Anforderungen.** Der builtin-Lauf `v12.1.0-e383` erzeugte **sieben**
|
||||
Dateien mit den richtigen Namen – `StRS.md`, `SyRS.md`, `SwRS.md`, `Traceability.md`,
|
||||
`Hypothesen.md`, `Glossar.md`, `Analysebericht.md` – aber **null** formkonforme Anforderungen: Er
|
||||
erfand ein eigenes, dreifeldriges Format (`Anforderung ID`, `Beschreibung`, `Quelle`) statt der rund
|
||||
fuenfzehn vom Prompt vorgeschriebenen Felder. Bei 1,5 bis 2,6 kB je Datei entsteht so ein
|
||||
vollstaendig aussehender Lieferumfang ohne verwertbaren Inhalt. **Die Zahl der Artefakte ist als
|
||||
Ertragsmass damit ebenso untauglich wie die Anforderungsanzahl** (Befund 6.1) – erst die
|
||||
Formatpruefung trennt Schein von Ertrag.
|
||||
|
||||
**Einordnung.** Alle zwoelf Laeufe sind mit den Claude- und TensorX-Laeufen nicht poolbar: anderes
|
||||
Werkzeug, quantisierte Gewichte, nicht steuerbarer Effort, andere Toolfreigabe. Sie sind als
|
||||
eigenstaendige Aussage ueber lokal betriebene kleine Modelle zu lesen, nicht als Modellvergleich.
|
||||
|
||||
---
|
||||
|
||||
## 6. Befunde
|
||||
|
||||
### 6.1 Die Anforderungsanzahl ist kein Qualitätsmaß
|
||||
|
||||
Reference in New Issue
Block a user