Skip to content

P3: Blankes "bash" in buzz-relay- und pool-Fixtures — dieselbe WSL-Falle wie buzz#83, nur noch nicht scharf #96

Description

@munirad7s

Mission

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)

  1. git fetch upstream && git merge upstream/main — die Stellen können sich verschoben haben oder weg sein.
  2. rg 'Command::new\("bash"\)|spawn\("bash"' crates/ — die aktuelle Trefferliste ist die Arbeitsliste, nicht die oben.
  3. cargo nextest run -p buzz-acp -p buzz-relay --no-fail-fast läuft vorher grün (Baseline festhalten).

Auftrag

  1. test_shell() an eine Stelle heben, die buzz-acp und buzz-relay erreichen (Duplikat vermeiden, Doku-Kommentar mitnehmen — er trägt die Begründung).
  2. Alle Fundstellen umstellen.
  3. 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).
  4. Wenn upstream-tauglich: PR an 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

  • Keine Änderung an Produktionslogik — nur Testcode.
  • Kein #[ignore] als Abkürzung.
  • .config/nextest.toml nicht aufweichen: die Retry-Regel gilt nur für die dort namentlich genannten wanduhr-abhängigen Tests.

Verifikation (Befehle + erwartete Ausgabe)

# Befehl/Aktion Erwartung
1 rg 'Command::new\("bash"\)|spawn\("bash"' crates/ keine Treffer mehr (oder nur begründete)
2 cargo nextest run -p buzz-acp -p buzz-relay --no-fail-fast 0 failed, eigenes Target-Verzeichnis
3 Rot-Probe aus Auftrag 3 mit Resolver grün, ohne rot
4 git status --short nach dem Lauf keine neuen untracked Dateien

Definition of Done

  • Resolver geteilt, alle Fundstellen umgestellt
  • Rot-Probe belegt im Kommentar
  • Feat-Branch → PR (--repo munirad7s/buzz --base main --head <branch>) → gemerged
  • Issue mit Ergebnis-Kommentar geschlossen

Folge-Arbeit (Gardener-Kandidaten)

  • Lint/CI-Regel, die 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 + Label blocked-munir + weiter.

Format v2 · buzz_empire 2026-08-01 (Gardener aus buzz#83)

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3Flexibelphase-0Foundation: Fork/Build/SyncreadySelbsttragender Prompt, bereit zum Claim

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions