fix(workflow): preserve queued recovery reservations - #3992
kojiwakayama wants to merge 1 commit into
Conversation
📦 Client bundle boundary
A server module in a client graph aborts hydration in the browser. New leaks fail CI; known leaks are tracked in |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3b9fcc6cea
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Warning Review limit reached
Next review available in: 23 minutes Limit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?Wait for the limit to reset, then comment An organization admin can change what happens after included review limits in Billing. How do review limits work?CodeRabbit enforces per-developer PR review limits within each organization. For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (3)
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 |
|
Closing in favour of #3981, which fixes the same defect. Both branches were opened against They are the same fix twiceI wrote outcome-only tests that assert nothing about either mechanism, and ran them on the merge base (
On the defect itself the two branches are indistinguishable. Each branch's own tests fail on the other's head, but only on assertions about its own mechanism: when The one behavioural difference decided itCodex's P1 on this branch is correct, and I reproduced it. Take a node persisted as
It is reachable. The approach here is sound apart from that, and the marker Codex suggests would fix it, but it would mean adding a persisted field to a public type. #3981 gets the same outcome with no new durable state: it holds recovered nodes in an in-process queue and charges the attempt when a node is admitted to a batch, so nothing is ever inferred from Nothing from this branch is lostCarried onto #3981 in
I also mutation-tested both branches' bounds while comparing them. Removing the exhaustion bound for child graphs was caught by nothing on either branch, so #3981 now carries a test for it too. Thanks for the work here. The reservation framing is what made the |
|
One correction to the reachability argument above, so the record is precise. I wrote that The accurate path is the backend. So a backend that does not round-trip the optional |
Summary
Red and green
The new
maxConcurrency: 1regression starts with a parked wait ahead of an interrupted step. Before the fix, recovery persistedattempt=2with the oldstartedAt, and the approval-resume pass failed with retry budget exhausted before the step ran.The reservation now persists
attempt=2with nostartedAt. The approval-resume pass reuses that reservation, batch start durably restoresstartedAt, and the side effect executes exactly once. Existing out-of-budget and no-silent-completion tests remain green.Verification
deno task test:file src/workflow/executor(12 groups, 201 steps)deno task fmt:checkdeno task lintdeno task typecheckdeno task docs:api-reference:checkRefs veryfront/veryfront-issue-inbox#719