Centralize workflow event semantics#2790
Conversation
🦋 Changeset detectedLatest commit: 0b57804 The changes in this PR will be included in the next version bump. This PR includes changesets to release 20 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
📊 Workflow Benchmarkscommit Backend:
📜 Previous results (1)b670edaThu, 09 Jul 2026 00:30:42 GMT · run logs
Avg deltas compare against the most recent benchmark run on Metrics — TTFS: time to first step body execution · STSO: step-to-step overhead (gap between consecutive step bodies) · WO: workflow overhead (time outside step bodies, client start → last step body exit) · SL: stream latency (first chunk write → visible to the reader) Scenarios — stream: one step that streams chunks back to the client; no hooks, so the run stays in turbo mode · hook + stream: registers a hook before the same streaming step, which exits turbo mode · 1020 steps: 1020 trivial sequential steps; STSO is measured between consecutive steps in the given step ranges 🟢/🔴 mark percentiles within/above target. Targets (p75/p90/p99, ms) — TTFS 200/300/600 · SL 50/60/125 · STSO (1-20) 20/30/60 · STSO (101-120) 30/45/90 · STSO (1001-1020) 40/60/120 TTFS/WO compare client vs deployment clocks and SL compares the step runner’s clock vs the client’s (NTP-synced in CI). WO ends at the last step body exit, the closest observable proxy for the final step-completion request. |
dd190fb to
394f4c2
Compare
🧪 E2E Test Results✅ All tests passed Summary
Details by Category✅ ▲ Vercel Production
✅ 💻 Local Development
✅ 📦 Local Production
✅ 🐘 Local Postgres
✅ 🪟 Windows
✅ 📋 Other
|
…t-semantics # Conflicts: # packages/cli/src/commands/cancel.ts
…t-semantics # Conflicts: # packages/web-shared/src/components/sidebar/entity-detail-panel.tsx
…t-semantics # Conflicts: # packages/world-local/src/storage/hooks-storage.ts
| input?: any; | ||
| output?: any; | ||
| metadata?: any; | ||
| eventType?: string; |
There was a problem hiding this comment.
eventType should never be encrypted, but result might be
| eventType?: string; | |
| result?: any; |
There was a problem hiding this comment.
Yes, eventType isn't being decrypted
for (const field of getEventDataRefFields(result.eventType ?? '')) { //line 355
eventData[field] = await maybeDecrypt(eventData[field], k);
}
since
const result = { ...resource }; // line 337
in order to access result.eventType we need to have eventType on the generic T because resource: T in the function
VaguelySerious
left a comment
There was a problem hiding this comment.
AI review: no blocking issues.
This pass only flags possible behavior changes introduced by the event-semantics centralization. None are clearly incorrect, but each is a semantic shift from the code it replaced and worth a maintainer's confirmation. See inline notes.
Summary
Tests