Skip to content

docs(cookbook): add Upgrading Workflows guide - #1874

Merged
VaguelySerious merged 97 commits into
mainfrom
karthik/upgrade-pattern
May 22, 2026
Merged

docs(cookbook): add Upgrading Workflows guide#1874
VaguelySerious merged 97 commits into
mainfrom
karthik/upgrade-pattern

Conversation

@karthikscale3

Copy link
Copy Markdown
Contributor

Summary

Adds a new advanced cookbook page — /cookbook/advanced/upgrading-workflows — for handling long-running workflows that need to pick up shipped fixes without migrating in-flight runs.

The guide is built around a single principle: identify a clean upgrade point in the workflow (a moment where state can be checkpointed and a new run started fresh) and call start() with deploymentId: "latest" to hand off to whatever deployment is current.

It documents two methods:

  • Method 1 — Upgrade on every iteration. Each run handles one event, then unconditionally spawns its successor on the latest deployment before exiting. Best for short, frequent iterations where you want shipped fixes to apply on the very next event.
  • Method 2 — Upgrade on demand via a dedicated hook. A long-lived run handles events in a loop and races the work hook against an upgradeHook. A separate endpoint resumes the upgrade hook (e.g. from a control plane after a deploy), at which point the workflow checkpoints state and respawns on the latest deployment. Best when iterations are infrequent/expensive or when "upgrade" should be an explicit operation that can be fanned out across a fleet.

Both methods share the same "How it works" section (the deploymentId: "latest" knob, start() from a step, state-via-argument, per-run hook tokens) and Caveats (backward-compat constraints, stable workflow identity, hook-not-found gap between iterations, plus a Method-2-specific note on tracking active runs).

Files changed

  • docs/content/docs/cookbook/advanced/upgrading-workflows.mdx — new guide
  • docs/content/docs/cookbook/advanced/meta.json — adds the slug to the Advanced section
  • docs/lib/cookbook-tree.ts — adds the page to the cookbook sidebar (slug → category map and recipes entry)
  • docs/content/docs/cookbook/index.mdx — adds a link from the cookbook landing page

Test plan

  • pnpm dev (docs) and visit /cookbook/advanced/upgrading-workflows — page renders with both Method 1 and Method 2 sections, anchor links work
  • Sidebar under "Advanced" shows "Upgrading Workflows" between Distributed Abort Controller and Serializable Steps
  • Cookbook landing page (/cookbook) lists "Upgrading Workflows" under Advanced
  • Code blocks in both methods compile cleanly against the workflow SDK types (TypeScript)
  • No build/MDX errors in the docs dev server output

Made with Cursor

