Skip to content

fix(builders): enable directive discovery in dot-prefixed files and directories#1228

Merged
TooTallNate merged 6 commits into
mainfrom
fix/dot-file-directive-discovery
Mar 2, 2026
Merged

fix(builders): enable directive discovery in dot-prefixed files and directories#1228
TooTallNate merged 6 commits into
mainfrom
fix/dot-file-directive-discovery

Conversation

@TooTallNate
Copy link
Copy Markdown
Member

@TooTallNate TooTallNate commented Feb 28, 2026

Summary

  • Enables getInputFiles() to discover files with "use step" / "use workflow" directives inside dot-prefixed files and directories (e.g. .config/step.ts, .hidden-workflow.ts)
  • Switches from absolute glob patterns to relative patterns with per-directory cwd and dot: true, working around a tinyglobby quirk where ** in ignore patterns does not match dot-prefixed segments when using absolute patterns
  • The explicit ignore list (.git, .next, .vercel, etc.) continues to work correctly

Test Plan

Added get-input-files.test.ts with 4 tests covering:

  • Discovery of files inside dot-prefixed directories
  • Discovery of dot-prefixed files
  • Exclusion of explicitly ignored dot-directories (.git, .next, .vercel, .svelte-kit, .workflow-data, .well-known/workflow, node_modules)
  • Support for all file extensions in dot-directories

Closes #1227 (duplicate)

…irectories

The glob-based file scanning in getInputFiles() was using tinyglobby's
default behavior which skips dot-prefixed files/directories. This prevented
discovering files with 'use step' / 'use workflow' directives inside paths
like .config/step.ts or .hidden-workflow.ts.

Switch to relative glob patterns with per-directory cwd and dot: true to
ensure dot-files are scanned while still respecting the explicit ignore
list (.git, .next, .vercel, etc.).
Copilot AI review requested due to automatic review settings February 28, 2026 20:11
@TooTallNate TooTallNate requested a review from a team as a code owner February 28, 2026 20:11
@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented Feb 28, 2026

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Feb 28, 2026

🦋 Changeset detected

Latest commit: 4b15310

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

This PR includes changesets to release 14 packages
Name Type
@workflow/builders Patch
@workflow/astro Patch
@workflow/cli Patch
@workflow/nest Patch
@workflow/next Patch
@workflow/nitro Patch
@workflow/rollup Patch
@workflow/sveltekit Patch
@workflow/vite Patch
workflow Patch
@workflow/world-testing Patch
@workflow/nuxt Patch
@workflow/core Patch
@workflow/web-shared Patch

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Feb 28, 2026

📊 Benchmark Results

📈 Comparing against baseline from main branch. Green 🟢 = faster, Red 🔺 = slower.

workflow with no steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Express 0.032s (-11.4% 🟢) 1.005s (~) 0.973s 10 1.00x
💻 Local Nitro 0.033s (+32.1% 🔺) 1.005s (~) 0.973s 10 1.02x
🐘 Postgres Nitro 0.039s (-21.1% 🟢) 1.011s (~) 0.972s 10 1.24x
💻 Local Next.js (Turbopack) 0.044s 1.005s 0.960s 10 1.40x
🌐 Redis Next.js (Turbopack) 0.046s 1.005s 0.959s 10 1.44x
🐘 Postgres Next.js (Turbopack) 0.047s 1.010s 0.962s 10 1.49x
🐘 Postgres Express 0.067s (+16.0% 🔺) 1.019s (~) 0.952s 10 2.10x
🌐 MongoDB Next.js (Turbopack) 0.084s 1.007s 0.923s 10 2.65x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 0.463s (+2.1%) 2.020s (~) 1.556s 10 1.00x
▲ Vercel Express 0.492s (+3.6%) 1.990s (-3.6%) 1.498s 10 1.06x
▲ Vercel Next.js (Turbopack) 0.558s (+12.8% 🔺) 1.884s (-20.6% 🟢) 1.327s 10 1.20x

🔍 Observability: Nitro | Express | Next.js (Turbopack)

workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 1.091s (-3.3%) 2.011s (~) 0.920s 10 1.00x
🌐 Redis Next.js (Turbopack) 1.100s 2.006s 0.907s 10 1.01x
💻 Local Express 1.103s (-0.5%) 2.004s (~) 0.901s 10 1.01x
💻 Local Nitro 1.108s (+3.3%) 2.005s (~) 0.897s 10 1.02x
💻 Local Next.js (Turbopack) 1.110s 2.006s 0.895s 10 1.02x
🐘 Postgres Next.js (Turbopack) 1.117s 2.010s 0.893s 10 1.02x
🐘 Postgres Express 1.134s (+0.7%) 2.012s (~) 0.878s 10 1.04x
🌐 MongoDB Next.js (Turbopack) 1.312s 2.008s 0.696s 10 1.20x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 1.990s (-3.7%) 3.520s (+8.9% 🔺) 1.531s 10 1.00x
▲ Vercel Nitro 2.035s (-5.2% 🟢) 3.246s (+0.6%) 1.211s 10 1.02x
▲ Vercel Next.js (Turbopack) 2.160s (-4.8%) 3.466s (+2.0%) 1.306s 10 1.09x

🔍 Observability: Express | Nitro | Next.js (Turbopack)

workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 10.647s (-1.9%) 11.038s (~) 0.391s 3 1.00x
🌐 Redis Next.js (Turbopack) 10.705s 11.023s 0.318s 3 1.01x
💻 Local Next.js (Turbopack) 10.768s 11.023s 0.255s 3 1.01x
🐘 Postgres Next.js (Turbopack) 10.830s 11.041s 0.211s 3 1.02x
💻 Local Express 10.835s (~) 11.022s (~) 0.188s 3 1.02x
💻 Local Nitro 10.843s (+2.7%) 11.022s (~) 0.179s 3 1.02x
🐘 Postgres Express 10.897s (~) 11.043s (~) 0.147s 3 1.02x
🌐 MongoDB Next.js (Turbopack) 12.289s 13.022s 0.733s 3 1.15x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 16.709s (-7.4% 🟢) 17.855s (-6.8% 🟢) 1.145s 2 1.00x
▲ Vercel Nitro 16.727s (-4.4%) 20.099s (+8.0% 🔺) 3.373s 2 1.00x
▲ Vercel Express 17.148s (~) 18.508s (+2.3%) 1.361s 2 1.03x

🔍 Observability: Next.js (Turbopack) | Nitro | Express

workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 26.726s (-1.9%) 27.057s (-3.6%) 0.331s 3 1.00x
🌐 Redis Next.js (Turbopack) 26.912s 27.053s 0.140s 3 1.01x
🐘 Postgres Next.js (Turbopack) 27.128s 28.057s 0.929s 3 1.02x
💻 Local Next.js (Turbopack) 27.309s 28.053s 0.744s 3 1.02x
🐘 Postgres Express 27.323s (~) 28.067s (~) 0.745s 3 1.02x
💻 Local Express 27.527s (~) 28.052s (~) 0.525s 3 1.03x
💻 Local Nitro 27.566s (+2.9%) 28.055s (+3.7%) 0.489s 3 1.03x
🌐 MongoDB Next.js (Turbopack) 30.601s 31.045s 0.444s 2 1.14x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 44.817s (~) 46.407s (+1.6%) 1.590s 2 1.00x
▲ Vercel Express 44.950s (-3.2%) 46.259s (-2.5%) 1.309s 2 1.00x
▲ Vercel Next.js (Turbopack) 46.838s (+2.3%) 48.075s (+2.8%) 1.237s 2 1.05x

🔍 Observability: Nitro | Express | Next.js (Turbopack)

workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 54.081s (-2.2%) 54.590s (-2.7%) 0.509s 2 1.00x
🌐 Redis Next.js (Turbopack) 54.326s 55.099s 0.773s 2 1.00x
🐘 Postgres Next.js (Turbopack) 54.862s 55.089s 0.227s 2 1.01x
🐘 Postgres Express 55.077s (~) 55.608s (~) 0.531s 2 1.02x
💻 Local Next.js (Turbopack) 56.865s 57.107s 0.242s 2 1.05x
💻 Local Express 57.321s (~) 58.101s (~) 0.780s 2 1.06x
💻 Local Nitro 57.488s (+3.3%) 58.107s (+3.6%) 0.619s 2 1.06x
🌐 MongoDB Next.js (Turbopack) 61.215s 62.092s 0.877s 2 1.13x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 101.496s (-0.6%) 102.811s (~) 1.315s 1 1.00x
▲ Vercel Express 101.591s (+1.3%) 102.410s (+1.3%) 0.819s 1 1.00x
▲ Vercel Next.js (Turbopack) 106.852s (+9.1% 🔺) 107.583s (+9.0% 🔺) 0.731s 1 1.05x

🔍 Observability: Nitro | Express | Next.js (Turbopack)

Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 1.248s 2.006s 0.758s 15 1.00x
🐘 Postgres Nitro 1.304s (-4.6%) 2.010s (~) 0.707s 15 1.04x
🐘 Postgres Express 1.369s (~) 2.011s (~) 0.642s 15 1.10x
🐘 Postgres Next.js (Turbopack) 1.372s 2.010s 0.638s 15 1.10x
💻 Local Express 1.398s (~) 2.005s (~) 0.607s 15 1.12x
💻 Local Next.js (Turbopack) 1.417s 2.005s 0.588s 15 1.14x
💻 Local Nitro 1.430s (+4.7%) 2.005s (~) 0.575s 15 1.15x
🌐 MongoDB Next.js (Turbopack) 2.139s 3.008s 0.869s 10 1.71x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.245s (+1.9%) 3.203s (~) 0.958s 10 1.00x
▲ Vercel Express 2.269s (~) 3.230s (-4.3%) 0.961s 10 1.01x
▲ Vercel Next.js (Turbopack) 2.991s (+17.8% 🔺) 3.861s (+3.7%) 0.870s 8 1.33x

🔍 Observability: Nitro | Express | Next.js (Turbopack)

Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 1.683s (-19.4% 🟢) 2.155s (-19.6% 🟢) 0.471s 14 1.00x
🐘 Postgres Express 1.972s (+1.1%) 2.514s (+1.4%) 0.542s 12 1.17x
🐘 Postgres Next.js (Turbopack) 2.059s 2.512s 0.453s 12 1.22x
💻 Local Next.js (Turbopack) 2.463s 3.008s 0.544s 10 1.46x
🌐 Redis Next.js (Turbopack) 2.496s 3.008s 0.512s 10 1.48x
💻 Local Nitro 2.637s (+13.6% 🔺) 3.007s (+3.2%) 0.370s 10 1.57x
💻 Local Express 2.642s (~) 3.008s (~) 0.366s 10 1.57x
🌐 MongoDB Next.js (Turbopack) 4.719s 5.175s 0.456s 6 2.80x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.624s (+1.5%) 4.038s (+5.4% 🔺) 1.415s 8 1.00x
▲ Vercel Next.js (Turbopack) 2.748s (-3.3%) 4.088s (+5.6% 🔺) 1.340s 8 1.05x
▲ Vercel Express 3.567s (+23.6% 🔺) 4.514s (+19.3% 🔺) 0.947s 7 1.36x

🔍 Observability: Nitro | Next.js (Turbopack) | Express

Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 2.881s (-31.1% 🟢) 3.889s (-22.6% 🟢) 1.008s 8 1.00x
🐘 Postgres Express 3.558s (-12.6% 🟢) 4.313s (-11.8% 🟢) 0.755s 7 1.24x
🐘 Postgres Next.js (Turbopack) 3.687s 4.449s 0.763s 7 1.28x
🌐 Redis Next.js (Turbopack) 4.052s 4.581s 0.528s 7 1.41x
💻 Local Next.js (Turbopack) 6.480s 7.015s 0.535s 5 2.25x
💻 Local Express 7.571s (-0.7%) 8.020s (~) 0.449s 4 2.63x
💻 Local Nitro 7.875s (+22.5% 🔺) 8.268s (+17.8% 🔺) 0.393s 4 2.73x
🌐 MongoDB Next.js (Turbopack) 9.911s 10.349s 0.438s 3 3.44x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.922s (-19.2% 🟢) 3.866s (-22.2% 🟢) 0.944s 8 1.00x
▲ Vercel Express 2.982s (-23.2% 🟢) 3.825s (-19.0% 🟢) 0.843s 8 1.02x
▲ Vercel Next.js (Turbopack) 3.111s (-29.6% 🟢) 4.449s (-13.4% 🟢) 1.338s 7 1.06x

