Commit Graph

1730 Commits

Author SHA1 Message Date
Nathan Colosimo 84b7a5a166 fix(world): preserve omitted event payloads 2026-08-21 13:49:19 -07:00
Nathan Colosimo 22b1ffeae9 style: organize serialization imports 2026-08-21 13:45:35 -07:00
Nathan Colosimo 23bf032a70 test: preserve runtime codec compatibility 2026-08-21 13:45:35 -07:00
Nathan Colosimo d0f8e2ffae fix(core): preserve replay codec contracts 2026-08-21 13:45:35 -07:00
Nathan Colosimo 28ee7a8b72 refactor(core): standardize replay crypto on Web Crypto 2026-08-21 13:45:34 -07:00
Nathan Colosimo 9f88815500 fix(core): preserve corrupt observability payloads 2026-08-21 13:45:34 -07:00
Nathan Colosimo 5dc97c8869 fix(core): validate serialized QuickJS step inputs 2026-08-21 13:45:33 -07:00
Nathan Colosimo dad628b083 refactor(core): simplify replay payload decoding 2026-08-21 13:45:33 -07:00
Nathan Colosimo b504fb1db0 refactor(serialization): share replay format codecs 2026-08-21 13:45:32 -07:00
Nathan Colosimo 4f033e7ec4 refactor(world-vercel): keep payload normalization explicit 2026-08-21 13:45:32 -07:00
Nathan Colosimo 37d7e8dbd5 refactor(serialization): centralize format handling 2026-08-21 13:45:31 -07:00
Nathan Colosimo 474d502a5f [cli] Sort hydration imports 2026-08-21 13:45:30 -07:00
Nathan Colosimo 48970df083 [cli] Use the decryption capability type directly 2026-08-21 13:45:30 -07:00
Nathan Colosimo 25643d1a16 [cli] Remove encryption resolver wrapper type 2026-08-21 13:45:29 -07:00
Nathan Colosimo 2d1a6f5a26 [core] Consolidate replay preparation types 2026-08-21 13:45:29 -07:00
Nathan Colosimo 558d811dbe [core] Consolidate replay decryption 2026-08-21 13:45:29 -07:00
Nathan Colosimo f7e814d2fb [core] Fix legacy replay payload tagging 2026-08-21 13:45:28 -07:00
Nathan Colosimo 9c65380328 [core] Reuse loaded encryption helpers 2026-08-21 13:45:28 -07:00
Nathan Colosimo a636a913da [core] Avoid native codec result copies 2026-08-21 13:45:27 -07:00
Nathan Colosimo 63718688ed [core] Consolidate payload codecs 2026-08-21 13:45:27 -07:00
Nathan Colosimo 72aa4a05ad [core] Deepen payload codec boundaries 2026-08-21 13:45:26 -07:00
Nathan Colosimo 4a2522fa79 [core] Simplify synchronous replay payload APIs 2026-08-21 13:45:25 -07:00
Nathan Colosimo 83caa95329 [core] Simplify synchronous replay decoding 2026-08-21 13:45:24 -07:00
Nathan Colosimo c3629e690e Decode replay payloads synchronously 2026-08-21 13:45:23 -07:00
Nathan Colosimo c73a1d0de3 fix(world-vercel): account for materialized response bodies 2026-08-21 13:45:17 -07:00
Nathan Colosimo e1fb79c009 fix(world-vercel): simplify replay stream recovery 2026-08-21 13:45:17 -07:00
Nathan Colosimo 97d9efe2f9 fix(world-vercel): bound materialized v4 requests 2026-08-21 13:45:16 -07:00
Nathan Colosimo 0f13462a4c fix(world-vercel): bound replay stream recovery 2026-08-21 13:45:15 -07:00
Nathan Colosimo f875c9d751 refactor(world-vercel): simplify replay frame recovery 2026-08-21 13:45:15 -07:00
Nathan Colosimo c59b7c8bef fix(world-vercel): preserve replay recovery cursor 2026-08-21 13:45:14 -07:00
Nathan Colosimo 9fceba9cc2 [world-vercel] Reuse world event list types 2026-08-21 13:45:13 -07:00
Nathan Colosimo aeb46bf0b9 [world-vercel] Simplify replay stream handling 2026-08-21 13:45:13 -07:00
Nathan Colosimo fc6b3ca73b [world-vercel] Preserve event observer failures 2026-08-21 13:45:12 -07:00
Nathan Colosimo 5d85a194ed Resume partial replay event streams 2026-08-21 13:45:11 -07:00
Shalabh Chaturvedi 252a292f18 [ci] Keep workflow-server override formatting stable (#3713)
Co-authored-by: vercel[bot] <35613825+vercel[bot]@users.noreply.github.com>
2026-08-21 13:18:49 -07:00
Pranay Prakash 7b79ba37cc Add support for 'noop' event type - spec version 7 (#3634)
Co-authored-by: Peter Wielander <peter.wielander@vercel.com>
2026-08-21 12:53:59 -07:00
Peter Wielander b3dbc6d264 [docs] v5 changes docs: what's new, world upgrade guide, migration skills (#3100) 2026-08-21 12:45:05 -07:00
Karthik Kalyan d012bf0fe3 Preserve run-key HTTP errors (#3599) 2026-08-21 11:59:04 -07:00
Rich Haines d5d19fc8d5 docs: update Geistdocs to 1.20.4 (#3654) 2026-08-21 11:43:41 -07:00
Peter Wielander 9b1b8c7111 [core] Pin correlation-id draw order to event-log order (#3700) 2026-08-21 11:31:42 -07:00
Pranay Prakash 9454d51db0 feat(core): resolve run.returnValue via a World long poll instead of a 1s poll (#3570)
Co-authored-by: Peter Wielander <mittgfu@gmail.com>
Co-authored-by: Peter Wielander <peter.wielander@vercel.com>
2026-08-20 13:19:25 -07:00
Peter Wielander c431cc18fd [e2e] Add blocked-branch scenario to the event-log race repro (#3696) 2026-08-20 12:41:57 -07:00
Mitul Shah a06afeefe6 Prefix marker context cards with Hook received / Attribute set (#3692)
* fix(web-shared): use UTC tooltips for trace viewer markers

Replace the relative-time context card on hook and attribute ticks with the
shared tooltip, labeled `Hook received [UTC] …` and `Attribute set [UTC] …`.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Mitul Shah <mitulxshah@gmail.com>

* fix(web-shared): format marker helpers and drop invalid aria-label

Biome requires the kind filter ternary on one line, and aria-label is not
valid on the tooltip trigger span.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

* fix(web-shared): prefix marker context cards with event kind

Restore the relative-time context card on hook and attribute ticks, and
prefix the relative time with "Hook received" or "Attribute set".

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

* refactor(web-shared): slim marker context-card prefix

Drop the label helper, type guard, and unused DefaultTimeText prefix path.
Keep kind on the marker, map copy at the tick, and prefix only the card heading.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

* refactor(web-shared): drop prefix comments and generic event-mark helper

Leave sortedEventMarks as a plain string filter. The prefix prop does not
need a JSDoc restatement.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

---------

Signed-off-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-20 10:06:22 -07:00
Simon H 37ed0493e1 fix: Better loading of SvelteKit routes directory (#3509)
Instead of accessing private files from SvelteKit, we use @sveltejs/load-config to load the Svelte config (that package also knows about checking Vite config). The deadlock is avoided by having a module-level Set to see if we're currently recursing or not.

This is necessary for SvelteKit 3 since there the config lives exclusively in the vite config, and the previous logic did not handle that.

This also uncovered that we're needlessly rebuilding the generated files in sub builds/workers (SvelteKit, at least below 3, starts off secondary builds; and some things are done in workers), which a new file cache now checks.

Picked from stable branch PR #3474

Signed-off-by: Simon Holthausen <simon.holthausen@vercel.com>
Co-authored-by: Peter Wielander <mittgfu@gmail.com>
2026-08-20 09:22:16 +00:00
Nathan Rajlich 5b5a926f88 fix(core): make step-argument serialization failures catchable in workflow code (#3675)
* fix(core): make step-argument serialization failures catchable in workflow code

A step whose arguments fail to serialize is now finalized by the
suspension handler as step_created + step_failed (mirroring a step-body
failure) instead of rejecting the whole suspension. The next replay —
forced in-process, since no step message is dispatched for the failed
step — rejects the step's promise with the SerializationError, so a
try/catch around the step call observes it. Uncaught, the error
propagates out of the workflow body and fails the run as a fatal
USER_ERROR immediately, instead of redelivering the orchestrator
message until max deliveries (49/48) as reported in production on v4.

* Serialize the step_failed error with the VM global; one-sentence changeset

Addresses review feedback: dehydrateStepError in
finalizeUnserializableStep now receives suspension.globalThis like every
other dehydration in this file. Error detection is realm-independent, so
the host-created SerializationError serializes identically, but VM-realm
values guest code threw into the cause chain are now detected by the
realm-sensitive reducers.

* Address review: QuickJS engine support, deferred-batch join, drain gate, placeholder marker, telemetry, docs

- QuickJS: dumpPendingOps now catches a step input's serialization
  failure per-op, reframes it as a SerializationError with the same
  framed message as dehydrateStepArguments, and surfaces it on the
  pending op instead of failing the whole collection. The entrypoint's
  dispatchPendingOps finalizes such steps as step_created (placeholder
  input) + step_failed, excludes them from inline claims and queue
  publishes, marks them handled, and raises the requeue signal so the
  failure is observed even when the feed lags — mirroring the node:vm
  engine, so both engines agree: catchable in workflow code, USER_ERROR
  with the framed message when uncaught. Both step-argument e2e tests
  now pass on WORKFLOW_VM=quickjs.
- runtime.ts: the failed-step replay path now joins
  suspensionResult.deferredBatchWork before continuing, so a trailing
  chunk commit or step-message publish rejection propagates instead of
  being swallowed after ack; committed inline claims are documented as
  deliberately handed to owned recovery.
- Terminal drain: finalization is gated on a stepDispatch target. The
  drain caller has no replay to observe a finalization, so a completed
  run no longer gains failed-step rows for an unawaited unserializable
  step — the rethrown error is swallowed by the drain's catch,
  preserving its pre-existing behavior.
- The placeholder input now carries a marker string ('[input
  unavailable: step argument serialization failed]', shared via
  runtime/unserializable-step.ts) so inspect/o11y don't render the
  failed step as a genuine zero-argument call.
- New workflow.steps.failed_serialization span attribute on the
  suspension span, so occurrence is measurable without log search.
- Docs: v5 serialization-failed error page documents where each
  boundary's failure surfaces (catchable step failure vs run failure)
  and the no-retry USER_ERROR semantics; foundations/errors-and-retries
  gains a Serialization Failures section with the try/catch shape.

* Guard the finalization crash window; self-contained docs samples

- A crash or transient failure between finalization's two durable
  writes leaves a lone placeholder step_created, and redelivery then
  dispatches the step through normal crash recovery — previously
  running user code with the placeholder arguments. The placeholder
  now carries a structural flag on the input triple's top level (which
  user code never controls, so no false positives), and the step
  executor checks it after hydration: instead of running the body, it
  throws the intended fatal SerializationError, completing the
  interrupted finalization as step_failed. Applies to both engines
  (they share the placeholder and the executor).
- Regression tests: executor fails a placeholder-input step without
  running the body (and doesn't trip on a genuine argument equal to
  the display marker); handleSuspension rejects for redelivery when
  step_failed can't be written after step_created landed, leaving the
  recoverable placeholder behind; mixed bad-step + large fan-out
  returns the failure set alongside still-pending deferredBatchWork
  whose rejection surfaces — the contract the runtime's failed-step
  join (added previously) relies on.
- Docs: the two new code samples are now self-contained so the docs
  code-sample typecheck passes.
2026-08-19 17:32:51 -07:00
Alex Langenfeld 8c29b85322 [e2e] Re-enable concurrent execution of the e2e suite (#3658) 2026-08-19 17:30:55 -07:00
Karthik Kalyan 4bd533de17 fix(web-shared): shorten workflow-prefixed step names (#3684)
* fix(web-shared): shorten workflow-prefixed step names

* fix(web-shared): shorten event list step names
2026-08-19 17:07:50 -07:00
josuediazflores 8a2648e35f fix(builders): skip generated writes that would not change the file (#3454)
Signed-off-by: josuediazflores <152042011+josuediazflores@users.noreply.github.com>
Signed-off-by: Peter Wielander <peter.wielander@vercel.com>
Co-authored-by: Peter Wielander <mittgfu@gmail.com>
Co-authored-by: Peter Wielander <peter.wielander@vercel.com>
2026-08-19 16:57:24 -07:00
Peter Wielander f6513f1f75 [ci] Remove the disabled Front release-PR dispatch workflow (#3680) 2026-08-19 15:36:20 -07:00
github-actions[bot] 16352a21c1 Version Packages (beta) (#3655) workflow@5.0.0-beta.43 2026-08-19 14:55:52 -07:00