fix(dispatch): make Hub-Edge task admission retry-safe - #2348
Merged
Conversation
Replace seen-before-processing with atomic owner claims, bounded pending state and run-ID receipts. Failed attempts release their claim; replayed responses revalidate capability and retain the original run scope. Temporary admission contention is explicit and retryable. Part of #2347; Desktop bridge and adversarial HTTP integration tests follow. Co-authored-by: Codex <codex@vectorcontrol.tech>
Cover rejected retries, held concurrent admissions, original-run replay, capability scope, Hub-task binding and bounded pending capacity. Co-authored-by: Codex <codex@vectorcontrol.tech>
Forward delivery IDs to Edge, classify canonical transient admission errors and keep running/terminal business state intact while retrying idempotent task and relay acknowledgements. Co-authored-by: Codex <codex@vectorcontrol.tech>
Document bounded admission receipts, original-run replay, capability revalidation, retryable contention, idempotent acknowledgements and the explicit no-crash-resume boundary. Co-authored-by: Codex <codex@vectorcontrol.tech>
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Team Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Keep one hubTaskId mapping and combine admission binding with the existing callback identity contract. The existing duplicate-mapping regression now passes. Co-authored-by: Codex <codex@vectorcontrol.tech>
…iring Use network-only HTTP/WebSocket fixtures to exercise the normal Desktop bridge, retryable admission, task/relay ACK loss and terminal-state preservation in light and dark themes. The original implementation fails the queued-state negative control. Co-authored-by: Codex <codex@vectorcontrol.tech>
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.
Summary
Closes #2347.
503 delivery_busy+Retry-After; accepted replays return the originaldata.runIdwithout another executor start.409 delivery_conflict.Validation
Local integration evidence:
CI: final head
dc27348596dfed2ebfbc24d9336d2a1d3283a990passed all seven required checks (validate,go-edge,go-hub,windows-go,windows-frontend,backend-required,frontend-required) in run 34058637542. The backend aggregate includes real PostgreSQL/Redis integration and the Edge/Hub fixture lanes. The first run caught a duplicate OpenAPI hubTaskId mapping introduced during document integration; it was corrected, not waived or retried unchanged.Boundaries
Source plus fixture/renderer verification only: no production rollout, real-model/login E2E or packaged Desktop claim. The new browser regression was run locally through the existing Playwright entrypoint; it is not represented as a newly wired CI gate. Receipts are process-local, not crash-recovery records; queued runs are not automatically restarted. Persistent recovery and full model/workspace/context normalization across transports remain separate design slices. No credentials, migrations or live runtime changes.