Repository navigation
Release external ACP attachments on retention demand and resume saved chats - #2068
Merged
Merged
Conversation
Brian Krabach (bkrabach)
force-pushed
the
feat/acp-idle-cleanup-20261114
branch
from
November 14, 2026 17:23
381e9ad to
229058d
Compare
Brian Krabach (bkrabach)
changed the base branch from
feat/acp-conditional-retirement-20261114
to
main
November 14, 2026 17:23
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Behavior
External chats can release an idle ACP connection when its supported owner requests cleanup under the existing retention policy and confirms native retirement. Ordinary completed turns keep the connection warm. The next real message resumes the exact saved session, endpoint and workspace without replaying earlier input or creating a replacement chat.
A retirement fence reserves only that participant while its connection closes. New public room messages remain accepted and unrelated participants continue. In-flight awareness, approvals and accepted work prevent cleanup. Stop preserves its existing meaning, including while a new unsent input waits for cleanup. Busy, malformed, lost or timed-out retirement responses retain the transport; one bounded request deadline does not add a retry loop. Legacy
retirementAvailableor non-resumable peers remain attached. Room context capabilities keep their existing lifetime.The producer #2062 is accepted on main as 2d7a70a; it owns canonical warm-worker policy and native acknowledgement. This PR now targets main and contains only the eight reviewed consumer paths. Confirmed retirement trades idle resources for worker startup on the next message; it is not a per-turn cold-start policy or a new upstream-standard ACP guarantee.
Validation
Owned-DTU current-policy qualification has 17 distinct passing maintained cases across staged execution: 15 initial consumer passes, one affected awareness case passing after fixture ordering corrections, and one actual published Instance 0.22.4 lifecycle check. That real wrapper check uses fresh synthetic state and normal private-CA verification, carries the Requested notification outside a prompt, retires, closes the first client, reconnects and resumes the exact saved ID, and retires again. Zero prompts, model calls or native workers were used for this wrapper check; native retirement policy is qualified separately by #2062.
Initial awareness ordering and fixture setup failures are retained, not relabelled as passing. The prior broader consumer safety campaign (40 initial passes, one corrected legacy ordering case) remains frozen as earlier evidence. The consumer was replayed onto exact accepted main2d7a70abf without conflict; all eight consumer blobs are identical to independently reviewed33987efd and prior pushed381e9ad1. No unchanged campaign was repeated. No active demo, live account, Core, release adoption or existing saved conversation was changed.