create-ailk 0.24.0 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +53 -22
- package/component-catalog.json +3 -3
- package/component-catalog.md +3 -3
- package/dist/add-module.js +4 -2
- package/dist/add-route.d.ts +12 -1
- package/dist/add-route.js +31 -3
- package/dist/cli.js +12 -7
- package/dist/derive-architecture.d.ts +3 -4
- package/dist/derive-architecture.js +65 -29
- package/dist/lib/design-checks.d.ts +9 -4
- package/dist/lib/design-checks.js +13 -7
- package/dist/lib/extract-module-bundle.js +29 -2
- package/dist/lib/fetch-template-snapshot.d.ts +2 -1
- package/dist/lib/fetch-template-snapshot.js +8 -3
- package/dist/lib/import-graph.d.ts +1 -1
- package/dist/lib/import-graph.js +4 -4
- package/dist/lib/module-license-gate.d.ts +12 -1
- package/dist/lib/module-license-gate.js +36 -15
- package/dist/lib/module-tier.d.ts +2 -8
- package/dist/lib/module-tier.js +13 -12
- package/dist/module-architecture.d.ts +20 -3
- package/dist/module-architecture.js +129 -552
- package/dist/paid-sections.d.ts +25 -1
- package/dist/paid-sections.js +88 -3
- package/dist/starter-grid.d.ts +6 -6
- package/dist/starter-grid.js +12 -5
- package/dist/surfaces.js +39 -2
- package/dist/template-record.d.ts +21 -3
- package/dist/template-record.js +38 -7
- package/dist/topology.d.ts +16 -3
- package/dist/topology.js +54 -23
- package/dist/update.d.ts +10 -1
- package/dist/update.js +715 -21
- package/package.json +3 -3
- package/release-scope.json +2 -2
- package/site-templates/marketing-site/TEMPLATE-MANIFEST.json +8 -2
- package/site-templates/marketing-site/TEMPLATE-MANIFEST.md +2 -2
- package/site-templates/marketing-site/ailk-template.json +7 -1
- package/site-templates/marketing-site/provenance.json +7 -1
- package/site-templates/saas-product/ailk-template.json +2 -1
- package/site-templates/saas-product/provenance.json +1 -0
- package/templates/.claude/cloudparity-repo-hooks.json +5 -0
- package/templates/.claude/hooks/template-guard.sh +137 -0
- package/templates/.claude/rules/extending.md +106 -0
- package/templates/.claude/rules/loop-contract.md +2 -2
- package/templates/.claude/settings.json +11 -0
- package/templates/.env.example +20 -5
- package/templates/.github/workflows/ci.yml +7 -4
- package/templates/CLAUDE.md +11 -1
- package/templates/CONVENTIONS.md +8 -10
- package/templates/README.md +14 -13
- package/templates/apps/api/.env.example +23 -2
- package/templates/apps/api/CLAUDE.md +119 -83
- package/templates/apps/api/jest.config.cjs +15 -5
- package/templates/apps/api/package.json +16 -20
- package/templates/apps/api/src/__tests__/trusted-origins.server.test.ts +2 -2
- package/templates/apps/api/src/__tests__/vercel-handler.test.ts +4 -4
- package/templates/apps/api/src/index.ts +1 -1
- package/templates/apps/api/src/lib/__mocks__/prisma-client.js +16 -0
- package/templates/apps/api/src/lib/__mocks__/prisma.ts +3 -3
- package/templates/apps/api/src/modules/commerce.ts +10 -0
- package/templates/apps/api/src/modules/content-write.ts +10 -0
- package/templates/apps/api/src/modules/multi-tenant.ts +10 -0
- package/templates/apps/api/src/modules/scheduling.ts +10 -0
- package/templates/apps/api/src/modules/signal-collectors.ts +10 -0
- package/templates/apps/api/src/modules/workspace.ts +10 -0
- package/templates/apps/api/src/server.ts +117 -1882
- package/templates/apps/api/vercel.json +2 -2
- package/templates/apps/mcp/CLAUDE.md +90 -26
- package/templates/apps/mcp/__tests__/app-entry.test.ts +4 -254
- package/templates/apps/mcp/__tests__/boot-file.test.ts +92 -0
- package/templates/apps/mcp/jest.config.cjs +6 -1
- package/templates/apps/mcp/package.json +5 -13
- package/templates/apps/mcp/src/app.ts +8 -7
- package/templates/apps/mcp/src/index.ts +6 -34
- package/templates/apps/mcp/src/lib/paid-tools.generated.ts +10 -0
- package/templates/apps/mcp/src/lib/topology.generated.ts +2 -2
- package/templates/apps/mcp/src/site.ts +12 -0
- package/templates/apps/web/.env.example +1 -1
- package/templates/apps/web/CLAUDE.md +31 -3
- package/templates/apps/web/app/.well-known/mcp.json/route.ts +9 -3
- package/templates/apps/web/app/[locale]/(auth)/__tests__/auth-pages.test.tsx +43 -4
- package/templates/apps/web/app/[locale]/(auth)/legal-footnote.tsx +35 -0
- package/templates/apps/web/app/[locale]/(auth)/sign-in/__tests__/page.test.tsx +117 -8
- package/templates/apps/web/app/[locale]/(auth)/sign-in/page.tsx +14 -37
- package/templates/apps/web/app/[locale]/(auth)/sign-in/sign-in-card.tsx +6 -6
- package/templates/apps/web/app/[locale]/(auth)/sign-in/sign-in-text.ts +20 -35
- package/templates/apps/web/app/[locale]/(auth)/sign-up/__tests__/page.test.tsx +108 -0
- package/templates/apps/web/app/[locale]/(auth)/sign-up/__tests__/sign-up-card.test.tsx +111 -5
- package/templates/apps/web/app/[locale]/(auth)/sign-up/page.tsx +78 -16
- package/templates/apps/web/app/[locale]/(auth)/sign-up/sign-up-card.tsx +132 -12
- package/templates/apps/web/app/[locale]/(authed)/__tests__/gate.test.tsx +53 -1
- package/templates/apps/web/app/[locale]/(authed)/account/__tests__/billing.test.tsx +38 -0
- package/templates/apps/web/app/[locale]/(authed)/account/billing/page.tsx +4 -2
- package/templates/apps/web/app/[locale]/(authed)/sign-in-gate.tsx +47 -24
- package/templates/apps/web/app/[locale]/(authed)/signed-out-gate.generated.tsx +23 -4
- package/templates/apps/web/app/[locale]/contact/intake-analytics.ts +1 -1
- package/templates/apps/web/app/[locale]/flows/[slug]/__tests__/magnet-page.test.tsx +22 -1
- package/templates/apps/web/app/[locale]/flows/[slug]/magnet-page.tsx +7 -3
- package/templates/apps/web/app/[locale]/layout.tsx +33 -13
- package/templates/apps/web/app/[locale]/meet/confirmed/BookingHandOff.tsx +128 -0
- package/templates/apps/web/app/[locale]/meet/confirmed/__tests__/BookingHandOff.test.tsx +126 -0
- package/templates/apps/web/app/[locale]/pricing/__tests__/unconnected.test.tsx +43 -0
- package/templates/apps/web/app/[locale]/pricing/page.tsx +7 -3
- package/templates/apps/web/app/api/offerings/checkout/[lookupKey]/__tests__/route.test.ts +222 -0
- package/templates/apps/web/app/api/offerings/checkout/[lookupKey]/route.ts +10 -3
- package/templates/apps/web/app/api/revalidate/route.ts +3 -3
- package/templates/apps/web/auth.ts +10 -6
- package/templates/apps/web/i18n/request.ts +49 -1
- package/templates/apps/web/jest.config.cjs +1 -0
- package/templates/apps/web/lib/__tests__/account-config.test.ts +7 -0
- package/templates/apps/web/lib/__tests__/auth-email.test.ts +276 -0
- package/templates/apps/web/lib/auth-email.ts +103 -21
- package/templates/apps/web/lib/hub-session/__tests__/sign-in-gate.test.tsx +72 -23
- package/templates/apps/web/lib/hub-session/sign-in-gate.tsx +94 -70
- package/templates/apps/web/lib/prisma-for-auth.ts +5 -2
- package/templates/apps/web/lib/relay.ts +2 -2
- package/templates/apps/web/lib/release-scope.ts +47 -0
- package/templates/apps/web/lib/server-api.ts +1 -1
- package/templates/apps/web/lib/sign-up-agreements.ts +291 -28
- package/templates/apps/web/lib/site-contributions.ts +18 -0
- package/templates/apps/web/messages/en.json +186 -20
- package/templates/apps/web/messages/site/en.json +1 -0
- package/templates/apps/web/src/lib/commerce-claim.ts +1 -1
- package/templates/customizations.yaml +37 -0
- package/templates/database/prisma.config.ts +10 -14
- package/templates/database/seed-test.ts +2 -2
- package/templates/database/seed.ts +5 -5
- package/templates/package.json +12 -6
- package/templates/pnpm-workspace.yaml +0 -1
- package/templates/project.yaml +16 -8
- package/templates/tools/jest/reporters.cjs +65 -0
- package/templates/tools/lint-architecture.ts +553 -7
- package/templates/tsconfig.json +1 -2
- package/versions.json +49 -36
- package/templates/apps/api/src/__tests__/commerce-claim-registration.test.ts +0 -409
- package/templates/apps/api/src/__tests__/factories/agent-caller.ts +0 -102
- package/templates/apps/api/src/__tests__/factories/content-fixture.ts +0 -138
- package/templates/apps/api/src/__tests__/factories/in-memory-prisma.ts +0 -441
- package/templates/apps/api/src/__tests__/factories/index.ts +0 -70
- package/templates/apps/api/src/__tests__/factories/lead-fixture.ts +0 -82
- package/templates/apps/api/src/__tests__/leads-forwarded-rate-limit.test.ts +0 -135
- package/templates/apps/api/src/__tests__/services/enrichment-shim.test.ts +0 -126
- package/templates/apps/api/src/__tests__/stripe-boot.test.ts +0 -132
- package/templates/apps/api/src/__tests__/support/hub-sign-in-fake-db.ts +0 -362
- package/templates/apps/api/src/bin/__tests__/rate-limit-probe.test.ts +0 -184
- package/templates/apps/api/src/bin/abandon-sweep.ts +0 -42
- package/templates/apps/api/src/bin/rate-limit-probe.ts +0 -53
- package/templates/apps/api/src/bin/spokes.ts +0 -198
- package/templates/apps/api/src/bin/stripe-connections-rekey.ts +0 -45
- package/templates/apps/api/src/config/__tests__/hub-require-spoke-key.test.ts +0 -196
- package/templates/apps/api/src/config/__tests__/index.test.ts +0 -233
- package/templates/apps/api/src/config/__tests__/modules.test.ts +0 -76
- package/templates/apps/api/src/config/__tests__/stripe-connection-key.test.ts +0 -185
- package/templates/apps/api/src/config/__tests__/trusted-origins.test.ts +0 -238
- package/templates/apps/api/src/config/index.ts +0 -596
- package/templates/apps/api/src/config/modules.ts +0 -83
- package/templates/apps/api/src/lib/__tests__/agent-store.test.ts +0 -581
- package/templates/apps/api/src/lib/__tests__/auth-email-budget.test.ts +0 -143
- package/templates/apps/api/src/lib/__tests__/consent-ledger-double.ts +0 -237
- package/templates/apps/api/src/lib/__tests__/consent-store.test.ts +0 -353
- package/templates/apps/api/src/lib/__tests__/content-adapter.test.ts +0 -201
- package/templates/apps/api/src/lib/__tests__/deliverable-asset-store.test.ts +0 -224
- package/templates/apps/api/src/lib/__tests__/error-serializer.test.ts +0 -120
- package/templates/apps/api/src/lib/__tests__/errors.test.ts +0 -94
- package/templates/apps/api/src/lib/__tests__/file-fallback.test.ts +0 -144
- package/templates/apps/api/src/lib/__tests__/fixtures/HomePage/home.mdx +0 -8
- package/templates/apps/api/src/lib/__tests__/flow-completion-store.test.ts +0 -149
- package/templates/apps/api/src/lib/__tests__/flow-rename-race.db.test.ts +0 -116
- package/templates/apps/api/src/lib/__tests__/hub-sign-in-store.test.ts +0 -209
- package/templates/apps/api/src/lib/__tests__/lead-capture-store.test.ts +0 -257
- package/templates/apps/api/src/lib/__tests__/lead-delivery.test.ts +0 -96
- package/templates/apps/api/src/lib/__tests__/outbound-http.test.ts +0 -125
- package/templates/apps/api/src/lib/__tests__/prisma.test.ts +0 -165
- package/templates/apps/api/src/lib/__tests__/require-commerce-claim.test.ts +0 -317
- package/templates/apps/api/src/lib/__tests__/require-paid-tier.test.ts +0 -129
- package/templates/apps/api/src/lib/__tests__/site.test.ts +0 -308
- package/templates/apps/api/src/lib/__tests__/slice-load.test.ts +0 -89
- package/templates/apps/api/src/lib/__tests__/spoke-store.test.ts +0 -202
- package/templates/apps/api/src/lib/__tests__/stripe-admission.test.ts +0 -217
- package/templates/apps/api/src/lib/__tests__/stripe.test.ts +0 -82
- package/templates/apps/api/src/lib/agent-store.ts +0 -613
- package/templates/apps/api/src/lib/auth-email-budget.ts +0 -161
- package/templates/apps/api/src/lib/consent-store.ts +0 -363
- package/templates/apps/api/src/lib/content-adapter.ts +0 -112
- package/templates/apps/api/src/lib/deliverable-asset-store.ts +0 -96
- package/templates/apps/api/src/lib/error-serializer.ts +0 -164
- package/templates/apps/api/src/lib/errors.ts +0 -95
- package/templates/apps/api/src/lib/file-fallback.ts +0 -87
- package/templates/apps/api/src/lib/flow-completion-store.ts +0 -136
- package/templates/apps/api/src/lib/hub-sign-in-store.ts +0 -455
- package/templates/apps/api/src/lib/lead-capture-store.ts +0 -122
- package/templates/apps/api/src/lib/lead-delivery.ts +0 -52
- package/templates/apps/api/src/lib/license-key-store.ts +0 -45
- package/templates/apps/api/src/lib/locales.ts +0 -201
- package/templates/apps/api/src/lib/outbound-http.ts +0 -127
- package/templates/apps/api/src/lib/prisma.ts +0 -21
- package/templates/apps/api/src/lib/proposal-paid-store.ts +0 -66
- package/templates/apps/api/src/lib/rate-limit-probe.ts +0 -165
- package/templates/apps/api/src/lib/rate-limit-store.ts +0 -142
- package/templates/apps/api/src/lib/require-commerce-claim.ts +0 -250
- package/templates/apps/api/src/lib/require-paid-tier.ts +0 -53
- package/templates/apps/api/src/lib/site.ts +0 -257
- package/templates/apps/api/src/lib/slice-load.ts +0 -90
- package/templates/apps/api/src/lib/spoke-store.ts +0 -180
- package/templates/apps/api/src/lib/stripe.ts +0 -321
- package/templates/apps/api/src/lib/webhook-idempotency.ts +0 -156
- package/templates/apps/api/src/middleware/__tests__/adversarial/bearer-token-format.test.ts +0 -111
- package/templates/apps/api/src/middleware/__tests__/adversarial/cookie-or-bearer-precedence.test.ts +0 -172
- package/templates/apps/api/src/middleware/__tests__/adversarial/csrf-bearer-skip.test.ts +0 -119
- package/templates/apps/api/src/middleware/__tests__/adversarial/csrf-cookie-path.test.ts +0 -138
- package/templates/apps/api/src/middleware/__tests__/adversarial/csrf-trusted-origins.test.ts +0 -142
- package/templates/apps/api/src/middleware/__tests__/adversarial/session-fixation.test.ts +0 -155
- package/templates/apps/api/src/middleware/__tests__/adversarial/session-timeout.test.ts +0 -139
- package/templates/apps/api/src/middleware/__tests__/auth.bearer-path.test.ts +0 -562
- package/templates/apps/api/src/middleware/__tests__/auth.both-present-precedence.test.ts +0 -76
- package/templates/apps/api/src/middleware/__tests__/auth.cookie-path.test.ts +0 -220
- package/templates/apps/api/src/middleware/__tests__/auth.database-not-configured.test.ts +0 -97
- package/templates/apps/api/src/middleware/__tests__/auth.hub-session-path.test.ts +0 -557
- package/templates/apps/api/src/middleware/__tests__/auth.neither-present.test.ts +0 -72
- package/templates/apps/api/src/middleware/__tests__/auth.optional-cookie.test.ts +0 -140
- package/templates/apps/api/src/middleware/__tests__/default-tenant.test.ts +0 -721
- package/templates/apps/api/src/middleware/__tests__/rate-limit-cross-isolate.db.test.ts +0 -220
- package/templates/apps/api/src/middleware/__tests__/rate-limit-store.test.ts +0 -430
- package/templates/apps/api/src/middleware/__tests__/rate-limit.test.ts +0 -1409
- package/templates/apps/api/src/middleware/__tests__/write-budget.test.ts +0 -174
- package/templates/apps/api/src/middleware/auth.ts +0 -864
- package/templates/apps/api/src/middleware/default-tenant.ts +0 -166
- package/templates/apps/api/src/middleware/rate-limit.ts +0 -983
- package/templates/apps/api/src/openapi/__tests__/openapi.test.ts +0 -391
- package/templates/apps/api/src/openapi/__tests__/spec-identity.test.ts +0 -182
- package/templates/apps/api/src/openapi/index.ts +0 -18
- package/templates/apps/api/src/openapi/spec.ts +0 -2148
- package/templates/apps/api/src/openapi/surface-drift.ts +0 -195
- package/templates/apps/api/src/routes/aeo/__tests__/index.test.ts +0 -175
- package/templates/apps/api/src/routes/aeo/index.ts +0 -107
- package/templates/apps/api/src/routes/auth/__tests__/auth-tokens.functional.test.ts +0 -196
- package/templates/apps/api/src/routes/auth/__tests__/auth-user.functional.test.ts +0 -249
- package/templates/apps/api/src/routes/auth/__tests__/hub-sign-in.test.ts +0 -532
- package/templates/apps/api/src/routes/auth/__tests__/tokens.test.ts +0 -313
- package/templates/apps/api/src/routes/auth/__tests__/transactional-email.test.ts +0 -413
- package/templates/apps/api/src/routes/auth/__tests__/user.test.ts +0 -609
- package/templates/apps/api/src/routes/auth/hub-sign-in.ts +0 -242
- package/templates/apps/api/src/routes/auth/tokens.ts +0 -211
- package/templates/apps/api/src/routes/auth/transactional-email.ts +0 -301
- package/templates/apps/api/src/routes/auth/user.ts +0 -305
- package/templates/apps/api/src/routes/billing/plan-checkout.ts +0 -332
- package/templates/apps/api/src/routes/checkout/__tests__/live-key.test.ts +0 -178
- package/templates/apps/api/src/routes/checkout/__tests__/offerings-authorization.test.ts +0 -1426
- package/templates/apps/api/src/routes/checkout/__tests__/session.test.ts +0 -448
- package/templates/apps/api/src/routes/checkout/__tests__/sessions.test.ts +0 -1742
- package/templates/apps/api/src/routes/checkout/index.ts +0 -34
- package/templates/apps/api/src/routes/checkout/session.ts +0 -171
- package/templates/apps/api/src/routes/checkout/sessions.ts +0 -540
- package/templates/apps/api/src/routes/consent/__tests__/account.test.ts +0 -386
- package/templates/apps/api/src/routes/consent/__tests__/sign-up-rate-limit.test.ts +0 -160
- package/templates/apps/api/src/routes/consent/account.ts +0 -268
- package/templates/apps/api/src/routes/consent/cookie.ts +0 -90
- package/templates/apps/api/src/routes/consent/index.ts +0 -26
- package/templates/apps/api/src/routes/consent/unsubscribe.ts +0 -127
- package/templates/apps/api/src/routes/content/__tests__/get-page.test.ts +0 -853
- package/templates/apps/api/src/routes/content/__tests__/list-pages.test.ts +0 -230
- package/templates/apps/api/src/routes/content/__tests__/list-types.test.ts +0 -44
- package/templates/apps/api/src/routes/content/__tests__/locale.test.ts +0 -118
- package/templates/apps/api/src/routes/content/__tests__/offerings.test.ts +0 -731
- package/templates/apps/api/src/routes/content/__tests__/pricing.test.ts +0 -753
- package/templates/apps/api/src/routes/content/__tests__/rate-limit.test.ts +0 -51
- package/templates/apps/api/src/routes/content/__tests__/search.test.ts +0 -450
- package/templates/apps/api/src/routes/content/__tests__/shown-offerings.test.ts +0 -762
- package/templates/apps/api/src/routes/content/get-page.ts +0 -183
- package/templates/apps/api/src/routes/content/index.ts +0 -49
- package/templates/apps/api/src/routes/content/list-pages.ts +0 -74
- package/templates/apps/api/src/routes/content/list-types.ts +0 -19
- package/templates/apps/api/src/routes/content/offerings.ts +0 -184
- package/templates/apps/api/src/routes/content/pricing.ts +0 -176
- package/templates/apps/api/src/routes/content/rate-limit.ts +0 -22
- package/templates/apps/api/src/routes/content/search.ts +0 -100
- package/templates/apps/api/src/routes/content/shown-offerings.ts +0 -229
- package/templates/apps/api/src/routes/leads/__tests__/capture.test.ts +0 -88
- package/templates/apps/api/src/routes/leads/__tests__/list.test.ts +0 -171
- package/templates/apps/api/src/routes/leads/__tests__/magnet-completion.test.ts +0 -515
- package/templates/apps/api/src/routes/leads/__tests__/spoke.test.ts +0 -392
- package/templates/apps/api/src/routes/leads/__tests__/track.test.ts +0 -165
- package/templates/apps/api/src/routes/leads/index.ts +0 -639
- package/templates/apps/api/src/routes/leads/list.ts +0 -104
- package/templates/apps/api/src/routes/project-listings/__tests__/configured-application.test.ts +0 -626
- package/templates/apps/api/src/routes/project-listings/__tests__/drafts.test.ts +0 -1268
- package/templates/apps/api/src/routes/project-listings/__tests__/founder-identity.test.ts +0 -847
- package/templates/apps/api/src/routes/project-listings/__tests__/me.test.ts +0 -491
- package/templates/apps/api/src/routes/project-listings/__tests__/public.test.ts +0 -476
- package/templates/apps/api/src/routes/project-listings/__tests__/resume-email.test.ts +0 -872
- package/templates/apps/api/src/routes/project-listings/__tests__/site-answers.test.ts +0 -1022
- package/templates/apps/api/src/routes/project-listings/__tests__/site-key.test.ts +0 -484
- package/templates/apps/api/src/routes/project-listings/__tests__/structured-address.test.ts +0 -535
- package/templates/apps/api/src/routes/project-listings/index.ts +0 -164
- package/templates/apps/api/src/routes/project-listings/me.ts +0 -87
- package/templates/apps/api/src/routes/project-listings/patch-copy.ts +0 -224
- package/templates/apps/api/src/routes/project-listings/patch-draft.ts +0 -102
- package/templates/apps/api/src/routes/project-listings/public.ts +0 -98
- package/templates/apps/api/src/routes/project-listings/respond.ts +0 -48
- package/templates/apps/api/src/routes/project-listings/resume-token.ts +0 -27
- package/templates/apps/api/src/routes/project-listings/start.ts +0 -140
- package/templates/apps/api/src/routes/project-listings/submit.ts +0 -130
- package/templates/apps/api/src/routes/project-listings/verify-email.ts +0 -150
- package/templates/apps/api/src/routes/requests/__tests__/confirm.test.ts +0 -686
- package/templates/apps/api/src/routes/requests/confirm.ts +0 -601
- package/templates/apps/api/src/routes/requests/index.ts +0 -54
- package/templates/apps/api/src/routes/test/auth/__tests__/session.test.ts +0 -306
- package/templates/apps/api/src/routes/test/auth/session.ts +0 -143
- package/templates/apps/api/src/routes/webhooks/README.md +0 -398
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-checkout-consent.test.ts +0 -649
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-dunning.test.ts +0 -749
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-flow-checkout.test.ts +0 -449
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-idempotency.test.ts +0 -264
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-livemode-live.test.ts +0 -159
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-livemode.test.ts +0 -158
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-offerings.test.ts +0 -814
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-org-billing.test.ts +0 -301
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-proposal-paid.test.ts +0 -369
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-rate-limit.test.ts +0 -215
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-request-paid.test.ts +0 -301
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-site-filter.test.ts +0 -809
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe.test.ts +0 -1155
- package/templates/apps/api/src/routes/webhooks/index.ts +0 -141
- package/templates/apps/api/src/routes/webhooks/stripe-offerings.ts +0 -384
- package/templates/apps/api/src/routes/webhooks/stripe.ts +0 -2028
- package/templates/apps/api/src/services/__tests__/abandon-email.test.ts +0 -645
- package/templates/apps/api/src/services/__tests__/answer-distributions.test.ts +0 -132
- package/templates/apps/api/src/services/__tests__/audit-log.test.ts +0 -1028
- package/templates/apps/api/src/services/__tests__/checkout-plan.test.ts +0 -313
- package/templates/apps/api/src/services/__tests__/consent-ledger.test.ts +0 -503
- package/templates/apps/api/src/services/__tests__/consent-migration.test.ts +0 -65
- package/templates/apps/api/src/services/__tests__/consent.test.ts +0 -299
- package/templates/apps/api/src/services/__tests__/default-tenant.test.ts +0 -147
- package/templates/apps/api/src/services/__tests__/deliverable-fulfillment.test.ts +0 -877
- package/templates/apps/api/src/services/__tests__/deliverable-resend.test.ts +0 -379
- package/templates/apps/api/src/services/__tests__/dunning-policy.test.ts +0 -368
- package/templates/apps/api/src/services/__tests__/entitlements.test.ts +0 -142
- package/templates/apps/api/src/services/__tests__/hub-sign-in.test.ts +0 -854
- package/templates/apps/api/src/services/__tests__/keyless-workspace-predicate.test.ts +0 -234
- package/templates/apps/api/src/services/__tests__/lead-accept-user.test.ts +0 -251
- package/templates/apps/api/src/services/__tests__/lead-routing.test.ts +0 -2660
- package/templates/apps/api/src/services/__tests__/listing-config.test.ts +0 -166
- package/templates/apps/api/src/services/__tests__/magnet-completion.test.ts +0 -389
- package/templates/apps/api/src/services/__tests__/person.test.ts +0 -1204
- package/templates/apps/api/src/services/__tests__/plan-offerings.test.ts +0 -450
- package/templates/apps/api/src/services/__tests__/project-listings.counts.test.ts +0 -202
- package/templates/apps/api/src/services/__tests__/project-listings.fence.test.ts +0 -151
- package/templates/apps/api/src/services/__tests__/public-site-resolver.test.ts +0 -137
- package/templates/apps/api/src/services/__tests__/request-confirm.test.ts +0 -531
- package/templates/apps/api/src/services/__tests__/revalidation.test.ts +0 -372
- package/templates/apps/api/src/services/__tests__/slack-notify.test.ts +0 -348
- package/templates/apps/api/src/services/__tests__/spoke-resolution.test.ts +0 -660
- package/templates/apps/api/src/services/__tests__/usage-aggregation.test.ts +0 -941
- package/templates/apps/api/src/services/__tests__/usage-credits.test.ts +0 -588
- package/templates/apps/api/src/services/__tests__/verified-email.test.ts +0 -78
- package/templates/apps/api/src/services/abandon-email.ts +0 -336
- package/templates/apps/api/src/services/aeo-score.ts +0 -325
- package/templates/apps/api/src/services/answer-distributions.ts +0 -138
- package/templates/apps/api/src/services/audit-log.ts +0 -961
- package/templates/apps/api/src/services/checkout-buyer.ts +0 -168
- package/templates/apps/api/src/services/consent.ts +0 -834
- package/templates/apps/api/src/services/default-tenant.ts +0 -416
- package/templates/apps/api/src/services/deliverable-fulfillment.ts +0 -750
- package/templates/apps/api/src/services/dunning-policy.ts +0 -294
- package/templates/apps/api/src/services/enrichment-shim.ts +0 -53
- package/templates/apps/api/src/services/entitlements.ts +0 -338
- package/templates/apps/api/src/services/hub-sign-in.ts +0 -472
- package/templates/apps/api/src/services/lead-accept-user.ts +0 -126
- package/templates/apps/api/src/services/lead-promotion.ts +0 -160
- package/templates/apps/api/src/services/lead-routing.ts +0 -1372
- package/templates/apps/api/src/services/leads-inbox.ts +0 -312
- package/templates/apps/api/src/services/listing-config.ts +0 -178
- package/templates/apps/api/src/services/magnet-completion.ts +0 -242
- package/templates/apps/api/src/services/offerings/__tests__/catalog.test.ts +0 -348
- package/templates/apps/api/src/services/offerings/__tests__/checkout-session-record.test.ts +0 -268
- package/templates/apps/api/src/services/offerings/__tests__/connection.test.ts +0 -975
- package/templates/apps/api/src/services/offerings/__tests__/fixtures.ts +0 -416
- package/templates/apps/api/src/services/offerings/__tests__/org-products.test.ts +0 -400
- package/templates/apps/api/src/services/offerings/__tests__/readers.test.ts +0 -685
- package/templates/apps/api/src/services/offerings/__tests__/source.test.ts +0 -231
- package/templates/apps/api/src/services/offerings/catalog.ts +0 -318
- package/templates/apps/api/src/services/offerings/checkout-authorization.ts +0 -403
- package/templates/apps/api/src/services/offerings/checkout-session-record.ts +0 -192
- package/templates/apps/api/src/services/offerings/connection.ts +0 -1083
- package/templates/apps/api/src/services/offerings/index.ts +0 -614
- package/templates/apps/api/src/services/offerings/source.ts +0 -140
- package/templates/apps/api/src/services/offerings/store.ts +0 -150
- package/templates/apps/api/src/services/owner-workspaces.ts +0 -132
- package/templates/apps/api/src/services/person.ts +0 -1211
- package/templates/apps/api/src/services/plan-offerings.ts +0 -125
- package/templates/apps/api/src/services/project-listing-resume-email.ts +0 -326
- package/templates/apps/api/src/services/project-listings.ts +0 -2085
- package/templates/apps/api/src/services/public-site-resolver.ts +0 -396
- package/templates/apps/api/src/services/request-confirm.ts +0 -698
- package/templates/apps/api/src/services/revalidation.ts +0 -235
- package/templates/apps/api/src/services/slack-notify.ts +0 -291
- package/templates/apps/api/src/services/usage-aggregation.ts +0 -516
- package/templates/apps/api/src/services/usage-credits.ts +0 -340
- package/templates/apps/api/src/services/verified-email.ts +0 -71
- package/templates/apps/mcp/__tests__/abuse/daily-cap.test.ts +0 -52
- package/templates/apps/mcp/__tests__/abuse/email-validator.test.ts +0 -46
- package/templates/apps/mcp/__tests__/abuse/guard.test.ts +0 -198
- package/templates/apps/mcp/__tests__/abuse/honeypot.test.ts +0 -36
- package/templates/apps/mcp/__tests__/abuse/user-agent-deny.test.ts +0 -54
- package/templates/apps/mcp/__tests__/aeo-cli-parity.test.ts +0 -116
- package/templates/apps/mcp/__tests__/audit-single-page.test.ts +0 -299
- package/templates/apps/mcp/__tests__/boot.test.ts +0 -280
- package/templates/apps/mcp/__tests__/catalog-drift.test.ts +0 -359
- package/templates/apps/mcp/__tests__/config/modules.test.ts +0 -78
- package/templates/apps/mcp/__tests__/get_business_hours.test.ts +0 -82
- package/templates/apps/mcp/__tests__/get_faq.test.ts +0 -80
- package/templates/apps/mcp/__tests__/get_locations.test.ts +0 -65
- package/templates/apps/mcp/__tests__/get_offerings.test.ts +0 -557
- package/templates/apps/mcp/__tests__/get_pricing.test.ts +0 -524
- package/templates/apps/mcp/__tests__/get_site_info.test.ts +0 -81
- package/templates/apps/mcp/__tests__/http-transport.test.ts +0 -1232
- package/templates/apps/mcp/__tests__/index.test.ts +0 -195
- package/templates/apps/mcp/__tests__/lib/audit-single-page-readiness-scan.test.ts +0 -191
- package/templates/apps/mcp/__tests__/lib/commerce-claim.test.ts +0 -531
- package/templates/apps/mcp/__tests__/lib/content-adapter-parity.test.ts +0 -70
- package/templates/apps/mcp/__tests__/lib/content-adapter.test.ts +0 -162
- package/templates/apps/mcp/__tests__/lib/content-root.test.ts +0 -93
- package/templates/apps/mcp/__tests__/lib/errors.test.ts +0 -75
- package/templates/apps/mcp/__tests__/lib/fail-closed-tools.test.ts +0 -180
- package/templates/apps/mcp/__tests__/lib/public-workspace.test.ts +0 -124
- package/templates/apps/mcp/__tests__/list_pages.test.ts +0 -268
- package/templates/apps/mcp/__tests__/locale.test.ts +0 -120
- package/templates/apps/mcp/__tests__/module-exclusion.test.ts +0 -175
- package/templates/apps/mcp/__tests__/purchase-disabled.test.ts +0 -101
- package/templates/apps/mcp/__tests__/rate-limit-write.test.ts +0 -189
- package/templates/apps/mcp/__tests__/read_content.test.ts +0 -511
- package/templates/apps/mcp/__tests__/request_callback.test.ts +0 -160
- package/templates/apps/mcp/__tests__/search_content.test.ts +0 -271
- package/templates/apps/mcp/__tests__/server.test.ts +0 -388
- package/templates/apps/mcp/__tests__/start_purchase.test.ts +0 -448
- package/templates/apps/mcp/__tests__/submit_lead.test.ts +0 -222
- package/templates/apps/mcp/__tests__/subscribe_newsletter.test.ts +0 -152
- package/templates/apps/mcp/__tests__/tools/create_project.test.ts +0 -243
- package/templates/apps/mcp/__tests__/tools/purchase.test.ts +0 -451
- package/templates/apps/mcp/src/abuse/daily-cap.ts +0 -47
- package/templates/apps/mcp/src/abuse/email-validator.ts +0 -25
- package/templates/apps/mcp/src/abuse/honeypot.ts +0 -21
- package/templates/apps/mcp/src/abuse/index.ts +0 -349
- package/templates/apps/mcp/src/abuse/user-agent-deny.ts +0 -58
- package/templates/apps/mcp/src/boot.ts +0 -167
- package/templates/apps/mcp/src/config/modules.ts +0 -43
- package/templates/apps/mcp/src/http-transport.ts +0 -564
- package/templates/apps/mcp/src/lib/audit-single-page.ts +0 -308
- package/templates/apps/mcp/src/lib/commerce-claim.ts +0 -263
- package/templates/apps/mcp/src/lib/content-adapter.ts +0 -116
- package/templates/apps/mcp/src/lib/empty-content-adapter.ts +0 -140
- package/templates/apps/mcp/src/lib/errors.ts +0 -61
- package/templates/apps/mcp/src/lib/license-key-store.ts +0 -45
- package/templates/apps/mcp/src/lib/locales.ts +0 -171
- package/templates/apps/mcp/src/lib/prisma.ts +0 -39
- package/templates/apps/mcp/src/lib/public-workspace.ts +0 -133
- package/templates/apps/mcp/src/lib/resolve-locale.ts +0 -30
- package/templates/apps/mcp/src/lib/shown-offerings.ts +0 -105
- package/templates/apps/mcp/src/lib/site-config.ts +0 -53
- package/templates/apps/mcp/src/lib/stripe-tax-signal.ts +0 -59
- package/templates/apps/mcp/src/request-context.ts +0 -52
- package/templates/apps/mcp/src/server.ts +0 -343
- package/templates/apps/mcp/src/serverless-app.ts +0 -88
- package/templates/apps/mcp/src/tools/audit.ts +0 -127
- package/templates/apps/mcp/src/tools/capture_lead.ts +0 -66
- package/templates/apps/mcp/src/tools/create_project.ts +0 -134
- package/templates/apps/mcp/src/tools/get_business_hours.ts +0 -68
- package/templates/apps/mcp/src/tools/get_faq.ts +0 -71
- package/templates/apps/mcp/src/tools/get_locations.ts +0 -88
- package/templates/apps/mcp/src/tools/get_offerings.ts +0 -96
- package/templates/apps/mcp/src/tools/get_pricing.ts +0 -94
- package/templates/apps/mcp/src/tools/get_site_info.ts +0 -86
- package/templates/apps/mcp/src/tools/index.ts +0 -138
- package/templates/apps/mcp/src/tools/list_pages.ts +0 -68
- package/templates/apps/mcp/src/tools/person_notes.ts +0 -25
- package/templates/apps/mcp/src/tools/proposals.ts +0 -27
- package/templates/apps/mcp/src/tools/purchase.ts +0 -205
- package/templates/apps/mcp/src/tools/read_content.ts +0 -81
- package/templates/apps/mcp/src/tools/request_callback.ts +0 -52
- package/templates/apps/mcp/src/tools/search_content.ts +0 -63
- package/templates/apps/mcp/src/tools/subscribe_newsletter.ts +0 -54
- package/templates/apps/mcp/src/workspace-server.ts +0 -224
- package/templates/database/CHANGELOG.md +0 -981
- package/templates/database/LICENSE +0 -202
- package/templates/database/NOTICE +0 -2
- package/templates/database/README.md +0 -243
- package/templates/database/__tests__/agents.db.test.ts +0 -320
- package/templates/database/__tests__/appointment.db.test.ts +0 -106
- package/templates/database/__tests__/artifact-content-store.db.test.ts +0 -316
- package/templates/database/__tests__/composite-fence.db.test.ts +0 -206
- package/templates/database/__tests__/consent-ledger.db.test.ts +0 -345
- package/templates/database/__tests__/consent-source-checkout-migration.test.ts +0 -79
- package/templates/database/__tests__/fence-fan-out.db.test.ts +0 -715
- package/templates/database/__tests__/fixtures/appointment-create-probe.ts +0 -79
- package/templates/database/__tests__/fixtures/person-backfill.json +0 -264
- package/templates/database/__tests__/fixtures/person-contact-backfill.json +0 -182
- package/templates/database/__tests__/fixtures/project-listing-consent-probe.ts +0 -100
- package/templates/database/__tests__/flow-completion-migration.test.ts +0 -115
- package/templates/database/__tests__/flow-completion.db.test.ts +0 -136
- package/templates/database/__tests__/flow-workspace-key.db.test.ts +0 -263
- package/templates/database/__tests__/flows-listing-diagnostic.test.ts +0 -392
- package/templates/database/__tests__/flows-presets.test.ts +0 -173
- package/templates/database/__tests__/in-page-magnets-migration.test.ts +0 -161
- package/templates/database/__tests__/lead-idempotency-key.db.test.ts +0 -92
- package/templates/database/__tests__/member-area.db.test.ts +0 -257
- package/templates/database/__tests__/member-contract-migration.test.ts +0 -85
- package/templates/database/__tests__/member-contract.db.test.ts +0 -413
- package/templates/database/__tests__/offerings-checkout-session.db.test.ts +0 -270
- package/templates/database/__tests__/offerings-migration.test.ts +0 -197
- package/templates/database/__tests__/offerings-shown-price-ids-migration.test.ts +0 -86
- package/templates/database/__tests__/offerings.db.test.ts +0 -303
- package/templates/database/__tests__/outbound-message-action.db.test.ts +0 -80
- package/templates/database/__tests__/person-contact.db.test.ts +0 -563
- package/templates/database/__tests__/person-notes.db.test.ts +0 -249
- package/templates/database/__tests__/person.db.test.ts +0 -586
- package/templates/database/__tests__/piece-kind-migration.test.ts +0 -67
- package/templates/database/__tests__/piece-kind.db.test.ts +0 -208
- package/templates/database/__tests__/prefixed-ids.db.test.ts +0 -222
- package/templates/database/__tests__/project-listing-consent-at.db.test.ts +0 -111
- package/templates/database/__tests__/seed.test.ts +0 -272
- package/templates/database/__tests__/spoke-registry.db.test.ts +0 -191
- package/templates/database/__tests__/tenancy.test.ts +0 -141
- package/templates/database/__tests__/trial-magnet-migration.test.ts +0 -186
- package/templates/database/__tests__/user-cascade.test.ts +0 -140
- package/templates/database/_gitignore +0 -8
- package/templates/database/auth/.gitkeep +0 -0
- package/templates/database/auth/schema.prisma +0 -641
- package/templates/database/config/.gitkeep +0 -0
- package/templates/database/config/schema.prisma +0 -441
- package/templates/database/content/.gitkeep +0 -0
- package/templates/database/content/schema.prisma +0 -339
- package/templates/database/eslint.config.mjs +0 -69
- package/templates/database/flows/listing-diagnostic.ts +0 -182
- package/templates/database/flows/presets.ts +0 -315
- package/templates/database/inbox/.gitkeep +0 -0
- package/templates/database/inbox/README.md +0 -3
- package/templates/database/inbox/__tests__/schema.test.ts +0 -44
- package/templates/database/inbox/schema.prisma +0 -1447
- package/templates/database/jest.config.cjs +0 -36
- package/templates/database/migrations/20260508000000_add_inbox_namespace/migration.sql +0 -328
- package/templates/database/migrations/20260513000000_better_auth_migration/migration.sql +0 -100
- package/templates/database/migrations/20260515000000_add_user_billing_fields/migration.sql +0 -28
- package/templates/database/migrations/20260516000000_add_user_tier_care_plan_seat/migration.sql +0 -25
- package/templates/database/migrations/20260518000000_add_telemetry_records/migration.sql +0 -42
- package/templates/database/migrations/20260525000000_theme_wiring/migration.sql +0 -67
- package/templates/database/migrations/20260710000000_retire_commercial_tier/migration.sql +0 -21
- package/templates/database/migrations/20260712215647_add_multi_tenant_tenancy/migration.sql +0 -201
- package/templates/database/migrations/20260713143320_reanchor_site_config_to_workspace/migration.sql +0 -67
- package/templates/database/migrations/20260713174000_add_audit_logs/migration.sql +0 -46
- package/templates/database/migrations/20260713190000_drop_telemetry_records/migration.sql +0 -25
- package/templates/database/migrations/20260713192000_add_uuidv7_function/migration.sql +0 -49
- package/templates/database/migrations/20260713192429_prefixed_uuid_entity_ids/migration.sql +0 -197
- package/templates/database/migrations/20260713200000_add_org_billing/migration.sql +0 -32
- package/templates/database/migrations/20260714000000_add_lead_promotion_fields/migration.sql +0 -22
- package/templates/database/migrations/20260714010000_add_usage_billing_content_models/migration.sql +0 -151
- package/templates/database/migrations/20260714020000_add_usage_billing_auth_config_models/migration.sql +0 -223
- package/templates/database/migrations/20260714030000_credit_balance_non_negative/migration.sql +0 -22
- package/templates/database/migrations/20260714030000_widen_usage_billing_report_aggregates/migration.sql +0 -32
- package/templates/database/migrations/20260810233516_add_flow_engine_models/migration.sql +0 -40
- package/templates/database/migrations/20260811020000_add_flow_session_abandon_email_columns/migration.sql +0 -4
- package/templates/database/migrations/20260811030000_add_flow_session_abandon_email_index/migration.sql +0 -2
- package/templates/database/migrations/20260811040000_add_flow_session_segment/migration.sql +0 -2
- package/templates/database/migrations/20260811050000_add_deliverable_models/migration.sql +0 -29
- package/templates/database/migrations/20260812000000_add_deliverable_grant_send_columns/migration.sql +0 -6
- package/templates/database/migrations/20260902222948_add_waitlist_experiment_models/migration.sql +0 -39
- package/templates/database/migrations/20260902224500_add_waitlist_id_format_checks/migration.sql +0 -24
- package/templates/database/migrations/20260903004112_add_flow_session_flags_aeo_score/migration.sql +0 -3
- package/templates/database/migrations/20260903010000_add_playbook_instance/migration.sql +0 -33
- package/templates/database/migrations/20260904000000_add_waitlist_followup_send/migration.sql +0 -30
- package/templates/database/migrations/20260905230000_add_flow_checkout/migration.sql +0 -47
- package/templates/database/migrations/20260906000000_add_flow_checkout_idempotency/migration.sql +0 -16
- package/templates/database/migrations/20260907120000_add_project_listing/migration.sql +0 -47
- package/templates/database/migrations/20260907130000_add_project_listing_slack_columns/migration.sql +0 -10
- package/templates/database/migrations/20260907180000_add_listing_csv_send/migration.sql +0 -26
- package/templates/database/migrations/20260909120000_project_listings_platform/migration.sql +0 -90
- package/templates/database/migrations/20260909180000_listing_draft_and_fields/migration.sql +0 -174
- package/templates/database/migrations/20260910120000_listing_public_site_key/migration.sql +0 -14
- package/templates/database/migrations/20260911120000_listing_copy_edit_audit/migration.sql +0 -25
- package/templates/database/migrations/20260911140000_listing_structured_address/migration.sql +0 -32
- package/templates/database/migrations/20260911180000_consent_grants/migration.sql +0 -71
- package/templates/database/migrations/20260911200000_listing_site_answers/migration.sql +0 -30
- package/templates/database/migrations/20260912120000_listing_owner_link/migration.sql +0 -49
- package/templates/database/migrations/20260914120000_listing_founder_identity/migration.sql +0 -123
- package/templates/database/migrations/20260915120000_project_listing_solution/migration.sql +0 -15
- package/templates/database/migrations/20260916120000_artifact_content_store/migration.sql +0 -158
- package/templates/database/migrations/20260917120000_callback_request_confirm/migration.sql +0 -40
- package/templates/database/migrations/20260918120000_add_appointment/migration.sql +0 -67
- package/templates/database/migrations/20260918120000_asset_metadata_columns/migration.sql +0 -70
- package/templates/database/migrations/20260919120000_flow_workspace_key/migration.sql +0 -181
- package/templates/database/migrations/20260919130000_flow_definition_admin_columns/migration.sql +0 -172
- package/templates/database/migrations/20260919130000_workspace_meetings/migration.sql +0 -41
- package/templates/database/migrations/20260919140000_inbox_workspace_key/migration.sql +0 -185
- package/templates/database/migrations/20260920120000_lead_handled_at/migration.sql +0 -70
- package/templates/database/migrations/20260920130000_lead_workspace_source_index/migration.sql +0 -57
- package/templates/database/migrations/20260921120000_deliverable_grant_workspace_key/migration.sql +0 -68
- package/templates/database/migrations/20260922120000_tenancy_fence/migration.sql +0 -1067
- package/templates/database/migrations/20260923120000_listing_capturing_magnet/migration.sql +0 -210
- package/templates/database/migrations/20261003120000_spoke_registry/migration.sql +0 -80
- package/templates/database/migrations/20261003130000_scheduling_connection/migration.sql +0 -49
- package/templates/database/migrations/20261005120000_agents/migration.sql +0 -84
- package/templates/database/migrations/20261008120000_user_last_workspace/migration.sql +0 -35
- package/templates/database/migrations/20261008130000_lead_idempotency_key/migration.sql +0 -20
- package/templates/database/migrations/20261009120000_agent_grants/migration.sql +0 -33
- package/templates/database/migrations/20261010120000_person/migration.sql +0 -106
- package/templates/database/migrations/20261010121000_person_backfill/migration.sql +0 -132
- package/templates/database/migrations/20261010130000_agent_grants_people_read/migration.sql +0 -20
- package/templates/database/migrations/20261011120000_member_area/migration.sql +0 -158
- package/templates/database/migrations/20261011130000_agent_grants_member_pieces_manage/migration.sql +0 -21
- package/templates/database/migrations/20261012120000_member_contract/migration.sql +0 -192
- package/templates/database/migrations/20261013120000_lead_spoke_checkout/migration.sql +0 -20
- package/templates/database/migrations/20261014120000_consent_ledger/migration.sql +0 -122
- package/templates/database/migrations/20261014120000_person_contact/migration.sql +0 -231
- package/templates/database/migrations/20261015120000_person_notes/migration.sql +0 -77
- package/templates/database/migrations/20261015120000_rate_limit_counters/migration.sql +0 -43
- package/templates/database/migrations/20261016120000_piece_kind/migration.sql +0 -95
- package/templates/database/migrations/20261017120000_outbound_message_action/migration.sql +0 -30
- package/templates/database/migrations/20261018120000_flow_completion/migration.sql +0 -52
- package/templates/database/migrations/20261019120000_consent_source_checkout/migration.sql +0 -27
- package/templates/database/migrations/20261020120000_offerings_data_model/migration.sql +0 -146
- package/templates/database/migrations/20261021120000_offerings_checkout_session/migration.sql +0 -77
- package/templates/database/migrations/20261022120000_in_page_magnets/migration.sql +0 -45
- package/templates/database/migrations/20261023120000_offerings_shown_price_ids/migration.sql +0 -47
- package/templates/database/migrations/20261024120000_organization_plan_checkout_session/migration.sql +0 -16
- package/templates/database/migrations/20261025120000_trial_magnet/migration.sql +0 -28
- package/templates/database/migrations/20261026120000_trial_magnet_proof_line/migration.sql +0 -23
- package/templates/database/migrations/migration_lock.toml +0 -3
- package/templates/database/ops/.gitkeep +0 -0
- package/templates/database/ops/schema.prisma +0 -43
- package/templates/database/package.json +0 -89
- package/templates/database/schema.prisma +0 -71
- package/templates/database/scripts/db-generate-locked.sh +0 -80
- package/templates/database/scripts/person-backfill.sql +0 -132
- package/templates/database/tenancy.ts +0 -183
- package/templates/database/tsconfig.build.json +0 -16
- package/templates/database/tsconfig.flows.json +0 -15
- package/templates/database/tsconfig.json +0 -16
- package/templates/database/tsconfig.tenancy.json +0 -14
|
@@ -56,10 +56,10 @@
|
|
|
56
56
|
"backToTop": "Back to top"
|
|
57
57
|
},
|
|
58
58
|
"consent": {
|
|
59
|
-
"title": "Cookie
|
|
60
|
-
"acceptLabel": "Accept",
|
|
61
|
-
"rejectLabel": "
|
|
62
|
-
"policyLinkLabel": "Privacy
|
|
59
|
+
"title": "Would You Like A Cookie? 🍪",
|
|
60
|
+
"acceptLabel": "Accept All",
|
|
61
|
+
"rejectLabel": "Decline All",
|
|
62
|
+
"policyLinkLabel": "Privacy Policy",
|
|
63
63
|
"dismissLabel": "Close",
|
|
64
64
|
"settingsLabel": "Cookie Settings"
|
|
65
65
|
},
|
|
@@ -385,7 +385,10 @@
|
|
|
385
385
|
"ctaHeadline": "While you wait",
|
|
386
386
|
"ctaDescription": "Have a look around, or get in touch if something comes up before we speak.",
|
|
387
387
|
"ctaPrimaryLabel": "Back to the site",
|
|
388
|
-
"ctaSecondaryLabel": "Contact us"
|
|
388
|
+
"ctaSecondaryLabel": "Contact us",
|
|
389
|
+
"bookedTimeHeading": "Your call",
|
|
390
|
+
"slackHeadline": "Your Slack channel",
|
|
391
|
+
"slackBody": "Slack will email you an invitation to a private channel with us. Accept it to talk before the call. If you don't use Slack yet, the email walks you through a free account and workspace."
|
|
389
392
|
}
|
|
390
393
|
},
|
|
391
394
|
"services": {
|
|
@@ -551,19 +554,19 @@
|
|
|
551
554
|
"signIn": {
|
|
552
555
|
"title": "Sign in",
|
|
553
556
|
"description": "Sign in to your account.",
|
|
554
|
-
"heading": "
|
|
557
|
+
"heading": "Sign in to {site}",
|
|
555
558
|
"notConfiguredSubhead": "Sign-in is not configured for this site yet. Set a provider's environment variables to enable it.",
|
|
556
559
|
"ssoPrefix": "Sign in with",
|
|
557
560
|
"google": "Google",
|
|
558
561
|
"github": "GitHub",
|
|
559
|
-
"email": "Email
|
|
562
|
+
"email": "Email",
|
|
560
563
|
"password": "Password",
|
|
561
564
|
"forgot": "Forgot password?",
|
|
562
565
|
"submit": "Sign in",
|
|
563
566
|
"orContinue": "Or continue with",
|
|
564
567
|
"signInFailed": "We couldn't sign you in. Check your details and try again.",
|
|
565
568
|
"providerFailed": "We couldn't start sign-in with that provider. Try again.",
|
|
566
|
-
"emailLinkSubmit": "
|
|
569
|
+
"emailLinkSubmit": "Send me a magic link",
|
|
567
570
|
"emailLinkDivider": "or",
|
|
568
571
|
"emailLinkSentHeading": "Check your email",
|
|
569
572
|
"emailLinkSentSubhead": "Look for a message from this site.",
|
|
@@ -575,10 +578,13 @@
|
|
|
575
578
|
"useEmailLink": "Email me a sign-in link instead",
|
|
576
579
|
"emailPlaceholder": "you@example.com",
|
|
577
580
|
"backTo": "Back to {site}",
|
|
578
|
-
"acknowledgement": "You acknowledge that you read and agree to our",
|
|
581
|
+
"acknowledgement": "You acknowledge that you read, and agree to our",
|
|
579
582
|
"termsLink": "Terms of Service",
|
|
580
583
|
"privacyLink": "Privacy Policy",
|
|
581
|
-
"
|
|
584
|
+
"acknowledgementAnd": "and our",
|
|
585
|
+
"acknowledgementEnd": ".",
|
|
586
|
+
"prospectPrompt": "Don't have an account?",
|
|
587
|
+
"prospectLink": "Sign up"
|
|
582
588
|
},
|
|
583
589
|
"auth": {
|
|
584
590
|
"signUpTitle": "Create an account",
|
|
@@ -589,17 +595,16 @@
|
|
|
589
595
|
"resetDescription": "Set a new password for your account.",
|
|
590
596
|
"verifyEmailTitle": "Check your email",
|
|
591
597
|
"verifyEmailDescription": "Follow the link we sent to continue.",
|
|
592
|
-
"email": "Email
|
|
598
|
+
"email": "Email",
|
|
593
599
|
"password": "Password",
|
|
594
600
|
"confirmPassword": "Confirm password",
|
|
595
601
|
"newPassword": "New password",
|
|
596
|
-
"orContinue": "
|
|
602
|
+
"orContinue": "or",
|
|
597
603
|
"ssoPrefix": "Continue with",
|
|
598
604
|
"google": "Google",
|
|
599
605
|
"github": "GitHub",
|
|
600
606
|
"backToSignIn": "Back to sign in",
|
|
601
|
-
"signUpHeading": "
|
|
602
|
-
"signUpSubhead": "Enter your details to get started.",
|
|
607
|
+
"signUpHeading": "Sign up",
|
|
603
608
|
"signUpSubmit": "Create account",
|
|
604
609
|
"signUpFooterPrompt": "Already have an account?",
|
|
605
610
|
"signUpFooterLink": "Sign in",
|
|
@@ -607,10 +612,14 @@
|
|
|
607
612
|
"signUpAgreementsRequired": "Accept the agreements to create an account.",
|
|
608
613
|
"signUpNotConfiguredSubhead": "Sign-up is not configured for this site yet. Set a provider's environment variables to enable it.",
|
|
609
614
|
"signUpFailed": "We couldn't create your account. Check your details and try again.",
|
|
615
|
+
"magicLinkSubmit": "Send me a magic link",
|
|
616
|
+
"signUpLinkSentBody": "A link to finish signing up is on its way. It works once and expires in 5 minutes.",
|
|
617
|
+
"signUpLinkBack": "Back to sign up",
|
|
618
|
+
"signUpLinkFailed": "We couldn't send a sign-up link. Try again.",
|
|
619
|
+
"signUpLinkRateLimited": "Too many requests. Wait a minute, then try again.",
|
|
620
|
+
"signUpLinkExpired": "That sign-up link has expired or was already used. Request a new one.",
|
|
610
621
|
"providerFailed": "We couldn't start sign-up with that provider. Try again.",
|
|
611
|
-
"
|
|
612
|
-
"invitationSubhead": "This site does not offer public sign-up.",
|
|
613
|
-
"invitationBody": "If you were invited, open the link in your invitation email to create your account.",
|
|
622
|
+
"invitationBody": "This site does not offer public sign-up. If you were invited, open the link in your invitation email to create your account.",
|
|
614
623
|
"forgotHeading": "Reset your password",
|
|
615
624
|
"forgotSubhead": "Enter your email and we will send a reset link.",
|
|
616
625
|
"forgotSubmit": "Send reset link",
|
|
@@ -921,7 +930,7 @@
|
|
|
921
930
|
"emptyDescription": "This site hasn't turned on sign-in for members yet. Check back soon, or contact the site owner.",
|
|
922
931
|
"signInLink": "Go to the sign-in page",
|
|
923
932
|
"homeLink": "Back to the site",
|
|
924
|
-
"hubHeadline": "Sign in to
|
|
933
|
+
"hubHeadline": "Sign in to {site}",
|
|
925
934
|
"hubDescription": "You sign in on our main site, then come straight back here.",
|
|
926
935
|
"hubSignIn": "Sign in",
|
|
927
936
|
"title": "Sign in"
|
|
@@ -1042,12 +1051,14 @@
|
|
|
1042
1051
|
},
|
|
1043
1052
|
"admin": {
|
|
1044
1053
|
"title": "Workspace settings",
|
|
1045
|
-
"description": "Your workspace name, site settings, and
|
|
1054
|
+
"description": "Your workspace name, site settings, team, flows and meeting types.",
|
|
1046
1055
|
"nav": {
|
|
1047
1056
|
"account": "Account",
|
|
1048
1057
|
"general": "General",
|
|
1049
1058
|
"site": "Site",
|
|
1050
|
-
"team": "Team"
|
|
1059
|
+
"team": "Team",
|
|
1060
|
+
"magnets": "Magnets",
|
|
1061
|
+
"meetings": "Meetings"
|
|
1051
1062
|
},
|
|
1052
1063
|
"general": {
|
|
1053
1064
|
"heading": "General",
|
|
@@ -1084,6 +1095,161 @@
|
|
|
1084
1095
|
"role": "Role",
|
|
1085
1096
|
"emptyHeadline": "No members yet",
|
|
1086
1097
|
"emptyDescription": "People with access to this workspace will appear here."
|
|
1098
|
+
},
|
|
1099
|
+
"magnets": {
|
|
1100
|
+
"heading": "Magnets",
|
|
1101
|
+
"lead": "Forms and lists that turn visitors into leads.",
|
|
1102
|
+
"unavailableHeadline": "Magnets aren't part of this site",
|
|
1103
|
+
"unavailableDescription": "This site was set up without flows, so there is nothing to manage here.",
|
|
1104
|
+
"newLabel": "New magnet",
|
|
1105
|
+
"newMenu": {
|
|
1106
|
+
"diagnostic": "New diagnostic",
|
|
1107
|
+
"waitlist": "New waitlist",
|
|
1108
|
+
"contact": "New contact",
|
|
1109
|
+
"newsletter": "New newsletter"
|
|
1110
|
+
},
|
|
1111
|
+
"kindLabels": {
|
|
1112
|
+
"specialReport": "Special report",
|
|
1113
|
+
"diagnostic": "Diagnostic",
|
|
1114
|
+
"listicle": "Listicle",
|
|
1115
|
+
"waitlist": "Waitlist",
|
|
1116
|
+
"contact": "Contact",
|
|
1117
|
+
"newsletter": "Newsletter"
|
|
1118
|
+
},
|
|
1119
|
+
"liveAriaLabel": "{title} live",
|
|
1120
|
+
"liveError": "Couldn't update. Try again.",
|
|
1121
|
+
"emptyHeadline": "No magnets yet",
|
|
1122
|
+
"emptyDescription": "Create a flow from the buttons above.",
|
|
1123
|
+
"wizard": {
|
|
1124
|
+
"pageTitle": {
|
|
1125
|
+
"diagnostic": "New diagnostic",
|
|
1126
|
+
"waitlist": "New waitlist",
|
|
1127
|
+
"contact": "New contact",
|
|
1128
|
+
"newsletter": "New newsletter"
|
|
1129
|
+
},
|
|
1130
|
+
"pageLead": {
|
|
1131
|
+
"diagnostic": "Ask a few questions, then recommend what to do next.",
|
|
1132
|
+
"waitlist": "Collect interest from people before you're ready to launch.",
|
|
1133
|
+
"contact": "Collect a short message from visitors who want to get in touch.",
|
|
1134
|
+
"newsletter": "Collect email addresses for your newsletter."
|
|
1135
|
+
},
|
|
1136
|
+
"backLabel": "Back",
|
|
1137
|
+
"continueLabel": "Continue",
|
|
1138
|
+
"createDraftLabel": "Create draft",
|
|
1139
|
+
"draftNote": "Starts as a draft. Switch it on from Magnets.",
|
|
1140
|
+
"landingPageNone": "None",
|
|
1141
|
+
"emptyValue": "—",
|
|
1142
|
+
"genericError": "Something went wrong. Please try again.",
|
|
1143
|
+
"choiceOptions": {
|
|
1144
|
+
"listLabel": "Choices",
|
|
1145
|
+
"choiceLabel": "Choice {n}",
|
|
1146
|
+
"valueLabel": "Choice {n} value",
|
|
1147
|
+
"pointsLabel": "Choice {n} points",
|
|
1148
|
+
"pointsHeading": "Points",
|
|
1149
|
+
"pointsHelp": "Optional. A visitor's total adds the points of every choice they pick.",
|
|
1150
|
+
"addChoice": "Add a choice",
|
|
1151
|
+
"removeChoice": "Remove choice {n}",
|
|
1152
|
+
"moveUp": "Move choice {n} up",
|
|
1153
|
+
"moveDown": "Move choice {n} down"
|
|
1154
|
+
},
|
|
1155
|
+
"flow": {
|
|
1156
|
+
"titleLabel": "Title",
|
|
1157
|
+
"slugLabel": "Slug",
|
|
1158
|
+
"slugHelpText": "Used in the flow's URL. Auto-fills from the title.",
|
|
1159
|
+
"landingPageLabel": "Landing page",
|
|
1160
|
+
"questionsSortableLabel": "Questions",
|
|
1161
|
+
"promptLabel": "Prompt",
|
|
1162
|
+
"answerTypeLabel": "Answer type",
|
|
1163
|
+
"optionsLabel": "Options",
|
|
1164
|
+
"optionsHelpText": "One per line.",
|
|
1165
|
+
"requiredLabel": "Required",
|
|
1166
|
+
"answerTypeOptionLabels": {
|
|
1167
|
+
"text": "Text",
|
|
1168
|
+
"email": "Email",
|
|
1169
|
+
"url": "URL",
|
|
1170
|
+
"single": "One choice",
|
|
1171
|
+
"multi": "Several choices"
|
|
1172
|
+
},
|
|
1173
|
+
"addQuestionLabel": "Add question",
|
|
1174
|
+
"removeQuestionLabel": "Remove question",
|
|
1175
|
+
"questionFallbackLabel": "Question",
|
|
1176
|
+
"recommendationsSortableLabel": "Recommendations",
|
|
1177
|
+
"offerNameLabel": "Offer",
|
|
1178
|
+
"offerPriceLabel": "Price",
|
|
1179
|
+
"offerQuestionLabel": "Recommend when",
|
|
1180
|
+
"offerOptionLabel": "Is",
|
|
1181
|
+
"offerReasonLabel": "Because",
|
|
1182
|
+
"addRecommendationLabel": "Add recommendation",
|
|
1183
|
+
"removeRecommendationLabel": "Remove recommendation",
|
|
1184
|
+
"recommendationFallbackLabel": "Recommendation",
|
|
1185
|
+
"offerNoQuestionsOption": "Add a single- or multiple-choice question first",
|
|
1186
|
+
"offerTriggerLabel": "Recommend when",
|
|
1187
|
+
"offerTriggerAnswer": "An answer is given",
|
|
1188
|
+
"offerTriggerThreshold": "Total points are at least",
|
|
1189
|
+
"offerThresholdLabel": "Points",
|
|
1190
|
+
"deliverableLabel": "Deliverable",
|
|
1191
|
+
"deliverableHelpText": "What people get when they finish this flow, if anything.",
|
|
1192
|
+
"emailSubjectLabel": "Email subject",
|
|
1193
|
+
"emailBodyLabel": "Email body",
|
|
1194
|
+
"emailCtaLabel": "Email button text",
|
|
1195
|
+
"flowUrlLabel": "Flow URL",
|
|
1196
|
+
"validation": {
|
|
1197
|
+
"titleRequired": "Enter a title.",
|
|
1198
|
+
"titleTooLong": "Title is too long.",
|
|
1199
|
+
"slugInvalid": "Enter a valid slug.",
|
|
1200
|
+
"questionsRequired": "Add at least one question.",
|
|
1201
|
+
"promptRequired": "Every question needs a prompt.",
|
|
1202
|
+
"optionsRequired": "Add at least one option.",
|
|
1203
|
+
"optionTooLong": "An option is too long.",
|
|
1204
|
+
"offerFieldsRequired": "Fill in Name, Price, and Because for every recommendation.",
|
|
1205
|
+
"offerQuestionRequired": "Choose a question for every recommendation.",
|
|
1206
|
+
"offerOptionRequired": "Choose a valid answer for every recommendation.",
|
|
1207
|
+
"pointsNeedRecommendation": "Points need at least one recommendation.",
|
|
1208
|
+
"thresholdNeedsPoints": "A points threshold needs at least one choice with points.",
|
|
1209
|
+
"completionEmailRequired": "Add an email subject and body, or clear the Deliverable field.",
|
|
1210
|
+
"recommendationsRequired": "Add at least one recommendation.",
|
|
1211
|
+
"offeringRequired": "Choose a price for every recommendation.",
|
|
1212
|
+
"offerReasonRequired": "Fill in Because for every recommendation."
|
|
1213
|
+
}
|
|
1214
|
+
}
|
|
1215
|
+
}
|
|
1216
|
+
},
|
|
1217
|
+
"meetings": {
|
|
1218
|
+
"heading": "Meetings",
|
|
1219
|
+
"lead": "Meeting types visitors can book from your site.",
|
|
1220
|
+
"unavailableHeadline": "Meetings aren't part of this site",
|
|
1221
|
+
"unavailableDescription": "This site was set up without scheduling, so there is nothing to manage here.",
|
|
1222
|
+
"emptyHeadline": "No meeting types yet",
|
|
1223
|
+
"emptyDescription": "Meeting types are pulled from Cal.com, off by default. Turning one on gives it a /meet page.",
|
|
1224
|
+
"unconfiguredHeadline": "Scheduling isn't connected yet",
|
|
1225
|
+
"unconfiguredDescription": "Connect a Cal.com account to list your meeting types here.",
|
|
1226
|
+
"durationMinutesLabel": "{n} min",
|
|
1227
|
+
"liveAriaLabel": "{title} live",
|
|
1228
|
+
"liveError": "Couldn't update. Try again.",
|
|
1229
|
+
"detail": {
|
|
1230
|
+
"backLabel": "Meetings",
|
|
1231
|
+
"captionUnit": "Meeting",
|
|
1232
|
+
"statusLive": "Live",
|
|
1233
|
+
"statusOff": "Off",
|
|
1234
|
+
"customersSwitchLabel": "Members only",
|
|
1235
|
+
"customersAriaLabel": "{title}: members only",
|
|
1236
|
+
"membersOnlyHint": "Signed-in members can use this. A live item stays public.",
|
|
1237
|
+
"privateSwitchLabel": "Private",
|
|
1238
|
+
"privateAriaLabel": "{title}: private",
|
|
1239
|
+
"privateHint": "Listed on /private instead of /meet. Anyone with the link can still book.",
|
|
1240
|
+
"roleNote": "Only an owner or admin can manage meeting types.",
|
|
1241
|
+
"fromProviderHeading": "From Cal.com",
|
|
1242
|
+
"durationLabel": "Duration",
|
|
1243
|
+
"priceLabel": "Price",
|
|
1244
|
+
"linkLabel": "Link",
|
|
1245
|
+
"timeZoneLabel": "Time zone",
|
|
1246
|
+
"priceFree": "Free",
|
|
1247
|
+
"customersOnToast": "Members only: on for {title}",
|
|
1248
|
+
"customersOffToast": "Members only: off for {title}",
|
|
1249
|
+
"privateOnToast": "Private: on for {title}",
|
|
1250
|
+
"privateOffToast": "Private: off for {title}",
|
|
1251
|
+
"errorToast": "Couldn't update"
|
|
1252
|
+
}
|
|
1087
1253
|
}
|
|
1088
1254
|
},
|
|
1089
1255
|
"edit": {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* only its import line moves. `/purchase/success` and `/purchase/cancel`
|
|
7
7
|
* need the identical check (D12's shape-2 gate: the pages ship BASE TREE
|
|
8
8
|
* and gate at REQUEST time on this claim, exactly as the checkout
|
|
9
|
-
* primitives do — `
|
|
9
|
+
* primitives do — `packages/api/src/lib/require-commerce-claim.ts`), so this is
|
|
10
10
|
* extracted ONCE and imported three times rather than copied a third time.
|
|
11
11
|
*
|
|
12
12
|
* Fail-closed (NFR-3 mirror): anything short of a positively-held,
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# customizations.yaml — every source file under apps/ this site authored,
|
|
2
|
+
# mapped to the issue that asked for it and the build-in decision.
|
|
3
|
+
#
|
|
4
|
+
# A customization is the exception: AILK builds it in unless AILK decides not
|
|
5
|
+
# to. `pnpm architecture` (and the PostToolUse hook) refuses a code file under
|
|
6
|
+
# apps/ the scaffold did not ship when no entry's paths match it. Record the
|
|
7
|
+
# entry BEFORE you write the file.
|
|
8
|
+
#
|
|
9
|
+
# An entry:
|
|
10
|
+
# - id: booking-embed # unique; lowercase letters, digits, hyphens
|
|
11
|
+
# paths: # one or more; under apps/; ** spans
|
|
12
|
+
# - "apps/web/components/booking/**" # segments, * stays inside one;
|
|
13
|
+
# request: "acme/acme-site#12" # the issue that asked; <owner/repo>#N or #N
|
|
14
|
+
# decision: "build-in: ailk#9300 — removed when the bump lands"
|
|
15
|
+
#
|
|
16
|
+
# The decision is exactly one of:
|
|
17
|
+
# build-in: ailk#<N>[ — <text>] AILK builds it; the site takes the bump,
|
|
18
|
+
# and this copy and its tests go then.
|
|
19
|
+
# An entry whose paths still match test
|
|
20
|
+
# files is refused: tests belong in AILK.
|
|
21
|
+
# build-in: site — <decider>, <YYYY-MM-DD>, <reason>
|
|
22
|
+
# AILK decided not to; the site keeps it.
|
|
23
|
+
# undecided only while the grace line below is in
|
|
24
|
+
# the future (strictly after today, UTC):
|
|
25
|
+
# undecided_ok_until: 2027-01-31
|
|
26
|
+
#
|
|
27
|
+
# Seeding an existing site:
|
|
28
|
+
# 1. Copy tools/lint-architecture.ts (and this file, if absent) from a fresh
|
|
29
|
+
# scaffold of this create-ailk version.
|
|
30
|
+
# 2. Run `create-ailk --sync-architecture <the modules in architecture.yaml's
|
|
31
|
+
# header>`.
|
|
32
|
+
# 3. If .ailk-template-files.json is missing, run `create-ailk update`.
|
|
33
|
+
# 4. Set `undecided_ok_until` to the groundskeeper's deadline.
|
|
34
|
+
# 5. Change the last line of this file to `customizations:` and append the
|
|
35
|
+
# output of `pnpm exec tsx tools/lint-architecture.ts --seed-customizations`.
|
|
36
|
+
# 6. Run `pnpm architecture`, which prints `architecture: OK`.
|
|
37
|
+
customizations: []
|
|
@@ -1,20 +1,16 @@
|
|
|
1
|
-
//
|
|
1
|
+
// The schema and every migration ship in the installed @working-theory/database;
|
|
2
|
+
// this site carries none. Take new migrations by bumping that dependency, then
|
|
3
|
+
// run `pnpm db:migrate:deploy`. Never add a migration or a .prisma file here.
|
|
2
4
|
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
// Migrate-time DB URL (DATABASE_URL_NON_POOLED, direct) is read here and
|
|
6
|
-
// consumed by `prisma migrate`. The two-env-var contract from the migration
|
|
7
|
-
// brief's D2 is preserved.
|
|
8
|
-
//
|
|
9
|
-
// `dotenv/config` is imported because the Prisma 7 CLI runs in its own process
|
|
10
|
-
// and does not inherit .env values from a parent shell.
|
|
11
|
-
|
|
5
|
+
// DATABASE_URL_NON_POOLED is the direct connection `prisma migrate` uses; the
|
|
6
|
+
// apps' pooled DATABASE_URL is read at runtime, never here.
|
|
12
7
|
import "dotenv/config";
|
|
13
8
|
import { defineConfig } from "prisma/config";
|
|
14
9
|
|
|
10
|
+
const pkg = "../node_modules/@working-theory/database";
|
|
11
|
+
|
|
15
12
|
export default defineConfig({
|
|
16
|
-
schema:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
},
|
|
13
|
+
schema: pkg,
|
|
14
|
+
migrations: { path: `${pkg}/migrations` },
|
|
15
|
+
datasource: { url: process.env.DATABASE_URL_NON_POOLED },
|
|
20
16
|
});
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* `update: {}` clause leaves existing rows untouched).
|
|
17
17
|
*
|
|
18
18
|
* Run via:
|
|
19
|
-
* pnpm
|
|
19
|
+
* pnpm db:seed:test
|
|
20
20
|
*
|
|
21
21
|
* Environment variables read:
|
|
22
22
|
* AILK_TEST_AUTH_ENABLED — must be the literal string "true" or this
|
|
@@ -27,7 +27,7 @@ import "dotenv/config";
|
|
|
27
27
|
|
|
28
28
|
import { PrismaPg } from "@prisma/adapter-pg";
|
|
29
29
|
|
|
30
|
-
import { PrismaClient } from "
|
|
30
|
+
import { PrismaClient } from "@working-theory/database";
|
|
31
31
|
|
|
32
32
|
// Fixed, well-known ids from the ADR-0031 reserved sentinel range (zero
|
|
33
33
|
// timestamp + version 7 + variant 8 + counter) — valid-shaped ids the
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* and a multi-tenant deployment that already has real Workspaces.
|
|
20
20
|
*
|
|
21
21
|
* Run via:
|
|
22
|
-
* pnpm
|
|
22
|
+
* pnpm db:seed
|
|
23
23
|
*/
|
|
24
24
|
import "dotenv/config";
|
|
25
25
|
|
|
@@ -47,14 +47,14 @@ import {
|
|
|
47
47
|
trialFlowConfig,
|
|
48
48
|
} from "@working-theory/validation";
|
|
49
49
|
|
|
50
|
-
import type { PrismaClient } from "
|
|
50
|
+
import type { PrismaClient } from "@working-theory/database";
|
|
51
51
|
import {
|
|
52
52
|
DEFAULT_ORG_ID,
|
|
53
53
|
DEFAULT_ORG_SLUG,
|
|
54
54
|
DEFAULT_WORKSPACE_ID,
|
|
55
55
|
DEFAULT_WORKSPACE_SLUG,
|
|
56
56
|
OPERATOR_MEMBERSHIP_ID,
|
|
57
|
-
} from "
|
|
57
|
+
} from "@working-theory/database/tenancy";
|
|
58
58
|
|
|
59
59
|
// Re-exported so existing consumers (e.g. __tests__/seed.test.ts) keep
|
|
60
60
|
// importing the well-known ids from this module — `database/tenancy.ts` is
|
|
@@ -253,11 +253,11 @@ async function main(): Promise<void> {
|
|
|
253
253
|
// (spec §5.2 Quality Constraints), matching the DI note on seed-test.ts's
|
|
254
254
|
// sibling and the lazy-require pattern in apps-paid/admin/auth.ts.
|
|
255
255
|
const [{ PrismaClient: RealPrismaClient }, { PrismaPg }] = await Promise.all([
|
|
256
|
-
import("
|
|
256
|
+
import("@working-theory/database"),
|
|
257
257
|
import("@prisma/adapter-pg"),
|
|
258
258
|
]);
|
|
259
259
|
// Prisma 7 requires an explicit driver adapter (mirrors
|
|
260
|
-
//
|
|
260
|
+
// packages/api/src/lib/prisma.ts) — `new PrismaClient()` with no adapter throws.
|
|
261
261
|
const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL });
|
|
262
262
|
const prisma = new RealPrismaClient({ adapter });
|
|
263
263
|
try {
|
package/templates/package.json
CHANGED
|
@@ -13,11 +13,11 @@
|
|
|
13
13
|
"type-check": "pnpm -r --if-present type-check",
|
|
14
14
|
"format": "prettier --write .",
|
|
15
15
|
"format:check": "prettier --check .",
|
|
16
|
-
"db:generate": "
|
|
17
|
-
"db:migrate": "
|
|
18
|
-
"db:
|
|
19
|
-
"db:seed": "
|
|
20
|
-
"db:studio": "
|
|
16
|
+
"db:generate": "prisma generate --config database/prisma.config.ts",
|
|
17
|
+
"db:migrate:deploy": "prisma migrate deploy --config database/prisma.config.ts",
|
|
18
|
+
"db:seed": "tsx database/seed.ts",
|
|
19
|
+
"db:seed:test": "tsx database/seed-test.ts",
|
|
20
|
+
"db:studio": "prisma studio --config database/prisma.config.ts",
|
|
21
21
|
"architecture": "tsx tools/lint-architecture.ts",
|
|
22
22
|
"claude-md:check": "tsx tools/check-claude-md.ts",
|
|
23
23
|
"preflight": "pnpm architecture && pnpm claude-md:check && pnpm type-check && pnpm lint && pnpm build"
|
|
@@ -50,6 +50,7 @@
|
|
|
50
50
|
"gray-matter": "^4.0.3",
|
|
51
51
|
"http-server": "^14.1.1",
|
|
52
52
|
"jest": "^30.4.2",
|
|
53
|
+
"jest-junit": "^17.0.0",
|
|
53
54
|
"jiti": "^2.4.2",
|
|
54
55
|
"prettier": "^3.9.4",
|
|
55
56
|
"publint": "^0.3.24",
|
|
@@ -63,7 +64,12 @@
|
|
|
63
64
|
"yaml": "^2.9.0",
|
|
64
65
|
"zod": "^4.2.1",
|
|
65
66
|
"zod-to-ts": "^2.1.0",
|
|
66
|
-
"@working-theory/cli": "workspace:*"
|
|
67
|
+
"@working-theory/cli": "workspace:*",
|
|
68
|
+
"@working-theory/database": "workspace:*",
|
|
69
|
+
"@working-theory/validation": "workspace:*",
|
|
70
|
+
"@prisma/adapter-pg": "^7.8.0",
|
|
71
|
+
"prisma": "^7.8.0",
|
|
72
|
+
"dotenv": "^17.4.2"
|
|
67
73
|
},
|
|
68
74
|
"packageManager": "pnpm@10.34.5+sha512.a4ee05f2f73658255bd6a89859c065a45c28a57daefae2c893a168ee2b73168c37b91e83e57ea67654ad03f03031746430e8bce38e362e042605fb8abc80192e",
|
|
69
75
|
"engines": {
|
package/templates/project.yaml
CHANGED
|
@@ -36,18 +36,26 @@ verification:
|
|
|
36
36
|
preflight: pnpm preflight
|
|
37
37
|
architecture_rules: architecture.yaml
|
|
38
38
|
|
|
39
|
+
ci:
|
|
40
|
+
# The status checks a pull request must pass before it merges — the contexts
|
|
41
|
+
# to make required on the default branch. `preflight` is posted by the job of
|
|
42
|
+
# that name in .github/workflows/ci.yml, which this scaffold ships. The two `hold /`
|
|
43
|
+
# contexts back the on-hold and security-review merge holds; they are posted
|
|
44
|
+
# by the merge-hold workflows a harness installs, not by this scaffold, so
|
|
45
|
+
# require them only once something on this repo posts them.
|
|
46
|
+
required_checks:
|
|
47
|
+
- preflight
|
|
48
|
+
- "hold / On Hold"
|
|
49
|
+
- "hold / Security Review Pending"
|
|
50
|
+
|
|
39
51
|
hard_floors:
|
|
40
52
|
# Surfaces that always require human review on merge, regardless of
|
|
41
53
|
# automation level. Adjust to your repo's architecture.
|
|
42
54
|
#
|
|
43
|
-
# AILK defaults assume the three-app split (web/api/mcp)
|
|
44
|
-
#
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
reason: public API surface — signatures require human review
|
|
48
|
-
- paths:
|
|
49
|
-
- "apps/mcp/src/tools/**"
|
|
50
|
-
reason: MCP tool surface — signatures require human review
|
|
55
|
+
# AILK defaults assume the three-app split (web/api/mcp). Neither the API
|
|
56
|
+
# route surface nor the MCP tool surface is floored here: this site's
|
|
57
|
+
# apps/api and apps/mcp are boot files, and the routes and tools ship in
|
|
58
|
+
# @working-theory/api and @working-theory/mcp-server.
|
|
51
59
|
- kind: pricing
|
|
52
60
|
- kind: stripe_live_mode
|
|
53
61
|
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* global process, __dirname */
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Shared Jest `reporters` — one JUnit XML file per workspace package (#9430).
|
|
6
|
+
*
|
|
7
|
+
* The heavy `Test — full` check runs every workspace's jest in one log. When
|
|
8
|
+
* `JEST_JUNIT_OUTPUT_DIR` is set (scripts/test-sharded.ts sets it and prints
|
|
9
|
+
* the directory at the top of the run), every jest run also writes
|
|
10
|
+
* `<JEST_JUNIT_OUTPUT_DIR>/<package>.xml` through jest-junit, so each
|
|
11
|
+
* package's results land in one artifact directory, named by package.
|
|
12
|
+
*
|
|
13
|
+
* Unset — a plain `jest` or `pnpm test` — this is `["default"]`, jest's own
|
|
14
|
+
* default, so nothing changes and nothing is written (and jest-junit is never
|
|
15
|
+
* loaded, which keeps the create-ailk scaffold's copied configs working).
|
|
16
|
+
*
|
|
17
|
+
* Every committed `jest.config.cjs` loads it next to its timezone pin:
|
|
18
|
+
*
|
|
19
|
+
* reporters: require("../../tools/jest/reporters.cjs"),
|
|
20
|
+
*
|
|
21
|
+
* The package name comes from `package.json` in jest's working directory —
|
|
22
|
+
* turbo runs each workspace's `test` script there. The root contract suite
|
|
23
|
+
* runs from the repo root and is written as `root-jest.xml`. The scaffold
|
|
24
|
+
* ships this file at the same path (`SNAPSHOT_FILES` in
|
|
25
|
+
* packages/create-ailk/scripts/build-templates.mjs), as it ships
|
|
26
|
+
* `pin-timezone.cjs`.
|
|
27
|
+
*/
|
|
28
|
+
const { readFileSync } = require("node:fs");
|
|
29
|
+
const { join, resolve } = require("node:path");
|
|
30
|
+
|
|
31
|
+
const REPO_ROOT = resolve(__dirname, "..", "..");
|
|
32
|
+
|
|
33
|
+
function reportName() {
|
|
34
|
+
const cwd = process.cwd();
|
|
35
|
+
if (resolve(cwd) === REPO_ROOT) return "root-jest";
|
|
36
|
+
try {
|
|
37
|
+
const { name } = JSON.parse(readFileSync(join(cwd, "package.json"), "utf8"));
|
|
38
|
+
// `@working-theory/ui` → `working-theory__ui`
|
|
39
|
+
if (name) return name.replace(/^@/, "").replace(/\//g, "__");
|
|
40
|
+
} catch {
|
|
41
|
+
// no readable package.json — fall back to the directory name
|
|
42
|
+
}
|
|
43
|
+
return cwd.split(/[\\/]/).pop() || "unknown";
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const NAME = process.env.JEST_JUNIT_OUTPUT_DIR ? reportName() : "";
|
|
47
|
+
|
|
48
|
+
module.exports = NAME
|
|
49
|
+
? [
|
|
50
|
+
"default",
|
|
51
|
+
[
|
|
52
|
+
require.resolve("jest-junit"),
|
|
53
|
+
{
|
|
54
|
+
outputName: `${NAME}.xml`,
|
|
55
|
+
suiteName: NAME,
|
|
56
|
+
suiteNameTemplate: "{filepath}",
|
|
57
|
+
classNameTemplate: "{filepath}",
|
|
58
|
+
titleTemplate: "{title}",
|
|
59
|
+
ancestorSeparator: " › ",
|
|
60
|
+
addFileAttribute: "true",
|
|
61
|
+
reportTestSuiteErrors: "true",
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
]
|
|
65
|
+
: ["default"];
|