🔍 Observability: Nitro | Express | Next.js (Turbopack)

Promise.race with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🌐 Redis 🥇 Next.js (Turbopack) 1.290s 2.006s 0.716s 15 1.00x
🐘 Postgres Nitro 1.304s (-7.8% 🟢) 2.010s (~) 0.706s 15 1.01x
🐘 Postgres Next.js (Turbopack) 1.369s 2.009s 0.640s 15 1.06x
🐘 Postgres Express 1.404s (~) 2.011s (~) 0.607s 15 1.09x
💻 Local Next.js (Turbopack) 1.406s 2.005s 0.599s 15 1.09x
💻 Local Express 1.440s (-1.4%) 2.004s (~) 0.565s 15 1.12x
💻 Local Nitro 1.467s (+6.6% 🔺) 2.005s (~) 0.538s 15 1.14x
🌐 MongoDB Next.js (Turbopack) 2.158s 3.007s 0.849s 10 1.67x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.311s (+1.8%) 3.220s (-1.6%) 0.908s 10 1.00x
▲ Vercel Express 2.330s (-20.9% 🟢) 3.335s (-14.2% 🟢) 1.006s 10 1.01x
▲ Vercel Nitro 2.398s (+4.7%) 3.913s (+14.6% 🔺) 1.515s 9 1.04x

🔍 Observability: Next.js (Turbopack) | Express | Nitro

Promise.race with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 1.859s (-9.1% 🟢) 2.227s (-16.9% 🟢) 0.369s 14 1.00x
🐘 Postgres Next.js (Turbopack) 1.934s 2.474s 0.539s 13 1.04x
🐘 Postgres Express 2.030s (-2.1%) 2.680s (+3.1%) 0.651s 12 1.09x
🌐 Redis Next.js (Turbopack) 2.495s 3.008s 0.513s 10 1.34x
💻 Local Next.js (Turbopack) 2.546s 3.008s 0.461s 10 1.37x
💻 Local Express 2.666s (-5.9% 🟢) 3.007s (~) 0.342s 10 1.43x
💻 Local Nitro 2.810s (+15.2% 🔺) 3.009s (~) 0.200s 10 1.51x
🌐 MongoDB Next.js (Turbopack) 4.755s 5.177s 0.422s 6 2.56x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Nitro 2.337s (-11.5% 🟢) 3.311s (-7.3% 🟢) 0.974s 10 1.00x
▲ Vercel Next.js (Turbopack) 2.456s (-11.7% 🟢) 3.458s (-11.0% 🟢) 1.002s 9 1.05x
▲ Vercel Express 2.607s (-26.2% 🟢) 3.388s (-25.1% 🟢) 0.781s 9 1.12x

🔍 Observability: Nitro | Next.js (Turbopack) | Express

Promise.race with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 2.909s (-23.5% 🟢) 3.572s (-19.8% 🟢) 0.663s 9 1.00x
🐘 Postgres Next.js (Turbopack) 3.655s 4.591s 0.936s 7 1.26x
🌐 Redis Next.js (Turbopack) 4.014s 4.438s 0.424s 7 1.38x
🐘 Postgres Express 4.092s (+12.8% 🔺) 5.028s (+16.7% 🔺) 0.935s 6 1.41x
💻 Local Next.js (Turbopack) 6.931s 7.419s 0.488s 5 2.38x
💻 Local Express 7.784s (-4.4%) 8.021s (-8.5% 🟢) 0.237s 4 2.68x
💻 Local Nitro 8.126s (+14.6% 🔺) 8.776s (+13.0% 🔺) 0.650s 4 2.79x
🌐 MongoDB Next.js (Turbopack) 9.916s 10.683s 0.767s 3 3.41x

