fix(agent): unblock watch queue after ACP peer disconnect #26
No reviewers
Labels
No labels
agent:done
agent:ready
agent:working
enhancement
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
frank/forgecli!26
Loading…
Reference in a new issue
No description provided.
Delete branch "agent/issue-24-acp-peer-connection-closed-beim-job-ende"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
session/prompt.CloseSessionand stdin close.activeruns on poll/wait transitions so runner state stays consistent untilUntrackRunning.Test plan
go test ./internal/agent/...forge agent watch --pr --agent cursor-agent --tui— after a job finishes withpeer connection closed, the next matching issue should be picked up on the following pollCloses #24
🔗 Linked to issue #24. Babysitting CI until green…
✅ forge agent finished implementation
fix(agent): unblock watch queue after ACP peer disconnectAgent output (tail)
🔴 Watch: CI failed — prioritizing repair…
🛠️ Pushed CI fix (attempt 1/3). Waiting for CI again…
Der CI-Lauf
race(go test -race ./...) ist fehlgeschlagen. InTestRunACPPromptPeerDisconnectAfterOutputschriebSessionUpdateparallel inforgeACPClient.output(strings.Builder), währendacpCapturedOutputgleichzeitig las — ein Data Race.make ci(test/vet/build) lief lokal durch; nur der Race-Job war betroffen.Fix
forgeACPClienthat jetzt einsync.Mutexfür den Output-Buffer, mit den HilfsmethodenappendOutput()undcapturedOutput(). So sind Schreibzugriffe aus ACP-Goroutines und Lesezugriffe ausrunACPPrompt/ Tests synchronisiert.Verifikation
go test -race ./internal/agent/...— grünmake ci— grünCommit
Nicht gepusht — der Agent-Watcher übernimmt Push und erneuten CI-Check.
🔴 Watch: CI failed — prioritizing repair…
🛠️ Pushed CI fix (attempt 1/3). Waiting for CI again…
CI läuft lokal durch — ich hole die Logs vom fehlgeschlagenen Run.
Flaky Race-Test gefunden — ich reproduziere den Fehler gezielt.
Race zwischen Peer-Disconnect und Session-Update — ich füge eine kurze Wartezeit für ausstehende Updates ein.
100 Durchläufe ohne Fehler. Ich erstelle jetzt den Commit.
Ursache: Der
race-Job in CI ist anTestRunACPPromptPeerDisconnectAfterOutputgescheitert. Beim Peer-Disconnect kannsession/updatenoch unterwegs sein, währendrunACPPromptsofort prüft, ob Agent-Output da ist — ein klassischer Race.Fix: Neue Hilfsfunktion
acpPeerDisconnectResolvedwartet bis zu 500 ms auf eintreffende Session-Updates, bevor ein Peer-Disconnect als Fehler gewertet wird.Verifikation:
go test -race ./...— grünmake ci— grünTestRunACPPromptPeerDisconnectAfterOutput— 0 FehlerCommit:
e2aa08c—fix(agent): wait for in-flight ACP output after peer disconnectNicht gepusht — der Agent-Watcher übernimmt Push und CI-Neustart.