VaguelySeriousand others added 2 commits May 22, 2026 13:47
# Conflicts:
#	docs/content/docs/v4/cookbook/advanced/upgrading-workflows.mdx
- Add v5 variant of the cookbook page that calls start() directly from
the workflow body (v5 supports workflow-context start; v4 keeps the
step-wrapped pattern from #1491).
- Register the page in v5 cookbook sidebar (meta.json) and the v5
cookbook landing index.
- Add a "see also" callout and /docs/foundations/versioning to the
related list in both v4 and v5, to complement the foundational
versioning docs added in #2010.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

@VaguelySeriousVaguelySerious left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI review: no blocking issues

Polished the PR on top of the original commit:

  • Ported the page to the v5 content tree (direct workflow-context start() per #1491; v4 keeps the step-wrapped pattern as written)
  • Cross-linked to /docs/foundations/versioning (added in #2010 since this PR was opened) — Method 1 here is the hook-driven analog of versioning.mdx's sleep-based "Self upgrading workflows"; Method 2 (dedicated upgradeHook) is fully unique
  • Registered the page in the v5 cookbook sidebar (meta.json) and landing index
  • Added an empty changeset

Verified both /cookbook/advanced/upgrading-workflows (v4) and /v5/cookbook/advanced/upgrading-workflows render with all sections in a local dev server. Docs CI checks (Docs Code Samples, Docs Links, Docs Preview Smoke Checks, Tarballs Preview Smoke Checks) all green.

@VaguelySerious
VaguelySerious merged commit c502364 into mainMay 22, 2026
177 of 188 checks passed
@VaguelySerious
VaguelySerious deleted the karthik/upgrade-pattern branch May 22, 2026 13:35
@github-actions

Copy link
Copy Markdown
Contributor

No backport to stable for c502364 (AI decision).

The substantive content of this commit is a new cookbook guide added under docs/content/docs/v4/cookbook/ and docs/content/docs/v5/cookbook/, plus an entry in docs/lib/cookbook-tree.ts — but the stable branch has no v4/v5 versioned docs structure and no cookbook/ directory at all under docs/content/docs/, and docs/lib/ is part of the unmaintained docs app. The only other change is a trivial whitespace reformat in packages/world-local/src/queue.test.ts (line-wrapping a single statement) which isn't worth a standalone backport.

To override, re-run the Backport to stable workflow manually via workflow_dispatch and paste this commit SHA into the ref input:

c5023646d16c68fabab9ef258144a8eb283c3a66

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@karthikscale3@VaguelySerious
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
docs(cookbook): add Upgrading Workflows guide by karthikscale3 · Pull Request #1874 · vercel/workflow · GitHub
Skip to content

docs(cookbook): add Upgrading Workflows guide - #1874

Merged
VaguelySerious merged 97 commits into
mainfrom
karthik/upgrade-pattern
May 22, 2026
Merged

docs(cookbook): add Upgrading Workflows guide#1874
VaguelySerious merged 97 commits into
mainfrom
karthik/upgrade-pattern

Conversation

@karthikscale3

Copy link
Copy Markdown
Contributor

Summary

Adds a new advanced cookbook page — /cookbook/advanced/upgrading-workflows — for handling long-running workflows that need to pick up shipped fixes without migrating in-flight runs.

The guide is built around a single principle: identify a clean upgrade point in the workflow (a moment where state can be checkpointed and a new run started fresh) and call start() with deploymentId: "latest" to hand off to whatever deployment is current.

It documents two methods:

  • Method 1 — Upgrade on every iteration. Each run handles one event, then unconditionally spawns its successor on the latest deployment before exiting. Best for short, frequent iterations where you want shipped fixes to apply on the very next event.
  • Method 2 — Upgrade on demand via a dedicated hook. A long-lived run handles events in a loop and races the work hook against an upgradeHook. A separate endpoint resumes the upgrade hook (e.g. from a control plane after a deploy), at which point the workflow checkpoints state and respawns on the latest deployment. Best when iterations are infrequent/expensive or when "upgrade" should be an explicit operation that can be fanned out across a fleet.

Both methods share the same "How it works" section (the deploymentId: "latest" knob, start() from a step, state-via-argument, per-run hook tokens) and Caveats (backward-compat constraints, stable workflow identity, hook-not-found gap between iterations, plus a Method-2-specific note on tracking active runs).

Files changed

  • docs/content/docs/cookbook/advanced/upgrading-workflows.mdx — new guide
  • docs/content/docs/cookbook/advanced/meta.json — adds the slug to the Advanced section
  • docs/lib/cookbook-tree.ts — adds the page to the cookbook sidebar (slug → category map and recipes entry)
  • docs/content/docs/cookbook/index.mdx — adds a link from the cookbook landing page

Test plan

  • pnpm dev (docs) and visit /cookbook/advanced/upgrading-workflows — page renders with both Method 1 and Method 2 sections, anchor links work
  • Sidebar under "Advanced" shows "Upgrading Workflows" between Distributed Abort Controller and Serializable Steps
  • Cookbook landing page (/cookbook) lists "Upgrading Workflows" under Advanced
  • Code blocks in both methods compile cleanly against the workflow SDK types (TypeScript)
  • No build/MDX errors in the docs dev server output

Made with Cursor

VaguelySeriousand others added 2 commits May 22, 2026 13:47
# Conflicts:
#	docs/content/docs/v4/cookbook/advanced/upgrading-workflows.mdx
- Add v5 variant of the cookbook page that calls start() directly from
the workflow body (v5 supports workflow-context start; v4 keeps the
step-wrapped pattern from #1491).
- Register the page in v5 cookbook sidebar (meta.json) and the v5
cookbook landing index.
- Add a "see also" callout and /docs/foundations/versioning to the
related list in both v4 and v5, to complement the foundational
versioning docs added in #2010.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

@VaguelySeriousVaguelySerious left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI review: no blocking issues

Polished the PR on top of the original commit:

  • Ported the page to the v5 content tree (direct workflow-context start() per #1491; v4 keeps the step-wrapped pattern as written)
  • Cross-linked to /docs/foundations/versioning (added in #2010 since this PR was opened) — Method 1 here is the hook-driven analog of versioning.mdx's sleep-based "Self upgrading workflows"; Method 2 (dedicated upgradeHook) is fully unique
  • Registered the page in the v5 cookbook sidebar (meta.json) and landing index
  • Added an empty changeset

Verified both /cookbook/advanced/upgrading-workflows (v4) and /v5/cookbook/advanced/upgrading-workflows render with all sections in a local dev server. Docs CI checks (Docs Code Samples, Docs Links, Docs Preview Smoke Checks, Tarballs Preview Smoke Checks) all green.

@VaguelySerious
VaguelySerious merged commit c502364 into mainMay 22, 2026
177 of 188 checks passed
@VaguelySerious
VaguelySerious deleted the karthik/upgrade-pattern branch May 22, 2026 13:35
@github-actions

Copy link
Copy Markdown
Contributor

No backport to stable for c502364 (AI decision).

The substantive content of this commit is a new cookbook guide added under docs/content/docs/v4/cookbook/ and docs/content/docs/v5/cookbook/, plus an entry in docs/lib/cookbook-tree.ts — but the stable branch has no v4/v5 versioned docs structure and no cookbook/ directory at all under docs/content/docs/, and docs/lib/ is part of the unmaintained docs app. The only other change is a trivial whitespace reformat in packages/world-local/src/queue.test.ts (line-wrapping a single statement) which isn't worth a standalone backport.

To override, re-run the Backport to stable workflow manually via workflow_dispatch and paste this commit SHA into the ref input:

c5023646d16c68fabab9ef258144a8eb283c3a66

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@karthikscale3@VaguelySerious
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' docs(cookbook): add Upgrading Workflows guide by karthikscale3 · Pull Request #1874 · vercel/workflow · GitHub
Skip to content

docs(cookbook): add Upgrading Workflows guide - #1874

Merged
VaguelySerious merged 97 commits into
mainfrom
karthik/upgrade-pattern
May 22, 2026
Merged

docs(cookbook): add Upgrading Workflows guide#1874
VaguelySerious merged 97 commits into
mainfrom
karthik/upgrade-pattern

Conversation

@karthikscale3

Copy link
Copy Markdown
Contributor

Summary

Adds a new advanced cookbook page — /cookbook/advanced/upgrading-workflows — for handling long-running workflows that need to pick up shipped fixes without migrating in-flight runs.

The guide is built around a single principle: identify a clean upgrade point in the workflow (a moment where state can be checkpointed and a new run started fresh) and call start() with deploymentId: "latest" to hand off to whatever deployment is current.

It documents two methods:

  • Method 1 — Upgrade on every iteration. Each run handles one event, then unconditionally spawns its successor on the latest deployment before exiting. Best for short, frequent iterations where you want shipped fixes to apply on the very next event.
  • Method 2 — Upgrade on demand via a dedicated hook. A long-lived run handles events in a loop and races the work hook against an upgradeHook. A separate endpoint resumes the upgrade hook (e.g. from a control plane after a deploy), at which point the workflow checkpoints state and respawns on the latest deployment. Best when iterations are infrequent/expensive or when "upgrade" should be an explicit operation that can be fanned out across a fleet.

Both methods share the same "How it works" section (the deploymentId: "latest" knob, start() from a step, state-via-argument, per-run hook tokens) and Caveats (backward-compat constraints, stable workflow identity, hook-not-found gap between iterations, plus a Method-2-specific note on tracking active runs).

Files changed

  • docs/content/docs/cookbook/advanced/upgrading-workflows.mdx — new guide
  • docs/content/docs/cookbook/advanced/meta.json — adds the slug to the Advanced section
  • docs/lib/cookbook-tree.ts — adds the page to the cookbook sidebar (slug → category map and recipes entry)
  • docs/content/docs/cookbook/index.mdx — adds a link from the cookbook landing page

Test plan

  • pnpm dev (docs) and visit /cookbook/advanced/upgrading-workflows — page renders with both Method 1 and Method 2 sections, anchor links work
  • Sidebar under "Advanced" shows "Upgrading Workflows" between Distributed Abort Controller and Serializable Steps
  • Cookbook landing page (/cookbook) lists "Upgrading Workflows" under Advanced
  • Code blocks in both methods compile cleanly against the workflow SDK types (TypeScript)
  • No build/MDX errors in the docs dev server output

Made with Cursor

VaguelySeriousand others added 2 commits May 22, 2026 13:47
# Conflicts:
#	docs/content/docs/v4/cookbook/advanced/upgrading-workflows.mdx
- Add v5 variant of the cookbook page that calls start() directly from
the workflow body (v5 supports workflow-context start; v4 keeps the
step-wrapped pattern from #1491).
- Register the page in v5 cookbook sidebar (meta.json) and the v5
cookbook landing index.
- Add a "see also" callout and /docs/foundations/versioning to the
related list in both v4 and v5, to complement the foundational
versioning docs added in #2010.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

@VaguelySeriousVaguelySerious left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI review: no blocking issues

Polished the PR on top of the original commit:

  • Ported the page to the v5 content tree (direct workflow-context start() per #1491; v4 keeps the step-wrapped pattern as written)
  • Cross-linked to /docs/foundations/versioning (added in #2010 since this PR was opened) — Method 1 here is the hook-driven analog of versioning.mdx's sleep-based "Self upgrading workflows"; Method 2 (dedicated upgradeHook) is fully unique
  • Registered the page in the v5 cookbook sidebar (meta.json) and landing index
  • Added an empty changeset

Verified both /cookbook/advanced/upgrading-workflows (v4) and /v5/cookbook/advanced/upgrading-workflows render with all sections in a local dev server. Docs CI checks (Docs Code Samples, Docs Links, Docs Preview Smoke Checks, Tarballs Preview Smoke Checks) all green.

@VaguelySerious
VaguelySerious merged commit c502364 into mainMay 22, 2026
177 of 188 checks passed
@VaguelySerious
VaguelySerious deleted the karthik/upgrade-pattern branch May 22, 2026 13:35
@github-actions

Copy link
Copy Markdown
Contributor

No backport to stable for c502364 (AI decision).

The substantive content of this commit is a new cookbook guide added under docs/content/docs/v4/cookbook/ and docs/content/docs/v5/cookbook/, plus an entry in docs/lib/cookbook-tree.ts — but the stable branch has no v4/v5 versioned docs structure and no cookbook/ directory at all under docs/content/docs/, and docs/lib/ is part of the unmaintained docs app. The only other change is a trivial whitespace reformat in packages/world-local/src/queue.test.ts (line-wrapping a single statement) which isn't worth a standalone backport.

To override, re-run the Backport to stable workflow manually via workflow_dispatch and paste this commit SHA into the ref input:

c5023646d16c68fabab9ef258144a8eb283c3a66

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@karthikscale3@VaguelySerious
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' docs(cookbook): add Upgrading Workflows guide by karthikscale3 · Pull Request #1874 · vercel/workflow · GitHub
Skip to content

docs(cookbook): add Upgrading Workflows guide - #1874

Merged
VaguelySerious merged 97 commits into
mainfrom
karthik/upgrade-pattern
May 22, 2026
Merged

docs(cookbook): add Upgrading Workflows guide#1874
VaguelySerious merged 97 commits into
mainfrom
karthik/upgrade-pattern

Conversation

@karthikscale3

Copy link
Copy Markdown
Contributor

Summary

Adds a new advanced cookbook page — /cookbook/advanced/upgrading-workflows — for handling long-running workflows that need to pick up shipped fixes without migrating in-flight runs.

The guide is built around a single principle: identify a clean upgrade point in the workflow (a moment where state can be checkpointed and a new run started fresh) and call start() with deploymentId: "latest" to hand off to whatever deployment is current.

It documents two methods:

  • Method 1 — Upgrade on every iteration. Each run handles one event, then unconditionally spawns its successor on the latest deployment before exiting. Best for short, frequent iterations where you want shipped fixes to apply on the very next event.
  • Method 2 — Upgrade on demand via a dedicated hook. A long-lived run handles events in a loop and races the work hook against an upgradeHook. A separate endpoint resumes the upgrade hook (e.g. from a control plane after a deploy), at which point the workflow checkpoints state and respawns on the latest deployment. Best when iterations are infrequent/expensive or when "upgrade" should be an explicit operation that can be fanned out across a fleet.

Both methods share the same "How it works" section (the deploymentId: "latest" knob, start() from a step, state-via-argument, per-run hook tokens) and Caveats (backward-compat constraints, stable workflow identity, hook-not-found gap between iterations, plus a Method-2-specific note on tracking active runs).

Files changed

  • docs/content/docs/cookbook/advanced/upgrading-workflows.mdx — new guide
  • docs/content/docs/cookbook/advanced/meta.json — adds the slug to the Advanced section
  • docs/lib/cookbook-tree.ts — adds the page to the cookbook sidebar (slug → category map and recipes entry)
  • docs/content/docs/cookbook/index.mdx — adds a link from the cookbook landing page

Test plan

  • pnpm dev (docs) and visit /cookbook/advanced/upgrading-workflows — page renders with both Method 1 and Method 2 sections, anchor links work
  • Sidebar under "Advanced" shows "Upgrading Workflows" between Distributed Abort Controller and Serializable Steps
  • Cookbook landing page (/cookbook) lists "Upgrading Workflows" under Advanced
  • Code blocks in both methods compile cleanly against the workflow SDK types (TypeScript)
  • No build/MDX errors in the docs dev server output

Made with Cursor

VaguelySeriousand others added 2 commits May 22, 2026 13:47
# Conflicts:
#	docs/content/docs/v4/cookbook/advanced/upgrading-workflows.mdx
- Add v5 variant of the cookbook page that calls start() directly from
the workflow body (v5 supports workflow-context start; v4 keeps the
step-wrapped pattern from #1491).
- Register the page in v5 cookbook sidebar (meta.json) and the v5
cookbook landing index.
- Add a "see also" callout and /docs/foundations/versioning to the
related list in both v4 and v5, to complement the foundational
versioning docs added in #2010.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

@VaguelySeriousVaguelySerious left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI review: no blocking issues

Polished the PR on top of the original commit:

  • Ported the page to the v5 content tree (direct workflow-context start() per #1491; v4 keeps the step-wrapped pattern as written)
  • Cross-linked to /docs/foundations/versioning (added in #2010 since this PR was opened) — Method 1 here is the hook-driven analog of versioning.mdx's sleep-based "Self upgrading workflows"; Method 2 (dedicated upgradeHook) is fully unique
  • Registered the page in the v5 cookbook sidebar (meta.json) and landing index
  • Added an empty changeset

Verified both /cookbook/advanced/upgrading-workflows (v4) and /v5/cookbook/advanced/upgrading-workflows render with all sections in a local dev server. Docs CI checks (Docs Code Samples, Docs Links, Docs Preview Smoke Checks, Tarballs Preview Smoke Checks) all green.

@VaguelySerious
VaguelySerious merged commit c502364 into mainMay 22, 2026
177 of 188 checks passed
@VaguelySerious
VaguelySerious deleted the karthik/upgrade-pattern branch May 22, 2026 13:35
@github-actions

Copy link
Copy Markdown
Contributor

No backport to stable for c502364 (AI decision).

The substantive content of this commit is a new cookbook guide added under docs/content/docs/v4/cookbook/ and docs/content/docs/v5/cookbook/, plus an entry in docs/lib/cookbook-tree.ts — but the stable branch has no v4/v5 versioned docs structure and no cookbook/ directory at all under docs/content/docs/, and docs/lib/ is part of the unmaintained docs app. The only other change is a trivial whitespace reformat in packages/world-local/src/queue.test.ts (line-wrapping a single statement) which isn't worth a standalone backport.

To override, re-run the Backport to stable workflow manually via workflow_dispatch and paste this commit SHA into the ref input:

c5023646d16c68fabab9ef258144a8eb283c3a66

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@karthikscale3@VaguelySerious
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' docs(cookbook): add Upgrading Workflows guide by karthikscale3 · Pull Request #1874 · vercel/workflow · GitHub
Skip to content

docs(cookbook): add Upgrading Workflows guide - #1874

Merged
VaguelySerious merged 97 commits into
mainfrom
karthik/upgrade-pattern
May 22, 2026
Merged

docs(cookbook): add Upgrading Workflows guide#1874
VaguelySerious merged 97 commits into
mainfrom
karthik/upgrade-pattern

Conversation

@karthikscale3

Copy link
Copy Markdown
Contributor

Summary

Adds a new advanced cookbook page — /cookbook/advanced/upgrading-workflows — for handling long-running workflows that need to pick up shipped fixes without migrating in-flight runs.

The guide is built around a single principle: identify a clean upgrade point in the workflow (a moment where state can be checkpointed and a new run started fresh) and call start() with deploymentId: "latest" to hand off to whatever deployment is current.

It documents two methods:

  • Method 1 — Upgrade on every iteration. Each run handles one event, then unconditionally spawns its successor on the latest deployment before exiting. Best for short, frequent iterations where you want shipped fixes to apply on the very next event.
  • Method 2 — Upgrade on demand via a dedicated hook. A long-lived run handles events in a loop and races the work hook against an upgradeHook. A separate endpoint resumes the upgrade hook (e.g. from a control plane after a deploy), at which point the workflow checkpoints state and respawns on the latest deployment. Best when iterations are infrequent/expensive or when "upgrade" should be an explicit operation that can be fanned out across a fleet.

Both methods share the same "How it works" section (the deploymentId: "latest" knob, start() from a step, state-via-argument, per-run hook tokens) and Caveats (backward-compat constraints, stable workflow identity, hook-not-found gap between iterations, plus a Method-2-specific note on tracking active runs).

Files changed

  • docs/content/docs/cookbook/advanced/upgrading-workflows.mdx — new guide
  • docs/content/docs/cookbook/advanced/meta.json — adds the slug to the Advanced section
  • docs/lib/cookbook-tree.ts — adds the page to the cookbook sidebar (slug → category map and recipes entry)
  • docs/content/docs/cookbook/index.mdx — adds a link from the cookbook landing page

Test plan

  • pnpm dev (docs) and visit /cookbook/advanced/upgrading-workflows — page renders with both Method 1 and Method 2 sections, anchor links work
  • Sidebar under "Advanced" shows "Upgrading Workflows" between Distributed Abort Controller and Serializable Steps
  • Cookbook landing page (/cookbook) lists "Upgrading Workflows" under Advanced
  • Code blocks in both methods compile cleanly against the workflow SDK types (TypeScript)
  • No build/MDX errors in the docs dev server output

Made with Cursor

VaguelySeriousand others added 2 commits May 22, 2026 13:47
# Conflicts:
#	docs/content/docs/v4/cookbook/advanced/upgrading-workflows.mdx
- Add v5 variant of the cookbook page that calls start() directly from
the workflow body (v5 supports workflow-context start; v4 keeps the
step-wrapped pattern from #1491).
- Register the page in v5 cookbook sidebar (meta.json) and the v5
cookbook landing index.
- Add a "see also" callout and /docs/foundations/versioning to the
related list in both v4 and v5, to complement the foundational
versioning docs added in #2010.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

@VaguelySeriousVaguelySerious left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI review: no blocking issues

Polished the PR on top of the original commit:

  • Ported the page to the v5 content tree (direct workflow-context start() per #1491; v4 keeps the step-wrapped pattern as written)
  • Cross-linked to /docs/foundations/versioning (added in #2010 since this PR was opened) — Method 1 here is the hook-driven analog of versioning.mdx's sleep-based "Self upgrading workflows"; Method 2 (dedicated upgradeHook) is fully unique
  • Registered the page in the v5 cookbook sidebar (meta.json) and landing index
  • Added an empty changeset

Verified both /cookbook/advanced/upgrading-workflows (v4) and /v5/cookbook/advanced/upgrading-workflows render with all sections in a local dev server. Docs CI checks (Docs Code Samples, Docs Links, Docs Preview Smoke Checks, Tarballs Preview Smoke Checks) all green.

@VaguelySerious
VaguelySerious merged commit c502364 into mainMay 22, 2026
177 of 188 checks passed
@VaguelySerious
VaguelySerious deleted the karthik/upgrade-pattern branch May 22, 2026 13:35
@github-actions

Copy link
Copy Markdown
Contributor

No backport to stable for c502364 (AI decision).

The substantive content of this commit is a new cookbook guide added under docs/content/docs/v4/cookbook/ and docs/content/docs/v5/cookbook/, plus an entry in docs/lib/cookbook-tree.ts — but the stable branch has no v4/v5 versioned docs structure and no cookbook/ directory at all under docs/content/docs/, and docs/lib/ is part of the unmaintained docs app. The only other change is a trivial whitespace reformat in packages/world-local/src/queue.test.ts (line-wrapping a single statement) which isn't worth a standalone backport.

To override, re-run the Backport to stable workflow manually via workflow_dispatch and paste this commit SHA into the ref input:

c5023646d16c68fabab9ef258144a8eb283c3a66

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@karthikscale3@VaguelySerious
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' docs(cookbook): add Upgrading Workflows guide by karthikscale3 · Pull Request #1874 · vercel/workflow · GitHub
Skip to content

docs(cookbook): add Upgrading Workflows guide - #1874

Merged
VaguelySerious merged 97 commits into
mainfrom
karthik/upgrade-pattern
May 22, 2026
Merged

docs(cookbook): add Upgrading Workflows guide#1874
VaguelySerious merged 97 commits into
mainfrom
karthik/upgrade-pattern

Conversation

@karthikscale3

Copy link
Copy Markdown
Contributor

Summary

Adds a new advanced cookbook page — /cookbook/advanced/upgrading-workflows — for handling long-running workflows that need to pick up shipped fixes without migrating in-flight runs.

The guide is built around a single principle: identify a clean upgrade point in the workflow (a moment where state can be checkpointed and a new run started fresh) and call start() with deploymentId: "latest" to hand off to whatever deployment is current.

It documents two methods:

  • Method 1 — Upgrade on every iteration. Each run handles one event, then unconditionally spawns its successor on the latest deployment before exiting. Best for short, frequent iterations where you want shipped fixes to apply on the very next event.
  • Method 2 — Upgrade on demand via a dedicated hook. A long-lived run handles events in a loop and races the work hook against an upgradeHook. A separate endpoint resumes the upgrade hook (e.g. from a control plane after a deploy), at which point the workflow checkpoints state and respawns on the latest deployment. Best when iterations are infrequent/expensive or when "upgrade" should be an explicit operation that can be fanned out across a fleet.

Both methods share the same "How it works" section (the deploymentId: "latest" knob, start() from a step, state-via-argument, per-run hook tokens) and Caveats (backward-compat constraints, stable workflow identity, hook-not-found gap between iterations, plus a Method-2-specific note on tracking active runs).

Files changed

  • docs/content/docs/cookbook/advanced/upgrading-workflows.mdx — new guide
  • docs/content/docs/cookbook/advanced/meta.json — adds the slug to the Advanced section
  • docs/lib/cookbook-tree.ts — adds the page to the cookbook sidebar (slug → category map and recipes entry)
  • docs/content/docs/cookbook/index.mdx — adds a link from the cookbook landing page

Test plan

  • pnpm dev (docs) and visit /cookbook/advanced/upgrading-workflows — page renders with both Method 1 and Method 2 sections, anchor links work
  • Sidebar under "Advanced" shows "Upgrading Workflows" between Distributed Abort Controller and Serializable Steps
  • Cookbook landing page (/cookbook) lists "Upgrading Workflows" under Advanced
  • Code blocks in both methods compile cleanly against the workflow SDK types (TypeScript)
  • No build/MDX errors in the docs dev server output

Made with Cursor

VaguelySeriousand others added 2 commits May 22, 2026 13:47
# Conflicts:
#	docs/content/docs/v4/cookbook/advanced/upgrading-workflows.mdx
- Add v5 variant of the cookbook page that calls start() directly from
the workflow body (v5 supports workflow-context start; v4 keeps the
step-wrapped pattern from #1491).
- Register the page in v5 cookbook sidebar (meta.json) and the v5
cookbook landing index.
- Add a "see also" callout and /docs/foundations/versioning to the
related list in both v4 and v5, to complement the foundational
versioning docs added in #2010.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

@VaguelySeriousVaguelySerious left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI review: no blocking issues

Polished the PR on top of the original commit:

  • Ported the page to the v5 content tree (direct workflow-context start() per #1491; v4 keeps the step-wrapped pattern as written)
  • Cross-linked to /docs/foundations/versioning (added in #2010 since this PR was opened) — Method 1 here is the hook-driven analog of versioning.mdx's sleep-based "Self upgrading workflows"; Method 2 (dedicated upgradeHook) is fully unique
  • Registered the page in the v5 cookbook sidebar (meta.json) and landing index
  • Added an empty changeset

Verified both /cookbook/advanced/upgrading-workflows (v4) and /v5/cookbook/advanced/upgrading-workflows render with all sections in a local dev server. Docs CI checks (Docs Code Samples, Docs Links, Docs Preview Smoke Checks, Tarballs Preview Smoke Checks) all green.

@VaguelySerious
VaguelySerious merged commit c502364 into mainMay 22, 2026
177 of 188 checks passed
@VaguelySerious
VaguelySerious deleted the karthik/upgrade-pattern branch May 22, 2026 13:35
@github-actions

Copy link
Copy Markdown
Contributor

No backport to stable for c502364 (AI decision).

The substantive content of this commit is a new cookbook guide added under docs/content/docs/v4/cookbook/ and docs/content/docs/v5/cookbook/, plus an entry in docs/lib/cookbook-tree.ts — but the stable branch has no v4/v5 versioned docs structure and no cookbook/ directory at all under docs/content/docs/, and docs/lib/ is part of the unmaintained docs app. The only other change is a trivial whitespace reformat in packages/world-local/src/queue.test.ts (line-wrapping a single statement) which isn't worth a standalone backport.

To override, re-run the Backport to stable workflow manually via workflow_dispatch and paste this commit SHA into the ref input:

c5023646d16c68fabab9ef258144a8eb283c3a66

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@karthikscale3@VaguelySerious
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' docs(cookbook): add Upgrading Workflows guide by karthikscale3 · Pull Request #1874 · vercel/workflow · GitHub
Skip to content

docs(cookbook): add Upgrading Workflows guide - #1874

Merged
VaguelySerious merged 97 commits into
mainfrom
karthik/upgrade-pattern
May 22, 2026
Merged

docs(cookbook): add Upgrading Workflows guide#1874
VaguelySerious merged 97 commits into
mainfrom
karthik/upgrade-pattern

Conversation

@karthikscale3

Copy link
Copy Markdown
Contributor

Summary

Adds a new advanced cookbook page — /cookbook/advanced/upgrading-workflows — for handling long-running workflows that need to pick up shipped fixes without migrating in-flight runs.

The guide is built around a single principle: identify a clean upgrade point in the workflow (a moment where state can be checkpointed and a new run started fresh) and call start() with deploymentId: "latest" to hand off to whatever deployment is current.

It documents two methods:

  • Method 1 — Upgrade on every iteration. Each run handles one event, then unconditionally spawns its successor on the latest deployment before exiting. Best for short, frequent iterations where you want shipped fixes to apply on the very next event.
  • Method 2 — Upgrade on demand via a dedicated hook. A long-lived run handles events in a loop and races the work hook against an upgradeHook. A separate endpoint resumes the upgrade hook (e.g. from a control plane after a deploy), at which point the workflow checkpoints state and respawns on the latest deployment. Best when iterations are infrequent/expensive or when "upgrade" should be an explicit operation that can be fanned out across a fleet.

Both methods share the same "How it works" section (the deploymentId: "latest" knob, start() from a step, state-via-argument, per-run hook tokens) and Caveats (backward-compat constraints, stable workflow identity, hook-not-found gap between iterations, plus a Method-2-specific note on tracking active runs).

Files changed

  • docs/content/docs/cookbook/advanced/upgrading-workflows.mdx — new guide
  • docs/content/docs/cookbook/advanced/meta.json — adds the slug to the Advanced section
  • docs/lib/cookbook-tree.ts — adds the page to the cookbook sidebar (slug → category map and recipes entry)
  • docs/content/docs/cookbook/index.mdx — adds a link from the cookbook landing page

Test plan

  • pnpm dev (docs) and visit /cookbook/advanced/upgrading-workflows — page renders with both Method 1 and Method 2 sections, anchor links work
  • Sidebar under "Advanced" shows "Upgrading Workflows" between Distributed Abort Controller and Serializable Steps
  • Cookbook landing page (/cookbook) lists "Upgrading Workflows" under Advanced
  • Code blocks in both methods compile cleanly against the workflow SDK types (TypeScript)
  • No build/MDX errors in the docs dev server output

Made with Cursor

VaguelySeriousand others added 2 commits May 22, 2026 13:47
# Conflicts:
#	docs/content/docs/v4/cookbook/advanced/upgrading-workflows.mdx
- Add v5 variant of the cookbook page that calls start() directly from
the workflow body (v5 supports workflow-context start; v4 keeps the
step-wrapped pattern from #1491).
- Register the page in v5 cookbook sidebar (meta.json) and the v5
cookbook landing index.
- Add a "see also" callout and /docs/foundations/versioning to the
related list in both v4 and v5, to complement the foundational
versioning docs added in #2010.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

@VaguelySeriousVaguelySerious left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI review: no blocking issues

Polished the PR on top of the original commit:

  • Ported the page to the v5 content tree (direct workflow-context start() per #1491; v4 keeps the step-wrapped pattern as written)
  • Cross-linked to /docs/foundations/versioning (added in #2010 since this PR was opened) — Method 1 here is the hook-driven analog of versioning.mdx's sleep-based "Self upgrading workflows"; Method 2 (dedicated upgradeHook) is fully unique
  • Registered the page in the v5 cookbook sidebar (meta.json) and landing index
  • Added an empty changeset

Verified both /cookbook/advanced/upgrading-workflows (v4) and /v5/cookbook/advanced/upgrading-workflows render with all sections in a local dev server. Docs CI checks (Docs Code Samples, Docs Links, Docs Preview Smoke Checks, Tarballs Preview Smoke Checks) all green.

@VaguelySerious
VaguelySerious merged commit c502364 into mainMay 22, 2026
177 of 188 checks passed
@VaguelySerious
VaguelySerious deleted the karthik/upgrade-pattern branch May 22, 2026 13:35
@github-actions

Copy link
Copy Markdown
Contributor

No backport to stable for c502364 (AI decision).

The substantive content of this commit is a new cookbook guide added under docs/content/docs/v4/cookbook/ and docs/content/docs/v5/cookbook/, plus an entry in docs/lib/cookbook-tree.ts — but the stable branch has no v4/v5 versioned docs structure and no cookbook/ directory at all under docs/content/docs/, and docs/lib/ is part of the unmaintained docs app. The only other change is a trivial whitespace reformat in packages/world-local/src/queue.test.ts (line-wrapping a single statement) which isn't worth a standalone backport.

To override, re-run the Backport to stable workflow manually via workflow_dispatch and paste this commit SHA into the ref input:

c5023646d16c68fabab9ef258144a8eb283c3a66

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@karthikscale3@VaguelySerious
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); docs(cookbook): add Upgrading Workflows guide by karthikscale3 · Pull Request #1874 · vercel/workflow · GitHub
Skip to content

docs(cookbook): add Upgrading Workflows guide - #1874

Merged
VaguelySerious merged 97 commits into
mainfrom
karthik/upgrade-pattern
May 22, 2026
Merged

docs(cookbook): add Upgrading Workflows guide#1874
VaguelySerious merged 97 commits into
mainfrom
karthik/upgrade-pattern

Conversation

@karthikscale3

Copy link
Copy Markdown
Contributor

Summary

Adds a new advanced cookbook page — /cookbook/advanced/upgrading-workflows — for handling long-running workflows that need to pick up shipped fixes without migrating in-flight runs.

The guide is built around a single principle: identify a clean upgrade point in the workflow (a moment where state can be checkpointed and a new run started fresh) and call start() with deploymentId: "latest" to hand off to whatever deployment is current.

It documents two methods:

  • Method 1 — Upgrade on every iteration. Each run handles one event, then unconditionally spawns its successor on the latest deployment before exiting. Best for short, frequent iterations where you want shipped fixes to apply on the very next event.
  • Method 2 — Upgrade on demand via a dedicated hook. A long-lived run handles events in a loop and races the work hook against an upgradeHook. A separate endpoint resumes the upgrade hook (e.g. from a control plane after a deploy), at which point the workflow checkpoints state and respawns on the latest deployment. Best when iterations are infrequent/expensive or when "upgrade" should be an explicit operation that can be fanned out across a fleet.

Both methods share the same "How it works" section (the deploymentId: "latest" knob, start() from a step, state-via-argument, per-run hook tokens) and Caveats (backward-compat constraints, stable workflow identity, hook-not-found gap between iterations, plus a Method-2-specific note on tracking active runs).

Files changed

  • docs/content/docs/cookbook/advanced/upgrading-workflows.mdx — new guide
  • docs/content/docs/cookbook/advanced/meta.json — adds the slug to the Advanced section
  • docs/lib/cookbook-tree.ts — adds the page to the cookbook sidebar (slug → category map and recipes entry)
  • docs/content/docs/cookbook/index.mdx — adds a link from the cookbook landing page

Test plan

  • pnpm dev (docs) and visit /cookbook/advanced/upgrading-workflows — page renders with both Method 1 and Method 2 sections, anchor links work
  • Sidebar under "Advanced" shows "Upgrading Workflows" between Distributed Abort Controller and Serializable Steps
  • Cookbook landing page (/cookbook) lists "Upgrading Workflows" under Advanced
  • Code blocks in both methods compile cleanly against the workflow SDK types (TypeScript)
  • No build/MDX errors in the docs dev server output

Made with Cursor

VaguelySeriousand others added 2 commits May 22, 2026 13:47
# Conflicts:
#	docs/content/docs/v4/cookbook/advanced/upgrading-workflows.mdx
- Add v5 variant of the cookbook page that calls start() directly from
the workflow body (v5 supports workflow-context start; v4 keeps the
step-wrapped pattern from #1491).
- Register the page in v5 cookbook sidebar (meta.json) and the v5
cookbook landing index.
- Add a "see also" callout and /docs/foundations/versioning to the
related list in both v4 and v5, to complement the foundational
versioning docs added in #2010.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

@VaguelySeriousVaguelySerious left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI review: no blocking issues

Polished the PR on top of the original commit:

  • Ported the page to the v5 content tree (direct workflow-context start() per #1491; v4 keeps the step-wrapped pattern as written)
  • Cross-linked to /docs/foundations/versioning (added in #2010 since this PR was opened) — Method 1 here is the hook-driven analog of versioning.mdx's sleep-based "Self upgrading workflows"; Method 2 (dedicated upgradeHook) is fully unique
  • Registered the page in the v5 cookbook sidebar (meta.json) and landing index
  • Added an empty changeset

Verified both /cookbook/advanced/upgrading-workflows (v4) and /v5/cookbook/advanced/upgrading-workflows render with all sections in a local dev server. Docs CI checks (Docs Code Samples, Docs Links, Docs Preview Smoke Checks, Tarballs Preview Smoke Checks) all green.

@VaguelySerious
VaguelySerious merged commit c502364 into mainMay 22, 2026
177 of 188 checks passed
@VaguelySerious
VaguelySerious deleted the karthik/upgrade-pattern branch May 22, 2026 13:35
@github-actions

Copy link
Copy Markdown
Contributor

No backport to stable for c502364 (AI decision).

The substantive content of this commit is a new cookbook guide added under docs/content/docs/v4/cookbook/ and docs/content/docs/v5/cookbook/, plus an entry in docs/lib/cookbook-tree.ts — but the stable branch has no v4/v5 versioned docs structure and no cookbook/ directory at all under docs/content/docs/, and docs/lib/ is part of the unmaintained docs app. The only other change is a trivial whitespace reformat in packages/world-local/src/queue.test.ts (line-wrapping a single statement) which isn't worth a standalone backport.

To override, re-run the Backport to stable workflow manually via workflow_dispatch and paste this commit SHA into the ref input:

c5023646d16c68fabab9ef258144a8eb283c3a66

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@karthikscale3@VaguelySerious