Skip to content

Freshly generated solution fails its own smoke test: no Initial migration #163

Description

@omercelikdev

What happened

A brand-new dotnet new goldpath-solution (postgresql, broker none, openid, features: multitenancy+audittrail+idempotency+dataprotection+caching+locking+notification, vertical-slice) fails its own generated smoke test, locally and on CI identically: /health/ready hangs until the HttpClient 100s timeout.

Root cause

The template generates zero migrations, while the dev flow applies migrations ("Development auto-creates" per the generated CLAUDE.md). With nothing to apply there is no schema; Quartz cannot initialize (42P01: relation "qrtz_job_details" does not exist) and blocks startup; the Aspire proxy holds the socket, so the crash presents as a hang — the worst diagnostic shape.

dotnet ef migrations add Initial fixes it completely: the generated model already contains every module table including qrtz_* (67 references — the same count as CorPay's committed Initial). Smoke goes green in 22s.

Why no existing gate caught it

CorPay's migrations were committed long ago — only a FRESH generation walks this path, and no CI lane generates fresh. The first-click contract ("runs with one click") is broken for every new adopter on a jobs-bearing shape.

Suggested fix (either)

  1. Template ships the Initial migration per shape (heavier to maintain per feature-combination), or
  2. dotnet new quickstart + generated CLAUDE.md state the one command, AND a CI lane generates a fresh solution and runs its smoke — the gate that makes the first-click contract mechanical.

Option 2 matches ADR-0005 (every standard ships with its verifier).

Found by the qorpe.apiPortal pilot's S0 — first fresh generation since CorPay.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions