Stille Post vermeiden (#697) und Fehlerablage je Skript (#696)

Eine Meldung, die vier Ebenen durchlaeuft, wird viermal neu formuliert.
Das faellt nicht auf, weil es keinen Fehler gibt, den man finden koennte -
alle arbeiten korrekt, und die Spitze entscheidet ueber eine Nacherzaehlung
der Nacherzaehlung.

Die Regel: Jede Weitergabe haengt an, sie ersetzt nicht. Der Verweis auf
den Ursprung wandert mit, der Inhalt bleibt liegen und wird geholt, wer ihn
braucht. Eine Zusammenfassung darf danebenstehen, nie anstelle. Dieselbe
Festlegung wie beim Aufgabenrumpf (#677), hier fuer den Weg.

Beim Skriptfehler heisst das: Der Sandbox-Runner legt Exit-Code, stderr,
Aufrufparameter, Dauer und RunId unter scripts/<id>/fehler/ ab - nicht der
Agent. Der Zugang folgt dem Skript statt der Abteilung, damit der
Entwickler alle Fehlschlaege seines Werkzeugs sieht, ohne in fremde
Arbeitsbereiche zu duerfen. Durch die Befehlskette geht nur noch der
Verweis.

Nebenbei zwei doc_anchors nachgezogen, die durch fruehere Umnummerierung
ins Leere zeigten (#687, #688).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-09-22 09:23:15 +02:00
co-authored by Claude Opus 5
parent d25ae41f4b
commit a14aeeac58
+84 -7
View File
@@ -241,6 +241,40 @@ nicht jedes Mal fragen") und die Dublettenbremse aus #674 („diesen Befund gibt
schon"). Eine Organisation, die sich nicht erinnert, was sie entschieden hat, bezahlt
jede Entscheidung mehrfach.
### Stille Post vermeiden: weitergegeben wird ein Verweis, keine Nacherzählung
Eine Meldung, die vier Ebenen durchläuft, wird viermal neu formuliert — von Modellen,
die kürzen, glätten und das für wichtig halten, was sie für wichtig halten. Am Ende
entscheidet die Spitze über eine Nacherzählung der Nacherzählung.
Das ist kein Nebenrisiko. Es ist die Art, wie ein solcher Aufbau leise falsch wird: Alle
Beteiligten arbeiten korrekt, und die Entscheidung stützt sich trotzdem auf etwas, das
niemand so gesagt hat.
> **Die Regel: Jede Weitergabe hängt an, sie ersetzt nicht.** Der Vorgang trägt den
> Verweis auf den Ursprung — RunId, Aufgabe, Fehlerablage, Dokument. Jede Ebene fügt ihre
> Einschätzung hinzu und lässt das Darunterliegende stehen. Wer entscheidet, kann bis zum
> Original zurückgehen, ohne jemanden zu fragen.
Das ist dieselbe Festlegung wie beim Aufgabenrumpf, der nur ergänzt und nie überschrieben
wird (#677) — hier für den Weg statt für das Dokument.
**Das Praktische daran ist die Trennung von Verweis und Inhalt.** Würde jede Ebene den
vollen Text anhängen, wächst der Vorgang mit jeder Stufe und kostet in jedem Folgelauf
mehr. Also: Der **Verweis** wandert mit, der **Inhalt** bleibt liegen und wird geholt, wer
ihn braucht. Eine Zusammenfassung darf danebenstehen — nie anstelle.
Wo das konkret gilt (#697):
| Weg | Was mitwandert |
|---|---|
| Eskalation (#689) | RunId, Aufgabe, Fehlerablage; jede Ebene ergänzt, keine ersetzt |
| Besprechung (#686) | Das Protokoll verweist auf die Beiträge, statt sie wegzukürzen |
| Delegation | Eine Aufgabe, die aus einer anderen entsteht, zeigt auf ihren Ursprung |
| Aufsicht (#680) | Der Vorschlag trägt den Beleg aus dem Audit |
| Stichprobe (#693) | Geprüft wird gegen das Gestempelte, nicht gegen den Bericht |
| Skriptfehler (#696) | Die Fehlerablage, nicht der abgetippte Fehlertext |
### Damit es endet
Ohne Regeln läuft so etwas heiß. Vier, die nicht verhandelbar sind:
@@ -370,6 +404,46 @@ Das ist mehr als eine Hausordnung, es ändert die Rechteform:
Agent es über die Befehlskette — derselbe Weg wie jede Eskalation (#689), nur mit
„Fähigkeit fehlerhaft" statt „Fähigkeit fehlt".
### Die Fehlerablage: der Entwickler liest das Original
Meldet der Anzeigen-Agent einen Skriptfehler über die Befehlskette, kommt beim Entwickler
an, was zwei Modelle davon übrig gelassen haben — „es hat nicht funktioniert" statt
`KeyError: 'campaign_id'` in Zeile 47. Damit ist die Kette nicht nur langsam, sondern
unbrauchbar.
**Der Fehler wird deshalb nicht weitergereicht, sondern abgelegt.** Jedes Skript hat einen
festen Ort dafür:
```
scripts/<skript-id>/
├── manifest.json Zweck, Eigentümer, Nutzerkreis, Ein-/Ausgaben, Netzziele
├── skript.py die freigegebene Fassung (hashgebunden, #657)
└── fehler/
├── 2026-09-22T07-14-03_run-a3de83bb.log
└── 2026-09-22T09-02-51_run-11de5c7a.log
```
Drei Festlegungen machen den Unterschied:
1. **Der Läufer schreibt, nicht der Agent.** Exit-Code, stderr, Aufrufparameter, Dauer,
RunId und AgentId legt der Sandbox-Runner (#654) ab — automatisch, bei jedem
Fehlschlag. Damit ist nichts abgetippt, nichts gekürzt, nichts vergessen. Dieselbe
Zusicherung wie beim Audit-Log: *von der Engine gestempelt, nie vom Agenten behauptet.*
2. **Der Zugang folgt dem Skript, nicht der Abteilung.** Wer das Skript besitzt, liest
seine Fehler — unabhängig davon, in welcher Einheit sie entstanden sind. Ein
Entwickler kommt so an alle Fehlschläge aller Nutzer, ohne in deren Arbeitsbereiche
zu dürfen. Das ist ein Rechtebereich, der am Gegenstand hängt statt am Baum, und die
Ausnahme ist begründet: Der Eigentümer muss sehen, wie sein Werkzeug scheitert.
3. **Die Meldung trägt den Verweis.** Was durch die Befehlskette geht, ist „Skript
`amazon-kampagnenbericht`, drei Fehlschläge seit gestern, siehe Ablage" — plus die
Einschätzung des Agenten, was ihm dadurch fehlt. Die Leitung entscheidet über die
Dringlichkeit, nicht über den Fehlertext.
**Ein Nebeneffekt, der mehr wert ist als die Meldung selbst:** Drei Fehlschläge desselben
Skripts an einem Tag sind ein Muster, das niemand melden muss — es steht in der Ablage
und lässt sich abfragen. Dasselbe Verhältnis wie bei #646 und #680: Erkennen ist Code,
Deuten ist Modell.
### Der zweite Gewinn dieser Trennung
Sie ist nicht nur sauberes Rechtemanagement. Sie ist die schärfste Grenze, die man gegen
@@ -543,13 +617,14 @@ für sich schon nützt und keine die nächste blockiert.
| **1** | Einheiten als Struktur: Baum, Zugehörigkeit, vererbte Rechte, Adressbuch nach Einheit | Der Schnitt, der alles Weitere trägt |
| **2** | Ablage und Brett je Einheit | Buchhaltung und Einkauf treten sich nicht mehr auf die Füße |
| **3** | Budget und Parallelität je Einheit | Eine ausufernde Abteilung legt nicht die Instanz lahm |
| **4** | Eskalation, Konflikt und Beschluss (#689) | Eine Frage, die niemand beantworten kann, versandet nicht mehr |
| **5** | Besprechung als Mittel, mit Protokoll | Leitungen können sich abstimmen, ohne *n²* Nachrichten |
| **6** | Entscheidungsinstanz an der Spitze (#690) | Der Betrieb läuft weiter, wenn der Mensch schläft |
| **7** | Freigabe durch die Leitung innerhalb von Grenzen | Der Mensch hört auf, Flaschenhals zu sein |
| **8** | Oberfläche: Organigramm statt Agentenliste, Lage je Abteilung | Bei fünfzig Agenten ist eine flache Liste keine Übersicht |
| **9** | Kontrollpflicht der Leitung, abgestufte personelle Mittel (#693) | Fehler findet die Leitung, nicht erst der Mensch |
| **10** | Organisationsvorlagen (#691) | Ein Haus lässt sich weitergeben statt nachbauen |
| **4** | Ursprungsverweis in jedem Vorgang (#697) | Entscheidungen stützen sich auf das Original, nicht auf die vierte Nacherzählung |
| **5** | Eskalation, Konflikt und Beschluss (#689) | Eine Frage, die niemand beantworten kann, versandet nicht mehr |
| **6** | Besprechung als Mittel, mit Protokoll | Leitungen können sich abstimmen, ohne *n²* Nachrichten |
| **7** | Entscheidungsinstanz an der Spitze (#690) | Der Betrieb läuft weiter, wenn der Mensch schläft |
| **8** | Freigabe durch die Leitung innerhalb von Grenzen | Der Mensch hört auf, Flaschenhals zu sein |
| **9** | Oberfläche: Organigramm statt Agentenliste, Lage je Abteilung | Bei fünfzig Agenten ist eine flache Liste keine Übersicht |
| **10** | Kontrollpflicht der Leitung, abgestufte personelle Mittel (#693) | Fehler findet die Leitung, nicht erst der Mensch |
| **11** | Organisationsvorlagen (#691) | Ein Haus lässt sich weitergeben statt nachbauen |
Quer dazu, unabhängig von der Reihenfolge: der Werkzeugkasten (#692), der A/B-Vergleich
von Modellen (#694) und die Schemaauskunft (#676) — letztere ist Vorbedingung für
@@ -604,6 +679,8 @@ wächst, wird der Umzug teurer.
| #694 | A/B-Vergleich von Modellen im laufenden Betrieb |
| #676 | Schemaauskunft der Datenbank — Vorbedingung für den Negativbefund |
| #695 | Skripte: Schreiben und Benutzen sind zwei Rechte, mit Lieferkette |
| #696 | Fehlerablage je Skript — der Läufer schreibt, der Eigentümer liest |
| #697 | Stille Post vermeiden: Weitergaben hängen an und tragen den Verweis |
| #654, #196, #657 | Sandbox, Shell, Skriptprüfung — der eigentliche Werkzeugkasten |
| #687 | Freigabe durch die Leitung innerhalb von Grenzen |
| #688 | Organigramm in Oberfläche und WebUI |