Skip to content

fix(acp): wake quiet hosts for respawns and queued retries - #7459

Open
loganj wants to merge 1 commit into
mainfrom
fix/acp-quiet-retry-79d180db
Open

fix(acp): wake quiet hosts for respawns and queued retries#7459
loganj wants to merge 1 commit into
mainfrom
fix/acp-quiet-retry-79d180db

Conversation

@loganj

@loganj loganj commented Sep 7, 2026

Copy link
Copy Markdown
Collaborator

Problem

With --no-presence --no-typing --heartbeat-interval 0, a crashed ACP transport can leave work queued indefinitely. Background respawn results were only drained before select!; neither their arrival nor queue retry eligibility woke the host. A respawn-only wake is insufficient: replacement initialization normally precedes the independent queue backoff deadline.

Change

  • Select on respawn completion, reusing the existing return-to-pool and dispatch paths.
  • Select on the earliest queued retry throttle, including already-expired deadlines, only while the pool is ready and has idle capacity.
  • Give the existing 30-second maintenance/refill check its own wake source. Circuit cooldown/refill policy is unchanged; it no longer depends on presence/typing traffic.
  • Disable closed respawn receivers without spinning or disabling timers; prioritize shutdown.
  • Keep retry backoff/budget, batching, timestamps, dedup, delivery state, and intentional host max-turn cap unchanged. Held/no-slot dispatch releases clear expired retry throttles through the existing mark_complete path.

No reconnect/gateway changes or adapter retry engine. Based directly on main, independent of other ACP plumbing work. Closest related open PR found: #7317 (usage-limit retry policy); this is a scheduling fix, not that policy change.

Validation

  • cargo test -p buzz-acp: 920 library tests + 9 integration tests pass.
  • Five new Rust tests exercise the production wake helper and queue boundary: respawn before/after retry eligibility, backoff preservation, one-shot redelivery, empty/removed/held/in-flight scopes, closed receivers, and shutdown cancellation.
  • cargo clippy -p buzz-acp --all-targets --all-features -- -D warnings, cargo fmt --all -- --check, just file-size-check, and git diff --check: pass.
  • Actual standalone stock host binary built from this tree + installed/generated Pi adapter fixture, pinned adapter source 801d23374a588fd1154bb3da8783f6dcc9084e15 and upstream pi-acp 0.0.33. Loopback-only synthetic relay/provider; no live agent/config changes.
    • All optional presence/typing/heartbeat wakes disabled; 2.5-second adapter inactivity budget, 45-second callback bound, host hard cap unchanged.
    • Fast replacement: initialization 1.347s after requeue, retry eligible at 4.447s. Automatic original-batch recovery, one saved worker terminal and one callback, five dispatch cycles.
    • Delayed replacement: initialization 9.118s after requeue, retry eligible at 4.157s. Same recovery invariants, four dispatch cycles.
    • Both use exactly one relay input; both settle within 2.84s of the later of replacement/eligibility (including a 1.5s duplicate-observation window). This also rejects waiting for the 30s maintenance tick.
    • Same fixture against freshly built unmodified main 3c7f288c60d67df78577b237e27c3dfc8831aaa1: expected failure at the 45-second callback bound.

Full workspace/Desktop/mobile just ci not run locally; no Tauri files touched. Relevant ACP package checks above are complete.

Review / integration gate

Draft for independent review. The fixture uses the pinned pre-repair adapter to isolate this host defect, not concurrent adapter shutdown-fencing changes. Composed testing with the final adapter candidate and independent review remain required before claiming the shared lifecycle fix complete. No activation, merge, direct main push, or incident replay performed. Existing all-agents-dead exit and max-turn safety policies remain unchanged.

Signed-off-by: Logan Johnson <loganj@squareup.com>
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown

🔐 Codex Security Review

Note: This is an automated, security-focused review generated by Codex.
Use it as a supplement to human review; false positives are possible.

Scope

  • Exact PR diff: 3c7f288c60d67df78577b237e27c3dfc8831aaa1...e4b3cb9057b33554aae8a1769a17a34dd3eb96ce
  • Model: gpt-5.6-sol

💡 Click "edited" above to see earlier reviews for this PR.


Review Summary

Overall Risk: NONE

No concrete security, correctness, or reliability issues were found in the changed code. The retry, respawn, maintenance, shutdown, and lazy-pool paths preserve their existing invariants.

Findings

No concrete security, correctness, or reliability findings were identified.

Notes

  • No additional limitations were reported.

Generated by Codex Security Review |
Requested by: @loganj |
Workflow run

@loganj

loganj commented Sep 7, 2026

Copy link
Copy Markdown
Collaborator Author

@buzz-security-review e4b3cb9

@github-actions github-actions Bot added the codex-security-review-current The posted Codex security review matches its recorded range. label Sep 7, 2026
@loganj
loganj marked this pull request as ready for review September 8, 2026 02:23
@loganj
loganj requested a review from a team as a code owner September 8, 2026 02:23
@loganj

loganj commented Sep 8, 2026

Copy link
Copy Markdown
Collaborator Author

Independent combined evidence (host + companion adapter) — exact heads, no source changes

This PR (host scheduling fix): independent host-only review of exact head e4b3cb9057b33554aae8a1769a17a34dd3eb96ce (base main @ 3c7f288c60d67df78577b237e27c3dfc8831aaa1) — APPROVED, no blocking defect in the changed quiet-host respawn / queued-retry wake paths. 5 independently reran focused checks (recovery-wake + retry-deadline seams) plus reused verified package receipts: 920 library + 9 integration passed, zero failures (clippy/fmt/size receipts and all manifest hashes independently recomputed).

Companion adapter PR (pic-suite): buzz://pr?id=7473c7f5bab6568886f33b56738613f3d4321ae22b727622f4859a4157ee9850&owner=efccd8ff4cab0cf2fc878d4ce288c336756c4fb2376ba98922002e6d5b7afd8a&d=pic-suite — repaired head 2e59ef5ff63912de2a5b70fec476b86a889dd0ee, base/main 7527ed8de78afb60085dc477a964fd1632b6d57a (unchanged; verified ancestor of the tip). Independent review APPROVED for the adapter repair and the exact composed integration: 24 independent checks — 16 lifecycle/watchdog boundary cases, real-process idle-death retirement (with and without prior cancellation), bounded startup-child retirement (including TERM-ignoring pre-RPC children), composed quiet recovery before and after retry eligibility, genuine circuit reopen with maintenance refill, ordinary typing, and an intentional hard-cap policy probe — with the reused full-suite receipt 367 passed, zero failures.

Composed quiet-recovery results: each case (before retry eligibility, after eligibility, circuit reopen, normal typing) redelivered the original interrupted input exactly once with one durable worker run, one worker write, one terminal, one callback; startup children retire within bounded grace; the hard turn cap is preserved (the new progress path does not bypass it).

Gate status at posting: exact-range security review SUCCESS, zero findings (run 34156878857); CI success (run 34156407833). This post is independent evidence metadata only — not a formal GitHub review approval and not merge/activation authorization. Activation additionally requires the effective max-turn/idle policy check for the two originally affected managed agents (an activation-only gate, not a source blocker).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

codex-security-review-current The posted Codex security review matches its recorded range.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant