You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Die zwei verbliebenen Stellen, die in Tests das blanke "bash" spawnen, auf denselben deterministischen Shell-Resolver umstellen wie buzz-acp — bevor jemand dort ein read ergänzt und den Fehler aus buzz#83 neu erfindet.
Money-Link
Führungs-Hebel: buzz#83 hat gerade neun dauerhaft rote Tests beseitigt und damit „kein Merge ohne grünen Beweis" wieder belastbar gemacht. Diese zwei Stellen sind dieselbe Bombe mit noch gezogenem Stift — sie explodiert genau dann, wenn jemand unter Zeitdruck ein Fixture erweitert.
Kontext
Ist-Stand (gemessen 2026-08-01, buzz#83): Command::new("bash") bzw. AcpClient::spawn("bash", …) in
crates/buzz-relay/src/api/git/policy.rs (~Z. 729 und ~Z. 804, Testcode)
crates/buzz-acp/src/pool.rs (~Z. 5875 und ~Z. 5933, Testcode)
Warum sie heute grün sind: die Scripts sind reine sleep 10- bzw. Einzeiler ohne read. Sie brauchen kein stdin und überleben die WSL-Auflösung zufällig.
Warum das kippt: auf Windows löst der PATH bash nach C:\Windows\System32\bash.exe (WSL-Starter) auf. WSL reicht die anonyme Pipe des Elternprozesses nicht durch — jedes read bekommt sofort EOF. Vollständige Herleitung + Beweis in .empire/AGENTS.md, Abschnitt „buzz-acp-Testsuite auf Windows (buzz#83)".
Der fertige Resolver liegt in crates/buzz-acp/src/acp.rs als test_shell() (Testmodul, #[cfg(windows)]/#[cfg(not(windows))]). Er muss geteilt werden, statt dreimal zu existieren — z. B. als kleines pub(crate)-Testhilfsmodul oder als #[cfg(test)]-Helfer in einem gemeinsamen Crate.
⚠️ Zeilennummern gegen den aktuellen Stand neu verorten (Upstream bewegt sich schnell).
Abhängigkeiten: keine · Koexistenz: reine Testdateien, keine Produktionslogik.
Vorflug-Check (nach Claim, vor Arbeit)
git fetch upstream && git merge upstream/main — die Stellen können sich verschoben haben oder weg sein.
rg 'Command::new\("bash"\)|spawn\("bash"' crates/ — die aktuelle Trefferliste ist die Arbeitsliste, nicht die oben.
test_shell() an eine Stelle heben, die buzz-acpundbuzz-relay erreichen (Duplikat vermeiden, Doku-Kommentar mitnehmen — er trägt die Begründung).
Alle Fundstellen umstellen.
Rot-Probe: in einer der umgestellten Fixtures ein read ergänzen, das eine Antwort erwartet. Mit Resolver grün, mit blankem "bash" rot. Danach zurückbauen (oder als echten Test behalten, wenn er etwas Sinnvolles prüft).
Mission
Die zwei verbliebenen Stellen, die in Tests das blanke
"bash"spawnen, auf denselben deterministischen Shell-Resolver umstellen wiebuzz-acp— bevor jemand dort einreadergänzt und den Fehler aus buzz#83 neu erfindet.Money-Link
Führungs-Hebel: buzz#83 hat gerade neun dauerhaft rote Tests beseitigt und damit „kein Merge ohne grünen Beweis" wieder belastbar gemacht. Diese zwei Stellen sind dieselbe Bombe mit noch gezogenem Stift — sie explodiert genau dann, wenn jemand unter Zeitdruck ein Fixture erweitert.
Kontext
Command::new("bash")bzw.AcpClient::spawn("bash", …)incrates/buzz-relay/src/api/git/policy.rs(~Z. 729 und ~Z. 804, Testcode)crates/buzz-acp/src/pool.rs(~Z. 5875 und ~Z. 5933, Testcode)sleep 10- bzw. Einzeiler ohneread. Sie brauchen kein stdin und überleben die WSL-Auflösung zufällig.bashnachC:\Windows\System32\bash.exe(WSL-Starter) auf. WSL reicht die anonyme Pipe des Elternprozesses nicht durch — jedesreadbekommt sofort EOF. Vollständige Herleitung + Beweis in.empire/AGENTS.md, Abschnitt „buzz-acp-Testsuite auf Windows (buzz#83)".crates/buzz-acp/src/acp.rsalstest_shell()(Testmodul,#[cfg(windows)]/#[cfg(not(windows))]). Er muss geteilt werden, statt dreimal zu existieren — z. B. als kleinespub(crate)-Testhilfsmodul oder als#[cfg(test)]-Helfer in einem gemeinsamen Crate.Vorflug-Check (nach Claim, vor Arbeit)
git fetch upstream && git merge upstream/main— die Stellen können sich verschoben haben oder weg sein.rg 'Command::new\("bash"\)|spawn\("bash"' crates/— die aktuelle Trefferliste ist die Arbeitsliste, nicht die oben.cargo nextest run -p buzz-acp -p buzz-relay --no-fail-fastläuft vorher grün (Baseline festhalten).Auftrag
test_shell()an eine Stelle heben, diebuzz-acpundbuzz-relayerreichen (Duplikat vermeiden, Doku-Kommentar mitnehmen — er trägt die Begründung).readergänzen, das eine Antwort erwartet. Mit Resolver grün, mit blankem"bash"rot. Danach zurückbauen (oder als echten Test behalten, wenn er etwas Sinnvolles prüft).block/buzz(Fixtures sind PR-fähig, gleiche Mechanik wie buzz#39/Upstream-PR an block/buzz: error.data überlebt in buzz-acp #82).Nicht-Ziele / Guardrails
#[ignore]als Abkürzung..config/nextest.tomlnicht aufweichen: die Retry-Regel gilt nur für die dort namentlich genannten wanduhr-abhängigen Tests.Verifikation (Befehle + erwartete Ausgabe)
rg 'Command::new\("bash"\)|spawn\("bash"' crates/cargo nextest run -p buzz-acp -p buzz-relay --no-fail-fastgit status --shortnach dem LaufDefinition of Done
--repo munirad7s/buzz --base main --head <branch>) → gemergedFolge-Arbeit (Gardener-Kandidaten)
Command::new("bash")im Testcode verbietet (buzz#48 wäre der Ort)Rechte
Chrome-MCP, Windows-MCP, Playwright, n8n-MCP,
~/.secrets/**— ohne Rückfrage. Blocker →blocker-mail.sh+ Labelblocked-munir+ weiter.Format v2 · buzz_empire 2026-08-01 (Gardener aus buzz#83)