create-ailk 0.1.0 → 0.2.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.
Files changed (620) hide show
  1. package/README.md +124 -3
  2. package/component-catalog.md +456 -0
  3. package/dist/cli.js +92 -16
  4. package/dist/component-catalog.d.ts +11 -0
  5. package/dist/component-catalog.js +39 -0
  6. package/dist/copy.d.ts +7 -0
  7. package/dist/copy.js +24 -0
  8. package/dist/derive-architecture.d.ts +13 -0
  9. package/dist/derive-architecture.js +238 -0
  10. package/dist/index.d.ts +7 -2
  11. package/dist/index.js +19 -2
  12. package/dist/lib/extract-module-bundle.d.ts +16 -0
  13. package/dist/lib/extract-module-bundle.js +184 -0
  14. package/dist/lib/fetch-module.d.ts +55 -0
  15. package/dist/lib/fetch-module.js +125 -0
  16. package/dist/lib/module-license-gate.d.ts +48 -0
  17. package/dist/lib/module-license-gate.js +67 -0
  18. package/dist/lib/module-tier.d.ts +35 -0
  19. package/dist/lib/module-tier.js +37 -0
  20. package/dist/module-architecture.d.ts +175 -0
  21. package/dist/module-architecture.js +663 -0
  22. package/dist/parse-args.d.ts +47 -1
  23. package/dist/parse-args.js +143 -2
  24. package/dist/programmatic.d.ts +160 -3
  25. package/dist/programmatic.js +196 -7
  26. package/dist/surfaces.d.ts +211 -0
  27. package/dist/surfaces.js +532 -0
  28. package/dist/sync-routes.d.ts +92 -0
  29. package/dist/sync-routes.js +350 -0
  30. package/package.json +12 -5
  31. package/templates/.claude/rules/architecture.md +6 -2
  32. package/templates/.claude/skills/README.md +9 -9
  33. package/templates/.claude/skills/add-schema/SKILL.md +14 -7
  34. package/templates/.claude/skills/add-schema/references/schema-types.md +109 -6
  35. package/templates/.claude/skills/provision-config/SKILL.md +1 -1
  36. package/templates/.claude/skills/scaffold-commerce/SKILL.md +498 -1
  37. package/templates/.claude/skills/scaffold-commerce/templates/checkout-route.template.ts +370 -0
  38. package/templates/.claude/skills/scaffold-commerce/templates/invoice-route.template.ts +376 -0
  39. package/templates/.claude/skills/scaffold-commerce/templates/payment-link-route.template.ts +471 -0
  40. package/templates/.claude/skills/scaffold-commerce/templates/portal-route.template.ts +365 -0
  41. package/templates/.claude/skills/scaffold-commerce/templates/stripe-config.template.ts +60 -0
  42. package/templates/.claude/skills/scaffold-commerce/templates/subscription-route.template.ts +446 -0
  43. package/templates/.claude/skills/suggest-site-pages/references/categories.md +4 -4
  44. package/templates/.env.example +126 -2
  45. package/templates/CLAUDE.md +11 -5
  46. package/templates/README.md +1 -1
  47. package/templates/apps/api/.env.example +38 -0
  48. package/templates/apps/api/CLAUDE.md +78 -1
  49. package/templates/apps/api/LICENSE +201 -0
  50. package/templates/apps/api/api/index.ts +6 -141
  51. package/templates/apps/api/jest.config.cjs +16 -0
  52. package/templates/apps/api/package.json +22 -6
  53. package/templates/apps/api/src/__tests__/module-exclusion.test.ts +141 -0
  54. package/templates/apps/api/src/__tests__/server.test.ts +46 -0
  55. package/templates/apps/api/src/__tests__/vercel-handler.test.ts +211 -0
  56. package/templates/apps/api/src/bin/abandon-sweep.ts +42 -0
  57. package/templates/apps/api/src/bin/deliverable-resend.ts +144 -0
  58. package/templates/apps/api/src/bin/deliverable-upload.ts +114 -0
  59. package/templates/apps/api/src/bin/followup-sweep.ts +44 -0
  60. package/templates/apps/api/src/bin/listing-csv-sweep.ts +46 -0
  61. package/templates/apps/api/src/bin/seed-presets.ts +58 -0
  62. package/templates/apps/api/src/bin/seed-waitlist-experiments.ts +104 -0
  63. package/templates/apps/api/src/bin/session-retention-sweep.ts +46 -0
  64. package/templates/apps/api/src/cli.ts +5 -11
  65. package/templates/apps/api/src/config/index.ts +35 -0
  66. package/templates/apps/api/src/config/modules.ts +43 -0
  67. package/templates/apps/api/src/lib/__mocks__/prisma-client.js +11 -0
  68. package/templates/apps/api/src/lib/__mocks__/prisma.ts +241 -0
  69. package/templates/apps/api/src/lib/__tests__/lead-capture-store.test.ts +2 -2
  70. package/templates/apps/api/src/lib/site.ts +16 -0
  71. package/templates/apps/api/src/lib/stripe.ts +22 -0
  72. package/templates/apps/api/src/lib/tenant-db.ts +225 -0
  73. package/templates/apps/api/src/lib/ws-token.ts +91 -0
  74. package/templates/apps/api/src/middleware/__tests__/adversarial/session-fixation.test.ts +7 -1
  75. package/templates/apps/api/src/middleware/__tests__/auth.cookie-path.test.ts +7 -1
  76. package/templates/apps/api/src/middleware/__tests__/rate-limit.test.ts +91 -4
  77. package/templates/apps/api/src/middleware/auth.ts +43 -8
  78. package/templates/apps/api/src/middleware/rate-limit.ts +78 -3
  79. package/templates/apps/api/src/middleware/tenant.ts +99 -0
  80. package/templates/apps/api/src/openapi/__tests__/openapi.test.ts +92 -0
  81. package/templates/apps/api/src/openapi/spec.ts +312 -3
  82. package/templates/apps/api/src/routes/aeo/__tests__/index.test.ts +175 -0
  83. package/templates/apps/api/src/routes/aeo/index.ts +107 -0
  84. package/templates/apps/api/src/routes/auth/__tests__/auth-tokens.functional.test.ts +5 -2
  85. package/templates/apps/api/src/routes/auth/__tests__/tokens.test.ts +22 -3
  86. package/templates/apps/api/src/routes/auth/tokens.ts +13 -1
  87. package/templates/apps/api/src/routes/billing/__tests__/portal.test.ts +450 -0
  88. package/templates/apps/api/src/routes/billing/__tests__/read.test.ts +262 -0
  89. package/templates/apps/api/src/routes/billing/__tests__/usage.test.ts +436 -0
  90. package/templates/apps/api/src/routes/billing/index.ts +36 -0
  91. package/templates/apps/api/src/routes/billing/portal.ts +182 -0
  92. package/templates/apps/api/src/routes/billing/read.ts +75 -0
  93. package/templates/apps/api/src/routes/billing/usage.ts +153 -0
  94. package/templates/apps/api/src/routes/checkout/__tests__/sessions.test.ts +99 -0
  95. package/templates/apps/api/src/routes/checkout/sessions.ts +20 -8
  96. package/templates/apps/api/src/routes/content/create.ts +1 -0
  97. package/templates/apps/api/src/routes/content/delete.ts +1 -0
  98. package/templates/apps/api/src/routes/content/index.ts +42 -6
  99. package/templates/apps/api/src/routes/content/update.ts +1 -0
  100. package/templates/apps/api/src/routes/deliverables/__tests__/index.test.ts +393 -0
  101. package/templates/apps/api/src/routes/deliverables/index.ts +200 -0
  102. package/templates/apps/api/src/routes/flow-checkouts/__tests__/index.test.ts +443 -0
  103. package/templates/apps/api/src/routes/flow-checkouts/index.ts +82 -0
  104. package/templates/apps/api/src/routes/flows/README.md +147 -0
  105. package/templates/apps/api/src/routes/flows/__tests__/index.test.ts +752 -0
  106. package/templates/apps/api/src/routes/flows/__tests__/recommender.test.ts +671 -0
  107. package/templates/apps/api/src/routes/flows/index.ts +202 -0
  108. package/templates/apps/api/src/routes/flows/recommender.ts +443 -0
  109. package/templates/apps/api/src/routes/leads/__tests__/index.test.ts +438 -31
  110. package/templates/apps/api/src/routes/leads/__tests__/track.test.ts +10 -10
  111. package/templates/apps/api/src/routes/leads/index.ts +43 -9
  112. package/templates/apps/api/src/routes/project-listings/__tests__/configured-application.test.ts +558 -0
  113. package/templates/apps/api/src/routes/project-listings/__tests__/copy-edit.test.ts +815 -0
  114. package/templates/apps/api/src/routes/project-listings/__tests__/drafts.test.ts +869 -0
  115. package/templates/apps/api/src/routes/project-listings/__tests__/me-route-precedence.test.ts +221 -0
  116. package/templates/apps/api/src/routes/project-listings/__tests__/me.test.ts +468 -0
  117. package/templates/apps/api/src/routes/project-listings/__tests__/public.test.ts +424 -0
  118. package/templates/apps/api/src/routes/project-listings/__tests__/site-answers.test.ts +707 -0
  119. package/templates/apps/api/src/routes/project-listings/__tests__/site-key.test.ts +375 -0
  120. package/templates/apps/api/src/routes/project-listings/__tests__/structured-address.test.ts +467 -0
  121. package/templates/apps/api/src/routes/project-listings/__tests__/tenant-isolation.test.ts +566 -0
  122. package/templates/apps/api/src/routes/project-listings/get.ts +70 -0
  123. package/templates/apps/api/src/routes/project-listings/index.ts +120 -0
  124. package/templates/apps/api/src/routes/project-listings/list.ts +47 -0
  125. package/templates/apps/api/src/routes/project-listings/me.ts +76 -0
  126. package/templates/apps/api/src/routes/project-listings/patch-copy.ts +222 -0
  127. package/templates/apps/api/src/routes/project-listings/patch-draft.ts +97 -0
  128. package/templates/apps/api/src/routes/project-listings/patch.ts +136 -0
  129. package/templates/apps/api/src/routes/project-listings/public.ts +52 -0
  130. package/templates/apps/api/src/routes/project-listings/respond.ts +37 -0
  131. package/templates/apps/api/src/routes/project-listings/resume-token.ts +22 -0
  132. package/templates/apps/api/src/routes/project-listings/start.ts +106 -0
  133. package/templates/apps/api/src/routes/project-listings/submit.ts +122 -0
  134. package/templates/apps/api/src/routes/schedule/__tests__/index.test.ts +490 -0
  135. package/templates/apps/api/src/routes/schedule/index.ts +249 -0
  136. package/templates/apps/api/src/routes/slack/__tests__/actions.test.ts +385 -0
  137. package/templates/apps/api/src/routes/slack/actions.ts +177 -0
  138. package/templates/apps/api/src/routes/slack/index.ts +38 -0
  139. package/templates/apps/api/src/routes/test/auth/__tests__/session.test.ts +16 -6
  140. package/templates/apps/api/src/routes/test/auth/session.ts +8 -6
  141. package/templates/apps/api/src/routes/waitlist-experiments/__tests__/tenant-isolation.test.ts +577 -0
  142. package/templates/apps/api/src/routes/waitlist-experiments/comparison.ts +78 -0
  143. package/templates/apps/api/src/routes/waitlist-experiments/index.ts +41 -0
  144. package/templates/apps/api/src/routes/waitlist-experiments/list.ts +64 -0
  145. package/templates/apps/api/src/routes/waitlist-experiments/respond.ts +42 -0
  146. package/templates/apps/api/src/routes/waitlist-experiments/signup.ts +84 -0
  147. package/templates/apps/api/src/routes/waitlist-experiments/signups.ts +119 -0
  148. package/templates/apps/api/src/routes/waitlist-signups/__tests__/index.test.ts +238 -0
  149. package/templates/apps/api/src/routes/waitlist-signups/index.ts +101 -0
  150. package/templates/apps/api/src/routes/webhooks/README.md +35 -12
  151. package/templates/apps/api/src/routes/webhooks/__tests__/stripe-flow-checkout.test.ts +315 -0
  152. package/templates/apps/api/src/routes/webhooks/__tests__/stripe-org-billing.test.ts +270 -0
  153. package/templates/apps/api/src/routes/webhooks/stripe.ts +248 -20
  154. package/templates/apps/api/src/routes/workspaces/__tests__/config-tenant-isolation.test.ts +356 -0
  155. package/templates/apps/api/src/routes/workspaces/__tests__/tenant-isolation.test.ts +671 -0
  156. package/templates/apps/api/src/routes/workspaces/config.ts +125 -0
  157. package/templates/apps/api/src/routes/workspaces/index.ts +194 -0
  158. package/templates/apps/api/src/routes/workspaces/sessions.ts +218 -0
  159. package/templates/apps/api/src/server.ts +307 -7
  160. package/templates/apps/api/src/services/__tests__/abandon-email.test.ts +489 -0
  161. package/templates/apps/api/src/services/__tests__/aeo-score.test.ts +475 -0
  162. package/templates/apps/api/src/services/__tests__/answer-distributions.test.ts +132 -0
  163. package/templates/apps/api/src/services/__tests__/consent-migration.test.ts +65 -0
  164. package/templates/apps/api/src/services/__tests__/consent.test.ts +282 -0
  165. package/templates/apps/api/src/services/__tests__/deliverable-fulfillment.test.ts +523 -0
  166. package/templates/apps/api/src/services/__tests__/deliverable-resend.test.ts +359 -0
  167. package/templates/apps/api/src/services/__tests__/entitlements.test.ts +142 -0
  168. package/templates/apps/api/src/services/__tests__/flow-aggregate.test.ts +425 -0
  169. package/templates/apps/api/src/services/__tests__/flow-engine.test.ts +2840 -0
  170. package/templates/apps/api/src/services/__tests__/lead-promotion.test.ts +393 -0
  171. package/templates/apps/api/src/services/__tests__/lead-routing.test.ts +8 -8
  172. package/templates/apps/api/src/services/__tests__/listing-csv-sweep.test.ts +560 -0
  173. package/templates/apps/api/src/services/__tests__/listing-promotion.test.ts +684 -0
  174. package/templates/apps/api/src/services/__tests__/playbook-compile.test.ts +406 -0
  175. package/templates/apps/api/src/services/__tests__/playbook-render.test.ts +290 -0
  176. package/templates/apps/api/src/services/__tests__/project-listing-decision.test.ts +736 -0
  177. package/templates/apps/api/src/services/__tests__/project-listing-flow.test.ts +475 -0
  178. package/templates/apps/api/src/services/__tests__/project-listing-issue.test.ts +340 -0
  179. package/templates/apps/api/src/services/__tests__/recommender-capture.test.ts +983 -0
  180. package/templates/apps/api/src/services/__tests__/slack-notify.test.ts +278 -0
  181. package/templates/apps/api/src/services/__tests__/tenant-context-cascade.test.ts +71 -0
  182. package/templates/apps/api/src/services/__tests__/tenant-context.test.ts +379 -0
  183. package/templates/apps/api/src/services/__tests__/usage-aggregation.test.ts +941 -0
  184. package/templates/apps/api/src/services/__tests__/usage-credits.test.ts +588 -0
  185. package/templates/apps/api/src/services/__tests__/usage-metering.test.ts +768 -0
  186. package/templates/apps/api/src/services/__tests__/waitlist-dashboard.test.ts +1314 -0
  187. package/templates/apps/api/src/services/__tests__/waitlist-experiments.test.ts +341 -0
  188. package/templates/apps/api/src/services/__tests__/waitlist-followup.test.ts +567 -0
  189. package/templates/apps/api/src/services/__tests__/waitlist-scoring.test.ts +474 -0
  190. package/templates/apps/api/src/services/__tests__/waitlist-signups.test.ts +354 -0
  191. package/templates/apps/api/src/services/abandon-email.ts +307 -0
  192. package/templates/apps/api/src/services/aeo-score.ts +288 -0
  193. package/templates/apps/api/src/services/answer-distributions.ts +138 -0
  194. package/templates/apps/api/src/services/consent.ts +236 -0
  195. package/templates/apps/api/src/services/deliverable-fulfillment.ts +523 -0
  196. package/templates/apps/api/src/services/entitlements.ts +102 -0
  197. package/templates/apps/api/src/services/flow-aggregate.ts +232 -0
  198. package/templates/apps/api/src/services/flow-checkouts.ts +123 -0
  199. package/templates/apps/api/src/services/flow-engine.ts +1296 -0
  200. package/templates/apps/api/src/services/lead-promotion.ts +176 -0
  201. package/templates/apps/api/src/services/lead-routing.ts +3 -3
  202. package/templates/apps/api/src/services/listing-config.ts +102 -0
  203. package/templates/apps/api/src/services/listing-csv-sweep.ts +455 -0
  204. package/templates/apps/api/src/services/listing-promotion.ts +342 -0
  205. package/templates/apps/api/src/services/playbook-compile.ts +398 -0
  206. package/templates/apps/api/src/services/playbook-render.ts +263 -0
  207. package/templates/apps/api/src/services/project-listing-decision.ts +510 -0
  208. package/templates/apps/api/src/services/project-listing-flow.ts +426 -0
  209. package/templates/apps/api/src/services/project-listing-issue.ts +251 -0
  210. package/templates/apps/api/src/services/project-listings.ts +1472 -0
  211. package/templates/apps/api/src/services/recommender-capture.ts +835 -0
  212. package/templates/apps/api/src/services/scheduling/cal-provider.ts +392 -0
  213. package/templates/apps/api/src/services/scheduling/index.ts +63 -0
  214. package/templates/apps/api/src/services/scheduling/types.ts +88 -0
  215. package/templates/apps/api/src/services/slack-notify.ts +240 -0
  216. package/templates/apps/api/src/services/tenant-context.ts +451 -0
  217. package/templates/apps/api/src/services/usage-aggregation.ts +516 -0
  218. package/templates/apps/api/src/services/usage-credits.ts +340 -0
  219. package/templates/apps/api/src/services/usage-metering.ts +699 -0
  220. package/templates/apps/api/src/services/waitlist-dashboard.ts +947 -0
  221. package/templates/apps/api/src/services/waitlist-experiments.ts +213 -0
  222. package/templates/apps/api/src/services/waitlist-followup.ts +486 -0
  223. package/templates/apps/api/src/services/waitlist-scoring.ts +166 -0
  224. package/templates/apps/api/src/services/waitlist-signups.ts +165 -0
  225. package/templates/apps/api/src/vercel-handler.ts +165 -0
  226. package/templates/apps/api/tsconfig.json +0 -12
  227. package/templates/apps/mcp/CLAUDE.md +19 -9
  228. package/templates/apps/mcp/LICENSE +201 -0
  229. package/templates/apps/mcp/__tests__/create_page.test.ts +1 -0
  230. package/templates/apps/mcp/__tests__/delete_page.test.ts +1 -0
  231. package/templates/apps/mcp/__tests__/module-exclusion.test.ts +105 -0
  232. package/templates/apps/mcp/__tests__/parity.test.ts +70 -6
  233. package/templates/apps/mcp/__tests__/request_callback.test.ts +4 -4
  234. package/templates/apps/mcp/__tests__/schedule_tools.test.ts +242 -0
  235. package/templates/apps/mcp/__tests__/submit_lead.test.ts +4 -4
  236. package/templates/apps/mcp/__tests__/subscribe_newsletter.test.ts +4 -4
  237. package/templates/apps/mcp/__tests__/tools/purchase.test.ts +47 -0
  238. package/templates/apps/mcp/__tests__/update_page.test.ts +1 -0
  239. package/templates/apps/mcp/package.json +6 -4
  240. package/templates/apps/mcp/src/config/modules.ts +37 -0
  241. package/templates/apps/mcp/src/server.ts +109 -18
  242. package/templates/apps/mcp/src/tools/capture_lead.ts +1 -1
  243. package/templates/apps/mcp/src/tools/create_booking.ts +58 -0
  244. package/templates/apps/mcp/src/tools/create_page.ts +1 -0
  245. package/templates/apps/mcp/src/tools/delete_page.ts +1 -0
  246. package/templates/apps/mcp/src/tools/get_event_meta.ts +55 -0
  247. package/templates/apps/mcp/src/tools/get_flow.ts +61 -0
  248. package/templates/apps/mcp/src/tools/index.ts +25 -0
  249. package/templates/apps/mcp/src/tools/list_availability.ts +67 -0
  250. package/templates/apps/mcp/src/tools/purchase.ts +3 -0
  251. package/templates/apps/mcp/src/tools/submit_flow_step.ts +83 -0
  252. package/templates/apps/mcp/src/tools/update_page.ts +1 -0
  253. package/templates/apps/mcp/tsconfig.json +1 -9
  254. package/templates/apps/web/.env.example +44 -0
  255. package/templates/apps/web/CLAUDE.md +28 -0
  256. package/templates/apps/web/LICENSE +201 -0
  257. package/templates/apps/web/__tests__/__mocks__/code-highlight.jest-stub.ts +24 -0
  258. package/templates/apps/web/__tests__/__mocks__/next-intl-server.ts +33 -0
  259. package/templates/apps/web/__tests__/__mocks__/next-intl.ts +18 -0
  260. package/templates/apps/web/__tests__/__mocks__/server-only.ts +13 -0
  261. package/templates/apps/web/__tests__/__mocks__/style-mock.js +4 -0
  262. package/templates/apps/web/__tests__/__mocks__/vercel-analytics-server.ts +9 -0
  263. package/templates/apps/web/__tests__/jest-support/import-meta-transformer.cjs +90 -0
  264. package/templates/apps/web/__tests__/setup.ts +22 -32
  265. package/templates/apps/web/app/.well-known/ai-plugin.json/route.ts +6 -3
  266. package/templates/apps/web/app/.well-known/mcp.json/build-manifest.ts +8 -2
  267. package/templates/apps/web/app/[locale]/(authed)/account/__tests__/page.test.tsx +260 -0
  268. package/templates/apps/web/app/[locale]/(authed)/account/page.tsx +263 -0
  269. package/templates/apps/web/app/[locale]/(authed)/account/sign-out-button.tsx +39 -0
  270. package/templates/apps/web/app/[locale]/(authed)/layout.tsx +54 -0
  271. package/templates/apps/web/app/[locale]/(authed)/sign-in-gate.tsx +96 -0
  272. package/templates/apps/web/app/[locale]/(authed)/waitlist/[experimentId]/page.tsx +309 -0
  273. package/templates/apps/web/app/[locale]/(authed)/waitlist/[experimentId]/signups/[leadId]/page.tsx +149 -0
  274. package/templates/apps/web/app/[locale]/(authed)/waitlist/__tests__/comparison.test.tsx +273 -0
  275. package/templates/apps/web/app/[locale]/(authed)/waitlist/__tests__/gate.test.tsx +172 -0
  276. package/templates/apps/web/app/[locale]/(authed)/waitlist/__tests__/list.test.tsx +171 -0
  277. package/templates/apps/web/app/[locale]/(authed)/waitlist/__tests__/signup.test.tsx +179 -0
  278. package/templates/apps/web/app/[locale]/(authed)/waitlist/components/ExperimentsTable.tsx +116 -0
  279. package/templates/apps/web/app/[locale]/(authed)/waitlist/components/ForbiddenState.tsx +24 -0
  280. package/templates/apps/web/app/[locale]/(authed)/waitlist/components/OfferFunnelTable.tsx +66 -0
  281. package/templates/apps/web/app/[locale]/(authed)/waitlist/components/RollupTicker.tsx +61 -0
  282. package/templates/apps/web/app/[locale]/(authed)/waitlist/components/ScoreTrace.tsx +114 -0
  283. package/templates/apps/web/app/[locale]/(authed)/waitlist/components/SignupsTable.tsx +139 -0
  284. package/templates/apps/web/app/[locale]/(authed)/waitlist/components/WaitlistComparisonTabs.tsx +85 -0
  285. package/templates/apps/web/app/[locale]/(authed)/waitlist/components/status-badges.tsx +67 -0
  286. package/templates/apps/web/app/[locale]/(authed)/waitlist/format.ts +111 -0
  287. package/templates/apps/web/app/[locale]/(authed)/waitlist/page.tsx +179 -0
  288. package/templates/apps/web/app/[locale]/about/page.tsx +10 -1
  289. package/templates/apps/web/app/[locale]/blog/[[...slug]]/page.tsx +6 -1
  290. package/templates/apps/web/app/[locale]/careers/[slug]/page.tsx +9 -0
  291. package/templates/apps/web/app/[locale]/careers/__tests__/page-renderer-migration.test.tsx +3 -3
  292. package/templates/apps/web/app/[locale]/careers/page.tsx +9 -1
  293. package/templates/apps/web/app/[locale]/case-studies/[slug]/page.tsx +9 -0
  294. package/templates/apps/web/app/[locale]/case-studies/__tests__/page-renderer-migration.test.tsx +3 -3
  295. package/templates/apps/web/app/[locale]/case-studies/page.tsx +13 -1
  296. package/templates/apps/web/app/[locale]/clients/__tests__/page-renderer-migration.test.tsx +11 -1
  297. package/templates/apps/web/app/[locale]/clients/page.tsx +9 -1
  298. package/templates/apps/web/app/[locale]/contact/ContactForm.tsx +21 -1
  299. package/templates/apps/web/app/[locale]/contact/ConversationalIntakeWrapper.tsx +188 -0
  300. package/templates/apps/web/app/[locale]/contact/__tests__/ConversationalIntakeWrapper.test.tsx +242 -0
  301. package/templates/apps/web/app/[locale]/contact/__tests__/contact.actions.test.ts +29 -0
  302. package/templates/apps/web/app/[locale]/contact/__tests__/intake-analytics.test.ts +51 -0
  303. package/templates/apps/web/app/[locale]/contact/__tests__/page-renderer-migration.test.tsx +39 -15
  304. package/templates/apps/web/app/[locale]/contact/contact.actions.ts +21 -3
  305. package/templates/apps/web/app/[locale]/contact/intake-analytics.ts +49 -0
  306. package/templates/apps/web/app/[locale]/contact/intake-script.ts +66 -0
  307. package/templates/apps/web/app/[locale]/contact/page.tsx +14 -4
  308. package/templates/apps/web/app/[locale]/courses/[slug]/page.tsx +13 -1
  309. package/templates/apps/web/app/[locale]/courses/__tests__/page-renderer-migration.test.tsx +3 -3
  310. package/templates/apps/web/app/[locale]/courses/page.tsx +9 -1
  311. package/templates/apps/web/app/[locale]/docs/[[...slug]]/page.tsx +1 -0
  312. package/templates/apps/web/app/[locale]/downloads/__tests__/page-renderer-migration.test.tsx +11 -1
  313. package/templates/apps/web/app/[locale]/downloads/page.tsx +13 -1
  314. package/templates/apps/web/app/[locale]/events/[slug]/page.tsx +9 -0
  315. package/templates/apps/web/app/[locale]/events/__tests__/page-renderer-migration.test.tsx +12 -2
  316. package/templates/apps/web/app/[locale]/events/page.tsx +9 -1
  317. package/templates/apps/web/app/[locale]/faq/page.tsx +10 -1
  318. package/templates/apps/web/app/[locale]/flows/[slug]/FlowStepperClient.tsx +265 -0
  319. package/templates/apps/web/app/[locale]/flows/[slug]/__tests__/FlowStepperClient.permalink.test.tsx +445 -0
  320. package/templates/apps/web/app/[locale]/flows/[slug]/__tests__/FlowStepperClient.test.tsx +341 -0
  321. package/templates/apps/web/app/[locale]/flows/[slug]/__tests__/checkout.actions.test.ts +287 -0
  322. package/templates/apps/web/app/[locale]/flows/[slug]/__tests__/flow.actions.test.ts +302 -0
  323. package/templates/apps/web/app/[locale]/flows/[slug]/__tests__/two-route-tool.test.tsx +128 -0
  324. package/templates/apps/web/app/[locale]/flows/[slug]/checkout.actions.ts +254 -0
  325. package/templates/apps/web/app/[locale]/flows/[slug]/flow.actions.ts +144 -0
  326. package/templates/apps/web/app/[locale]/flows/[slug]/page.tsx +108 -0
  327. package/templates/apps/web/app/[locale]/flows/[slug]/results/[payload]/ResultsClient.tsx +532 -0
  328. package/templates/apps/web/app/[locale]/flows/[slug]/results/[payload]/ResultsEmailStep.tsx +121 -0
  329. package/templates/apps/web/app/[locale]/flows/[slug]/results/[payload]/__tests__/ResultsClient.checkout.test.tsx +457 -0
  330. package/templates/apps/web/app/[locale]/flows/[slug]/results/[payload]/__tests__/page.test.tsx +396 -0
  331. package/templates/apps/web/app/[locale]/flows/[slug]/results/[payload]/page.tsx +114 -0
  332. package/templates/apps/web/app/[locale]/flows/[slug]/start/page.tsx +52 -0
  333. package/templates/apps/web/app/[locale]/how-to/[slug]/page.tsx +13 -1
  334. package/templates/apps/web/app/[locale]/how-to/__tests__/page-renderer-migration.test.tsx +1 -1
  335. package/templates/apps/web/app/[locale]/integrations/[slug]/page.tsx +9 -0
  336. package/templates/apps/web/app/[locale]/integrations/__tests__/page-renderer-migration.test.tsx +3 -3
  337. package/templates/apps/web/app/[locale]/integrations/page.tsx +13 -1
  338. package/templates/apps/web/app/[locale]/launch-service/page.tsx +14 -1
  339. package/templates/apps/web/app/[locale]/layout.tsx +127 -16
  340. package/templates/apps/web/app/[locale]/page.tsx +10 -1
  341. package/templates/apps/web/app/[locale]/partners/[slug]/page.tsx +9 -0
  342. package/templates/apps/web/app/[locale]/partners/__tests__/page-renderer-migration.test.tsx +3 -3
  343. package/templates/apps/web/app/[locale]/partners/page.tsx +9 -1
  344. package/templates/apps/web/app/[locale]/products/[slug]/page.tsx +9 -0
  345. package/templates/apps/web/app/[locale]/products/__tests__/page-renderer-migration.test.tsx +3 -3
  346. package/templates/apps/web/app/[locale]/products/page.tsx +9 -1
  347. package/templates/apps/web/app/[locale]/projects/[slug]/page.tsx +13 -1
  348. package/templates/apps/web/app/[locale]/projects/__tests__/page-renderer-migration.test.tsx +10 -0
  349. package/templates/apps/web/app/[locale]/projects/apply/ListingApplicationClient.tsx +110 -0
  350. package/templates/apps/web/app/[locale]/projects/apply/__tests__/ListingApplicationClient.test.tsx +96 -0
  351. package/templates/apps/web/app/[locale]/projects/page.tsx +13 -1
  352. package/templates/apps/web/app/[locale]/resources/[slug]/page.tsx +9 -0
  353. package/templates/apps/web/app/[locale]/resources/__tests__/page-renderer-migration.test.tsx +12 -2
  354. package/templates/apps/web/app/[locale]/resources/page.tsx +13 -1
  355. package/templates/apps/web/app/[locale]/schedule/__tests__/page.test.tsx +117 -0
  356. package/templates/apps/web/app/[locale]/schedule/confirmed/__tests__/page.test.tsx +96 -0
  357. package/templates/apps/web/app/[locale]/schedule/confirmed/page.tsx +92 -0
  358. package/templates/apps/web/app/[locale]/schedule/page.tsx +82 -0
  359. package/templates/apps/web/app/[locale]/services/[slug]/page.tsx +9 -0
  360. package/templates/apps/web/app/[locale]/services/__tests__/page-renderer-migration.test.tsx +3 -3
  361. package/templates/apps/web/app/[locale]/services/page.tsx +9 -1
  362. package/templates/apps/web/app/[locale]/sign-in/__tests__/next-path.test.ts +31 -0
  363. package/templates/apps/web/app/[locale]/sign-in/__tests__/page.test.tsx +152 -0
  364. package/templates/apps/web/app/[locale]/sign-in/next-path.ts +0 -0
  365. package/templates/apps/web/app/[locale]/sign-in/page.tsx +83 -0
  366. package/templates/apps/web/app/[locale]/sign-in/sign-in-card.tsx +123 -0
  367. package/templates/apps/web/app/[locale]/software/[slug]/page.tsx +13 -1
  368. package/templates/apps/web/app/[locale]/software/__tests__/page-renderer-migration.test.tsx +1 -1
  369. package/templates/apps/web/app/[locale]/tech-articles/[slug]/page.tsx +13 -1
  370. package/templates/apps/web/app/[locale]/tech-articles/__tests__/page-renderer-migration.test.tsx +1 -1
  371. package/templates/apps/web/app/[locale]/testimonials/__tests__/page-renderer-migration.test.tsx +11 -1
  372. package/templates/apps/web/app/[locale]/testimonials/page.tsx +13 -1
  373. package/templates/apps/web/app/[locale]/thanks/[slug]/__tests__/page.test.tsx +93 -0
  374. package/templates/apps/web/app/[locale]/thanks/[slug]/page.tsx +48 -0
  375. package/templates/apps/web/app/[locale]/use-cases/__tests__/page-renderer-migration.test.tsx +11 -1
  376. package/templates/apps/web/app/[locale]/use-cases/page.tsx +13 -1
  377. package/templates/apps/web/app/[locale]/whitepapers/[slug]/page.tsx +13 -1
  378. package/templates/apps/web/app/[locale]/whitepapers/__tests__/page-renderer-migration.test.tsx +1 -1
  379. package/templates/apps/web/app/globals.css +35 -0
  380. package/templates/apps/web/app/llms.txt/route.ts +2 -1
  381. package/templates/apps/web/app/og/route.tsx +10 -2
  382. package/templates/apps/web/auth.ts +8 -0
  383. package/templates/apps/web/components/sign-out-trigger.tsx +42 -0
  384. package/templates/apps/web/content/en/blog/README.txt +25 -0
  385. package/templates/apps/web/content/en/docs/index.mdx +28 -0
  386. package/templates/apps/web/jest.config.cjs +90 -27
  387. package/templates/apps/web/lib/__tests__/site-brand.test.ts +119 -0
  388. package/templates/apps/web/lib/__tests__/site-theme.test.ts +112 -0
  389. package/templates/apps/web/lib/__tests__/structured-data.test.tsx +499 -0
  390. package/templates/apps/web/lib/account-config.ts +13 -0
  391. package/templates/apps/web/lib/server-api.ts +85 -0
  392. package/templates/apps/web/lib/site-brand.tsx +121 -0
  393. package/templates/apps/web/lib/site-theme.ts +74 -0
  394. package/templates/apps/web/messages/en.json +275 -7
  395. package/templates/apps/web/middleware.ts +11 -3
  396. package/templates/apps/web/next.config.mjs +8 -2
  397. package/templates/apps/web/package.json +17 -7
  398. package/templates/apps/web/postcss.config.mjs +23 -0
  399. package/templates/apps/web/public/.well-known/security.txt +3 -3
  400. package/templates/apps/web/src/lib/routes.ts +15 -2
  401. package/templates/apps/web/tsconfig.json +1 -16
  402. package/templates/content/_site.mdx +36 -25
  403. package/templates/content/en/AboutPage/about.mdx +24 -14
  404. package/templates/content/en/ContactPage/contact.mdx +23 -14
  405. package/templates/content/en/FAQPage/faq.mdx +10 -392
  406. package/templates/content/en/HomePage/home.mdx +14 -285
  407. package/templates/database/CHANGELOG.md +443 -0
  408. package/templates/database/LICENSE +201 -0
  409. package/templates/database/README.md +3 -1
  410. package/templates/database/__tests__/flows-listing-diagnostic.test.ts +392 -0
  411. package/templates/database/__tests__/flows-presets.test.ts +173 -0
  412. package/templates/database/__tests__/prefixed-ids.db.test.ts +146 -0
  413. package/templates/database/__tests__/seed.test.ts +88 -0
  414. package/templates/database/__tests__/user-cascade.test.ts +19 -4
  415. package/templates/database/auth/schema.prisma +521 -0
  416. package/templates/database/config/schema.prisma +234 -0
  417. package/templates/database/content/schema.prisma +263 -0
  418. package/templates/database/flows/listing-diagnostic.ts +182 -0
  419. package/templates/database/flows/presets.ts +315 -0
  420. package/templates/database/inbox/__tests__/schema.test.ts +4 -0
  421. package/templates/database/inbox/schema.prisma +574 -3
  422. package/templates/database/jest.config.cjs +8 -0
  423. package/templates/database/migrations/20260712215647_add_multi_tenant_tenancy/migration.sql +201 -0
  424. package/templates/database/migrations/20260713143320_reanchor_site_config_to_workspace/migration.sql +67 -0
  425. package/templates/database/migrations/20260713174000_add_audit_logs/migration.sql +46 -0
  426. package/templates/database/migrations/20260713190000_drop_telemetry_records/migration.sql +25 -0
  427. package/templates/database/migrations/20260713192000_add_uuidv7_function/migration.sql +49 -0
  428. package/templates/database/migrations/20260713192429_prefixed_uuid_entity_ids/migration.sql +197 -0
  429. package/templates/database/migrations/20260713200000_add_org_billing/migration.sql +32 -0
  430. package/templates/database/migrations/20260714000000_add_lead_promotion_fields/migration.sql +22 -0
  431. package/templates/database/migrations/20260714010000_add_usage_billing_content_models/migration.sql +151 -0
  432. package/templates/database/migrations/20260714020000_add_usage_billing_auth_config_models/migration.sql +223 -0
  433. package/templates/database/migrations/20260714030000_credit_balance_non_negative/migration.sql +22 -0
  434. package/templates/database/migrations/20260714030000_widen_usage_billing_report_aggregates/migration.sql +32 -0
  435. package/templates/database/migrations/20260810233516_add_flow_engine_models/migration.sql +40 -0
  436. package/templates/database/migrations/20260811020000_add_flow_session_abandon_email_columns/migration.sql +4 -0
  437. package/templates/database/migrations/20260811030000_add_flow_session_abandon_email_index/migration.sql +2 -0
  438. package/templates/database/migrations/20260811040000_add_flow_session_segment/migration.sql +2 -0
  439. package/templates/database/migrations/20260811050000_add_deliverable_models/migration.sql +29 -0
  440. package/templates/database/migrations/20260812000000_add_deliverable_grant_send_columns/migration.sql +6 -0
  441. package/templates/database/migrations/20260902222948_add_waitlist_experiment_models/migration.sql +39 -0
  442. package/templates/database/migrations/20260902224500_add_waitlist_id_format_checks/migration.sql +24 -0
  443. package/templates/database/migrations/20260903004112_add_flow_session_flags_aeo_score/migration.sql +3 -0
  444. package/templates/database/migrations/20260903010000_add_playbook_instance/migration.sql +33 -0
  445. package/templates/database/migrations/20260904000000_add_waitlist_followup_send/migration.sql +30 -0
  446. package/templates/database/migrations/20260905230000_add_flow_checkout/migration.sql +47 -0
  447. package/templates/database/migrations/20260906000000_add_flow_checkout_idempotency/migration.sql +16 -0
  448. package/templates/database/migrations/20260907120000_add_project_listing/migration.sql +47 -0
  449. package/templates/database/migrations/20260907130000_add_project_listing_slack_columns/migration.sql +10 -0
  450. package/templates/database/migrations/20260907180000_add_listing_csv_send/migration.sql +26 -0
  451. package/templates/database/migrations/20260909120000_project_listings_platform/migration.sql +90 -0
  452. package/templates/database/migrations/20260909180000_listing_draft_and_fields/migration.sql +174 -0
  453. package/templates/database/migrations/20260910120000_listing_public_site_key/migration.sql +14 -0
  454. package/templates/database/migrations/20260911120000_listing_copy_edit_audit/migration.sql +25 -0
  455. package/templates/database/migrations/20260911140000_listing_structured_address/migration.sql +32 -0
  456. package/templates/database/migrations/20260911180000_consent_grants/migration.sql +71 -0
  457. package/templates/database/migrations/20260911200000_listing_site_answers/migration.sql +30 -0
  458. package/templates/database/migrations/20260912120000_listing_owner_link/migration.sql +49 -0
  459. package/templates/database/ops/schema.prisma +27 -0
  460. package/templates/database/package.json +42 -4
  461. package/templates/database/prisma.config.ts +1 -1
  462. package/templates/database/schema.prisma +19 -435
  463. package/templates/database/seed-test.ts +14 -4
  464. package/templates/database/seed.ts +148 -0
  465. package/templates/database/tenancy.ts +45 -0
  466. package/templates/database/tsconfig.flows.json +15 -0
  467. package/templates/database/tsconfig.json +7 -1
  468. package/templates/database/tsconfig.tenancy.json +14 -0
  469. package/templates/package.json +30 -55
  470. package/templates/pnpm-workspace.yaml +0 -3
  471. package/templates/project.yaml +1 -1
  472. package/templates/tsconfig.json +1 -37
  473. package/templates/apps/web/__tests__/auth/adversarial/cookie-attributes.test.ts +0 -94
  474. package/templates/apps/web/__tests__/auth/adversarial/oauth-state-parameter.test.ts +0 -75
  475. package/templates/apps/web/__tests__/auth/adversarial/redirect-uri-allowlist.test.ts +0 -82
  476. package/templates/apps/web/__tests__/auth/env-helpers.test.ts +0 -168
  477. package/templates/apps/web/__tests__/authority-list-routes.test.tsx +0 -208
  478. package/templates/apps/web/__tests__/better-stack.test.ts +0 -66
  479. package/templates/apps/web/__tests__/blog-dir-resolution.test.ts +0 -87
  480. package/templates/apps/web/__tests__/blog-source-populated.test.ts +0 -130
  481. package/templates/apps/web/__tests__/data-testid-coverage.test.tsx +0 -60
  482. package/templates/apps/web/__tests__/google-analytics.test.tsx +0 -104
  483. package/templates/apps/web/__tests__/i18n/middleware.test.ts +0 -119
  484. package/templates/apps/web/__tests__/i18n/routing.test.ts +0 -114
  485. package/templates/apps/web/__tests__/i18n/translations.test.ts +0 -191
  486. package/templates/apps/web/__tests__/json-ld.test.ts +0 -98
  487. package/templates/apps/web/__tests__/knowledge-events-routes.test.tsx +0 -580
  488. package/templates/apps/web/__tests__/layout-stealth.test.ts +0 -39
  489. package/templates/apps/web/__tests__/lighthouse-fixtures/improvement-image-shrink.tsx +0 -103
  490. package/templates/apps/web/__tests__/lighthouse-fixtures/override-fixture.md +0 -114
  491. package/templates/apps/web/__tests__/lighthouse-fixtures/regression-bloat.tsx +0 -94
  492. package/templates/apps/web/__tests__/page.test.tsx +0 -230
  493. package/templates/apps/web/__tests__/products-services-phase1.test.tsx +0 -321
  494. package/templates/apps/web/__tests__/projects-routes.test.tsx +0 -392
  495. package/templates/apps/web/__tests__/resources-downloads-integrations-phase2.test.tsx +0 -475
  496. package/templates/apps/web/__tests__/routes/ai-plugin-json.test.ts +0 -53
  497. package/templates/apps/web/__tests__/routes/blog-route.test.tsx +0 -191
  498. package/templates/apps/web/__tests__/routes/llms-txt.test.ts +0 -123
  499. package/templates/apps/web/__tests__/routes/robots-txt.test.ts +0 -52
  500. package/templates/apps/web/__tests__/routes/sitemap-xml.test.ts +0 -78
  501. package/templates/apps/web/__tests__/routes/well-known-mcp.test.ts +0 -203
  502. package/templates/apps/web/__tests__/section-routes.test.tsx +0 -693
  503. package/templates/apps/web/__tests__/security-headers.test.ts +0 -201
  504. package/templates/apps/web/__tests__/sentry-config.test.ts +0 -116
  505. package/templates/apps/web/__tests__/sitemap-locales.test.ts +0 -415
  506. package/templates/apps/web/__tests__/standalone-informational-routes.test.tsx +0 -844
  507. package/templates/apps/web/app/[locale]/__tests__/layout.test.tsx +0 -120
  508. package/templates/apps/web/app/[locale]/__tests__/page-renderer-migration.test.tsx +0 -202
  509. package/templates/apps/web/app/__tests__/error-boundaries.test.tsx +0 -152
  510. package/templates/apps/web/content/en/blog/index.mdx +0 -15
  511. package/templates/apps/web/content/en/blog/launching-ailk.mdx +0 -20
  512. package/templates/apps/web/content/en/docs/getting-started.mdx +0 -30
  513. package/templates/content/.gitkeep +0 -0
  514. package/templates/content/CLAUDE.md +0 -85
  515. package/templates/content/ar/HomePage/home.mdx +0 -123
  516. package/templates/content/ar/_site.mdx +0 -35
  517. package/templates/content/de/_site.mdx +0 -29
  518. package/templates/content/en/.gitkeep +0 -0
  519. package/templates/content/en/AboutPage/about.schema.json +0 -82
  520. package/templates/content/en/BookCall/book-call.mdx +0 -19
  521. package/templates/content/en/BookCall/book-call.schema.json +0 -121
  522. package/templates/content/en/BreadcrumbList/site-breadcrumbs.mdx +0 -20
  523. package/templates/content/en/CareersList/careers.mdx +0 -24
  524. package/templates/content/en/CaseStudiesList/case-studies.mdx +0 -22
  525. package/templates/content/en/CaseStudiesList/showcase.mdx +0 -8
  526. package/templates/content/en/CaseStudy/ailk-aeo-rollout.mdx +0 -32
  527. package/templates/content/en/CaseStudy/schema-builder-migration.mdx +0 -41
  528. package/templates/content/en/ClientsList/clients.mdx +0 -38
  529. package/templates/content/en/ContactPage/contact.schema.json +0 -100
  530. package/templates/content/en/ContactPoint/primary.mdx +0 -14
  531. package/templates/content/en/Course/aeo-fundamentals.mdx +0 -37
  532. package/templates/content/en/Course/schema-builder-workshop.mdx +0 -62
  533. package/templates/content/en/CoursesList/courses.mdx +0 -22
  534. package/templates/content/en/DownloadsList/downloads.mdx +0 -22
  535. package/templates/content/en/Event/aeo-office-hours-may-2026.mdx +0 -39
  536. package/templates/content/en/Event/ailk-launch-day-2026.mdx +0 -35
  537. package/templates/content/en/EventsList/events.mdx +0 -26
  538. package/templates/content/en/FAQPage/faq.schema.json +0 -231
  539. package/templates/content/en/GlossaryList/glossary.mdx +0 -19
  540. package/templates/content/en/GlossaryList/glossary.schema.json +0 -300
  541. package/templates/content/en/HomePage/home.schema.json +0 -88
  542. package/templates/content/en/HomePage/launch-service.mdx +0 -475
  543. package/templates/content/en/HomePage/launch-service.schema.json +0 -138
  544. package/templates/content/en/HowTo/add-mdx-content.mdx +0 -38
  545. package/templates/content/en/HowTo/configure-aeo-scoring.mdx +0 -35
  546. package/templates/content/en/HowTo/set-up-json-ld.mdx +0 -36
  547. package/templates/content/en/Integration/github-actions.mdx +0 -31
  548. package/templates/content/en/Integration/openai-api.mdx +0 -26
  549. package/templates/content/en/Integration/vercel.mdx +0 -32
  550. package/templates/content/en/IntegrationsList/integrations.mdx +0 -22
  551. package/templates/content/en/JobPosting/content-strategist.mdx +0 -46
  552. package/templates/content/en/JobPosting/developer-advocate.mdx +0 -47
  553. package/templates/content/en/JobPosting/senior-fullstack-engineer.mdx +0 -57
  554. package/templates/content/en/LandingPage/aeo-audit.mdx +0 -19
  555. package/templates/content/en/LandingPage/aeo-audit.schema.json +0 -92
  556. package/templates/content/en/LandingPage/agency-waitlist.mdx +0 -340
  557. package/templates/content/en/LandingPage/agency-waitlist.schema.json +0 -152
  558. package/templates/content/en/LandingPage/developers.mdx +0 -19
  559. package/templates/content/en/LandingPage/developers.schema.json +0 -109
  560. package/templates/content/en/LandingPage/for-agencies.mdx +0 -390
  561. package/templates/content/en/LandingPage/for-agencies.schema.json +0 -107
  562. package/templates/content/en/LandingPage/for-ai-search-agencies.mdx +0 -417
  563. package/templates/content/en/LandingPage/for-ai-search-agencies.schema.json +0 -105
  564. package/templates/content/en/LandingPage/for-businesses.mdx +0 -19
  565. package/templates/content/en/LandingPage/for-businesses.schema.json +0 -96
  566. package/templates/content/en/LandingPage/platform.mdx +0 -369
  567. package/templates/content/en/LandingPage/platform.schema.json +0 -166
  568. package/templates/content/en/LandingPage/vs-ai-website-builders.mdx +0 -19
  569. package/templates/content/en/LandingPage/vs-ai-website-builders.schema.json +0 -102
  570. package/templates/content/en/LandingPage/vs-wordpress.mdx +0 -19
  571. package/templates/content/en/LandingPage/vs-wordpress.schema.json +0 -53
  572. package/templates/content/en/NewsletterSignup/newsletter.mdx +0 -236
  573. package/templates/content/en/NewsletterSignup/newsletter.schema.json +0 -91
  574. package/templates/content/en/Organization/site-owner.mdx +0 -16
  575. package/templates/content/en/Partner/prisma.mdx +0 -31
  576. package/templates/content/en/Partner/supabase.mdx +0 -30
  577. package/templates/content/en/Partner/vercel.mdx +0 -28
  578. package/templates/content/en/PartnersList/partners.mdx +0 -22
  579. package/templates/content/en/Person/founder.mdx +0 -18
  580. package/templates/content/en/Pricing/pricing.mdx +0 -538
  581. package/templates/content/en/Pricing/pricing.schema.json +0 -209
  582. package/templates/content/en/PrivacyPage/privacy.mdx +0 -165
  583. package/templates/content/en/PrivacyPage/privacy.schema.json +0 -64
  584. package/templates/content/en/Product/ailk.mdx +0 -19
  585. package/templates/content/en/Product/ailk.schema.json +0 -94
  586. package/templates/content/en/Product/api-launch-kit.mdx +0 -26
  587. package/templates/content/en/Product/launch-kit.mdx +0 -28
  588. package/templates/content/en/ProductsList/products.mdx +0 -26
  589. package/templates/content/en/Project/ailk-phase-2.mdx +0 -54
  590. package/templates/content/en/ProjectsList/projects.mdx +0 -25
  591. package/templates/content/en/ResourceDetail/aeo-scoring-guide.mdx +0 -27
  592. package/templates/content/en/ResourceDetail/content-model-whitepaper.mdx +0 -28
  593. package/templates/content/en/ResourceDetail/schema-org-quick-reference.mdx +0 -39
  594. package/templates/content/en/ResourcesHub/resources.mdx +0 -22
  595. package/templates/content/en/Service/consulting.mdx +0 -22
  596. package/templates/content/en/Service/implementation.mdx +0 -30
  597. package/templates/content/en/Service/launch-service.mdx +0 -232
  598. package/templates/content/en/Service/launch.mdx +0 -228
  599. package/templates/content/en/ServicesList/services.mdx +0 -84
  600. package/templates/content/en/SoftwareProduct/ailk-aeo.mdx +0 -44
  601. package/templates/content/en/SoftwareProduct/ailk-content-adapters.mdx +0 -47
  602. package/templates/content/en/SoftwareProduct/ailk-schema.mdx +0 -49
  603. package/templates/content/en/TeamList/team.mdx +0 -63
  604. package/templates/content/en/TeamMember/founder.mdx +0 -72
  605. package/templates/content/en/TermsPage/terms.mdx +0 -19
  606. package/templates/content/en/TermsPage/terms.schema.json +0 -99
  607. package/templates/content/en/TestimonialsList/testimonials.mdx +0 -44
  608. package/templates/content/en/UseCasesList/use-cases.mdx +0 -30
  609. package/templates/content/en/Whitepaper/ax-first-product-development.mdx +0 -27
  610. package/templates/content/en/Whitepaper/open-core-commercial-strategy.mdx +0 -27
  611. package/templates/content/en/Whitepaper/structured-data-for-answer-engines.mdx +0 -31
  612. package/templates/content/en-XA/AboutPage/about.mdx +0 -8
  613. package/templates/content/en-XA/FAQPage/faq.mdx +0 -8
  614. package/templates/content/en-XA/HomePage/home.mdx +0 -8
  615. package/templates/content/es/_site.mdx +0 -30
  616. package/templates/content/fr/_site.mdx +0 -30
  617. package/templates/content/ja/_site.mdx +0 -30
  618. package/templates/content/pt-BR/AboutPage/about.mdx +0 -8
  619. package/templates/content/pt-BR/FAQPage/faq.mdx +0 -8
  620. package/templates/content/pt-BR/HomePage/home.mdx +0 -23
@@ -1,5 +1,448 @@
1
1
  # @working-theory/database
2
2
 
3
+ ## 0.20.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#5282](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/pull/5282) [`49e6ba4`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/49e6ba470a0ff4a0e6d4f7d14147232e90a12259) Thanks [@claudio-planck](https://github.com/claudio-planck)! - Consent purposes and grants ([#5275](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/5275)): a site declares its consent purposes once, any form renders them as real checkboxes with inline policy links, and every answer produces a durable record carrying the exact wording the person read.
8
+
9
+ `@working-theory/validation` gains `consent-config.ts` — the per-site consent registry contract (`siteConsentConfigSchema`, `SITE_CONSENT_CONFIG_DEFAULTS`, `consentConfigFor`, `resolveConsentStatement`), following `SiteListingConfig`: a Zod-validated blob, platform defaults, and an unparseable blob that resolves to those defaults rather than to a failed form. A statement's links are markdown-shaped with a KEY target (`[Privacy Policy](privacy)`) resolved against the site's policy map, so a config string can never carry a URL or a scheme. `fieldInputTypeSchema` gains the `consent` kind, carrying `purposes: string[]` (ids only; `options`/`minLength` are refused on it). `projectListingStartSchema` keeps `consent: z.literal(true)` and gains an optional `consents: Record<purposeId, boolean>` and `locale`, so every existing caller (agent submission included) still parses. The listing application's contact step compiles its consent control as the `consent` kind (an optional `consentPurposes` list, defaulting to the platform's `service_terms`) instead of a `select` carrying one fake option.
10
+
11
+ `@working-theory/ui` gains two blocks: `ConsentStatement` (parses `[Label](key)` tokens; an unresolvable key renders as plain text, never a dead link; no code path renders an href taken from the statement string) and `ConsentGroup` (one `Checkbox` per purpose, every box unticked on first render, each named and described by its statement via `aria-labelledby`/`aria-describedby`, posting under a flat `<field>.<purposeId>` name). `ContactFormFields` accepts `type: "consent"`; `FlowStepper` gates advance on required purposes only and sends one `"true"`/`"false"` per purpose (a decline is a value, not an absent key); both take an optional `consentConfig` that defaults to the platform registry. `ListingApplicationFlow` now sends the founder's real grants (`consents` + `locale`) instead of a hardcoded `consent: true`.
12
+
13
+ `@working-theory/database` gains the append-only `ConsentGrant` model (`consent_grants`): subject as a type + id pair of plain scalars (no cross-namespace relation), declines stored as `granted: false`, the resolved statement denormalized with its hash and served locale, no `updatedAt` and no unique constraint on subject + purpose. The migration backfills one row per pre-existing listing marked wording-unrecoverable, stamped at the listing's own `consent_at`, and never touches `project_listings`.
14
+
15
+ Additive: a flow, form, or site declaring no consent config renders and parses exactly as before. The one deliberate behavior change is the listing application's consent control.
16
+
17
+ - [#5294](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/pull/5294) [`cf6b325`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/cf6b325298e92d22ab7edfe8538f5ca17f54ebfd) Thanks [@claudio-planck](https://github.com/claudio-planck)! - The founder application becomes data ([#5285](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/5285)): a published field contract, questions and screens as records, and override by exception.
18
+
19
+ `@working-theory/validation` gains `listing-application-contract.ts` — the fields the platform actually READS, each with the call site that reads it, which of them a published listing cannot do without, and the control a question writing one must declare. Two beliefs the design carried did not survive that grounding and are recorded in the module header: there is no `FAQPage` emission for a listing in this tree, and no resume-link email. `listing-application.ts` gains the question record (an id, a control, copy, options, validation, and either a `writesTo` naming a contract field or a `siteAnswer` destination carrying a visibility flag), the screen record (its own copy, an ordered list of question ids, and its own side-panel declaration), merge-by-id so a site rewording one question inherits every other default including ones added later, and a parse-time invariant: exactly one question writes each required contract field, with zero and two both named failures. The compiler emits ONE step per screen carrying every field its questions contribute — the generalization of the `contact` and `faqs` cases, not a third mechanism. `listing-application-defaults.ts` ships a complete default question set and a grouped arrangement following combine-selection, separate-composition; it deliberately reverses the ships-no-copy discipline and says why.
20
+
21
+ `@working-theory/ui` reaches two capabilities that already existed and were thrown away in one line. `ListingApplicationFlow` returned the live tile unconditionally on every step, ignoring the view `FlowStepper` handed it; a screen declares its own side panel now, and a screen declaring none renders a full-width question with `FlowFrame`'s side region collapsed. `FlowFrame` gains a side cell with the same padding, measure and centring the active cell's step card has, so side content no longer hand-rolls its own inset, and its side region gains `md:flex-1` — without it the region carried `md:w-1/2` against an active region carrying `flex-1`, so a caller's gap came out of the question column alone. `FlowStepper` measures the step card and sizes the side cell to the tallest card observed, never shrinking, capped at the VISIBLE slot height rather than the frame's declared `h-dvh` — a page mounting the frame below a header makes it taller than the viewport.
22
+
23
+ `@working-theory/database` gains the bounded site-answers store on `ProjectListing`, and the logo columns become writable from the application.
24
+
25
+ Additive, with two boundaries stated precisely. The flat `steps` config parses and compiles to the byte-identical `FlowConfig` — verified old-against-new on a fifteen-step config exercising every step kind — and `steps` is now optional, with a config declaring both shapes, or declaring `steps` as an explicit `undefined`, a named parse failure. What is NOT unchanged is the rendered frame: the side-cell container, the shared gap and the measured panel height are fixes to `FlowFrame` and `FlowStepper`, so they reach every consumer of those two components by design, not only the listing application.
26
+
27
+ A site that overrides one question's copy and declares no `screens` inherits every other default and renders new defaults added later. A site that declares its own `screens` inherits new defaults into its question set but does not render them — declared screens are that site's statement of what it asks, and inserting a screen into a live form is not something an upstream release should do. A new default that writes a REQUIRED contract field still fails that site's config at parse, by name.
28
+
29
+ The three fields the application gained — the two logo URLs and the requested window — are OPT-IN: they are excluded from the default collected-field mask, so adding them cannot widen what an anonymous caller may write on a site that never asked for them. A site that wants them names them.
30
+
31
+ - [#5298](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/pull/5298) [`57b0b04`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/57b0b047eb3f04d40f0712a893c89415b742c7f5) Thanks [@claudio-planck](https://github.com/claudio-planck)! - A verified owner link on a listing ([#5295](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/5295)): a founder who signs in can read their own submitted listings, and nobody else's.
32
+
33
+ `@working-theory/database` gains `ProjectListing.ownerUserId` / `ownerLinkedAt` — plain nullable scalars with no cross-namespace relation, exactly the shape `Lead.promotedUserId` / `promotedAt` already has (ADR 0009 invariant [#1](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/1)). A listing carried `founderEmail` and `leadId` and no user link, so the only join available for "the listings belonging to this signed-in person" was a session's email against `founderEmail`. That string is typed into an anonymous form and proves nothing: two people who type the same address are two people, and the join hands one of them the other's submission. These columns are the ownership claim a read may actually join on.
34
+
35
+ The link is stamped only when all three of these hold: the reconciling user's own email is VERIFIED; that verified address matches the row's `founderEmail`; and the row's site resolves to one of that user's own tenant workspaces. Any one failing writes nothing and returns a count rather than throwing — the reconciliation path would otherwise fail an unrelated request. The email comparison is exact equality against the same normalization the write path applies, deliberately not Prisma's `mode: "insensitive"`, which compiles to `ILIKE` and would make `_` and `%` in the caller's own address wildcards that capture a neighbour's row.
36
+
37
+ A fourth condition has no counterpart in the lead service: the match must be UNAMBIGUOUS. Two strangers can type the same address into the anonymous form, and when they do nothing says which of the two un-linked rows is whose — so a row is claimed only when it is the only un-linked row carrying that address at its site, and an ambiguous group stays null. The cost is a founder who legitimately submitted two applications at one site, which the concurrent limit allows: neither is linked. That is the deliberate trade, because nothing in the data separates their second application from a stranger's first. The write also repeats `ownerUserId: null`, making it a compare-and-swap, so two concurrent reconciliation runs cannot transfer a row away from whoever claimed it first.
38
+
39
+ Candidacy is also restricted to submitted rows — every stored status except `draft`. A draft is addressed by its resume token, which is cleared at submit, so the token and the owner link hand off to each other cleanly and a draft needs no link. It is also a security boundary: draft creation is anonymous with the quota enforced at submit, so a claimable draft would let one unauthenticated request either disclose a stranger's text or, under the ambiguity refusal, permanently block someone from claiming their own listing.
40
+
41
+ `@working-theory/validation` gains `projectListingMeResponseSchema` — an array of the existing founder-facing `projectListingDraftSchema`, reused rather than forked because the audience is the same person that shape already serves. Nothing existing changes.
42
+
43
+ No existing row is backfilled, now or later. Every row predates verification, so deriving a link from `founderEmail` would assert the thing nobody proved. A listing submitted by someone who never signs in stays null for the life of the row, which is a legitimate resting state rather than a backlog.
44
+
45
+ Additive throughout. Both columns are nullable with no default; the new schema export is new; the operator's `owner|admin` floor on the existing tenant-scoped listing routes is unchanged, and the founder reads their own rows through the owner link rather than through a relaxed floor.
46
+
47
+ - [#5283](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/pull/5283) [`a713ea7`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/a713ea78c12c1dc2519b80831deed197a4f227b4) Thanks [@claudio-planck](https://github.com/claudio-planck)! - A structured `address` field type in the flow vocabulary, and structured address storage for listings ([#5279](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/5279)).
48
+
49
+ `AddressFieldset` has shipped since [#4395](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/4395) and `StepFlow` has rendered it ever since, but `fieldInputTypeSchema` exposed six input types and `address` was not one of them — so a flow config could not name the composite, and the founder application collected a whole published business address in a single free-text box capped at 300 characters.
50
+
51
+ `fieldInputTypeSchema` gains `"address"`. The two cross-field rules already beneath that enum cover the new member without a new clause: `options` is select-only and `minLength` is text/textarea-only, so an address field declaring either is a named parse failure rather than a silently discarded setting. `flowAddressValueSchema` and `composeAddressLine` are new exports — the first declares the six-part value an address field submits, the second composes the single-line display string from those parts. There is deliberately no function that runs the conversion the other way.
52
+
53
+ `FlowStepper` reads, validates, gates, seeds and submits the composite against the six fixed keys `AddressFieldset` posts under, which is the handling `StepFlow` has carried since [#4395](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/4395). Required means every required sub-control has a value rather than that a key named `address` is non-empty. `ContactFormFields` already rendered the type and is unchanged, as are `AddressFieldset` and `ADDRESS_COUNTRIES`.
54
+
55
+ `ProjectListing` keeps `address` as the single-line display string and gains six nullable columns for the parts beside it. A new application composes its display string from the parts, server-side. An existing row keeps its display string exactly as the founder typed it and its parts stay null — no stored address is ever parsed, split, or rewritten, and the migration does not backfill.
56
+
57
+ Every change is additive: a flow config that declares no address field parses, renders and submits exactly as it did before, and a listing carrying only the legacy free-text address reads unchanged.
58
+
59
+ ### Patch Changes
60
+
61
+ - Updated dependencies [[`49e6ba4`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/49e6ba470a0ff4a0e6d4f7d14147232e90a12259), [`cf6b325`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/cf6b325298e92d22ab7edfe8538f5ca17f54ebfd), [`767a35c`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/767a35ca83155f774667ea3f7a10eb0ce1c094ab), [`57b0b04`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/57b0b047eb3f04d40f0712a893c89415b742c7f5), [`65989b4`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/65989b4dc6915bf37608475ed6409f98cd5945e2), [`a713ea7`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/a713ea78c12c1dc2519b80831deed197a4f227b4)]:
62
+ - @working-theory/validation@0.20.0
63
+
64
+ ## 0.19.0
65
+
66
+ ### Minor Changes
67
+
68
+ - [#5266](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/pull/5266) [`911e452`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/911e452c13b45e7fba213ed34290c981cc1bf346) Thanks [@claudio-planck](https://github.com/claudio-planck)! - `ProjectListing` (`inbox` namespace) gains `submittedCopy`, `copyEditedAt` and `copyEditedBy`, with migration `20260911120000_listing_copy_edit_audit`. They back the operator's copy edit — the third review outcome beside approve and reject: `copyEditedAt`/`copyEditedBy` mirror the existing `decidedAt`/`decidedBy` audit pair and are re-stamped on every edit, while `submittedCopy` is written once, on the first edit only, and preserves the five published copy fields exactly as the applicant submitted them. Additive — every existing column, model and migration is unchanged, and a row with the three columns unset behaves as before. Consumers that vendor `apps/api` need this version: `apps/api/src/services/project-listings.ts` writes the new fields and `PATCH /v1/project-listings/:id/copy` is the route that calls it.
69
+
70
+ ### Patch Changes
71
+
72
+ - [#5204](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/pull/5204) [`c74fdba`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/c74fdbaab253941b4f862ac0da845fab7c879d49) Thanks [@claudio-planck](https://github.com/claudio-planck)! - License/publication flip: adds `license: Apache-2.0` + a root `LICENSE` file and flips `publishConfig.access` from `restricted` to `public`, per the `commercial_tier: oss` disposition (`architecture.yaml`, A1 [#5075](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/5075)) and ADR 0033. No behavior change.
73
+
74
+ - [#5156](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/pull/5156) [`ddac6c1`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/ddac6c1c05ff30765d78c69e8f298a35082202ef) Thanks [@claudio-planck](https://github.com/claudio-planck)! - `@working-theory/metadata`: `mcp-tool-catalog.ts` gains an optional `module` field per tool entry (set on the scheduling and content-write tools), consumed by `apps/mcp/src/server.ts` to gate registration when a paid module is excluded (S1, [#5088](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/5088)). Additive — `McpToolCatalogEntry`/`McpToolRegistration` both keep every existing field.
75
+
76
+ `database` and `@working-theory/ui`: comment-only path-reference fixes after the S1 workspace move, which relocated the workspace app under the paid tree — no behavior change.
77
+
78
+ - Updated dependencies [[`6b76b3d`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/6b76b3d65e3b9cfb5cf8bfeb4309b9b8fb9c1345), [`23c7fd6`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/23c7fd601e48a37f3f210e130cb8dcd37899b9ab), [`c74fdba`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/c74fdbaab253941b4f862ac0da845fab7c879d49)]:
79
+ - @working-theory/validation@0.19.0
80
+
81
+ ## 0.18.0
82
+
83
+ ### Minor Changes
84
+
85
+ - [#5056](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/pull/5056) [`8d2b130`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/8d2b1305aa08dde674d15214b9c546fbdc3c60d1) Thanks [@claudio-planck](https://github.com/claudio-planck)! - <!--
86
+ MINOR, not MAJOR, and the changes below are still breaking. The published
87
+ group is on the `0.y.z` initial-development line, where MAJOR is pinned at 0
88
+ (claude-setup `rules/operating-policy.md` § Hard floors are the SemVer public
89
+ API, D7; AILK `docs/decisions/semver-activation.md`). A literal `major` here
90
+ would take the whole fixed group from 0.17.0 straight to 1.0.0 — a declaration
91
+ that the API is stable, which is a positioning act and not something a
92
+ changeset should perform as a side effect of describing breakage. [#5043](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/5043) hit
93
+ that trap and [#5045](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/5045) records the lesson. Pre-1.0, a breaking change is a MINOR
94
+ flagged breaking in the changelog, which is what the "**Breaking —**"
95
+ paragraphs below do.
96
+
97
+ `@working-theory/api-client` is NOT listed: it sits in `.changeset/config.json`'s
98
+ `ignore` list and changesets refuses a changeset mixing ignored and
99
+ non-ignored packages. Its version is bumped by hand in this repo (the [#5013](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/5013) /
100
+ [#5036](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/5036) precedent). Its change is described below anyway, because the
101
+ description is what a consumer reads.
102
+ -->
103
+
104
+ The consumer half of project listings ships: a mountable founder application, its previews, its shelves and its card ([#5048](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/5048))
105
+
106
+ Project listings shipped backend-only. After [#5036](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/5036) replaced one anonymous POST
107
+ with a three-call resumable-draft protocol, every consuming site had to
108
+ hand-write three proxy routes, a form that saved on each advance, and a
109
+ decision about where a bearer credential lives. That is a platform capability,
110
+ not per-site plumbing, and this is it.
111
+
112
+ **`@working-theory/ui` — the mountable surface.** `ListingApplicationFlow` is a
113
+ new section: a site passes its own step config, its own copy and a draft
114
+ client, and gets a resumable multi-step application with a live preview tile.
115
+ It is NOT a new stepper — it configures `FlowStepper` ([#3957](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/3957)) and supplies an
116
+ `onSubmitStep` that calls the draft protocol. Also new: `ProjectListingCard`
117
+ and `ProjectListingShelves` (the two shelves and the tile),
118
+ `ListingPrivacyNotice` (the per-listing disclosure, rendered on the flow where
119
+ a visitor submits, naming the founder as the party collecting their data),
120
+ `ListingTilePreview`, `ListingQuestionReview` and `ListingFullPreview`.
121
+
122
+ Not one of these ships a founder-readable string. Every prompt, option label,
123
+ button label, band label and privacy sentence is a required prop or config
124
+ value.
125
+
126
+ **`@working-theory/ui` — `FlowStepper` gains three additive props.**
127
+ `customSteps` resolves a `custom` step's renderer, `initialStepKey` lands a
128
+ resumed flow past the step that minted its draft, and `sidePanel`'s view object
129
+ gains `answers` and `live` so a side region can render what the visitor is
130
+ typing right now. Every existing caller compiles and behaves unchanged.
131
+
132
+ **`@working-theory/validation` — the configuration contract.**
133
+ `listingApplicationConfigSchema` is what a site supplies, and
134
+ `compileListingApplicationFlow` turns it into a `FlowConfig`. Two ordering
135
+ constraints are ENFORCED at parse time rather than documented: `contact` must
136
+ be the first step (the draft is keyed on the identity it captures, so nothing
137
+ can save before it), and a `preview` step must follow every step kind it
138
+ previews (ordered earlier it has nothing to render). Both fail loudly.
139
+
140
+ `flowStepSchema` gains one additive member, `custom`, carrying a `renderer`
141
+ identifier the mounting surface resolves. Every existing flow config parses
142
+ unchanged.
143
+
144
+ **Breaking — the application payload names its site by a PUBLIC KEY, not a
145
+ `siteId`.** `projectListingStartSchema` carries `siteKey` where it carried
146
+ `siteId`, and the server resolves the site from it. A body-supplied tenant
147
+ identifier is exactly what the consuming site's proxy route existed to prevent;
148
+ resolving it server-side is what lets the proxy go away. The schema is
149
+ `.strict()`, so a body still carrying `siteId` is refused with a 400 naming the
150
+ unrecognised key rather than silently honoured. The anonymous public read moves
151
+ from `?siteId=` to `?siteKey=` for the same reason — one identifier for the
152
+ whole mountable contract. `SiteListingConfig` gains a nullable, unique
153
+ `publicKey` column as the mapping, with an `AILK_LISTING_PUBLIC_KEY` env
154
+ fallback so a single-tenant scaffold needs no config row.
155
+
156
+ **Breaking — submit-completeness derives from the site's configured field set.**
157
+ `projectListingSubmitSchema` validated a fixed roster. It cannot: steps are
158
+ individually optional, so a field whose step a site never rendered was never
159
+ asked for, and requiring it silently refuses valid applications naming
160
+ questions the founder never saw. `buildProjectListingSubmitSchema(caps,
161
+ collectedFields)` builds the schema instead, and `SiteListingConfig` gains
162
+ `collectedFields`, defaulting to the full roster — so a site that has
163
+ configured nothing behaves exactly as before. The set is read server-side and
164
+ never from a request: a caller that could post its own required-field set could
165
+ post an empty one.
166
+
167
+ **Breaking — the word caps are a site's numbers.** Ten words of headline and
168
+ twenty-five of one-liner were platform constants compiled into a regex.
169
+ `SiteListingConfig` gains `wordCaps`, and
170
+ `buildProjectListingDraftPatchSchema` / `buildProjectListingSubmitSchema`
171
+ compile the rules from it. The defaults reproduce the previous constants
172
+ exactly, so no existing site's behaviour changes.
173
+
174
+ **`@working-theory/api-client` (0.6.0 → 0.7.0, bumped by hand).**
175
+ `projectListings.startDraft` and `.resumeDraft` bind a draft's id and its
176
+ caller-held resume token into one session. The token is never a cookie and this
177
+ package touches no browser storage: the resume link is emailed and doubles as
178
+ address verification (salessmyth/samhenry [#316](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/316) D6b), and an agent-mediated
179
+ caller ([#5039](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/5039)) cannot present a cookie at all. `start`, `patchDraft` and
180
+ `submit` are unchanged.
181
+
182
+ **No honeypot and no timing heuristic ships anywhere in this change.** Both
183
+ were removed deliberately ([#316](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/316) D6b) because [#5039](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/5039) opens an agent-mediated
184
+ submission channel they would close.
185
+
186
+ ### Patch Changes
187
+
188
+ - Updated dependencies [[`8d2b130`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/8d2b1305aa08dde674d15214b9c546fbdc3c60d1)]:
189
+ - @working-theory/validation@0.18.0
190
+
191
+ ## 0.17.0
192
+
193
+ ### Minor Changes
194
+
195
+ - [#5035](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/pull/5035) [`63974f5`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/63974f52d241db3179df7b263a3dc1430c3810c1) Thanks [@claudio-planck](https://github.com/claudio-planck)! - <!--
196
+ `@working-theory/api-client` was listed here by [#5035](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/5035) and has been REMOVED
197
+ ([#5036](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/5036)). It is in `.changeset/config.json`'s `ignore` list, and changesets
198
+ refuses a changeset that mixes ignored and non-ignored packages — so as
199
+ written this changeset could not be consumed at all, and `changeset version`
200
+ errored out before versioning anything. That would have blocked the very
201
+ release this work is timed to ride. api-client's version is bumped by hand in
202
+ this repo (the [#5013](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/5013) precedent); its breaking changes are still described
203
+ below, because the description is what a consumer reads.
204
+ -->
205
+
206
+ <!--
207
+ MINOR, not MAJOR, and the changes below are still breaking. The published
208
+ group is on the `0.y.z` initial-development line, where MAJOR is pinned at 0
209
+ (claude-setup `rules/operating-policy.md` § Hard floors are the SemVer public
210
+ API, D7; AILK `docs/decisions/semver-activation.md`, which puts the >=1.0.0
211
+ hard-floor->MAJOR gate explicitly out of scope). A literal `major` here would
212
+ take the whole 27-package fixed group from 0.16.0 straight to 1.0.0 — a
213
+ declaration that the API is stable, which is a positioning act and not
214
+ something a changeset should perform as a side effect of describing breakage.
215
+ Pre-1.0, a breaking change is a MINOR flagged breaking in the changelog, which
216
+ is what every "**Breaking —**" paragraph below does.
217
+ -->
218
+
219
+ Project listings become a platform feature: per-site window config, a five-state lifecycle, and a derived slug ([#5033](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/5033))
220
+
221
+ **Breaking — the apply payload no longer accepts `slug`.** `projectListingCreateSchema` is `.strict()`, so a payload still supplying one is a 400. The server derives the slug from `name` (lowercased, non-alphanumeric runs to hyphens, truncated to 48) and resolves collisions with a site-scoped numeric suffix; the created slug comes back in the 201 response, which is now the only place a caller learns it.
222
+
223
+ **Breaking — the apply payload gains `requestedWindowDays`.** An applicant may request a listing window in whole days. The server clamps it against the site's own maximum instead of rejecting the application. The site's bounds are never representable in a request body.
224
+
225
+ **Breaking — the status vocabulary changed.** `PROJECT_LISTING_STATUSES` is now `draft | requested | rejected | active | closed`, replacing `applied | approved | rejected | live | closed`. `closed` is computed from the listing's window end on every read and is never stored, so an expired listing cannot stay open because a scheduled job failed. Two new exports narrow what may be written: `PROJECT_LISTING_STORED_STATUSES` (the four persistable values) and `PROJECT_LISTING_DECISION_STATUSES` (`active | rejected`, the only transition targets).
226
+
227
+ **Breaking — `backlinkUntil` is now `windowEndsAt`** on the row and the public read. The field bounds the whole listing rather than a backlink.
228
+
229
+ **Breaking — `projectListingPatchSchema` changed shape** from a required `{ status }` over all five statuses to `{ status?, featured? }` with at least one field present, `status` narrowed to the two decision targets. `apiClient.projectListings.patch` takes `ProjectListingPatchInput` accordingly.
230
+
231
+ **Added.** `siteListingConfigSchema`, `SITE_LISTING_CONFIG_DEFAULTS` and `clampWindowDays` in `@working-theory/validation`, backed by a new `SiteListingConfig` model keyed `siteId @unique` in the `config` namespace. The row and public read gain `featured`, `headline`, `logoMarkUrl` and `logoWordmarkUrl`; the logo columns ship nullable with no upload path.
232
+
233
+ The ninety-day listing window that `apps/api` hardcoded was one consuming site's commercial terms. No duration constant remains in the published package outside the config schema's own defaults.
234
+
235
+ ## The application becomes a resumable draft, and the listing carries the fields its page and tile render ([#5036](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/5036))
236
+
237
+ **Breaking — the single anonymous create is replaced by three operations.** `apiClient.projectListings.create` is gone. In its place: `start` (`POST /v1/project-listings` — the founder's name, email and a literal-`true` `consent`, returning `{ id, resumeToken }` at 201), `patchDraft` (`PATCH /v1/project-listings/drafts/:id` — merges a partial application and returns the merged row) and `submit` (`POST /v1/project-listings/drafts/:id/submit` — no body, returns `{ id, slug }`). All three answer with the API's `{ ok, data }` / `{ ok, error }` envelope on every path; the create they replace answered bare on success and enveloped on failure, so a client branching on `body.ok` read a successful apply as a failure. `projectListingCreateSchema` / `ProjectListingCreateInput` / `projectListingCreateResponseSchema` are replaced by `projectListingStartSchema`, `projectListingDraftPatchSchema`, `projectListingSubmitSchema` and their response schemas. The form the change exists for saves on every advance; a single terminal POST no longer describes it.
238
+
239
+ **Breaking — validation moved from write-time to submit-time, so every application field on `projectListingSchema` is now nullable.** `slug`, `name`, `oneLiner`, `problem`, `product`, `commitment`, `teamComposition`, `faqs`, `anythingElse`, `address` and `questions` all read `T | null`. So does `leadId`: the `Lead` is written at SUBMIT rather than at start, because the founder's contact details are already captured on the listing row itself at step one, and `routeLead` sends an operator notification — which on an anonymous route meant a stranger could mail the operator by opening a draft they never finished. A draft is a legitimately incomplete row and only `submit` asserts completeness; a consumer that assumed a listing always carries a name must now handle the draft case. `submit` names the fields that are missing rather than reporting a generic failure.
240
+
241
+ **Breaking — `patch`/`submit` are gated by a resume token.** `start` returns it once; only its sha-256 digest is stored, and lookup requires the listing id AND the digest, so a token is bound to one listing and grants access to no other. It travels in `Authorization: Bearer`, and `submit` clears it. There is no route that reads a token back.
242
+
243
+ **Breaking — `PROJECT_LISTING_STAGES` and the `stage` field are gone.** `PROJECT_LISTING_PRODUCTS` and a `product` field replace them: `new-idea-written | wireframes | demo-video | working-prototype | live-no-users | live-some-users`. No shim translates the old four values — the ladders do not align rung-for-rung, so a silent translation would invent data. Existing rows are remapped once by the migration.
244
+
245
+ **Breaking — `audience` is removed from the payload, the row and the public read.** No question feeds it any more; its guidance folded into `oneLiner`. Existing values are not migrated anywhere.
246
+
247
+ **Breaking — `oneLiner` is word-capped, not character-capped.** It was `.max(160)`; it is now 25 words (with a 400-character backstop). `headline` becomes required at submit and is capped at 10 words alongside its existing single-line rule. What a tile has room for is a sentence, not a byte count.
248
+
249
+ **Breaking — `ProjectListing.experimentId` becomes `experimentKey`.** `WaitlistScore` stores `experimentKey`, so a listing holding the experiment's id meant every listing-to-submissions read fetched the experiment purely to translate one into the other. The same string now sits on both sides.
250
+
251
+ **Breaking — `WaitlistScore` is unique per `[leadId, experimentKey]`, not per `[leadId]`.** A visitor who joins two founders' waitlists is one lead with two scores; the old constraint permitted one, so the second write erased the first and a founder's CSV under-reported with no error raised. Overwrite-on-retake is preserved, scoped per experiment.
252
+
253
+ **Added.** `@working-theory/validation` exports `segmentation.js`: `TEAM_COMPOSITIONS` (the canonical eight-value team-composition axis), `COMMITMENTS` (five values), their default label maps, and `TEAM_COMPOSITION_QUESTION_ID`. The application's `teamComposition` enum is the first six team values; the diagnostic renders the full list. A register is JSON and the constant is TypeScript, so neither imports the other and a test asserts the register's question-one values are a subset.
254
+
255
+ **Added.** The row and the public read gain `commitment`, `teamComposition`, `faqs` (exactly three `{question, answer}` entries), `anythingElse`, `address` and `consentAt`. The founder's address is on the PUBLIC read deliberately: visitors answering that founder's diagnostic hand personal data to the founder, not the platform, and a per-listing privacy notice naming the collecting party cannot be built downstream without it.
256
+
257
+ **Changed.** A `featured: true` listing is exempt from the computed `closed` status and may carry a null `windowEndsAt`; a non-featured `active` row with no window is a data error, logged and read `closed`. `computeListingStatus` takes the row's `featured` flag as a fourth argument.
258
+
259
+ **Changed.** A founder may hold at most two listings in a non-terminal state (`draft`, `requested`, `active`) on one site. A third `submit` is refused with `listing_limit_reached`. Drafts count, or the limit is evaded by never submitting — but only for fourteen days, and `founderEmail` is lowercased before it is stored or counted. `founderEmail` is unverified on an anonymous surface, so an unbounded draft would let two anonymous requests lock a named founder out of applying permanently, and a case-sensitive comparison would let the limit be evaded by holding down shift.
260
+
261
+ **Changed.** The project-listing diagnostic register resolves points by option VALUE rather than by a positional `q{n}:{i}of{k}` token. `LISTING_DIAGNOSTIC_SCORING` becomes `buildListingDiagnosticScoring(questions)`, and `listingOptionValue`, `LISTING_DIAGNOSTIC_ARITIES`, `LISTING_DIAGNOSTIC_OPTION_VALUES` and `listingDiagnosticQuestionOptions` are removed from `@working-theory/database/flows/listing-diagnostic`. Q5's urgency weights are now declared explicitly strongest-first, which corrects a scoring inversion the positional rule produced.
262
+
263
+ **Changed.** `FlowDefinition` and `FlowSession` carry a nullable `listingId`. The link from a submission back to a listing was previously the coincidence that the generated flow's slug equalled the listing's slug; it is now stated. `upsertFlowDefinition` takes an optional third `listingId` argument.
264
+
265
+ ### Patch Changes
266
+
267
+ - Updated dependencies [[`933791e`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/933791ef204baabed2038b9e66e5b4b09d3ed50c), [`63974f5`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/63974f52d241db3179df7b263a3dc1430c3810c1)]:
268
+ - @working-theory/ids@0.6.0
269
+ - @working-theory/validation@0.17.0
270
+
271
+ ## 0.16.0
272
+
273
+ ### Patch Changes
274
+
275
+ - Updated dependencies []:
276
+ - @working-theory/validation@0.16.0
277
+
278
+ ## 0.15.0
279
+
280
+ ### Minor Changes
281
+
282
+ - [#5009](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/pull/5009) [`19dbfa7`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/19dbfa77f0233c0591dc06c777fd2bfbb85910a8) Thanks [@claudio-planck](https://github.com/claudio-planck)! - Add the project-listing diagnostic's shared scoring register and the
283
+ `ListingCsvSend` model ([#5001](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/5001)).
284
+
285
+ `database/flows/listing-diagnostic.ts` (exported as
286
+ `@working-theory/database/flows/listing-diagnostic`, beside the existing
287
+ `./flows/presets` subpath) is the ONE `WaitlistScoring` register every
288
+ generated listing diagnostic shares: Q3–Q6 scored by option POSITION —
289
+ `round(3·i/(k−1))` over a listing-independent `q{n}:{i}of{k}` option value —
290
+ summed 0–12 into `now` (10–12) · `soon` (7–9) · `later` (4–6) · `curious`
291
+ (0–3). Q1/Q2/Q7 and the extras carry no points.
292
+
293
+ `ListingCsvSend` (`listing_csv_sends`, id prefix `lcsv_`) records one row per
294
+ DELIVERED weekly founder CSV — `listingId`, `sentAt`, `rowCount`, `grantId` —
295
+ and is the watermark the next sweep selects after.
296
+
297
+ Additive: a new model plus a new export subpath, no change to any existing
298
+ model, migration, or export. Consumers that vendor `apps/api` need this
299
+ version — `apps/api/src/services/project-listing-flow.ts` imports the register
300
+ and `listing-csv-sweep.ts` reads the new model.
301
+
302
+ ### Patch Changes
303
+
304
+ - Updated dependencies [[`e29589c`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/e29589c932e9d24bb84b7f0913ceac8e40d0fc36), [`d0f77a1`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/d0f77a1a175533eb90e31fa11c0ab6bb1b7f208e), [`3e3b63f`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/3e3b63fe310abc6f0c1b8b315e51ef2670955c35)]:
305
+ - @working-theory/ids@0.5.0
306
+ - @working-theory/validation@0.15.0
307
+
308
+ ## 0.14.0
309
+
310
+ ### Minor Changes
311
+
312
+ - [#4891](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/pull/4891) [`4a41a0a`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/4a41a0a81bfbd8049771f289d577e236cffea6bf) Thanks [@claudio-planck](https://github.com/claudio-planck)! - Add the `FlowCheckout` model (`inbox` namespace, `@@map("flow_checkouts")`,
313
+ `flchk_` ids) with migration `20260905230000_add_flow_checkout` ([#4837](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/4837)) —
314
+ the recommender's buyer record: one row per checkout attempt carrying the
315
+ site, flow slug, experiment key, session, lead, offer key, the purchased
316
+ configuration (seats / period / credit stop), the server's quote and its
317
+ minor-unit amount + currency, the permalink, and the Stripe session /
318
+ customer ids and `status` / `completedAt` the webhook stamps ([#4838](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/4838)).
319
+ Additive; no existing model or column changes.
320
+
321
+ ### Patch Changes
322
+
323
+ - Updated dependencies [[`4a41a0a`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/4a41a0a81bfbd8049771f289d577e236cffea6bf), [`4a41a0a`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/4a41a0a81bfbd8049771f289d577e236cffea6bf)]:
324
+ - @working-theory/ids@0.4.0
325
+ - @working-theory/validation@0.14.0
326
+
327
+ ## 0.13.1
328
+
329
+ ### Patch Changes
330
+
331
+ - [#4746](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/pull/4746) [`fbe5d42`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/fbe5d422bb96fc963c0f2132d7ac2416b4b1bdf0) Thanks [@samuelhenry](https://github.com/samuelhenry)! - Rebuild + republish. The 0.13.0 tarballs were published from a stale `dist/` (the manual publish loop ran `pnpm publish` without `pnpm -r build`), so `@working-theory/validation`, `@working-theory/database` and others carry pre-[#4731](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/4731)/[#4732](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/4732) compiled output under the 0.13.0 version. No source change; this patch republishes every fixed-group package from a fresh build at `main`. Consumers pin `^0.13.1`.
332
+
333
+ - Updated dependencies [[`fbe5d42`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/fbe5d422bb96fc963c0f2132d7ac2416b4b1bdf0)]:
334
+ - @working-theory/validation@0.13.1
335
+
336
+ ## 0.13.0
337
+
338
+ ### Patch Changes
339
+
340
+ - [#4739](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/pull/4739) [`7fb762e`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/7fb762eea3db575dada5569b53884b679707e7ef) Thanks [@samuelhenry](https://github.com/samuelhenry)! - Add a changeset for FEAT-074 U3/U4a/U4b ([#4725](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/4725), [#4727](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/4727), [#4734](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/4734)), which shipped
341
+ without one. `waitlistExperimentConfigShapeSchema` (`waitlist.ts`) gains an
342
+ optional `deliverables` block, and `compileWaitlistFlow` (`waitlist-compile.ts`)
343
+ carries it into the compiled flow — a compiled waitlist flow may now declare
344
+ deliverables. `@working-theory/database` adds the `PlaybookInstance` model
345
+ (`inbox` namespace, migration `20260903010000_add_playbook_instance`,
346
+ `@@map("playbook_instances")`) — the platform schema gains a `playbook_instances`
347
+ table with `pbk_` ids, written append-only by targeting-maturity signup scoring.
348
+ Both additive; an existing flow config or site-plan projection with no
349
+ `deliverables` block is unaffected.
350
+ - Updated dependencies [[`7fb762e`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/7fb762eea3db575dada5569b53884b679707e7ef), [`93d14de`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/93d14de711e88d2768c38b97c0f88a0fb270193b)]:
351
+ - @working-theory/validation@0.13.0
352
+
353
+ ## 0.12.1
354
+
355
+ ### Patch Changes
356
+
357
+ - Updated dependencies []:
358
+ - @working-theory/validation@0.12.1
359
+
360
+ ## 0.12.0
361
+
362
+ ### Patch Changes
363
+
364
+ - Updated dependencies []:
365
+ - @working-theory/validation@0.12.0
366
+
367
+ ## 0.11.0
368
+
369
+ ### Minor Changes
370
+
371
+ - [#4693](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/pull/4693) [`251003f`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/251003f0ef26cf288c472f8cc4b5bf1818f7f085) Thanks [@samuelhenry](https://github.com/samuelhenry)! - Extend the flow engine additively ([#4663](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/4663) A3): per-step `showIf` branch
372
+ predicates resolved by one shared pure resolver (`flow-visibility.ts`, used
373
+ by both the engine and `FlowStepper`), derived + persisted session `flags`,
374
+ `whenHidden` auto-answers for a hidden step, `multi`/`exclusiveValues`
375
+ segmentation questions, a `url` field input type + `minLength`, and a fourth
376
+ step type `aeo_score` that computes an AI-visibility score server-side inside
377
+ its own invisible, auto-submitted step and persists it on `FlowSession`.
378
+ `FlowStepper` gains opt-in back-navigation (`messages.goBack`), multi-select
379
+ rendering, url autoformatting, and branch-aware progress. `compileWaitlistFlow`
380
+ lifts its three prior refusals (`multi`, `showIf`, `exclusiveValues`) onto the
381
+ extended grammar. Additive only — an existing linear flow with no `showIf`,
382
+ `flags`, or `aeo_score` step is unaffected.
383
+
384
+ - [#4673](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/pull/4673) [`cd23c21`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/cd23c21e403abbad825bc794bc8c0d613325de01) Thanks [@samuelhenry](https://github.com/samuelhenry)! - Add the waitlist-experiment data model ([#4661](https://github.com/working-theory-labs/ai-launch-kit-internal/issues/4661) A1): the `waitlist.ts` register
385
+ schemas (question set, scoring rules grammar, tracking, experiment config),
386
+ `compileWaitlistFlow` in `waitlist-compile.ts`, an optional `experiment`
387
+ binding block on `flowConfigSchema`, and the `WaitlistExperiment` +
388
+ `WaitlistScore` Prisma models (`inbox` namespace) with their migration.
389
+ Additive only — an existing flow config or site-plan projection with no
390
+ `experiment`/`waitlistExperiments` block is unaffected.
391
+
392
+ ### Patch Changes
393
+
394
+ - Updated dependencies [[`251003f`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/251003f0ef26cf288c472f8cc4b5bf1818f7f085), [`48c7962`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/48c796243ee0f5c97440c1487737970a9d0124d3), [`e638747`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/e638747ab2ddfbae4ecfce14fd2f3ccf92523a3c), [`9a7fc2c`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/9a7fc2c129e095099f0be907a831190f24c9e7e3), [`cd23c21`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/cd23c21e403abbad825bc794bc8c0d613325de01), [`44e9795`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/44e9795dac30b9d6b87e57e33d81ce823a6c93da), [`fa5ece2`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/fa5ece2f86d5195988f69fe9568d9a06addc8e9d)]:
395
+ - @working-theory/validation@0.11.0
396
+ - @working-theory/ids@0.2.0
397
+
398
+ ## 0.10.0
399
+
400
+ ### Patch Changes
401
+
402
+ - Updated dependencies [[`dd8cc0e`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/dd8cc0e46b042009f41915097b93c5737fcf80a0)]:
403
+ - @working-theory/validation@0.10.0
404
+
405
+ ## 0.9.0
406
+
407
+ ### Patch Changes
408
+
409
+ - Updated dependencies []:
410
+ - @working-theory/validation@0.9.0
411
+
412
+ ## 0.7.0
413
+
414
+ ### Patch Changes
415
+
416
+ - Updated dependencies []:
417
+ - @working-theory/validation@0.7.0
418
+
419
+ ## 0.6.0
420
+
421
+ ### Patch Changes
422
+
423
+ - Updated dependencies [[`3a10200`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/3a1020088c9df36d60f3539504c89dfe1cdd3827)]:
424
+ - @working-theory/validation@0.6.0
425
+
426
+ ## 0.5.0
427
+
428
+ ### Patch Changes
429
+
430
+ - Updated dependencies [[`b4a9e20`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/b4a9e20a9708f3f104f921511fce8ce56bcf3e2f)]:
431
+ - @working-theory/validation@0.5.0
432
+
433
+ ## 0.4.0
434
+
435
+ ### Patch Changes
436
+
437
+ - Updated dependencies [[`5c80fee`](https://github.com/Working-Theory-Labs/ai-launch-kit-internal/commit/5c80fee9ef52b5842fa5f62a682c14743032fb2e)]:
438
+ - @working-theory/validation@0.4.0
439
+
440
+ ## 0.3.0
441
+
442
+ ## 0.2.0
443
+
444
+ ## 0.1.3
445
+
3
446
  ## 0.1.2
4
447
 
5
448
  ## 0.1.1