Skip to content

feat(world-postgres): make startup recovery optional - #3690

Open
joeyhotz wants to merge 1 commit into
vercel:mainfrom
joeyhotz:fix/postgres-optional-boot-recovery
Open

feat(world-postgres): make startup recovery optional#3690
joeyhotz wants to merge 1 commit into
vercel:mainfrom
joeyhotz:fix/postgres-optional-boot-recovery

Conversation

@joeyhotz

@joeyhotzjoeyhotz commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Description

world-postgres currently scans and re-enqueues every pending/running run whenever a process calls start(). In a horizontally scaled deployment, an ordinary replica start is not evidence that the fleet failed, so this can create a burst of redundant replay work.

Add recoverActiveRuns to PostgresWorldConfig, matching the existing Local World option. It defaults to true. With false, start() still starts Graphile Worker and consumes durable/new jobs, but skips the broad storage scan.

This is an operational escape hatch, not leader election or exactly-once machinery. Setting it to false everywhere removes automatic startup repair for an active run with no runnable job, so recovery must be handled separately.

Related work: #2544 proposes a broader start({ onRestart }) control; #3162 makes boot recovery more selective and deduplicates its jobs; #3138 tracks owner-aware/single-flight recovery. This change is the smaller world-postgres construction-time escape hatch. If #2544 lands, precedence between the two controls should be defined deliberately.

Docs Preview

Pending Vercel Labs authorization for the external fork. Changed route: /v5/docs/configuration/worlds#recoveractiveruns.

How did you test your changes?

  • Added a regression test with an active stored run and recoverActiveRuns: false.
  • The test proves Graphile Worker starts while storage listing and recovery enqueueing do not run.
  • pnpm exec vitest run src/reenqueue.test.ts — 13/13 passed.
  • pnpm typecheck and pnpm build passed for @workflow/world-postgres.

PR Checklist - Required to merge

  • 📦 Added a minor changeset for @workflow/world-postgres
  • 🔒 DCO sign-off is present
  • 📝 Pinged @vercel/workflow after the PR and core checks were verified

@changeset-bot

changeset-botBot commented Aug 20, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: ac36252

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
@workflow/world-postgresMinor

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

@vercel

vercelBot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

@joeyhotz is attempting to deploy a commit to the Vercel Labs Team on Vercel.

A member of the Team first needs to authorize it.

@joeyhotz
joeyhotz marked this pull request as ready for review August 20, 2026 04:49
@joeyhotz
joeyhotz requested review from a team, fantix and msullivan as code ownersAugust 20, 2026 04:49
@joeyhotz

joeyhotz commented Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

Pinging @vercel/workflow.

@joeyhotz
joeyhotzforce-pushed the fix/postgres-optional-boot-recovery branch from 3a3e72a to dd36097CompareAugust 20, 2026 06:17
@VaguelySerious

Copy link
Copy Markdown
Member

@joeyhotz Commits must be signed for me to be able to merge this

@joeyhotz
joeyhotzforce-pushed the fix/postgres-optional-boot-recovery branch from dd36097 to ec2dfc3CompareAugust 21, 2026 04:49
@joeyhotz

Copy link
Copy Markdown
ContributorAuthor

Should be signed now, apologies @VaguelySerious 🙏

Signed-off-by: Joey Hotz <joeyhotz1@gmail.com>
@joeyhotz
joeyhotzforce-pushed the fix/postgres-optional-boot-recovery branch from ec2dfc3 to ac36252CompareAugust 21, 2026 04:51
@VaguelySerious

Copy link
Copy Markdown
Member

@joeyhotz

image

Sadly it seems not

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

@joeyhotz@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" + '
feat(world-postgres): make startup recovery optional by joeyhotz · Pull Request #3690 · vercel/workflow · GitHub
Skip to content

feat(world-postgres): make startup recovery optional - #3690

Open
joeyhotz wants to merge 1 commit into
vercel:mainfrom
joeyhotz:fix/postgres-optional-boot-recovery
Open

feat(world-postgres): make startup recovery optional#3690
joeyhotz wants to merge 1 commit into
vercel:mainfrom
joeyhotz:fix/postgres-optional-boot-recovery

Conversation

@joeyhotz

@joeyhotzjoeyhotz commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Description