▲ Production (Vercel)

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Next.js (Turbopack) 2.936s (-0.8%) 4.121s (-1.3%) 1.185s 8 1.00x
▲ Vercel Express 3.147s (-7.3% 🟢) 4.150s (-9.3% 🟢) 1.003s 8 1.07x
▲ Vercel Nitro 3.171s (+4.8%) 4.093s (+6.6% 🔺) 0.921s 8 1.08x

🔍 Observability: Next.js (Turbopack) | Express | Nitro

Stream Benchmarks (includes TTFB metrics)
workflow with stream

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 0.138s (-28.6% 🟢) 0.999s (~) 0.002s (+14.3% 🔺) 1.011s (~) 0.873s 10 1.00x
🌐 Redis Next.js (Turbopack) 0.151s 1.000s 0.001s 1.007s 0.856s 10 1.09x
💻 Local Next.js (Turbopack) 0.152s 1.001s 0.011s 1.017s 0.865s 10 1.10x
🐘 Postgres Next.js (Turbopack) 0.172s 1.000s 0.001s 1.011s 0.839s 10 1.25x
💻 Local Express 0.175s (-1.4%) 1.002s (~) 0.011s (-6.0% 🟢) 1.016s (~) 0.842s 10 1.27x
💻 Local Nitro 0.180s (+59.3% 🔺) 1.002s (~) 0.012s (+26.1% 🔺) 1.017s (~) 0.837s 10 1.30x
🐘 Postgres Express 0.200s (-1.3%) 0.997s (~) 0.001s (-14.3% 🟢) 1.012s (~) 0.812s 10 1.45x
🌐 MongoDB Next.js (Turbopack) 0.492s 0.955s 0.002s 1.009s 0.517s 10 3.57x

▲ Production (Vercel)

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
▲ Vercel 🥇 Express 1.677s (-9.2% 🟢) 2.335s (-18.3% 🟢) 0.129s (-21.7% 🟢) 2.945s (-16.3% 🟢) 1.269s 10 1.00x
▲ Vercel Nitro 1.774s (-3.4%) 2.400s (-19.0% 🟢) 0.142s (+63.8% 🔺) 3.026s (-91.0% 🟢) 1.251s 10 1.06x
▲ Vercel Next.js (Turbopack) 1.780s (+0.6%) 2.712s (-2.4%) 0.148s (-71.9% 🟢) 3.318s (-14.7% 🟢) 1.539s 10 1.06x

🔍 Observability: Express | Nitro | Next.js (Turbopack)

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World 🥇 Fastest Framework Wins
💻 Local Next.js (Turbopack) 9/12
🐘 Postgres Nitro 12/12
▲ Vercel Nitro 7/12
Fastest World by Framework

Winner determined by most benchmark wins

Framework 🥇 Fastest World Wins
Express 🐘 Postgres 6/12
Next.js (Turbopack) 🌐 Redis 7/12
Nitro 🐘 Postgres 11/12
Column Definitions
  • Workflow Time: Runtime reported by workflow (completedAt - createdAt) - primary metric
  • TTFB: Time to First Byte - time from workflow start until first stream byte received (stream benchmarks only)
  • Slurp: Time from first byte to complete stream consumption (stream benchmarks only)
  • Wall Time: Total testbench time (trigger workflow + poll for result)
  • Overhead: Testbench overhead (Wall Time - Workflow Time)
  • Samples: Number of benchmark iterations run
  • vs Fastest: How much slower compared to the fastest configuration for this benchmark

Worlds:

  • 💻 Local: In-memory filesystem world (local development)
  • 🐘 Postgres: PostgreSQL database world (local development)
  • ▲ Vercel: Vercel production/preview deployment
  • 🌐 Turso: Community world (local development)
  • 🌐 MongoDB: Community world (local development)
  • 🌐 Redis: Community world (local development)
  • 🌐 Jazz: Community world (local development)

