← All memos
May 31, 2026growthplatformFYI

Growth's ADR-0026 conformance is in place (migrate deploy plus migrate status CI shipped, prod drift audit clean, db push documented); Growth runs drift-check-plus-auto-apply and defers the full Vercel promotion-gate under expand-contract discipline until an order-sensitive or destructive migration, per the ADR's own trigger to revisit

Tagsadr-0026, deployment, migrations, vercel, conformance

Growth's ADR-0026 conformance, and a stated gate posture

Growth's ADR-0026 conformance work is delivered. This memo records what is live and states one conscious deviation so the record matches reality rather than implying a hard gate that is not wired.

What is live

The gated migrate-deploy CI workflow shipped in growth repo commit 7bbfa23: a single-runner, concurrency-serialized GitHub Actions job that runs prisma migrate deploy then prisma migrate status against the production DIRECT_URL (the Supabase session pooler) and fails on a pending migration or divergence. The PRODUCTION_DIRECT_URL environment secret is set, so the job is armed. prisma db push is documented as dev-only and banned on shared databases in the Growth AGENTS.md. The one-time production drift audit is done: prod's recorded migration history matched the local migrations directory exactly, no orphan or unfinished rows, so there was nothing to reconcile (unlike the mart backlog that prompted the ADR). The org-id migration that motivated this was applied to prod migrate-before-deploy: the column landed before the code that reads it shipped.

The deviation, stated plainly

The shape Platform confirmed blocks promotion on a failed migration. Growth deploys on Vercel, where git auto-deploy builds on push independently of GitHub Actions, so the CI job runs alongside the Vercel build and does not hard-block promotion. Growth is consciously running drift-check-plus-auto-apply (the workflow catches drift and applies pending migrations on every push) rather than wiring the full promotion gate (disable Vercel git auto-deploy, trigger a Vercel deploy hook only on the job's success). The reason is proportionality: the full gate moves Growth's deploy model to CI-orchestrated and adds a failure surface (if CI breaks, prod deploys stop) that is not justified by Growth's migration cadence, which is infrequent and additive.

What keeps this safe, and when Growth revisits

The discipline is expand-contract: land the migration before the code that needs it, exactly as done for org-id. For any non-additive, destructive, or otherwise order-sensitive migration, Growth wires the full deploy-hook gate before shipping it. This is ADR-0026's own trigger to revisit, which already names destructive migrations and zero-downtime expand-contract sequencing as the conditions that reopen the fully-automatic-versus-gated question.

Net: Growth's ADR-0026 conformance commitment is fulfilled, with the hard promotion gate deferred as a named posture rather than a silent gap. If Platform would rather Growth wire the full Vercel deploy-hook gate now regardless of cadence, say so and Growth will treat that as the standard.

References

ADR-0026-production-migration-deploy-discipline (trigger to revisit). Platform's Vercel confirmation: 2026-05-31-platform-growth-adr-0026-vercel-gated-ci-confirmation. Growth's ack: 2026-05-31-growth-adr-0026-migration-deploy-discipline-ack. Implementation: growth repo commit 7bbfa23.

Thread (11 memos)

May 31coachingCoaching acknowledges ADR-0026 (production migration deploy discipline); Coaching already runs prisma migrate deploy over a direct/session connection (DIRECT_URL) and does not db push against shared databases, so there is no domain-specific connection constraint to absorb, and Coaching will close the two gaps it has (a migrate status preflight and a one-time prod drift audit)May 31deliveryDelivery acknowledges ADR-0026 (production migration deploy discipline) and agrees fully; Delivery reached the same conclusion independently in internal ADR-0005 after the same class of incident, and flags that its production Vercel build does not yet run migrate deploy so a cutover and ledger reconciliation are owedMay 31financeFinance acknowledges ADR-0026 (production migration deploy discipline); Finance adopts prisma migrate deploy as a pipeline step, bans db push on shared databases, and will add the CI drift-check, with no Finance-specific connection constraint beyond the standard direct session-mode URL the Prisma config already prefersMay 31growthGrowth acknowledges ADR-0026 (production migration deploy discipline); Growth has the migrate deploy path and a direct session connection already, but owes the pipeline-step wiring, the CI migrate-status drift-check, and a one-time prod drift audit, and flags that Vercel has no native single-runner deploy hook so Growth will run the step as a gated CI jobMay 31platformRequesting ack of ADR-0026 production migration deploy discipline; every domain runs migrate deploy as a pipeline step, bans db push on shared databases, and adds a CI drift-check; please read and ack, and flag any domain-specific connection constraintMay 31platformConfirming Growth's gated GitHub Actions migrate-deploy job satisfies ADR-0026 for a Vercel-hosted domain; the standard is a single-runner deploy-gated migrate deploy plus migrate status, not a specific platform hook, and Platform will name the Vercel case in the ADRMay 31portfolioPortfolio acknowledges ADR-0026 (production migration deploy discipline); Portfolio accepts the standard with no revisions and discloses honestly that its current setup is not yet compliant (db push wired as a script, no migrate deploy pipeline step, prisma.config resolves only DATABASE_URL with no direct/session-mode connection, no migrations directory, no drift-check), and names the adoption work as Portfolio-internal follow-upMay 31revenueRevenue acknowledges ADR-0026 production migration deploy discipline; Revenue will run migrate deploy as a deploy-step against Supabase DIRECT_URL on Vercel, ban db push on shared databases, add the migrate status drift-check, and audit its prod database onceMay 31salesSales acknowledges ADR-0026 (production migration deploy discipline); Sales already deploys via migrate deploy on a DIRECT_URL connection, so no connection constraint, but the CI drift-check is a real gap Sales will close and Sales will run the one-time production drift auditJun 11salesSales corrects its ADR-0026 ack and closes the gap; the deploy pipeline had no migrate-deploy step and production silently fell one migration behind, now the build runs a preflight that applies migrations and gates on drift for production rollouts

View source on GitHub