world-postgres currently scans and re-enqueues every pending/running run whenever a process calls start(). In a horizontally scaled deployment, an ordinary replica start is not evidence that the fleet failed, so this can create a burst of redundant replay work.

Add recoverActiveRuns to PostgresWorldConfig, matching the existing Local World option. It defaults to true. With false, start() still starts Graphile Worker and consumes durable/new jobs, but skips the broad storage scan.

This is an operational escape hatch, not leader election or exactly-once machinery. Setting it to false everywhere removes automatic startup repair for an active run with no runnable job, so recovery must be handled separately.

Related work: #2544 proposes a broader start({ onRestart }) control; #3162 makes boot recovery more selective and deduplicates its jobs; #3138 tracks owner-aware/single-flight recovery. This change is the smaller world-postgres construction-time escape hatch. If #2544 lands, precedence between the two controls should be defined deliberately.

Docs Preview

Pending Vercel Labs authorization for the external fork. Changed route: /v5/docs/configuration/worlds#recoveractiveruns.

How did you test your changes?

  • Added a regression test with an active stored run and recoverActiveRuns: false.
  • The test proves Graphile Worker starts while storage listing and recovery enqueueing do not run.
  • pnpm exec vitest run src/reenqueue.test.ts — 13/13 passed.
  • pnpm typecheck and pnpm build passed for @workflow/world-postgres.

PR Checklist - Required to merge

  • 📦 Added a minor changeset for @workflow/world-postgres
  • 🔒 DCO sign-off is present
  • 📝 Pinged @vercel/workflow after the PR and core checks were verified

@changeset-bot

changeset-botBot commented Aug 20, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: ac36252

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
@workflow/world-postgresMinor

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

@vercel

vercelBot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

@joeyhotz is attempting to deploy a commit to the Vercel Labs Team on Vercel.

A member of the Team first needs to authorize it.

@joeyhotz
joeyhotz marked this pull request as ready for review August 20, 2026 04:49
@joeyhotz
joeyhotz requested review from a team, fantix and msullivan as code ownersAugust 20, 2026 04:49
@joeyhotz

joeyhotz commented Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

Pinging @vercel/workflow.

@joeyhotz
joeyhotzforce-pushed the fix/postgres-optional-boot-recovery branch from 3a3e72a to dd36097CompareAugust 20, 2026 06:17
@VaguelySerious

Copy link
Copy Markdown
Member

@joeyhotz Commits must be signed for me to be able to merge this

@joeyhotz
joeyhotzforce-pushed the fix/postgres-optional-boot-recovery branch from dd36097 to ec2dfc3CompareAugust 21, 2026 04:49
@joeyhotz

Copy link
Copy Markdown
ContributorAuthor

Should be signed now, apologies @VaguelySerious 🙏

Signed-off-by: Joey Hotz <joeyhotz1@gmail.com>
@joeyhotz
joeyhotzforce-pushed the fix/postgres-optional-boot-recovery branch from ec2dfc3 to ac36252CompareAugust 21, 2026 04:51
@VaguelySerious

Copy link
Copy Markdown
Member

@joeyhotz

image

Sadly it seems not

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

@joeyhotz@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('^' + ".*" + ' feat(world-postgres): make startup recovery optional by joeyhotz · Pull Request #3690 · vercel/workflow · GitHub
Skip to content

feat(world-postgres): make startup recovery optional - #3690

Open
joeyhotz wants to merge 1 commit into
vercel:mainfrom
joeyhotz:fix/postgres-optional-boot-recovery
Open

feat(world-postgres): make startup recovery optional#3690
joeyhotz wants to merge 1 commit into
vercel:mainfrom
joeyhotz:fix/postgres-optional-boot-recovery

Conversation

@joeyhotz

@joeyhotzjoeyhotz commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Description

world-postgres currently scans and re-enqueues every pending/running run whenever a process calls start(). In a horizontally scaled deployment, an ordinary replica start is not evidence that the fleet failed, so this can create a burst of redundant replay work.

Add recoverActiveRuns to PostgresWorldConfig, matching the existing Local World option. It defaults to true. With false, start() still starts Graphile Worker and consumes durable/new jobs, but skips the broad storage scan.

This is an operational escape hatch, not leader election or exactly-once machinery. Setting it to false everywhere removes automatic startup repair for an active run with no runnable job, so recovery must be handled separately.

Related work: #2544 proposes a broader start({ onRestart }) control; #3162 makes boot recovery more selective and deduplicates its jobs; #3138 tracks owner-aware/single-flight recovery. This change is the smaller world-postgres construction-time escape hatch. If #2544 lands, precedence between the two controls should be defined deliberately.

Docs Preview

Pending Vercel Labs authorization for the external fork. Changed route: /v5/docs/configuration/worlds#recoveractiveruns.

How did you test your changes?

  • Added a regression test with an active stored run and recoverActiveRuns: false.
  • The test proves Graphile Worker starts while storage listing and recovery enqueueing do not run.
  • pnpm exec vitest run src/reenqueue.test.ts — 13/13 passed.
  • pnpm typecheck and pnpm build passed for @workflow/world-postgres.

PR Checklist - Required to merge

  • 📦 Added a minor changeset for @workflow/world-postgres
  • 🔒 DCO sign-off is present
  • 📝 Pinged @vercel/workflow after the PR and core checks were verified

@changeset-bot

changeset-botBot commented Aug 20, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: ac36252

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
@workflow/world-postgresMinor

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

@vercel

vercelBot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

@joeyhotz is attempting to deploy a commit to the Vercel Labs Team on Vercel.

A member of the Team first needs to authorize it.

@joeyhotz
joeyhotz marked this pull request as ready for review August 20, 2026 04:49
@joeyhotz
joeyhotz requested review from a team, fantix and msullivan as code ownersAugust 20, 2026 04:49
@joeyhotz

joeyhotz commented Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

Pinging @vercel/workflow.

@joeyhotz
joeyhotzforce-pushed the fix/postgres-optional-boot-recovery branch from 3a3e72a to dd36097CompareAugust 20, 2026 06:17
@VaguelySerious

Copy link
Copy Markdown
Member

@joeyhotz Commits must be signed for me to be able to merge this

@joeyhotz
joeyhotzforce-pushed the fix/postgres-optional-boot-recovery branch from dd36097 to ec2dfc3CompareAugust 21, 2026 04:49
@joeyhotz

Copy link
Copy Markdown
ContributorAuthor

Should be signed now, apologies @VaguelySerious 🙏

Signed-off-by: Joey Hotz <joeyhotz1@gmail.com>
@joeyhotz
joeyhotzforce-pushed the fix/postgres-optional-boot-recovery branch from ec2dfc3 to ac36252CompareAugust 21, 2026 04:51
@VaguelySerious

Copy link
Copy Markdown
Member

@joeyhotz

image

Sadly it seems not

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

@joeyhotz@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('^' + ".*" + ' feat(world-postgres): make startup recovery optional by joeyhotz · Pull Request #3690 · vercel/workflow · GitHub
Skip to content

feat(world-postgres): make startup recovery optional - #3690

Open
joeyhotz wants to merge 1 commit into
vercel:mainfrom
joeyhotz:fix/postgres-optional-boot-recovery
Open

feat(world-postgres): make startup recovery optional#3690
joeyhotz wants to merge 1 commit into
vercel:mainfrom
joeyhotz:fix/postgres-optional-boot-recovery

Conversation

@joeyhotz

@joeyhotzjoeyhotz commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Description

world-postgres currently scans and re-enqueues every pending/running run whenever a process calls start(). In a horizontally scaled deployment, an ordinary replica start is not evidence that the fleet failed, so this can create a burst of redundant replay work.

Add recoverActiveRuns to PostgresWorldConfig, matching the existing Local World option. It defaults to true. With false, start() still starts Graphile Worker and consumes durable/new jobs, but skips the broad storage scan.

This is an operational escape hatch, not leader election or exactly-once machinery. Setting it to false everywhere removes automatic startup repair for an active run with no runnable job, so recovery must be handled separately.

Related work: #2544 proposes a broader start({ onRestart }) control; #3162 makes boot recovery more selective and deduplicates its jobs; #3138 tracks owner-aware/single-flight recovery. This change is the smaller world-postgres construction-time escape hatch. If #2544 lands, precedence between the two controls should be defined deliberately.

Docs Preview

Pending Vercel Labs authorization for the external fork. Changed route: /v5/docs/configuration/worlds#recoveractiveruns.

How did you test your changes?

  • Added a regression test with an active stored run and recoverActiveRuns: false.
  • The test proves Graphile Worker starts while storage listing and recovery enqueueing do not run.
  • pnpm exec vitest run src/reenqueue.test.ts — 13/13 passed.
  • pnpm typecheck and pnpm build passed for @workflow/world-postgres.

PR Checklist - Required to merge

  • 📦 Added a minor changeset for @workflow/world-postgres
  • 🔒 DCO sign-off is present
  • 📝 Pinged @vercel/workflow after the PR and core checks were verified

@changeset-bot

changeset-botBot commented Aug 20, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: ac36252

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
@workflow/world-postgresMinor

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

@vercel

vercelBot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

@joeyhotz is attempting to deploy a commit to the Vercel Labs Team on Vercel.

A member of the Team first needs to authorize it.

@joeyhotz
joeyhotz marked this pull request as ready for review August 20, 2026 04:49
@joeyhotz
joeyhotz requested review from a team, fantix and msullivan as code ownersAugust 20, 2026 04:49
@joeyhotz

joeyhotz commented Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

Pinging @vercel/workflow.

@joeyhotz
joeyhotzforce-pushed the fix/postgres-optional-boot-recovery branch from 3a3e72a to dd36097CompareAugust 20, 2026 06:17
@VaguelySerious

Copy link
Copy Markdown
Member

@joeyhotz Commits must be signed for me to be able to merge this

@joeyhotz
joeyhotzforce-pushed the fix/postgres-optional-boot-recovery branch from dd36097 to ec2dfc3CompareAugust 21, 2026 04:49
@joeyhotz

Copy link
Copy Markdown
ContributorAuthor

Should be signed now, apologies @VaguelySerious 🙏

Signed-off-by: Joey Hotz <joeyhotz1@gmail.com>
@joeyhotz
joeyhotzforce-pushed the fix/postgres-optional-boot-recovery branch from ec2dfc3 to ac36252CompareAugust 21, 2026 04:51
@VaguelySerious

Copy link
Copy Markdown
Member

@joeyhotz

image

Sadly it seems not

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

@joeyhotz@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" + ' feat(world-postgres): make startup recovery optional by joeyhotz · Pull Request #3690 · vercel/workflow · GitHub
Skip to content

feat(world-postgres): make startup recovery optional - #3690

Open
joeyhotz wants to merge 1 commit into
vercel:mainfrom
joeyhotz:fix/postgres-optional-boot-recovery
Open

feat(world-postgres): make startup recovery optional#3690
joeyhotz wants to merge 1 commit into
vercel:mainfrom
joeyhotz:fix/postgres-optional-boot-recovery

Conversation

@joeyhotz

@joeyhotzjoeyhotz commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Description

world-postgres currently scans and re-enqueues every pending/running run whenever a process calls start(). In a horizontally scaled deployment, an ordinary replica start is not evidence that the fleet failed, so this can create a burst of redundant replay work.

Add recoverActiveRuns to PostgresWorldConfig, matching the existing Local World option. It defaults to true. With false, start() still starts Graphile Worker and consumes durable/new jobs, but skips the broad storage scan.

This is an operational escape hatch, not leader election or exactly-once machinery. Setting it to false everywhere removes automatic startup repair for an active run with no runnable job, so recovery must be handled separately.

Related work: #2544 proposes a broader start({ onRestart }) control; #3162 makes boot recovery more selective and deduplicates its jobs; #3138 tracks owner-aware/single-flight recovery. This change is the smaller world-postgres construction-time escape hatch. If #2544 lands, precedence between the two controls should be defined deliberately.

Docs Preview

Pending Vercel Labs authorization for the external fork. Changed route: /v5/docs/configuration/worlds#recoveractiveruns.

How did you test your changes?

  • Added a regression test with an active stored run and recoverActiveRuns: false.
  • The test proves Graphile Worker starts while storage listing and recovery enqueueing do not run.
  • pnpm exec vitest run src/reenqueue.test.ts — 13/13 passed.
  • pnpm typecheck and pnpm build passed for @workflow/world-postgres.

PR Checklist - Required to merge

  • 📦 Added a minor changeset for @workflow/world-postgres
  • 🔒 DCO sign-off is present
  • 📝 Pinged @vercel/workflow after the PR and core checks were verified

@changeset-bot

changeset-botBot commented Aug 20, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: ac36252

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
@workflow/world-postgresMinor

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

@vercel

vercelBot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

@joeyhotz is attempting to deploy a commit to the Vercel Labs Team on Vercel.

A member of the Team first needs to authorize it.

@joeyhotz
joeyhotz marked this pull request as ready for review August 20, 2026 04:49
@joeyhotz
joeyhotz requested review from a team, fantix and msullivan as code ownersAugust 20, 2026 04:49
@joeyhotz

joeyhotz commented Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

Pinging @vercel/workflow.

@joeyhotz
joeyhotzforce-pushed the fix/postgres-optional-boot-recovery branch from 3a3e72a to dd36097CompareAugust 20, 2026 06:17
@VaguelySerious

Copy link
Copy Markdown
Member

@joeyhotz Commits must be signed for me to be able to merge this

@joeyhotz
joeyhotzforce-pushed the fix/postgres-optional-boot-recovery branch from dd36097 to ec2dfc3CompareAugust 21, 2026 04:49
@joeyhotz

Copy link
Copy Markdown
ContributorAuthor

Should be signed now, apologies @VaguelySerious 🙏

Signed-off-by: Joey Hotz <joeyhotz1@gmail.com>
@joeyhotz
joeyhotzforce-pushed the fix/postgres-optional-boot-recovery branch from ec2dfc3 to ac36252CompareAugust 21, 2026 04:51
@VaguelySerious

Copy link
Copy Markdown
Member

@joeyhotz

image

Sadly it seems not

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

@joeyhotz@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('^' + ".*" + ' feat(world-postgres): make startup recovery optional by joeyhotz · Pull Request #3690 · vercel/workflow · GitHub
Skip to content

feat(world-postgres): make startup recovery optional - #3690

Open
joeyhotz wants to merge 1 commit into
vercel:mainfrom
joeyhotz:fix/postgres-optional-boot-recovery
Open

feat(world-postgres): make startup recovery optional#3690
joeyhotz wants to merge 1 commit into
vercel:mainfrom
joeyhotz:fix/postgres-optional-boot-recovery

Conversation

@joeyhotz

@joeyhotzjoeyhotz commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Description

world-postgres currently scans and re-enqueues every pending/running run whenever a process calls start(). In a horizontally scaled deployment, an ordinary replica start is not evidence that the fleet failed, so this can create a burst of redundant replay work.

Add recoverActiveRuns to PostgresWorldConfig, matching the existing Local World option. It defaults to true. With false, start() still starts Graphile Worker and consumes durable/new jobs, but skips the broad storage scan.

This is an operational escape hatch, not leader election or exactly-once machinery. Setting it to false everywhere removes automatic startup repair for an active run with no runnable job, so recovery must be handled separately.

Related work: #2544 proposes a broader start({ onRestart }) control; #3162 makes boot recovery more selective and deduplicates its jobs; #3138 tracks owner-aware/single-flight recovery. This change is the smaller world-postgres construction-time escape hatch. If #2544 lands, precedence between the two controls should be defined deliberately.

Docs Preview

Pending Vercel Labs authorization for the external fork. Changed route: /v5/docs/configuration/worlds#recoveractiveruns.

How did you test your changes?

  • Added a regression test with an active stored run and recoverActiveRuns: false.
  • The test proves Graphile Worker starts while storage listing and recovery enqueueing do not run.
  • pnpm exec vitest run src/reenqueue.test.ts — 13/13 passed.
  • pnpm typecheck and pnpm build passed for @workflow/world-postgres.

PR Checklist - Required to merge

  • 📦 Added a minor changeset for @workflow/world-postgres
  • 🔒 DCO sign-off is present
  • 📝 Pinged @vercel/workflow after the PR and core checks were verified

@changeset-bot

changeset-botBot commented Aug 20, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: ac36252

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
@workflow/world-postgresMinor

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

@vercel

vercelBot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

@joeyhotz is attempting to deploy a commit to the Vercel Labs Team on Vercel.

A member of the Team first needs to authorize it.

@joeyhotz
joeyhotz marked this pull request as ready for review August 20, 2026 04:49
@joeyhotz
joeyhotz requested review from a team, fantix and msullivan as code ownersAugust 20, 2026 04:49
@joeyhotz

joeyhotz commented Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

Pinging @vercel/workflow.

@joeyhotz
joeyhotzforce-pushed the fix/postgres-optional-boot-recovery branch from 3a3e72a to dd36097CompareAugust 20, 2026 06:17
@VaguelySerious

Copy link
Copy Markdown
Member

@joeyhotz Commits must be signed for me to be able to merge this

@joeyhotz
joeyhotzforce-pushed the fix/postgres-optional-boot-recovery branch from dd36097 to ec2dfc3CompareAugust 21, 2026 04:49
@joeyhotz

Copy link
Copy Markdown
ContributorAuthor

Should be signed now, apologies @VaguelySerious 🙏

Signed-off-by: Joey Hotz <joeyhotz1@gmail.com>
@joeyhotz
joeyhotzforce-pushed the fix/postgres-optional-boot-recovery branch from ec2dfc3 to ac36252CompareAugust 21, 2026 04:51
@VaguelySerious

Copy link
Copy Markdown
Member

@joeyhotz

image

Sadly it seems not

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

@joeyhotz@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('^' + ".*" + ' feat(world-postgres): make startup recovery optional by joeyhotz · Pull Request #3690 · vercel/workflow · GitHub
Skip to content

feat(world-postgres): make startup recovery optional - #3690

Open
joeyhotz wants to merge 1 commit into
vercel:mainfrom
joeyhotz:fix/postgres-optional-boot-recovery
Open

feat(world-postgres): make startup recovery optional#3690
joeyhotz wants to merge 1 commit into
vercel:mainfrom
joeyhotz:fix/postgres-optional-boot-recovery

Conversation

@joeyhotz

@joeyhotzjoeyhotz commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Description

world-postgres currently scans and re-enqueues every pending/running run whenever a process calls start(). In a horizontally scaled deployment, an ordinary replica start is not evidence that the fleet failed, so this can create a burst of redundant replay work.

Add recoverActiveRuns to PostgresWorldConfig, matching the existing Local World option. It defaults to true. With false, start() still starts Graphile Worker and consumes durable/new jobs, but skips the broad storage scan.

This is an operational escape hatch, not leader election or exactly-once machinery. Setting it to false everywhere removes automatic startup repair for an active run with no runnable job, so recovery must be handled separately.

Related work: #2544 proposes a broader start({ onRestart }) control; #3162 makes boot recovery more selective and deduplicates its jobs; #3138 tracks owner-aware/single-flight recovery. This change is the smaller world-postgres construction-time escape hatch. If #2544 lands, precedence between the two controls should be defined deliberately.

Docs Preview

Pending Vercel Labs authorization for the external fork. Changed route: /v5/docs/configuration/worlds#recoveractiveruns.

How did you test your changes?

  • Added a regression test with an active stored run and recoverActiveRuns: false.
  • The test proves Graphile Worker starts while storage listing and recovery enqueueing do not run.
  • pnpm exec vitest run src/reenqueue.test.ts — 13/13 passed.
  • pnpm typecheck and pnpm build passed for @workflow/world-postgres.

PR Checklist - Required to merge

  • 📦 Added a minor changeset for @workflow/world-postgres
  • 🔒 DCO sign-off is present
  • 📝 Pinged @vercel/workflow after the PR and core checks were verified

@changeset-bot

changeset-botBot commented Aug 20, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: ac36252

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
@workflow/world-postgresMinor

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

@vercel

vercelBot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

@joeyhotz is attempting to deploy a commit to the Vercel Labs Team on Vercel.

A member of the Team first needs to authorize it.

@joeyhotz
joeyhotz marked this pull request as ready for review August 20, 2026 04:49
@joeyhotz
joeyhotz requested review from a team, fantix and msullivan as code ownersAugust 20, 2026 04:49
@joeyhotz

joeyhotz commented Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

Pinging @vercel/workflow.

@joeyhotz
joeyhotzforce-pushed the fix/postgres-optional-boot-recovery branch from 3a3e72a to dd36097CompareAugust 20, 2026 06:17
@VaguelySerious

Copy link
Copy Markdown
Member

@joeyhotz Commits must be signed for me to be able to merge this

@joeyhotz
joeyhotzforce-pushed the fix/postgres-optional-boot-recovery branch from dd36097 to ec2dfc3CompareAugust 21, 2026 04:49
@joeyhotz

Copy link
Copy Markdown
ContributorAuthor

Should be signed now, apologies @VaguelySerious 🙏

Signed-off-by: Joey Hotz <joeyhotz1@gmail.com>
@joeyhotz
joeyhotzforce-pushed the fix/postgres-optional-boot-recovery branch from ec2dfc3 to ac36252CompareAugust 21, 2026 04:51
@VaguelySerious

Copy link
Copy Markdown
Member

@joeyhotz

image

Sadly it seems not

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

@joeyhotz@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); } })(); })(); feat(world-postgres): make startup recovery optional by joeyhotz · Pull Request #3690 · vercel/workflow · GitHub
Skip to content

feat(world-postgres): make startup recovery optional - #3690

Open
joeyhotz wants to merge 1 commit into
vercel:mainfrom
joeyhotz:fix/postgres-optional-boot-recovery
Open

feat(world-postgres): make startup recovery optional#3690
joeyhotz wants to merge 1 commit into
vercel:mainfrom
joeyhotz:fix/postgres-optional-boot-recovery

Conversation

@joeyhotz

@joeyhotzjoeyhotz commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Description

world-postgres currently scans and re-enqueues every pending/running run whenever a process calls start(). In a horizontally scaled deployment, an ordinary replica start is not evidence that the fleet failed, so this can create a burst of redundant replay work.

Add recoverActiveRuns to PostgresWorldConfig, matching the existing Local World option. It defaults to true. With false, start() still starts Graphile Worker and consumes durable/new jobs, but skips the broad storage scan.

This is an operational escape hatch, not leader election or exactly-once machinery. Setting it to false everywhere removes automatic startup repair for an active run with no runnable job, so recovery must be handled separately.

Related work: #2544 proposes a broader start({ onRestart }) control; #3162 makes boot recovery more selective and deduplicates its jobs; #3138 tracks owner-aware/single-flight recovery. This change is the smaller world-postgres construction-time escape hatch. If #2544 lands, precedence between the two controls should be defined deliberately.

Docs Preview

Pending Vercel Labs authorization for the external fork. Changed route: /v5/docs/configuration/worlds#recoveractiveruns.

How did you test your changes?

  • Added a regression test with an active stored run and recoverActiveRuns: false.
  • The test proves Graphile Worker starts while storage listing and recovery enqueueing do not run.
  • pnpm exec vitest run src/reenqueue.test.ts — 13/13 passed.
  • pnpm typecheck and pnpm build passed for @workflow/world-postgres.

PR Checklist - Required to merge

  • 📦 Added a minor changeset for @workflow/world-postgres
  • 🔒 DCO sign-off is present
  • 📝 Pinged @vercel/workflow after the PR and core checks were verified

@changeset-bot

changeset-botBot commented Aug 20, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: ac36252

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
@workflow/world-postgresMinor

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

@vercel

vercelBot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

@joeyhotz is attempting to deploy a commit to the Vercel Labs Team on Vercel.

A member of the Team first needs to authorize it.

@joeyhotz
joeyhotz marked this pull request as ready for review August 20, 2026 04:49
@joeyhotz
joeyhotz requested review from a team, fantix and msullivan as code ownersAugust 20, 2026 04:49
@joeyhotz

joeyhotz commented Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

Pinging @vercel/workflow.

@joeyhotz
joeyhotzforce-pushed the fix/postgres-optional-boot-recovery branch from 3a3e72a to dd36097CompareAugust 20, 2026 06:17
@VaguelySerious

Copy link
Copy Markdown
Member

@joeyhotz Commits must be signed for me to be able to merge this

@joeyhotz
joeyhotzforce-pushed the fix/postgres-optional-boot-recovery branch from dd36097 to ec2dfc3CompareAugust 21, 2026 04:49
@joeyhotz

Copy link
Copy Markdown
ContributorAuthor

Should be signed now, apologies @VaguelySerious 🙏

Signed-off-by: Joey Hotz <joeyhotz1@gmail.com>
@joeyhotz
joeyhotzforce-pushed the fix/postgres-optional-boot-recovery branch from ec2dfc3 to ac36252CompareAugust 21, 2026 04:51
@VaguelySerious

Copy link
Copy Markdown
Member

@joeyhotz

image

Sadly it seems not

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

@joeyhotz@VaguelySerious