📋 View full workflow run

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Feb 28, 2026

🧪 E2E Test Results

Some tests failed

Summary

Passed Failed Skipped Total
✅ ▲ Vercel Production 536 0 58 594
✅ 💻 Local Development 572 0 76 648
✅ 📦 Local Production 572 0 76 648
✅ 🐘 Local Postgres 572 0 76 648
✅ 🪟 Windows 51 0 3 54
❌ 🌍 Community Worlds 114 48 9 171
✅ 📋 Other 138 0 24 162
Total 2555 48 322 2925

❌ Failed Tests

🌍 Community Worlds (48 failed)

mongodb (1 failed):

  • webhookWorkflow

turso (47 failed):

  • addTenWorkflow
  • addTenWorkflow
  • wellKnownAgentWorkflow (.well-known/agent)
  • should work with react rendering in step
  • promiseAllWorkflow
  • promiseRaceWorkflow
  • promiseAnyWorkflow
  • hookWorkflow
  • webhookWorkflow
  • sleepingWorkflow
  • parallelSleepWorkflow
  • nullByteWorkflow
  • workflowAndStepMetadataWorkflow
  • fetchWorkflow
  • promiseRaceStressTestWorkflow
  • error handling error propagation workflow errors nested function calls preserve message and stack trace
  • error handling error propagation workflow errors cross-file imports preserve message and stack trace
  • error handling error propagation step errors basic step error preserves message and stack trace
  • error handling error propagation step errors cross-file step error preserves message and function names in stack
  • error handling retry behavior regular Error retries until success
  • error handling retry behavior FatalError fails immediately without retries
  • error handling retry behavior RetryableError respects custom retryAfter delay
  • error handling retry behavior maxRetries=0 disables retries
  • error handling retry behavior workflow completes despite transient 5xx on step_completed
  • error handling catchability FatalError can be caught and detected with FatalError.is()
  • hookCleanupTestWorkflow - hook token reuse after workflow completion
  • concurrent hook token conflict - two workflows cannot use the same hook token simultaneously
  • hookDisposeTestWorkflow - hook token reuse after explicit disposal while workflow still running
  • stepFunctionPassingWorkflow - step function references can be passed as arguments (without closure vars)
  • stepFunctionWithClosureWorkflow - step function with closure variables passed as argument
  • closureVariableWorkflow - nested step functions with closure variables
  • spawnWorkflowFromStepWorkflow - spawning a child workflow using start() inside a step
  • health check (queue-based) - workflow and step endpoints respond to health check messages
  • pathsAliasWorkflow - TypeScript path aliases resolve correctly
  • Calculator.calculate - static workflow method using static step methods from another class
  • AllInOneService.processNumber - static workflow method using sibling static step methods
  • ChainableService.processWithThis - static step methods using this to reference the class
  • thisSerializationWorkflow - step function invoked with .call() and .apply()
  • customSerializationWorkflow - custom class serialization with WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE
  • instanceMethodStepWorkflow - instance methods with "use step" directive
  • crossContextSerdeWorkflow - classes defined in step code are deserializable in workflow context
  • stepFunctionAsStartArgWorkflow - step function reference passed as start() argument
  • cancelRun - cancelling a running workflow
  • cancelRun via CLI - cancelling a running workflow
  • pages router addTenWorkflow via pages router
  • pages router promiseAllWorkflow via pages router
  • pages router sleepingWorkflow via pages router

Details by Category

✅ ▲ Vercel Production
App Passed Failed Skipped
✅ astro 48 0 6
✅ example 48 0 6
✅ express 48 0 6
✅ fastify 48 0 6
✅ hono 48 0 6
✅ nextjs-turbopack 52 0 2
✅ nextjs-webpack 52 0 2
✅ nitro 48 0 6
✅ nuxt 48 0 6
✅ sveltekit 48 0 6
✅ vite 48 0 6
✅ 💻 Local Development
App Passed Failed Skipped
✅ astro-stable 46 0 8
✅ express-stable 46 0 8
✅ fastify-stable 46 0 8
✅ hono-stable 46 0 8
✅ nextjs-turbopack-canary 51 0 3
✅ nextjs-turbopack-stable 51 0 3
✅ nextjs-webpack-canary 51 0 3
✅ nextjs-webpack-stable 51 0 3
✅ nitro-stable 46 0 8
✅ nuxt-stable 46 0 8
✅ sveltekit-stable 46 0 8
✅ vite-stable 46 0 8
✅ 📦 Local Production
App Passed Failed Skipped
✅ astro-stable 46 0 8
✅ express-stable 46 0 8
✅ fastify-stable 46 0 8
✅ hono-stable 46 0 8
✅ nextjs-turbopack-canary 51 0 3
✅ nextjs-turbopack-stable 51 0 3
✅ nextjs-webpack-canary 51 0 3
✅ nextjs-webpack-stable 51 0 3
✅ nitro-stable 46 0 8
✅ nuxt-stable 46 0 8
✅ sveltekit-stable 46 0 8
✅ vite-stable 46 0 8
✅ 🐘 Local Postgres
App Passed Failed Skipped
✅ astro-stable 46 0 8
✅ express-stable 46 0 8
✅ fastify-stable 46 0 8
✅ hono-stable 46 0 8
✅ nextjs-turbopack-canary 51 0 3
✅ nextjs-turbopack-stable 51 0 3
✅ nextjs-webpack-canary 51 0 3
✅ nextjs-webpack-stable 51 0 3
✅ nitro-stable 46 0 8
✅ nuxt-stable 46 0 8
✅ sveltekit-stable 46 0 8
✅ vite-stable 46 0 8
✅ 🪟 Windows
App Passed Failed Skipped
✅ nextjs-turbopack 51 0 3
❌ 🌍 Community Worlds
App Passed Failed Skipped
✅ mongodb-dev 3 0 0
❌ mongodb 50 1 3
✅ redis-dev 3 0 0
✅ redis 51 0 3
✅ turso-dev 3 0 0
❌ turso 4 47 3
✅ 📋 Other
App Passed Failed Skipped
✅ e2e-local-dev-nest-stable 46 0 8
✅ e2e-local-postgres-nest-stable 46 0 8
✅ e2e-local-prod-nest-stable 46 0 8

📋 View full workflow run

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Updates the builders’ input-file discovery so getInputFiles() can find directive-bearing source files located in dot-prefixed files/directories, while preserving the explicit ignore list for common generated/vendor directories.

Changes:

  • Switched getInputFiles() to run relative globs per configured directory (cwd per dir) with dot: true, to correctly match dot-prefixed paths and apply ignores consistently.
  • Added a new Vitest suite covering dot-prefixed file/dir discovery and confirming explicitly ignored dot-directories remain excluded.
  • Added a changeset to publish the fix as a patch for @workflow/builders.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

File Description
packages/builders/src/base-builder.ts Adjusts globbing strategy to include dot-prefixed paths and keep ignore behavior working.
packages/builders/src/get-input-files.test.ts Adds tests validating discovery/exclusion behavior for dot-prefixed paths.
.changeset/dot-file-directive-discovery.md Releases the behavior change as a patch.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread packages/builders/src/get-input-files.test.ts
Add workbench fixtures and E2E tests verifying that 'use step' / 'use
workflow' directives inside dot-prefixed directories (.well-known/agent/)
are correctly discovered, included in manifests, and executed at runtime.
tinyglobby returns forward-slash paths even on Windows, while Node's
path.join() uses backslashes. Normalize both sides to forward slashes
before comparison.
Cleaner and more idiomatic way to get the parent directory.
With dot: true enabled, framework build output directories like .nuxt/
are now traversed and their generated files picked up as input files.
This caused a circular dependency in the nuxt builder where generated
.nuxt/workflow/steps.mjs was being re-discovered as an input file.

Add .nuxt, .turbo, .cache, .yarn, and .pnpm-store to the ignore list,
matching the directories already ignored by the eager builder's watcher.
Sign up for free to 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.

3 participants