Geprüfter Commit: bc44c49 ("researcher: Shell-Zugriff auf blunix zur Informationsbeschaffung freigeben (Claude-Pfad)"), Diff-Basis bc44c49~1..bc44c49, kein offener Arbeitsbaum-Diff. Scope: zwei Dateien — `agents/claude-settings/researcher.json` (Permissions) und `agents/researcher.md` (Rollenbeschreibung). Diff gilt nach der Risiko-Skala aus reviewer.md als **riskant** (mehr als eine Datei geändert, zusätzlich Berechtigungs-/Shell-Bezug), daher volle Prüftiefe. Tatsächlich ausgeführte Prüfmethoden: 1. `git show bc44c49` — vollständigen Diff gelesen. 2. Referenzierten Intent `docs/intent/research-pipeline-researcher-shell.md` vollständig gelesen und Punkt für Punkt gegen den Diff abgeglichen (Scope, Allow-/Deny-Einträge, Formulierung in researcher.md). 3. `agents/researcher.md` vollständig gelesen (aktueller Stand nach Commit). 4. `agents/claude-settings/researcher.json` vollständig gelesen (aktueller Stand) — valides JSON, Struktur konsistent. 5. Verpflichtender `git grep` nach dem geänderten Muster `Bash(*)` über `agents/claude-settings/`: nur `finance.json` und `researcher.json` verwenden diesen generischen Allow-Eintrag — bestehendes Präzedenzmuster, keine Inkonsistenz gefunden. 6. `git grep` nach `workspace-write`/"Why read-only" in `agents/board-agent/README.md` (Beleg, den der Intent für den Codex-Ausschluss zitiert): kein Treffer — diese Referenz ist allerdings Teil des Intent-Dokuments, nicht dieses Commits, und damit außerhalb des festen Commit-Scopes; wird als Unsicherheit unten vermerkt, nicht als Befund gegen diesen Diff. Abgleich Diff vs. Intent-Auftrag: - `researcher.json`: neuer generischer `Bash(*)`-Allow-Eintrag ergänzt (kein Präfix-Allowlisting) — wie gefordert. - Deny-Liste um exakt die im Intent genannten Präfixe ergänzt (`rm *`, `mv *`, `chmod *`, `chown *`, `kill *`, `systemctl start/stop/restart/enable/disable *`, `nixos-rebuild switch/test *`, `reboot*`, `shutdown *`). `Bash(sudo *)` und `Bash(agenix *)` waren bereits vor diesem Commit vorhanden (nicht Teil des Diffs) und blieben unverändert — erfüllt die Intent-Vorgabe, dass diese Einträge vorhanden sein müssen, ohne erneut geändert zu werden. - Bereits vorhandene Einträge (`git commit *`, `git push *`, `ssh *`) unverändert stehen geblieben — passt zur Vorgabe. - `researcher.md`: neuer Absatz im Abschnitt "Arbeitsgrenzen und Sicherheit" folgt erkennbar dem Muster des bestehenden Web-Zugriffs-Absatzes und benennt die drei geforderten Einschränkungen (a) nur blunix/kein SSH zu anderen Hosts, (b) nur Informationsbeschaffung, (c) einzige Schreibaktion bleibt der Bericht, sowie ausdrücklich "nur Claude-Pfad". Abschnitt "Rechercheablauf" wurde wie gefordert um die dritte Quelle (Shell auf blunix) ergänzt. - Kein Scope-Übertritt: keine Änderungen an `worker.py`, `trigger.py`, `board.html`, `board-agent.nix`, anderen Rollendateien oder anderen `agents/claude-settings/*.json` — wie im Intent unter "Ausgeschlossen" gefordert. Befunde: Keine Befunde. Nicht ausgeführte Prüfungen: Kein Funktionstest eines tatsächlichen Researcher-Laufs mit den neuen Rechten (z. B. ob `journalctl`/`systemctl status` auf blunix tatsächlich funktioniert) — außerhalb der read-only-Review-Fähigkeiten und nicht Teil des Commit-Scopes. Unsicherheiten: - Die im Intent zitierte Begründung für den Codex-Ausschluss ("Why read-only, not a scoped writable dir" in `agents/board-agent/README.md`) war per `git grep` nicht auffindbar; das betrifft aber ein Intent-Dokument außerhalb dieses Commits, nicht den geprüften Diff selbst, und ist daher kein Blocker für diesen Commit. - Die im Intent selbst benannte Restlücke einer Präfix-Denyliste (Kettenoperatoren `&&`/`;`/`|`, ungewöhnliche Schreibweisen, intern `sudo` aufrufende Skripte) bleibt bewusst offen — bereits im Intent als akzeptiertes Risiko dokumentiert, nicht neu durch diesen Commit eingeführt. Fazit: Der Commit setzt den Intent-Auftrag `research-pipeline-researcher-shell` präzise und ohne Scope-Erweiterung um; alle geforderten Deny-Präfixe sind vorhanden, die Rollenbeschreibung ist konsistent ergänzt, keine Nebenwirkungen auf andere Dateien gefunden. Entscheidung: bereit für Deployment