feat(dw): 🎸 parallel agent worktrees with isolated infra + test harness

bun dw spins up a fully isolated per-worktree dev stack: Neon DB branch,
Dragonfly + ElasticMQ via docker compose, portless aliases, tmux
session, and emulate.dev Google OAuth. Workers, dev server, vite,
checkout, and stripe-listen run as concurrently siblings. bun setup-test
auto-runs on first dw and seeds unit-test-org via
clearOrg+setupOrg+ensureDefaultStripeAccount with 13 features + team
invites for all 5 useautumn.com members. Hardcoded localhost URLs in
test scenarios now read AUTUMN_TEST_BASE_URL/AUTUMN_TEST_VITE_URL.
preload-env.ts loads .env.local so bun t/cm/setup-test route to the
worktree server. 1265-line scripts/dw.ts split into scripts/dw/ module
(index + commands + helpers). server/src/db/initDrizzle.ts reverted to
upstream (search_path concerns solved by per-branch Neon isolation).
Workers enabled in agent worktrees now that SQS is per-worktree via
ElasticMQ.
This commit is contained in:
amianthus
2026-05-16 01:59:15 +01:00
parent 6e53558520
commit 25e920bbd3
46 changed files with 1881 additions and 999 deletions

View File

@@ -23,6 +23,9 @@ const TESTS_DIR = join(PROJECT_ROOT, testRunConfig.testsBaseDir);
const LEGACY_SCRIPTS_DIR = join(PROJECT_ROOT, testRunConfig.legacyScriptsDir);
const RUNNER_SCRIPT = join(PROJECT_ROOT, "scripts/testScripts/runTestsV2.tsx");
// Worktree .env.local loading happens in scripts/preload-env.ts, which Bun
// auto-runs via bunfig.toml `preload` for every `bun` and `bun test` invocation.
/** Recursively find a file under baseDir whose relative path ends with the given suffix. */
async function findFileByPath({
baseDir,