[pull] main from vercel:main - #542
Merged
Merged
Conversation
* fix(web-shared): expand Web API iterables Signed-off-by: Cursor Agent <cursoragent@cursor.com> * fix(web-shared): inspect generic iterables Signed-off-by: Cursor Agent <cursoragent@cursor.com> * fix(web-shared): compare iterator identity safely Signed-off-by: Cursor Agent <cursoragent@cursor.com> * test(web-shared): cover inspector iterable entries Signed-off-by: Cursor Agent <cursoragent@cursor.com> * fix(web-shared): describe map-like iterables via entries() Signed-off-by: Cursor Agent <cursoragent@cursor.com> --------- Signed-off-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Cursor Agent <cursoragent@cursor.com>
…es (#3546) * Classify replay stream failures by ownership Signed-off-by: Nathan Colosimo <110621881+NathanColosimo@users.noreply.github.com> * fix(world-vercel): resume truncated replay streams * fix(world-vercel): require replay continuation cursor * refactor(world-vercel): simplify replay recovery * fix(world-vercel): append replay pages safely * fix(world-vercel): bound partial stream continuations * fix(world-vercel): bound replay continuations * fix(world-vercel): retain recovered replay cursors * fix(world-vercel): validate each recovery cursor * test(world-vercel): include list response cursors * refactor(world-vercel): simplify replay recovery * Update packages/world-vercel/src/events-v4.ts Co-authored-by: vercel[bot] <35613825+vercel[bot]@users.noreply.github.com> Signed-off-by: Nathan Colosimo <110621881+NathanColosimo@users.noreply.github.com> --------- Signed-off-by: Nathan Colosimo <110621881+NathanColosimo@users.noreply.github.com> Co-authored-by: vercel[bot] <35613825+vercel[bot]@users.noreply.github.com>
* fix(core): re-arm late-claimed hook deliveries * refactor(core): clarify delivery barrier lifecycle
* Trace fresh workflow replay phases Signed-off-by: Nathan Colosimo <110621881+NathanColosimo@users.noreply.github.com> * refactor(core): simplify workflow script cache API Signed-off-by: Nathan Colosimo <110621881+NathanColosimo@users.noreply.github.com> * Fix retained workflow tracing Signed-off-by: Nathan Colosimo <110621881+NathanColosimo@users.noreply.github.com> * fix(core): keep tracing failure-safe Signed-off-by: Nathan Colosimo <110621881+NathanColosimo@users.noreply.github.com> * Trace replay event loading Signed-off-by: Nathan Colosimo <110621881+NathanColosimo@users.noreply.github.com> --------- Signed-off-by: Nathan Colosimo <110621881+NathanColosimo@users.noreply.github.com>
* Overlap workflow compile with replay loading Signed-off-by: Nathan Colosimo <110621881+NathanColosimo@users.noreply.github.com> * Fix replay compilation scheduling --------- Signed-off-by: Nathan Colosimo <110621881+NathanColosimo@users.noreply.github.com>
* Prepare replay payloads from streamed events Signed-off-by: Nathan Colosimo <110621881+NathanColosimo@users.noreply.github.com> * Fix streamed replay preparation invariants * fix(core): gate replay startup work by VM engine * refactor(core): simplify replay startup state * fix(core): preserve replay startup ordering * refactor(core): simplify setup failure handling * fix(core): observe replay load after setup failure * refactor(core): simplify replay encryption key promise * fix(core): scan only appended replay events * refactor(world-vercel): type replay stream outcomes --------- Signed-off-by: Nathan Colosimo <110621881+NathanColosimo@users.noreply.github.com>
* test(core): reproduce lazy resume disposal race * Fix durable hook resume race * Fail closed on unknown hook wakes * Improve unsupported hook wake diagnostics * Address durable hook resume review feedback * Harden producer-committed wake handling * Serialize durable hook resume: write, then wake resumeHook() now dispatches strictly serially: the hook_received event is made durable first, and the workflow wake is published only after the write is acknowledged. The wake is a plain runId message (the shape the sequential path always published), so the producer-committed wake barrier, its queue-message field, and the HOOK_RESUME_INPUT_VERSION bump are all removed — no consumer or backend coordination is needed, and either side rolls back independently to today's behavior. The pre-write ops flush now partitions serialization ops: producer-push uploads are awaited before the event commits (the payload must not point at bytes still in flight), while consumer-settled reader ops — a dehydrated WritableStream, e.g. a manual webhook's responseWritable — are backgrounded. Awaiting those deadlocked the resume against its own wake (webhookWorkflow failing across the whole e2e matrix). Also: wake retries stop on definitive 4xx errors instead of burning the retry budget; WORKFLOW_DISABLE_LAZY_HOOK_RESUME no longer gates anything and is ignored; the internal resumeHookDurable alias is removed. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Address review: retry classification, wake dedup, 409 passthrough - Wake retry classification now actually fires against @vercel/queue: its errors carry no status field, so classify by the World's deployment-unavailable hook, then numeric status, then the queue client's definitive-4xx error names. - The wake publish carries idempotencyKey `hook-<resumeId>` on the claim path, so a retried publish whose response was lost dedups instead of costing a duplicate full replay. - EntityConflictError (HTTP 409) from the durable write is no longer re-keyed to HookNotFoundError: every 409 the backend emits on this write today is transient (slot conflict past the server's retry budget, claim race) and committed nothing, so it surfaces retryable instead of presenting as a permanent 404. - Stamp workflow.hook.resume_committed / wake_published span attributes after each leg resolves, making stranded resumes (committed event, no wake) queryable from traces. - Document on the public resumeHook signature that passing the token (not a cached Hook) is what makes the write idempotent-on-retry. - Changeset/changelog: note the ended-run behavior change (late webhook deliveries to finished runs now 404 instead of 202) and the 409 passthrough. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Pranay Prakash <pranay.gp@gmail.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )