@aotter/mantle 0.2.0-alpha.1 → 0.2.0-alpha.10

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 (930) hide show
  1. package/README.md +180 -45
  2. package/dist/auth/adapter.d.ts +32 -0
  3. package/dist/auth/adapter.js +288 -0
  4. package/dist/auth/admin.d.ts +3 -0
  5. package/dist/auth/admin.js +21 -0
  6. package/dist/auth/caller.d.ts +86 -0
  7. package/dist/auth/caller.js +155 -0
  8. package/dist/auth/hardening.d.ts +24 -0
  9. package/dist/auth/hardening.js +40 -0
  10. package/dist/auth/identity.d.ts +121 -0
  11. package/dist/auth/identity.js +203 -0
  12. package/dist/auth/oauth.d.ts +63 -0
  13. package/dist/auth/oauth.js +217 -0
  14. package/dist/auth/resource-seeds.js +10 -0
  15. package/dist/auth/routes.d.ts +32 -0
  16. package/dist/auth/routes.js +226 -0
  17. package/dist/build/compiler.d.ts +721 -0
  18. package/dist/build/compiler.js +7029 -0
  19. package/dist/{spec → build/spec}/domain/model/ManifestGrammar.d.ts +30 -43
  20. package/dist/{spec → build/spec}/domain/model/RuntimePlan.d.ts +77 -3
  21. package/dist/{spec → build/spec}/domain/model/SqlIr.d.ts +39 -6
  22. package/dist/build/spec/domain/model/UserFields.d.ts +21 -0
  23. package/dist/{spec → build/spec}/domain/service/PlanFingerprint.d.ts +4 -1
  24. package/dist/{spec → build/spec}/kernel/diagnostic.d.ts +1 -30
  25. package/dist/bun/assets.d.ts +2 -0
  26. package/dist/bun/assets.js +24 -0
  27. package/dist/domain/adminOrder.js +24 -0
  28. package/dist/domain/columns.js +57 -0
  29. package/dist/domain/describe/chunk-ZVXBGP7Y.js +424 -0
  30. package/dist/domain/describe/index.d.ts +58 -0
  31. package/dist/domain/describe/index.js +115 -0
  32. package/dist/domain/describe/target-hash.d.ts +8 -0
  33. package/dist/domain/describe/target-hash.js +12 -0
  34. package/dist/domain/describe/targets.d.ts +40 -0
  35. package/dist/domain/entry.js +33 -0
  36. package/dist/domain/generated-tools.js +19 -0
  37. package/dist/domain/generation.d.ts +16 -0
  38. package/dist/domain/generation.js +1 -0
  39. package/dist/domain/input.js +17 -0
  40. package/dist/domain/model.js +1 -0
  41. package/dist/domain/paging.js +230 -0
  42. package/dist/domain/recipes.js +24 -0
  43. package/dist/domain/userReferences.js +5 -0
  44. package/dist/domain/wireScalars.js +47 -0
  45. package/dist/infrastructure/adminEntries.js +153 -0
  46. package/dist/infrastructure/adminPaging.js +72 -0
  47. package/dist/infrastructure/artifacts.js +71 -0
  48. package/dist/infrastructure/authSchema.js +83 -0
  49. package/dist/infrastructure/bundle.js +188 -0
  50. package/dist/infrastructure/cli.js +118 -0
  51. package/dist/infrastructure/generate.d.ts +12 -0
  52. package/dist/infrastructure/generate.js +189 -0
  53. package/dist/infrastructure/generateAuth.d.ts +8 -0
  54. package/dist/infrastructure/generateAuth.js +74 -0
  55. package/dist/infrastructure/help.js +60 -0
  56. package/dist/infrastructure/init.js +54 -0
  57. package/dist/infrastructure/inputs.js +41 -0
  58. package/dist/infrastructure/mounts.js +25 -0
  59. package/dist/infrastructure/wrangler.js +109 -0
  60. package/dist/kernel/authorization.d.ts +4 -0
  61. package/dist/kernel/authorization.js +16 -0
  62. package/dist/kernel/binds.d.ts +60 -0
  63. package/dist/kernel/binds.js +49 -0
  64. package/dist/kernel/caller-identity.d.ts +24 -0
  65. package/dist/kernel/caller-identity.js +22 -0
  66. package/dist/kernel/contract-error.d.ts +12 -0
  67. package/dist/kernel/contract-error.js +14 -0
  68. package/dist/kernel/contracts.d.ts +143 -0
  69. package/dist/kernel/contracts.js +97 -0
  70. package/dist/{spec/domain/service/CloudflareCron.d.ts → kernel/cron.d.ts} +0 -1
  71. package/dist/{spec/domain/service/CloudflareCron.js → kernel/cron.js} +1 -6
  72. package/dist/kernel/dialect/common.d.ts +38 -0
  73. package/dist/kernel/dialect/common.js +6 -0
  74. package/dist/kernel/dialect/postgres.d.ts +16 -0
  75. package/dist/kernel/dialect/postgres.js +18 -0
  76. package/dist/kernel/dialect/sqlite.d.ts +20 -0
  77. package/dist/kernel/dialect/sqlite.js +34 -0
  78. package/dist/kernel/drain.d.ts +5 -0
  79. package/dist/kernel/drain.js +35 -0
  80. package/dist/kernel/driver/bun-sqlite.d.ts +19 -0
  81. package/dist/kernel/driver/bun-sqlite.js +77 -0
  82. package/dist/kernel/driver/d1.d.ts +24 -0
  83. package/dist/kernel/driver/d1.js +22 -0
  84. package/dist/kernel/driver/postgres.d.ts +25 -0
  85. package/dist/kernel/driver/postgres.js +99 -0
  86. package/dist/kernel/driver/transaction-context.d.ts +10 -0
  87. package/dist/kernel/driver/transaction-context.js +29 -0
  88. package/dist/kernel/email.d.ts +28 -0
  89. package/dist/{auth/emailTemplates.js → kernel/email.js} +13 -2
  90. package/dist/kernel/host-access.d.ts +10 -0
  91. package/dist/kernel/host-access.js +65 -0
  92. package/dist/kernel/host-caller.d.ts +39 -0
  93. package/dist/kernel/host-caller.js +56 -0
  94. package/dist/kernel/json-body.d.ts +4 -0
  95. package/dist/kernel/json-body.js +44 -0
  96. package/dist/kernel/mcp-apps.d.ts +69 -0
  97. package/dist/kernel/mcp-apps.js +40 -0
  98. package/dist/kernel/mcp-call.d.ts +5 -0
  99. package/dist/kernel/mcp-call.js +25 -0
  100. package/dist/kernel/mcp-handler.js +371 -0
  101. package/dist/kernel/mcp.d.ts +110 -0
  102. package/dist/kernel/mcp.js +50 -0
  103. package/dist/kernel/media.d.ts +27 -0
  104. package/dist/kernel/media.js +216 -0
  105. package/dist/kernel/paging.d.ts +55 -0
  106. package/dist/kernel/paging.js +95 -0
  107. package/dist/kernel/publishing.d.ts +4 -0
  108. package/dist/kernel/publishing.js +16 -0
  109. package/dist/{cloudflare/r2Media.d.ts → kernel/r2-media.d.ts} +4 -5
  110. package/dist/kernel/r2-media.js +78 -0
  111. package/dist/kernel/rest-dispatch.js +38 -0
  112. package/dist/kernel/rest-router.js +64 -0
  113. package/dist/kernel/rest.d.ts +58 -0
  114. package/dist/kernel/rest.js +41 -0
  115. package/dist/kernel/scalars.d.ts +6 -0
  116. package/dist/kernel/scalars.js +44 -0
  117. package/dist/kernel/search.js +5 -0
  118. package/dist/{core/site.d.ts → kernel/site-types.d.ts} +38 -9
  119. package/dist/kernel/site-types.js +1 -0
  120. package/dist/kernel/site.d.ts +39 -0
  121. package/dist/kernel/site.js +32 -0
  122. package/dist/kernel/store.d.ts +175 -0
  123. package/dist/kernel/store.js +269 -0
  124. package/dist/kernel/surface.d.ts +10 -0
  125. package/dist/kernel/surface.js +19 -0
  126. package/dist/kernel/sweep.d.ts +17 -0
  127. package/dist/kernel/sweep.js +27 -0
  128. package/dist/kernel/translations.d.ts +1 -0
  129. package/dist/kernel/translations.js +13 -0
  130. package/dist/kernel/user-caller.d.ts +31 -0
  131. package/dist/kernel/user-caller.js +67 -0
  132. package/dist/kernel/user-field-name.js +3 -0
  133. package/dist/kernel/user-fields.d.ts +35 -0
  134. package/dist/kernel/user-fields.js +81 -0
  135. package/dist/kernel/validation.d.ts +15 -0
  136. package/dist/kernel/validation.js +54 -0
  137. package/dist/kernel/web-gateway.js +68 -0
  138. package/dist/kernel/web-head.js +15 -0
  139. package/dist/kernel/web-index.js +40 -0
  140. package/dist/kernel/web-response.js +8 -0
  141. package/dist/kernel/web.d.ts +77 -0
  142. package/dist/kernel/web.js +124 -0
  143. package/dist/kernel/where.js +27 -0
  144. package/dist/testing/index.d.ts +1 -37
  145. package/dist/testing/index.js +1 -43
  146. package/dist/usecase/adminBindings.js +143 -0
  147. package/dist/usecase/adminClient.js +87 -0
  148. package/dist/usecase/adminDescriptors.js +107 -0
  149. package/dist/usecase/generate.js +166 -0
  150. package/dist/usecase/handlers.js +21 -0
  151. package/dist/usecase/mcp-media.js +17 -0
  152. package/dist/usecase/mcp.js +100 -0
  153. package/dist/usecase/paging.js +71 -0
  154. package/dist/usecase/publishing.js +63 -0
  155. package/dist/usecase/refusals.js +27 -0
  156. package/dist/usecase/rest.js +54 -0
  157. package/dist/usecase/search.js +7 -0
  158. package/dist/usecase/site.js +39 -0
  159. package/dist/usecase/stores.js +64 -0
  160. package/dist/usecase/tool-version.js +9 -0
  161. package/dist/usecase/translations.js +78 -0
  162. package/dist/usecase/ttl.js +20 -0
  163. package/dist/usecase/validation.js +241 -0
  164. package/dist/usecase/web.js +23 -0
  165. package/docs/examples/README.md +39 -16
  166. package/docs/examples/app-shell/README.md +121 -0
  167. package/docs/examples/app-shell/accept.mjs +91 -0
  168. package/docs/examples/app-shell/gitignore +7 -0
  169. package/docs/examples/app-shell/package.json +43 -0
  170. package/docs/examples/app-shell/pnpm-workspace.yaml +8 -0
  171. package/docs/examples/app-shell/smoke-kit.mjs +168 -0
  172. package/docs/examples/app-shell/src/auth.ts +58 -0
  173. package/docs/examples/app-shell/src/handlers.ts +5 -0
  174. package/docs/examples/app-shell/src/index.ts +4 -0
  175. package/docs/examples/app-shell/src/routes.ts +14 -0
  176. package/docs/examples/app-shell/src/schedule.ts +8 -0
  177. package/docs/examples/app-shell/src/service.ts +70 -0
  178. package/docs/examples/app-shell/src/sign-in.ts +41 -0
  179. package/docs/examples/app-shell/src/signup.ts +8 -0
  180. package/docs/examples/{reference-service → app-shell}/tsconfig.json +6 -2
  181. package/docs/examples/app-shell/worker-configuration.d.ts +22 -0
  182. package/docs/examples/app-shell/wrangler.jsonc +62 -0
  183. package/docs/examples/club-events/README.md +65 -0
  184. package/docs/examples/club-events/manifests/club-events.yaml +247 -0
  185. package/docs/examples/club-events/smoke.mjs +127 -0
  186. package/docs/examples/club-events/src/handlers.ts +25 -0
  187. package/docs/examples/club-events/src/signup.ts +9 -0
  188. package/docs/examples/generated-web/README.md +78 -0
  189. package/docs/examples/generated-web/posts.yaml +38 -0
  190. package/docs/examples/generated-web/seed.sql +6 -0
  191. package/docs/examples/generated-web/src/worker.ts +43 -0
  192. package/docs/examples/generated-web/tsconfig.json +8 -0
  193. package/docs/examples/generated-web/wrangler.jsonc +8 -0
  194. package/docs/examples/purchasing/.dev.vars.example +6 -0
  195. package/docs/examples/purchasing/README.md +99 -0
  196. package/docs/examples/purchasing/manifests/purchasing.yaml +374 -0
  197. package/docs/examples/purchasing/seed.sql +4 -0
  198. package/docs/examples/purchasing/smoke.mjs +191 -0
  199. package/docs/examples/purchasing/src/admin.tsx +13 -0
  200. package/docs/examples/purchasing/src/handlers.ts +33 -0
  201. package/docs/examples/purchasing/src/notify.ts +29 -0
  202. package/docs/examples/purchasing/src/requests-page.ts +57 -0
  203. package/docs/examples/purchasing/src/routes.ts +53 -0
  204. package/docs/examples/purchasing/src/schedule.ts +31 -0
  205. package/docs/examples/purchasing/src/signup.ts +5 -0
  206. package/docs/examples/purchasing/src/supplier.ts +32 -0
  207. package/docs/examples/purchasing/wrangler.jsonc +69 -0
  208. package/docs/examples/recipes/README.md +60 -0
  209. package/docs/examples/recipes/manifests/recipes.yaml +75 -0
  210. package/docs/examples/recipes/smoke.mjs +102 -0
  211. package/docs/examples/recipes/src/media.ts +13 -0
  212. package/docs/examples/recipes/src/pages.ts +99 -0
  213. package/docs/examples/recipes/src/routes.ts +71 -0
  214. package/docs/examples/recipes/src/site-config.ts +12 -0
  215. package/docs/examples/recipes/wrangler.jsonc +74 -0
  216. package/docs/handbook/cloudflare/authentication.md +186 -108
  217. package/docs/handbook/cloudflare/chatgpt-sites.md +5 -112
  218. package/docs/handbook/cloudflare/deploy-and-operate.md +59 -87
  219. package/docs/handbook/cloudflare/media-r2.md +61 -82
  220. package/docs/handbook/cloudflare/service-entry.md +220 -119
  221. package/docs/handbook/concepts/authorization.md +10 -117
  222. package/docs/handbook/concepts/four-atoms.md +9 -92
  223. package/docs/handbook/concepts/lifecycle-and-locales.md +9 -80
  224. package/docs/handbook/concepts/mcp-and-agents.md +24 -116
  225. package/docs/handbook/concepts/procedures-and-triggers.md +5 -162
  226. package/docs/handbook/concepts/runtime-and-adapters.md +15 -183
  227. package/docs/handbook/concepts/views.md +10 -109
  228. package/docs/handbook/examples/hub.md +2 -18
  229. package/docs/handbook/guides/adapter-guide.md +11 -0
  230. package/docs/handbook/guides/admin-ui.md +113 -136
  231. package/docs/handbook/guides/agent-setup.md +32 -27
  232. package/docs/handbook/guides/agent-workflow-acceptance.md +232 -0
  233. package/docs/handbook/guides/email.md +86 -0
  234. package/docs/handbook/guides/local-testing.md +40 -0
  235. package/docs/handbook/guides/mcp-apps.md +560 -0
  236. package/docs/handbook/guides/native-admin.md +566 -0
  237. package/docs/handbook/guides/native-execution.md +133 -0
  238. package/docs/handbook/guides/oauth.md +219 -0
  239. package/docs/handbook/guides/postgres-adapters.md +56 -0
  240. package/docs/handbook/guides/public-pages.md +87 -0
  241. package/docs/handbook/guides/size-and-startup.md +9 -0
  242. package/docs/handbook/guides/sql-patterns.md +266 -0
  243. package/docs/handbook/guides/typed-queries.md +210 -100
  244. package/docs/handbook/navigation.json +176 -30
  245. package/docs/handbook/reference/admin-descriptors.md +53 -0
  246. package/docs/handbook/reference/authorization.md +44 -52
  247. package/docs/handbook/reference/describe.md +56 -0
  248. package/docs/handbook/reference/diagnostics.md +19 -77
  249. package/docs/handbook/reference/features.md +45 -53
  250. package/docs/handbook/reference/manifest.md +6 -69
  251. package/docs/handbook/reference/procedure.md +11 -115
  252. package/docs/handbook/reference/schema.md +81 -172
  253. package/docs/handbook/reference/site-config.md +5 -65
  254. package/docs/handbook/reference/sql.md +64 -0
  255. package/docs/handbook/reference/surface.md +396 -93
  256. package/docs/handbook/reference/trigger.md +62 -89
  257. package/docs/handbook/reference/view.md +40 -158
  258. package/docs/handbook/releases/index.md +198 -12
  259. package/docs/handbook/start/agents.md +45 -0
  260. package/docs/handbook/start/overview.md +9 -56
  261. package/docs/handbook/start/project-and-cli.md +51 -131
  262. package/docs/handbook/start/quickstart-worker.md +38 -115
  263. package/docs/skills/develop/SKILL.md +77 -121
  264. package/docs/skills/integrate/SKILL.md +37 -84
  265. package/docs/skills/media-gc/SKILL.md +21 -8
  266. package/docs/skills/provision/SKILL.md +31 -87
  267. package/docs/skills/update/SKILL.md +20 -34
  268. package/docs/source/scripts/postgres-adapter.ts +101 -0
  269. package/docs/upgrade-0.1-to-0.2.md +26 -10
  270. package/package.json +120 -112
  271. package/skills/README.md +67 -0
  272. package/skills/mantle/SKILL.md +76 -0
  273. package/dist/admin/consent.d.ts +0 -17
  274. package/dist/admin/consent.d.ts.map +0 -1
  275. package/dist/admin/consent.js +0 -17
  276. package/dist/admin/consent.js.map +0 -1
  277. package/dist/admin/createAdminSurface.d.ts +0 -22
  278. package/dist/admin/createAdminSurface.d.ts.map +0 -1
  279. package/dist/admin/createAdminSurface.js +0 -589
  280. package/dist/admin/createAdminSurface.js.map +0 -1
  281. package/dist/admin/developerConsole.d.ts +0 -264
  282. package/dist/admin/developerConsole.d.ts.map +0 -1
  283. package/dist/admin/developerConsole.js +0 -136
  284. package/dist/admin/developerConsole.js.map +0 -1
  285. package/dist/admin/identity.d.ts +0 -62
  286. package/dist/admin/identity.d.ts.map +0 -1
  287. package/dist/admin/identity.js +0 -7
  288. package/dist/admin/identity.js.map +0 -1
  289. package/dist/admin/index.d.ts +0 -4
  290. package/dist/admin/index.d.ts.map +0 -1
  291. package/dist/admin/index.js +0 -4
  292. package/dist/admin/index.js.map +0 -1
  293. package/dist/admin/procedureFlow.d.ts +0 -25
  294. package/dist/admin/procedureFlow.d.ts.map +0 -1
  295. package/dist/admin/procedureFlow.js +0 -154
  296. package/dist/admin/procedureFlow.js.map +0 -1
  297. package/dist/auth/ConsoleEmailSender.d.ts +0 -15
  298. package/dist/auth/ConsoleEmailSender.d.ts.map +0 -1
  299. package/dist/auth/ConsoleEmailSender.js +0 -19
  300. package/dist/auth/ConsoleEmailSender.js.map +0 -1
  301. package/dist/auth/appleClientSecret.d.ts +0 -75
  302. package/dist/auth/appleClientSecret.d.ts.map +0 -1
  303. package/dist/auth/appleClientSecret.js +0 -116
  304. package/dist/auth/appleClientSecret.js.map +0 -1
  305. package/dist/auth/buildAuth.d.ts +0 -4565
  306. package/dist/auth/buildAuth.d.ts.map +0 -1
  307. package/dist/auth/buildAuth.js +0 -307
  308. package/dist/auth/buildAuth.js.map +0 -1
  309. package/dist/auth/callerResolver.d.ts +0 -48
  310. package/dist/auth/callerResolver.d.ts.map +0 -1
  311. package/dist/auth/callerResolver.js +0 -49
  312. package/dist/auth/callerResolver.js.map +0 -1
  313. package/dist/auth/createAuthRoutes.d.ts +0 -22
  314. package/dist/auth/createAuthRoutes.d.ts.map +0 -1
  315. package/dist/auth/createAuthRoutes.js +0 -128
  316. package/dist/auth/createAuthRoutes.js.map +0 -1
  317. package/dist/auth/createMantleAuth.d.ts +0 -3
  318. package/dist/auth/createMantleAuth.d.ts.map +0 -1
  319. package/dist/auth/createMantleAuth.js +0 -483
  320. package/dist/auth/createMantleAuth.js.map +0 -1
  321. package/dist/auth/db.d.ts +0 -17
  322. package/dist/auth/db.d.ts.map +0 -1
  323. package/dist/auth/db.js +0 -24
  324. package/dist/auth/db.js.map +0 -1
  325. package/dist/auth/emailTemplates.d.ts +0 -7
  326. package/dist/auth/emailTemplates.d.ts.map +0 -1
  327. package/dist/auth/emailTemplates.js.map +0 -1
  328. package/dist/auth/index.d.ts +0 -9
  329. package/dist/auth/index.d.ts.map +0 -1
  330. package/dist/auth/index.js +0 -7
  331. package/dist/auth/index.js.map +0 -1
  332. package/dist/auth/methods.d.ts +0 -717
  333. package/dist/auth/methods.d.ts.map +0 -1
  334. package/dist/auth/methods.js +0 -321
  335. package/dist/auth/methods.js.map +0 -1
  336. package/dist/auth/oauthTokens.d.ts +0 -24
  337. package/dist/auth/oauthTokens.d.ts.map +0 -1
  338. package/dist/auth/oauthTokens.js +0 -146
  339. package/dist/auth/oauthTokens.js.map +0 -1
  340. package/dist/auth/setupIncomplete.d.ts +0 -16
  341. package/dist/auth/setupIncomplete.d.ts.map +0 -1
  342. package/dist/auth/setupIncomplete.js +0 -50
  343. package/dist/auth/setupIncomplete.js.map +0 -1
  344. package/dist/auth/types.d.ts +0 -440
  345. package/dist/auth/types.d.ts.map +0 -1
  346. package/dist/auth/types.js +0 -10
  347. package/dist/auth/types.js.map +0 -1
  348. package/dist/bun/index.d.ts +0 -65
  349. package/dist/bun/index.d.ts.map +0 -1
  350. package/dist/bun/index.js +0 -130
  351. package/dist/bun/index.js.map +0 -1
  352. package/dist/cli/emitModule.d.ts +0 -7
  353. package/dist/cli/emitModule.d.ts.map +0 -1
  354. package/dist/cli/emitModule.js +0 -127
  355. package/dist/cli/emitModule.js.map +0 -1
  356. package/dist/cli/generate.d.ts +0 -8
  357. package/dist/cli/generate.d.ts.map +0 -1
  358. package/dist/cli/generate.js +0 -355
  359. package/dist/cli/generate.js.map +0 -1
  360. package/dist/cli/main.d.ts +0 -3
  361. package/dist/cli/main.d.ts.map +0 -1
  362. package/dist/cli/main.js +0 -21
  363. package/dist/cli/main.js.map +0 -1
  364. package/dist/cli/preset.d.ts +0 -18
  365. package/dist/cli/preset.d.ts.map +0 -1
  366. package/dist/cli/preset.js +0 -352
  367. package/dist/cli/preset.js.map +0 -1
  368. package/dist/cloudflare/index.d.ts +0 -21
  369. package/dist/cloudflare/index.d.ts.map +0 -1
  370. package/dist/cloudflare/index.js +0 -14
  371. package/dist/cloudflare/index.js.map +0 -1
  372. package/dist/cloudflare/r2Media.d.ts.map +0 -1
  373. package/dist/cloudflare/r2Media.js +0 -69
  374. package/dist/cloudflare/r2Media.js.map +0 -1
  375. package/dist/core/caller.d.ts +0 -35
  376. package/dist/core/caller.d.ts.map +0 -1
  377. package/dist/core/caller.js +0 -3
  378. package/dist/core/caller.js.map +0 -1
  379. package/dist/core/createMantle.d.ts +0 -22
  380. package/dist/core/createMantle.d.ts.map +0 -1
  381. package/dist/core/createMantle.js +0 -117
  382. package/dist/core/createMantle.js.map +0 -1
  383. package/dist/core/dialect.d.ts +0 -41
  384. package/dist/core/dialect.d.ts.map +0 -1
  385. package/dist/core/dialect.js +0 -7
  386. package/dist/core/dialect.js.map +0 -1
  387. package/dist/core/driver.d.ts +0 -17
  388. package/dist/core/driver.d.ts.map +0 -1
  389. package/dist/core/driver.js +0 -2
  390. package/dist/core/driver.js.map +0 -1
  391. package/dist/core/email.d.ts +0 -17
  392. package/dist/core/email.d.ts.map +0 -1
  393. package/dist/core/email.js +0 -2
  394. package/dist/core/email.js.map +0 -1
  395. package/dist/core/index.d.ts +0 -16
  396. package/dist/core/index.d.ts.map +0 -1
  397. package/dist/core/index.js +0 -16
  398. package/dist/core/index.js.map +0 -1
  399. package/dist/core/invocation.d.ts +0 -66
  400. package/dist/core/invocation.d.ts.map +0 -1
  401. package/dist/core/invocation.js +0 -3
  402. package/dist/core/invocation.js.map +0 -1
  403. package/dist/core/runtime/auth.d.ts +0 -9
  404. package/dist/core/runtime/auth.d.ts.map +0 -1
  405. package/dist/core/runtime/auth.js +0 -39
  406. package/dist/core/runtime/auth.js.map +0 -1
  407. package/dist/core/runtime/createRuntime.d.ts +0 -23
  408. package/dist/core/runtime/createRuntime.d.ts.map +0 -1
  409. package/dist/core/runtime/createRuntime.js +0 -214
  410. package/dist/core/runtime/createRuntime.js.map +0 -1
  411. package/dist/core/runtime/verifyPlan.d.ts +0 -34
  412. package/dist/core/runtime/verifyPlan.d.ts.map +0 -1
  413. package/dist/core/runtime/verifyPlan.js +0 -301
  414. package/dist/core/runtime/verifyPlan.js.map +0 -1
  415. package/dist/core/service.d.ts +0 -45
  416. package/dist/core/service.d.ts.map +0 -1
  417. package/dist/core/service.js +0 -2
  418. package/dist/core/service.js.map +0 -1
  419. package/dist/core/site.d.ts.map +0 -1
  420. package/dist/core/site.js +0 -2
  421. package/dist/core/site.js.map +0 -1
  422. package/dist/core/siteConfig.d.ts +0 -5
  423. package/dist/core/siteConfig.d.ts.map +0 -1
  424. package/dist/core/siteConfig.js +0 -24
  425. package/dist/core/siteConfig.js.map +0 -1
  426. package/dist/core/sql/allowlist.d.ts +0 -65
  427. package/dist/core/sql/allowlist.d.ts.map +0 -1
  428. package/dist/core/sql/allowlist.js +0 -705
  429. package/dist/core/sql/allowlist.js.map +0 -1
  430. package/dist/core/sql/ast.d.ts +0 -24
  431. package/dist/core/sql/ast.d.ts.map +0 -1
  432. package/dist/core/sql/ast.js +0 -32
  433. package/dist/core/sql/ast.js.map +0 -1
  434. package/dist/core/sql/compile.d.ts +0 -50
  435. package/dist/core/sql/compile.d.ts.map +0 -1
  436. package/dist/core/sql/compile.js +0 -48
  437. package/dist/core/sql/compile.js.map +0 -1
  438. package/dist/core/sql/policy.d.ts +0 -121
  439. package/dist/core/sql/policy.d.ts.map +0 -1
  440. package/dist/core/sql/policy.js +0 -379
  441. package/dist/core/sql/policy.js.map +0 -1
  442. package/dist/core/sql/positions.d.ts +0 -30
  443. package/dist/core/sql/positions.d.ts.map +0 -1
  444. package/dist/core/sql/positions.js +0 -22
  445. package/dist/core/sql/positions.js.map +0 -1
  446. package/dist/core/sql/run.d.ts +0 -76
  447. package/dist/core/sql/run.d.ts.map +0 -1
  448. package/dist/core/sql/run.js +0 -267
  449. package/dist/core/sql/run.js.map +0 -1
  450. package/dist/core/store/createStore.d.ts +0 -49
  451. package/dist/core/store/createStore.d.ts.map +0 -1
  452. package/dist/core/store/createStore.js +0 -227
  453. package/dist/core/store/createStore.js.map +0 -1
  454. package/dist/core/store/cursor.d.ts +0 -4
  455. package/dist/core/store/cursor.d.ts.map +0 -1
  456. package/dist/core/store/cursor.js +0 -22
  457. package/dist/core/store/cursor.js.map +0 -1
  458. package/dist/core/store/json.d.ts +0 -80
  459. package/dist/core/store/json.d.ts.map +0 -1
  460. package/dist/core/store/json.js +0 -342
  461. package/dist/core/store/json.js.map +0 -1
  462. package/dist/core/store.d.ts +0 -160
  463. package/dist/core/store.d.ts.map +0 -1
  464. package/dist/core/store.js +0 -2
  465. package/dist/core/store.js.map +0 -1
  466. package/dist/core/wire.d.ts +0 -20
  467. package/dist/core/wire.d.ts.map +0 -1
  468. package/dist/core/wire.js +0 -84
  469. package/dist/core/wire.js.map +0 -1
  470. package/dist/core/withCaller.d.ts +0 -16
  471. package/dist/core/withCaller.d.ts.map +0 -1
  472. package/dist/core/withCaller.js +0 -29
  473. package/dist/core/withCaller.js.map +0 -1
  474. package/dist/d1/adapter.d.ts +0 -12
  475. package/dist/d1/adapter.d.ts.map +0 -1
  476. package/dist/d1/adapter.js +0 -23
  477. package/dist/d1/adapter.js.map +0 -1
  478. package/dist/d1/codec.d.ts +0 -14
  479. package/dist/d1/codec.d.ts.map +0 -1
  480. package/dist/d1/codec.js +0 -136
  481. package/dist/d1/codec.js.map +0 -1
  482. package/dist/d1/compile/index.d.ts +0 -9
  483. package/dist/d1/compile/index.d.ts.map +0 -1
  484. package/dist/d1/compile/index.js +0 -9
  485. package/dist/d1/compile/index.js.map +0 -1
  486. package/dist/d1/dialect.d.ts +0 -4
  487. package/dist/d1/dialect.d.ts.map +0 -1
  488. package/dist/d1/dialect.js +0 -13
  489. package/dist/d1/dialect.js.map +0 -1
  490. package/dist/d1/executor.d.ts +0 -13
  491. package/dist/d1/executor.d.ts.map +0 -1
  492. package/dist/d1/executor.js +0 -91
  493. package/dist/d1/executor.js.map +0 -1
  494. package/dist/d1/index.d.ts +0 -6
  495. package/dist/d1/index.d.ts.map +0 -1
  496. package/dist/d1/index.js +0 -6
  497. package/dist/d1/index.js.map +0 -1
  498. package/dist/d1/lower.d.ts +0 -8
  499. package/dist/d1/lower.d.ts.map +0 -1
  500. package/dist/d1/lower.js +0 -167
  501. package/dist/d1/lower.js.map +0 -1
  502. package/dist/d1/media.d.ts +0 -5
  503. package/dist/d1/media.d.ts.map +0 -1
  504. package/dist/d1/media.js +0 -157
  505. package/dist/d1/media.js.map +0 -1
  506. package/dist/d1/migrations.d.ts +0 -12
  507. package/dist/d1/migrations.d.ts.map +0 -1
  508. package/dist/d1/migrations.js +0 -111
  509. package/dist/d1/migrations.js.map +0 -1
  510. package/dist/d1/print.d.ts +0 -28
  511. package/dist/d1/print.d.ts.map +0 -1
  512. package/dist/d1/print.js +0 -54
  513. package/dist/d1/print.js.map +0 -1
  514. package/dist/d1/site.d.ts +0 -17
  515. package/dist/d1/site.d.ts.map +0 -1
  516. package/dist/d1/site.js +0 -63
  517. package/dist/d1/site.js.map +0 -1
  518. package/dist/d1/storage.d.ts +0 -34
  519. package/dist/d1/storage.d.ts.map +0 -1
  520. package/dist/d1/storage.js +0 -288
  521. package/dist/d1/storage.js.map +0 -1
  522. package/dist/d1/tz.d.ts +0 -21
  523. package/dist/d1/tz.d.ts.map +0 -1
  524. package/dist/d1/tz.js +0 -54
  525. package/dist/d1/tz.js.map +0 -1
  526. package/dist/d1/validator.d.ts +0 -10
  527. package/dist/d1/validator.d.ts.map +0 -1
  528. package/dist/d1/validator.js +0 -33
  529. package/dist/d1/validator.js.map +0 -1
  530. package/dist/mcp/apps.d.ts +0 -43
  531. package/dist/mcp/apps.d.ts.map +0 -1
  532. package/dist/mcp/apps.js +0 -57
  533. package/dist/mcp/apps.js.map +0 -1
  534. package/dist/mcp/catalog.d.ts +0 -55
  535. package/dist/mcp/catalog.d.ts.map +0 -1
  536. package/dist/mcp/catalog.js +0 -81
  537. package/dist/mcp/catalog.js.map +0 -1
  538. package/dist/mcp/createMcpSurface.d.ts +0 -34
  539. package/dist/mcp/createMcpSurface.d.ts.map +0 -1
  540. package/dist/mcp/createMcpSurface.js +0 -150
  541. package/dist/mcp/createMcpSurface.js.map +0 -1
  542. package/dist/mcp/index.d.ts +0 -4
  543. package/dist/mcp/index.d.ts.map +0 -1
  544. package/dist/mcp/index.js +0 -4
  545. package/dist/mcp/index.js.map +0 -1
  546. package/dist/postgres/adapter.d.ts +0 -20
  547. package/dist/postgres/adapter.d.ts.map +0 -1
  548. package/dist/postgres/adapter.js +0 -44
  549. package/dist/postgres/adapter.js.map +0 -1
  550. package/dist/postgres/codec.d.ts +0 -13
  551. package/dist/postgres/codec.d.ts.map +0 -1
  552. package/dist/postgres/codec.js +0 -110
  553. package/dist/postgres/codec.js.map +0 -1
  554. package/dist/postgres/compile/index.d.ts +0 -9
  555. package/dist/postgres/compile/index.d.ts.map +0 -1
  556. package/dist/postgres/compile/index.js +0 -9
  557. package/dist/postgres/compile/index.js.map +0 -1
  558. package/dist/postgres/driver.d.ts +0 -92
  559. package/dist/postgres/driver.d.ts.map +0 -1
  560. package/dist/postgres/driver.js +0 -110
  561. package/dist/postgres/driver.js.map +0 -1
  562. package/dist/postgres/executor.d.ts +0 -20
  563. package/dist/postgres/executor.d.ts.map +0 -1
  564. package/dist/postgres/executor.js +0 -69
  565. package/dist/postgres/executor.js.map +0 -1
  566. package/dist/postgres/index.d.ts +0 -7
  567. package/dist/postgres/index.d.ts.map +0 -1
  568. package/dist/postgres/index.js +0 -7
  569. package/dist/postgres/index.js.map +0 -1
  570. package/dist/postgres/lower.d.ts +0 -6
  571. package/dist/postgres/lower.d.ts.map +0 -1
  572. package/dist/postgres/lower.js +0 -157
  573. package/dist/postgres/lower.js.map +0 -1
  574. package/dist/postgres/print.d.ts +0 -11
  575. package/dist/postgres/print.d.ts.map +0 -1
  576. package/dist/postgres/print.js +0 -121
  577. package/dist/postgres/print.js.map +0 -1
  578. package/dist/postgres/storage.d.ts +0 -19
  579. package/dist/postgres/storage.d.ts.map +0 -1
  580. package/dist/postgres/storage.js +0 -201
  581. package/dist/postgres/storage.js.map +0 -1
  582. package/dist/postgres/textRows.d.ts +0 -10
  583. package/dist/postgres/textRows.d.ts.map +0 -1
  584. package/dist/postgres/textRows.js +0 -44
  585. package/dist/postgres/textRows.js.map +0 -1
  586. package/dist/postgres/validator.d.ts +0 -12
  587. package/dist/postgres/validator.d.ts.map +0 -1
  588. package/dist/postgres/validator.js +0 -46
  589. package/dist/postgres/validator.js.map +0 -1
  590. package/dist/spec/domain/index.d.ts +0 -3
  591. package/dist/spec/domain/index.d.ts.map +0 -1
  592. package/dist/spec/domain/index.js +0 -3
  593. package/dist/spec/domain/index.js.map +0 -1
  594. package/dist/spec/domain/model/ContentState.d.ts +0 -8
  595. package/dist/spec/domain/model/ContentState.d.ts.map +0 -1
  596. package/dist/spec/domain/model/ContentState.js +0 -7
  597. package/dist/spec/domain/model/ContentState.js.map +0 -1
  598. package/dist/spec/domain/model/Entry.d.ts +0 -29
  599. package/dist/spec/domain/model/Entry.d.ts.map +0 -1
  600. package/dist/spec/domain/model/Entry.js +0 -16
  601. package/dist/spec/domain/model/Entry.js.map +0 -1
  602. package/dist/spec/domain/model/Locale.d.ts +0 -30
  603. package/dist/spec/domain/model/Locale.d.ts.map +0 -1
  604. package/dist/spec/domain/model/Locale.js +0 -33
  605. package/dist/spec/domain/model/Locale.js.map +0 -1
  606. package/dist/spec/domain/model/ManifestGrammar.d.ts.map +0 -1
  607. package/dist/spec/domain/model/ManifestGrammar.js +0 -149
  608. package/dist/spec/domain/model/ManifestGrammar.js.map +0 -1
  609. package/dist/spec/domain/model/MediaMimeAccept.d.ts +0 -55
  610. package/dist/spec/domain/model/MediaMimeAccept.d.ts.map +0 -1
  611. package/dist/spec/domain/model/MediaMimeAccept.js +0 -90
  612. package/dist/spec/domain/model/MediaMimeAccept.js.map +0 -1
  613. package/dist/spec/domain/model/RuntimePlan.d.ts.map +0 -1
  614. package/dist/spec/domain/model/RuntimePlan.js +0 -4
  615. package/dist/spec/domain/model/RuntimePlan.js.map +0 -1
  616. package/dist/spec/domain/model/SiteConfig.d.ts +0 -173
  617. package/dist/spec/domain/model/SiteConfig.d.ts.map +0 -1
  618. package/dist/spec/domain/model/SiteConfig.js +0 -13
  619. package/dist/spec/domain/model/SiteConfig.js.map +0 -1
  620. package/dist/spec/domain/model/SqlIr.d.ts.map +0 -1
  621. package/dist/spec/domain/model/SqlIr.js +0 -95
  622. package/dist/spec/domain/model/SqlIr.js.map +0 -1
  623. package/dist/spec/domain/model/index.d.ts +0 -14
  624. package/dist/spec/domain/model/index.d.ts.map +0 -1
  625. package/dist/spec/domain/model/index.js +0 -14
  626. package/dist/spec/domain/model/index.js.map +0 -1
  627. package/dist/spec/domain/service/CloudflareCron.d.ts.map +0 -1
  628. package/dist/spec/domain/service/CloudflareCron.js.map +0 -1
  629. package/dist/spec/domain/service/CrossSchemaChecker.d.ts +0 -34
  630. package/dist/spec/domain/service/CrossSchemaChecker.d.ts.map +0 -1
  631. package/dist/spec/domain/service/CrossSchemaChecker.js +0 -114
  632. package/dist/spec/domain/service/CrossSchemaChecker.js.map +0 -1
  633. package/dist/spec/domain/service/EntryDataValidator.d.ts +0 -56
  634. package/dist/spec/domain/service/EntryDataValidator.d.ts.map +0 -1
  635. package/dist/spec/domain/service/EntryDataValidator.js +0 -88
  636. package/dist/spec/domain/service/EntryDataValidator.js.map +0 -1
  637. package/dist/spec/domain/service/JsonSchemaToZod.d.ts +0 -29
  638. package/dist/spec/domain/service/JsonSchemaToZod.d.ts.map +0 -1
  639. package/dist/spec/domain/service/JsonSchemaToZod.js +0 -156
  640. package/dist/spec/domain/service/JsonSchemaToZod.js.map +0 -1
  641. package/dist/spec/domain/service/LifecycleStateMachine.d.ts +0 -75
  642. package/dist/spec/domain/service/LifecycleStateMachine.d.ts.map +0 -1
  643. package/dist/spec/domain/service/LifecycleStateMachine.js +0 -76
  644. package/dist/spec/domain/service/LifecycleStateMachine.js.map +0 -1
  645. package/dist/spec/domain/service/LocaleCanonicalizer.d.ts +0 -29
  646. package/dist/spec/domain/service/LocaleCanonicalizer.d.ts.map +0 -1
  647. package/dist/spec/domain/service/LocaleCanonicalizer.js +0 -96
  648. package/dist/spec/domain/service/LocaleCanonicalizer.js.map +0 -1
  649. package/dist/spec/domain/service/ManifestFieldChecks.d.ts +0 -60
  650. package/dist/spec/domain/service/ManifestFieldChecks.d.ts.map +0 -1
  651. package/dist/spec/domain/service/ManifestFieldChecks.js +0 -116
  652. package/dist/spec/domain/service/ManifestFieldChecks.js.map +0 -1
  653. package/dist/spec/domain/service/ManifestGraphValidator.d.ts +0 -15
  654. package/dist/spec/domain/service/ManifestGraphValidator.d.ts.map +0 -1
  655. package/dist/spec/domain/service/ManifestGraphValidator.js +0 -225
  656. package/dist/spec/domain/service/ManifestGraphValidator.js.map +0 -1
  657. package/dist/spec/domain/service/ManifestLinker.d.ts +0 -45
  658. package/dist/spec/domain/service/ManifestLinker.d.ts.map +0 -1
  659. package/dist/spec/domain/service/ManifestLinker.js +0 -92
  660. package/dist/spec/domain/service/ManifestLinker.js.map +0 -1
  661. package/dist/spec/domain/service/ManifestLocaleTrimmer.d.ts +0 -16
  662. package/dist/spec/domain/service/ManifestLocaleTrimmer.d.ts.map +0 -1
  663. package/dist/spec/domain/service/ManifestLocaleTrimmer.js +0 -76
  664. package/dist/spec/domain/service/ManifestLocaleTrimmer.js.map +0 -1
  665. package/dist/spec/domain/service/ManifestParser.d.ts +0 -49
  666. package/dist/spec/domain/service/ManifestParser.d.ts.map +0 -1
  667. package/dist/spec/domain/service/ManifestParser.js +0 -203
  668. package/dist/spec/domain/service/ManifestParser.js.map +0 -1
  669. package/dist/spec/domain/service/ManifestPartition.d.ts +0 -9
  670. package/dist/spec/domain/service/ManifestPartition.d.ts.map +0 -1
  671. package/dist/spec/domain/service/ManifestPartition.js +0 -19
  672. package/dist/spec/domain/service/ManifestPartition.js.map +0 -1
  673. package/dist/spec/domain/service/ManifestPathDiagnoser.d.ts +0 -33
  674. package/dist/spec/domain/service/ManifestPathDiagnoser.d.ts.map +0 -1
  675. package/dist/spec/domain/service/ManifestPathDiagnoser.js +0 -43
  676. package/dist/spec/domain/service/ManifestPathDiagnoser.js.map +0 -1
  677. package/dist/spec/domain/service/ManifestSourceSpans.d.ts +0 -10
  678. package/dist/spec/domain/service/ManifestSourceSpans.d.ts.map +0 -1
  679. package/dist/spec/domain/service/ManifestSourceSpans.js +0 -76
  680. package/dist/spec/domain/service/ManifestSourceSpans.js.map +0 -1
  681. package/dist/spec/domain/service/McpToolNaming.d.ts +0 -25
  682. package/dist/spec/domain/service/McpToolNaming.d.ts.map +0 -1
  683. package/dist/spec/domain/service/McpToolNaming.js +0 -50
  684. package/dist/spec/domain/service/McpToolNaming.js.map +0 -1
  685. package/dist/spec/domain/service/PlanFingerprint.d.ts.map +0 -1
  686. package/dist/spec/domain/service/PlanFingerprint.js +0 -14
  687. package/dist/spec/domain/service/PlanFingerprint.js.map +0 -1
  688. package/dist/spec/domain/service/ProcedureViewSpecChecks.d.ts +0 -4
  689. package/dist/spec/domain/service/ProcedureViewSpecChecks.d.ts.map +0 -1
  690. package/dist/spec/domain/service/ProcedureViewSpecChecks.js +0 -211
  691. package/dist/spec/domain/service/ProcedureViewSpecChecks.js.map +0 -1
  692. package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts +0 -42
  693. package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts.map +0 -1
  694. package/dist/spec/domain/service/SchemaAdminUiChecker.js +0 -289
  695. package/dist/spec/domain/service/SchemaAdminUiChecker.js.map +0 -1
  696. package/dist/spec/domain/service/SchemaIndexChecker.d.ts +0 -33
  697. package/dist/spec/domain/service/SchemaIndexChecker.d.ts.map +0 -1
  698. package/dist/spec/domain/service/SchemaIndexChecker.js +0 -256
  699. package/dist/spec/domain/service/SchemaIndexChecker.js.map +0 -1
  700. package/dist/spec/domain/service/SchemaSearchChecker.d.ts +0 -11
  701. package/dist/spec/domain/service/SchemaSearchChecker.d.ts.map +0 -1
  702. package/dist/spec/domain/service/SchemaSearchChecker.js +0 -78
  703. package/dist/spec/domain/service/SchemaSearchChecker.js.map +0 -1
  704. package/dist/spec/domain/service/SchemaSpecChecks.d.ts +0 -31
  705. package/dist/spec/domain/service/SchemaSpecChecks.d.ts.map +0 -1
  706. package/dist/spec/domain/service/SchemaSpecChecks.js +0 -445
  707. package/dist/spec/domain/service/SchemaSpecChecks.js.map +0 -1
  708. package/dist/spec/domain/service/SiteDefaultsValidator.d.ts +0 -39
  709. package/dist/spec/domain/service/SiteDefaultsValidator.d.ts.map +0 -1
  710. package/dist/spec/domain/service/SiteDefaultsValidator.js +0 -194
  711. package/dist/spec/domain/service/SiteDefaultsValidator.js.map +0 -1
  712. package/dist/spec/domain/service/SqlClassify.d.ts +0 -19
  713. package/dist/spec/domain/service/SqlClassify.d.ts.map +0 -1
  714. package/dist/spec/domain/service/SqlClassify.js +0 -42
  715. package/dist/spec/domain/service/SqlClassify.js.map +0 -1
  716. package/dist/spec/domain/service/SqlRefusal.d.ts +0 -16
  717. package/dist/spec/domain/service/SqlRefusal.d.ts.map +0 -1
  718. package/dist/spec/domain/service/SqlRefusal.js +0 -20
  719. package/dist/spec/domain/service/SqlRefusal.js.map +0 -1
  720. package/dist/spec/domain/service/SqlTypes.d.ts +0 -40
  721. package/dist/spec/domain/service/SqlTypes.d.ts.map +0 -1
  722. package/dist/spec/domain/service/SqlTypes.js +0 -110
  723. package/dist/spec/domain/service/SqlTypes.js.map +0 -1
  724. package/dist/spec/domain/service/StaffRoleHierarchy.d.ts +0 -3
  725. package/dist/spec/domain/service/StaffRoleHierarchy.d.ts.map +0 -1
  726. package/dist/spec/domain/service/StaffRoleHierarchy.js +0 -19
  727. package/dist/spec/domain/service/StaffRoleHierarchy.js.map +0 -1
  728. package/dist/spec/domain/service/TriggerGraphChecks.d.ts +0 -16
  729. package/dist/spec/domain/service/TriggerGraphChecks.d.ts.map +0 -1
  730. package/dist/spec/domain/service/TriggerGraphChecks.js +0 -337
  731. package/dist/spec/domain/service/TriggerGraphChecks.js.map +0 -1
  732. package/dist/spec/domain/service/TriggerSpecChecks.d.ts +0 -4
  733. package/dist/spec/domain/service/TriggerSpecChecks.d.ts.map +0 -1
  734. package/dist/spec/domain/service/TriggerSpecChecks.js +0 -89
  735. package/dist/spec/domain/service/TriggerSpecChecks.js.map +0 -1
  736. package/dist/spec/domain/service/ValidatedAdminUiProjection.d.ts +0 -11
  737. package/dist/spec/domain/service/ValidatedAdminUiProjection.d.ts.map +0 -1
  738. package/dist/spec/domain/service/ValidatedAdminUiProjection.js +0 -26
  739. package/dist/spec/domain/service/ValidatedAdminUiProjection.js.map +0 -1
  740. package/dist/spec/domain/service/ViewAdminUiChecker.d.ts +0 -14
  741. package/dist/spec/domain/service/ViewAdminUiChecker.d.ts.map +0 -1
  742. package/dist/spec/domain/service/ViewAdminUiChecker.js +0 -53
  743. package/dist/spec/domain/service/ViewAdminUiChecker.js.map +0 -1
  744. package/dist/spec/domain/service/index.d.ts +0 -24
  745. package/dist/spec/domain/service/index.d.ts.map +0 -1
  746. package/dist/spec/domain/service/index.js +0 -24
  747. package/dist/spec/domain/service/index.js.map +0 -1
  748. package/dist/spec/index.d.ts +0 -10
  749. package/dist/spec/index.d.ts.map +0 -1
  750. package/dist/spec/index.js +0 -12
  751. package/dist/spec/index.js.map +0 -1
  752. package/dist/spec/infrastructure/cli/parseArgsError.d.ts +0 -16
  753. package/dist/spec/infrastructure/cli/parseArgsError.d.ts.map +0 -1
  754. package/dist/spec/infrastructure/cli/parseArgsError.js +0 -34
  755. package/dist/spec/infrastructure/cli/parseArgsError.js.map +0 -1
  756. package/dist/spec/infrastructure/index.d.ts +0 -2
  757. package/dist/spec/infrastructure/index.d.ts.map +0 -1
  758. package/dist/spec/infrastructure/index.js +0 -2
  759. package/dist/spec/infrastructure/index.js.map +0 -1
  760. package/dist/spec/infrastructure/sql/PgQueryParser.d.ts +0 -18
  761. package/dist/spec/infrastructure/sql/PgQueryParser.d.ts.map +0 -1
  762. package/dist/spec/infrastructure/sql/PgQueryParser.js +0 -17
  763. package/dist/spec/infrastructure/sql/PgQueryParser.js.map +0 -1
  764. package/dist/spec/infrastructure/sql/compilePlan.d.ts +0 -37
  765. package/dist/spec/infrastructure/sql/compilePlan.d.ts.map +0 -1
  766. package/dist/spec/infrastructure/sql/compilePlan.js +0 -282
  767. package/dist/spec/infrastructure/sql/compilePlan.js.map +0 -1
  768. package/dist/spec/infrastructure/sql/compileSql.d.ts +0 -35
  769. package/dist/spec/infrastructure/sql/compileSql.d.ts.map +0 -1
  770. package/dist/spec/infrastructure/sql/compileSql.js +0 -92
  771. package/dist/spec/infrastructure/sql/compileSql.js.map +0 -1
  772. package/dist/spec/infrastructure/sql/frontEnd.d.ts +0 -8
  773. package/dist/spec/infrastructure/sql/frontEnd.d.ts.map +0 -1
  774. package/dist/spec/infrastructure/sql/frontEnd.js +0 -100
  775. package/dist/spec/infrastructure/sql/frontEnd.js.map +0 -1
  776. package/dist/spec/infrastructure/sql/index.d.ts +0 -4
  777. package/dist/spec/infrastructure/sql/index.d.ts.map +0 -1
  778. package/dist/spec/infrastructure/sql/index.js +0 -4
  779. package/dist/spec/infrastructure/sql/index.js.map +0 -1
  780. package/dist/spec/kernel/diagnostic.d.ts.map +0 -1
  781. package/dist/spec/kernel/diagnostic.js +0 -296
  782. package/dist/spec/kernel/diagnostic.js.map +0 -1
  783. package/dist/spec/kernel/index.d.ts +0 -8
  784. package/dist/spec/kernel/index.d.ts.map +0 -1
  785. package/dist/spec/kernel/index.js +0 -8
  786. package/dist/spec/kernel/index.js.map +0 -1
  787. package/dist/spec/usecase/EmitTypes.d.ts +0 -22
  788. package/dist/spec/usecase/EmitTypes.d.ts.map +0 -1
  789. package/dist/spec/usecase/EmitTypes.js +0 -182
  790. package/dist/spec/usecase/EmitTypes.js.map +0 -1
  791. package/dist/spec/usecase/ValidateManifestsUseCase.d.ts +0 -8
  792. package/dist/spec/usecase/ValidateManifestsUseCase.d.ts.map +0 -1
  793. package/dist/spec/usecase/ValidateManifestsUseCase.js +0 -101
  794. package/dist/spec/usecase/ValidateManifestsUseCase.js.map +0 -1
  795. package/dist/spec/usecase/dto/ValidateManifestsRequest.d.ts +0 -27
  796. package/dist/spec/usecase/dto/ValidateManifestsRequest.d.ts.map +0 -1
  797. package/dist/spec/usecase/dto/ValidateManifestsRequest.js +0 -2
  798. package/dist/spec/usecase/dto/ValidateManifestsRequest.js.map +0 -1
  799. package/dist/spec/usecase/dto/ValidateManifestsResponse.d.ts +0 -14
  800. package/dist/spec/usecase/dto/ValidateManifestsResponse.d.ts.map +0 -1
  801. package/dist/spec/usecase/dto/ValidateManifestsResponse.js +0 -2
  802. package/dist/spec/usecase/dto/ValidateManifestsResponse.js.map +0 -1
  803. package/dist/spec/usecase/dto/index.d.ts +0 -3
  804. package/dist/spec/usecase/dto/index.d.ts.map +0 -1
  805. package/dist/spec/usecase/dto/index.js +0 -3
  806. package/dist/spec/usecase/dto/index.js.map +0 -1
  807. package/dist/spec/usecase/index.d.ts +0 -10
  808. package/dist/spec/usecase/index.d.ts.map +0 -1
  809. package/dist/spec/usecase/index.js +0 -10
  810. package/dist/spec/usecase/index.js.map +0 -1
  811. package/dist/testing/cases/before-hook.d.ts +0 -4
  812. package/dist/testing/cases/before-hook.d.ts.map +0 -1
  813. package/dist/testing/cases/before-hook.js +0 -71
  814. package/dist/testing/cases/before-hook.js.map +0 -1
  815. package/dist/testing/cases/corpus.d.ts +0 -12
  816. package/dist/testing/cases/corpus.d.ts.map +0 -1
  817. package/dist/testing/cases/corpus.js +0 -91
  818. package/dist/testing/cases/corpus.js.map +0 -1
  819. package/dist/testing/cases/policy.d.ts +0 -74
  820. package/dist/testing/cases/policy.d.ts.map +0 -1
  821. package/dist/testing/cases/policy.js +0 -142
  822. package/dist/testing/cases/policy.js.map +0 -1
  823. package/dist/testing/cases/printer.d.ts +0 -4
  824. package/dist/testing/cases/printer.d.ts.map +0 -1
  825. package/dist/testing/cases/printer.js +0 -32
  826. package/dist/testing/cases/printer.js.map +0 -1
  827. package/dist/testing/cases/report-view.d.ts +0 -5
  828. package/dist/testing/cases/report-view.d.ts.map +0 -1
  829. package/dist/testing/cases/report-view.js +0 -33
  830. package/dist/testing/cases/report-view.js.map +0 -1
  831. package/dist/testing/cases/requisition.d.ts +0 -4
  832. package/dist/testing/cases/requisition.d.ts.map +0 -1
  833. package/dist/testing/cases/requisition.js +0 -38
  834. package/dist/testing/cases/requisition.js.map +0 -1
  835. package/dist/testing/cases/search-places.d.ts +0 -4
  836. package/dist/testing/cases/search-places.d.ts.map +0 -1
  837. package/dist/testing/cases/search-places.js +0 -60
  838. package/dist/testing/cases/search-places.js.map +0 -1
  839. package/dist/testing/cases/stock.d.ts +0 -4
  840. package/dist/testing/cases/stock.d.ts.map +0 -1
  841. package/dist/testing/cases/stock.js +0 -35
  842. package/dist/testing/cases/stock.js.map +0 -1
  843. package/dist/testing/cases/store.d.ts +0 -4
  844. package/dist/testing/cases/store.d.ts.map +0 -1
  845. package/dist/testing/cases/store.js +0 -100
  846. package/dist/testing/cases/store.js.map +0 -1
  847. package/dist/testing/harness.d.ts +0 -94
  848. package/dist/testing/harness.d.ts.map +0 -1
  849. package/dist/testing/harness.js +0 -168
  850. package/dist/testing/harness.js.map +0 -1
  851. package/dist/testing/index.d.ts.map +0 -1
  852. package/dist/testing/index.js.map +0 -1
  853. package/dist/testing/report.d.ts +0 -15
  854. package/dist/testing/report.d.ts.map +0 -1
  855. package/dist/testing/report.js +0 -22
  856. package/dist/testing/report.js.map +0 -1
  857. package/dist/web/createRestSurface.d.ts +0 -7
  858. package/dist/web/createRestSurface.d.ts.map +0 -1
  859. package/dist/web/createRestSurface.js +0 -39
  860. package/dist/web/createRestSurface.js.map +0 -1
  861. package/dist/web/index.d.ts +0 -2
  862. package/dist/web/index.d.ts.map +0 -1
  863. package/dist/web/index.js +0 -2
  864. package/dist/web/index.js.map +0 -1
  865. package/docs/adr/0001-four-atom-manifest-model.md +0 -440
  866. package/docs/adr/0002-closed-enums-for-bindings.md +0 -253
  867. package/docs/adr/0007-ai-as-primary-author.md +0 -473
  868. package/docs/adr/0008-structured-diagnostic-shape.md +0 -338
  869. package/docs/adr/0009-consumer-supplied-manifests.md +0 -149
  870. package/docs/adr/0010-locale-and-translates.md +0 -453
  871. package/docs/adr/0011-adapter-port-spec.md +0 -281
  872. package/docs/adr/0012-views-as-public-rest.md +0 -161
  873. package/docs/adr/0013-agent-provisioned-consumer-projects.md +0 -154
  874. package/docs/adr/0014-auth-better-auth-and-multi-tenant-mcp.md +0 -919
  875. package/docs/adr/0016-site-semantic-layer.md +0 -70
  876. package/docs/adr/0017-media-multi-variant-agent-side-optimization.md +0 -181
  877. package/docs/adr/0018-core-starters-repository-boundary.md +0 -179
  878. package/docs/adr/0019-sealed-manifest-runtime-pipeline.md +0 -244
  879. package/docs/adr/0020-builtin-handler-contracts-and-matched-upsert.md +0 -199
  880. package/docs/adr/0021-retire-starter-scaffolding.md +0 -30
  881. package/docs/adr/0022-caller-observed-version-occ.md +0 -212
  882. package/docs/adr/0023-port-failure-contract.md +0 -69
  883. package/docs/adr/0024-manifest-native-schema-tables.md +0 -264
  884. package/docs/adr/0025-reserved-native-columns-and-published-only-public-views.md +0 -105
  885. package/docs/adr/0026-progressive-generate.md +0 -36
  886. package/docs/adr/0027-scheduled-procedure-triggers.md +0 -31
  887. package/docs/adr/0028-schema-ttl-expiry.md +0 -33
  888. package/docs/adr/0029-mcp-apps-interaction-contracts.md +0 -324
  889. package/docs/adr/0030-store.md +0 -40
  890. package/docs/adr/0031-host-cloud-core-contract.md +0 -25
  891. package/docs/adr/0032-store-centric-core-and-service-contract.md +0 -361
  892. package/docs/adr/0033-storage-converges-to-the-plan.md +0 -92
  893. package/docs/adr/0034-store-is-authored-as-sql.md +0 -192
  894. package/docs/adr/0035-sql-dialects.md +0 -154
  895. package/docs/adr/0036-host-and-dialect.md +0 -65
  896. package/docs/adr/0037-postgresql-is-the-reference-dialect.md +0 -124
  897. package/docs/adr/0038-bun-native-host.md +0 -63
  898. package/docs/adr/README.md +0 -96
  899. package/docs/adr/adr-lite-803-request-diagnostics.md +0 -38
  900. package/docs/adr/adr-lite-808-route-readiness.md +0 -47
  901. package/docs/adr/adr-lite-809-bounded-public-content.md +0 -71
  902. package/docs/adr/adr-lite-812-native-parity.md +0 -150
  903. package/docs/adr/adr-lite-823-home-statistics.md +0 -64
  904. package/docs/adr/adr-lite-842-mcp-authoring.md +0 -30
  905. package/docs/adr/adr-lite-845-frontend-client.md +0 -38
  906. package/docs/adr/adr-lite-861-admin-webmcp.md +0 -48
  907. package/docs/adr/adr-lite-909-admin-ui-kit.md +0 -37
  908. package/docs/examples/commerce-inventory.md +0 -481
  909. package/docs/examples/commerce.md +0 -254
  910. package/docs/examples/guarded-api.md +0 -238
  911. package/docs/examples/intake-hooks.md +0 -237
  912. package/docs/examples/intake.md +0 -127
  913. package/docs/examples/legal-documents.md +0 -218
  914. package/docs/examples/procurement.md +0 -215
  915. package/docs/examples/publication.md +0 -211
  916. package/docs/examples/reference-service/.mantle/generated/mantle.ts +0 -174
  917. package/docs/examples/reference-service/.mantle/generated/plan.json +0 -1936
  918. package/docs/examples/reference-service/README.md +0 -33
  919. package/docs/examples/reference-service/manifests/catalog.yaml +0 -103
  920. package/docs/examples/reference-service/manifests/orders.yaml +0 -120
  921. package/docs/examples/reference-service/mantle.config.json +0 -1
  922. package/docs/examples/reference-service/package.json +0 -27
  923. package/docs/examples/reference-service/smoke.mjs +0 -156
  924. package/docs/examples/reference-service/src/handlers.ts +0 -36
  925. package/docs/examples/reference-service/src/index.ts +0 -33
  926. package/docs/examples/reference-service/src/service.ts +0 -78
  927. package/docs/examples/reference-service/wrangler.jsonc +0 -26
  928. package/docs/examples/reservation.md +0 -142
  929. package/docs/skills/develop/mcp-app.md +0 -79
  930. /package/docs/examples/{reference-service → app-shell}/.dev.vars.example +0 -0
@@ -1,104 +1,77 @@
1
- ---
2
- description: Trigger field reference for Mantle 0.2.0 — http, mcp, lifecycle and schedule sources, POSIX cron and its Cloudflare translation, and the diagnostics each raises.
3
- ---
4
1
  # Trigger
5
2
 
6
3
  ```yaml
7
4
  apiVersion: cms.mantle.aotter.net/v2
5
+ kind: Schema
6
+ metadata: { name: tickets }
7
+ spec:
8
+ title: Tickets
9
+ lifecycle: operational
10
+ schema: { type: object, required: [closed], properties: { closed: { type: boolean } } }
11
+ ---
12
+ apiVersion: cms.mantle.aotter.net/v2
13
+ kind: Procedure
14
+ metadata: { name: close-ticket }
15
+ spec:
16
+ requires: { auth: { all: [ctx.admin] } }
17
+ input: { type: object, required: [id, version], properties: { id: { type: string }, version: { type: integer } }, additionalProperties: false }
18
+ output: { type: object }
19
+ handler: { sql: 'UPDATE tickets SET closed=true WHERE id=input.id AND version=input.version RETURNING id,closed' }
20
+ ---
21
+ apiVersion: cms.mantle.aotter.net/v2
8
22
  kind: Trigger
9
- metadata: { name: place-order-http }
23
+ metadata: { name: close-ticket-http }
10
24
  spec:
11
- source: { kind: http, method: POST, path: /api/orders }
12
- target: { procedure: place-order }
25
+ source: { kind: http, method: POST, path: '/api/tickets/{id}/close' }
26
+ target: { procedure: close-ticket }
27
+ ---
28
+ apiVersion: cms.mantle.aotter.net/v2
29
+ kind: Trigger
30
+ metadata: { name: close-ticket-mcp }
31
+ spec:
32
+ source: { kind: mcp, surface: admin }
33
+ target: { procedure: close-ticket }
13
34
  ```
14
35
 
15
- `target.procedure` names a declared Procedure
16
- (`TRIGGER_TARGET_PROCEDURE_UNKNOWN`). Several Triggers may target one
17
- Procedure; each source runs it as an `Invocation` with the same `requires`,
18
- guard and validation.
19
-
20
- ## `http`
21
-
22
- | Field | Values |
23
- |---|---|
24
- | `method` | `POST`, `PUT`, `PATCH`, `DELETE` (reads are Views) |
25
- | `path` | starts with `/api/` (`TRIGGER_PATH_INVALID`); `{param}` segments bind to inputs of the same name, coerced to their declared types |
26
-
27
- The REST surface answers it. The JSON body and the path parameters merge into
28
- the input (a path parameter wins). A `(method, path)` pair is unique
29
- (`TRIGGER_PATH_COLLISION`); a route with fewer parameters is tried first, so
30
- `/api/items/search` is not shadowed by `/api/items/{id}`. The answer is the
31
- Procedure's output, or `{ "error": … }`. `ctx.cause.kind` is `http`.
32
-
33
- The body is parsed JSON. For a signed webhook, verify the raw body in the
34
- service's own `fetch` and call `runtime.invokeProcedure`.
35
-
36
- ## `mcp`
36
+ The target names a declared Procedure. `http` sources use POST/PUT/PATCH/DELETE and an `/api/` path. Path parameters bind to corresponding declared input fields and override JSON-body values. The generated REST module retains the Procedure's authorization and validates boundary input.
37
37
 
38
- | Field | Values |
39
- |---|---|
40
- | `surface` | `public` (`/mcp`) or `staff` (the staff MCP surface; also an Admin operation) |
38
+ An MCP source is `{ kind: mcp, surface: public }` or admin. The selected MCP module exposes the Procedure as a snake-case tool with its description, [tool hints](procedure.md#mcp-tool-hints) and requires checks.
41
39
 
42
- The tool is named after the Procedure, kebab to snake case
43
- (`MCP_TOOL_NAME_COLLISION` when two names meet). Give the Procedure a
44
- `description` (`MCP_TOOL_DESCRIPTION_MISSING` warns). `ctx.cause.kind` is
45
- `mcp`.
40
+ By default, pair every HTTP Trigger with an MCP Trigger so the same operation is reachable by the user's AI. `mantle generate` warns when a Procedure has HTTP exposure but no MCP exposure, suggesting `surface: admin` for an admin-only Procedure and `public` otherwise. Triggers still decide every Procedure surface: intentional asymmetric exposure is allowed and generation succeeds.
46
41
 
47
- ## `lifecycle`
42
+ Lifecycle and schedule sources are rejected at generation with `GENERATE_UNSUPPORTED`, including disabled schedules. Use an app-owned handler or scheduler. For signed webhooks, verify the original raw Request in the app and call a generated Procedure with validated input; do not route it through a JSON boundary before signature verification.
48
43
 
49
- | Field | Values |
50
- |---|---|
51
- | `schema` | the Schema watched (`LIFECYCLE_SCHEMA_UNKNOWN`) |
52
- | `on` | non-empty: `before_create`, `after_create`, `before_update`, `after_update`, `before_delete`, `after_delete`, `before_publish`, `after_publish` |
44
+ ## Input rules
53
45
 
54
- The target is a `ref` Procedure (`LIFECYCLE_TARGET_NOT_REF`). `ctx.cause` is
55
- `{ kind: "lifecycle", trigger, hook, schema, rows, id }`.
46
+ The admin MCP tool below lists `reason` and `closed` without the rules, and its
47
+ description ends "'reason' is required when 'closed' is false."; a call with
48
+ `closed: false` and no `reason` fails with `INPUT_VALIDATION_FAILED` at
49
+ `procedures/set-ticket/input/reason` (the error path is
50
+ `procedures/<name>/input/<field>`). See [surface contracts](surface.md) for the
51
+ supported rules.
56
52
 
57
- - A **before** hook runs before the batch, receives the one row (for an insert,
58
- the row about to be written), reads only, and rejects by throwing; nothing is
59
- applied. The write then locks the version the hook saw. Before hooks on one
60
- operation run in Trigger-name order.
61
- - An **after** hook runs after the commit, once per statement and Trigger, with
62
- every written row in `rows` (each with `id` and `version`). A failure is
63
- logged and never undoes the write. `id` is stable for a replay.
64
-
65
- A hook sees the originating caller. Any path that writes the Schema fires its
66
- hooks: SQL Procedures, `ctx.store`, Admin. A set op on a Schema with a before
67
- hook for that operation is refused.
68
-
69
- ## `schedule`
70
-
71
- | Field | Values |
72
- |---|---|
73
- | `cron` | five-field POSIX cron in UTC; weekday 0 = Sunday |
74
- | `enabled` | optional, default `true` |
75
-
76
- The target runs as the system caller with input `{}`. It may not declare
77
- `requires.auth` predicates (`SCHEDULE_AUTH_INVALID`), and its input must
78
- accept an empty object (`SCHEDULE_INPUT_INVALID`). `ctx.cause` is
79
- `{ kind: "schedule", trigger, cron, scheduledTime, id: "<trigger>:<scheduledTime>" }`.
80
-
81
- The service passes `schedules: true` to `createMantle`; without it boot
82
- refuses an enabled schedule (`SCHEDULE_NOT_WIRED`). The Cloudflare preset
83
- passes it. The Bun preset has no scheduler, so `mantle generate --host bun`
84
- refuses an enabled schedule; use host `none` with your own scheduler calling
85
- `invokeSchedule(cron, scheduledTime, env)` on what `createMantle` returns.
86
-
87
- ### Cloudflare
88
-
89
- Cloudflare numbers weekdays 1 (Sunday) to 7. `toCloudflareCron` from
90
- `@aotter/mantle/cloudflare` adds one to every explicit weekday number and
91
- leaves `*`, names and the other fields alone:
92
-
93
- | POSIX (manifest) | Cloudflare (`wrangler.jsonc`) |
94
- |---|---|
95
- | `0 3 * * 0` | `0 3 * * 1` |
96
- | `0 9 * * 1-5` | `0 9 * * 2-6` |
97
- | `*/5 * * * *` | `*/5 * * * *` |
53
+ ```yaml
54
+ apiVersion: cms.mantle.aotter.net/v2
55
+ kind: Procedure
56
+ metadata: { name: set-ticket }
57
+ spec:
58
+ description: Open or close a ticket.
59
+ input:
60
+ type: object
61
+ required: [id, closed]
62
+ properties: { id: { type: string }, closed: { type: boolean }, reason: { type: string, maxLength: 200 } }
63
+ additionalProperties: false
64
+ if: { properties: { closed: { const: false } }, required: [closed] }
65
+ then: { required: [reason] }
66
+ output: { type: object }
67
+ handler: { sql: 'UPDATE tickets SET closed=input.closed WHERE id=input.id RETURNING id,closed' }
68
+ ---
69
+ apiVersion: cms.mantle.aotter.net/v2
70
+ kind: Trigger
71
+ metadata: { name: set-ticket-mcp }
72
+ spec:
73
+ source: { kind: mcp, surface: admin }
74
+ target: { procedure: set-ticket }
75
+ ```
98
76
 
99
- It refuses what it cannot translate faithfully: `?`, `L`, `W`, `#`, weekday
100
- `7`, numbers with a leading zero, a backwards range, a name with a step, and a
101
- day of month together with a weekday. `mantle generate` runs it on every
102
- enabled schedule and fails before writing on a refusal. The generated
103
- `src/index.ts` maps Cloudflare's cron back to every POSIX expression that
104
- shares it.
77
+ See [surfaces](surface.md) for mounted paths, error mapping and origin checks.
@@ -1,162 +1,44 @@
1
- ---
2
- description: View field reference for Mantle 0.2.0 — the SQL SELECT and the dialect it accepts, input, surface, requires, uiSchema, cache, output names, paging and diagnostics.
3
- ---
4
1
  # View
5
2
 
6
- ```yaml
7
- apiVersion: cms.mantle.aotter.net/v2
8
- kind: View
9
- metadata: { name: search-items }
10
- spec:
11
- title: Search items # optional, a string or a locale map
12
- description: … # optional; the MCP tool's description
13
- surface: public # public | staff | internal (required)
14
- requires: { … } # optional, see Authorization requirements
15
- input: # optional JSON Schema object
16
- type: object
17
- required: [q]
18
- properties: { q: { type: string, minLength: 1 } }
19
- uiSchema: { list: { … } } # optional, staff Views only
20
- cache: { sharedMaxAge: 60 } # optional
21
- sql: | # required: one SELECT
22
- SELECT i.id, i.name, i.stock FROM items i
23
- WHERE mantle.search(i, input.q)
24
- ORDER BY mantle.search_rank(i), i.name
3
+ A View requires `surface: public | admin | internal` and one `sql` SELECT. Optional keys include title, description, input, requires, restrict, uiSchema (admin only), and cache. The app imports its generated typed function and supplies a native handle, verified Caller and driver-ready input; a JSON input (an array read by `json_each(input.ids)`) takes its authored array or object, which the generated query serializes.
4
+
5
+ ## SQL
6
+
7
+ PostgreSQL syntax is parsed and checked at generation. Reads may reference declared Schemas, CTEs and reusable internal Views; no auth/system tables or arbitrary external relations. The compiler adds scope, TTL, publication and translation-parent visibility at every relation. SQL policy is not injected at request time.
8
+
9
+ The SQL each dialect accepts, for Views and Procedures alike, is listed in [the SQL reference](sql.md); [SQL patterns](../guides/sql-patterns.md) shows the common ones. Unsupported SQL fails with a source position; generation is the authority for each target.
10
+
11
+ `*` and `t.*` expand to the Schema's declared fields only. Select `id`, `version`, `created_at` and `updated_at` by name when a client needs them (a write's `expectedVersion`, a detail link, keyset paging).
12
+
13
+ OFFSET, arbitrary functions/relations, DDL and transaction control are not a read escape hatch. Use keyset paging. Select latitude/longitude explicitly instead of native geo projections.
14
+
15
+ ## Restrict
16
+
17
+ `restrict` narrows one target by Schema: `restrict: { orders: "region IN auth.user('region')" }`. Each key is a Schema the SQL reads; each value uses the [scope](schema.md#field-scope) grammar, and a `= auth.uid()` term only on `author_id` or that Schema's own owner column. The effective rule is the Schema's scope AND the restrict. `{ all: true }` never lifts a restrict term: such a caller is refused with `AUTH_DENIED`. A View or Procedure that reads a restricted View carries that View's restrict too, so composing never widens it. A View with `restrict` cannot use a shared cache.
18
+
19
+ ## Search and totals
20
+
21
+ `mantle.search(<alias>, <text>)` matches the Schema's declared `searchableFields`, and `mantle.search_rank(<alias>)`
22
+ orders by relevance; qualify both with `mantle.`. An optional search reads
23
+ `WHERE p.active AND (input.q IS NULL OR mantle.search(p, input.q))`, and a ranked one
24
+ `WHERE mantle.search(p, input.q) ORDER BY mantle.search_rank(p), p.id` (see `examples/reference-service` `catalog.yaml`
25
+ for cursor paging over the rank).
26
+
27
+ Views using `mantle.search`, Store search and Admin list search share the dialect search: SQLite/D1 use FTS for queries of 3 or more characters (shorter queries use LIKE); PostgreSQL uses ILIKE over the declared fields and scans by default. A View does not make PostgreSQL search faster. For large PostgreSQL tables, the application's agent adds trigram indexes in a migration, which ILIKE then uses with no code change:
28
+
29
+ ```sql
30
+ CREATE EXTENSION IF NOT EXISTS pg_trgm;
31
+ CREATE INDEX articles_title_trgm ON articles USING gin (title gin_trgm_ops);
25
32
  ```
26
33
 
27
- ## `sql`
28
-
29
- One `SELECT` in PostgreSQL syntax over declared Schemas. It reads
30
- `input.<name>`, `auth.uid()`, `auth.role()` and `now()`. The runtime adds
31
- scope, TTL and (on a public View) published-only to every Schema it reads;
32
- never repeat them.
33
-
34
- ### What the D1 dialect accepts
35
-
36
- The `sqlite` dialect (`@aotter/mantle/d1`) runs this subset on D1, on Bun's
37
- SQLite and on any `sqliteStorage` driver.
38
-
39
- | Area | Supported | Rule |
40
- |---|---|---|
41
- | Expressions | columns, aliases, literals, arithmetic, `\|\|`, `CASE`, `COALESCE`, `NULLIF`, `CAST` | `CAST(x AS int)` only for an integer literal: use `round(x)`. `CAST(x AS bool)` follows PostgreSQL. `*` expands to declared fields; a bare `*` over a subquery or `json_each` is refused: name the columns |
42
- | Conditions | comparisons, `AND`/`OR`/`NOT`, `BETWEEN`, `IS [NOT] NULL`, `IS DISTINCT FROM`, `IN (list \| subquery)`, `[NOT] EXISTS`, `LIKE … ESCAPE` | `LIKE` is case-insensitive (SQLite). An input array in `IN` binds once. A date-time, date or boolean column (and `created_at`, `updated_at`) is not compared with a bare string: write `CAST('…' AS timestamptz)`, `true`, or bind an input |
43
- | Relations | one Schema, `INNER`/`LEFT JOIN … ON` (self-joins too), a subquery in `FROM`, `json_each(<input or column>)` | the only comma join is `t, json_each(t.col)` |
44
- | Subqueries | scalar and correlated | |
45
- | Aggregation | `count`, `sum`, `min`, `max`, `avg`, `count(DISTINCT)`, `json_group_array([DISTINCT])`, `json_group_object`, `GROUP BY`, `HAVING` | a selected column is grouped or aggregated |
46
- | Windows | `row_number()`, `rank()`, `sum`/`count … OVER (PARTITION BY … ORDER BY …)` | no frame clause |
47
- | Order and paging | `ORDER BY … [NULLS FIRST \| LAST]`, `LIMIT`, `DISTINCT` | `id` is appended as the last sort key; `LIMIT` needs `ORDER BY` and bounds every page together; a sort key may be NULL (an unstated `NULLS` puts NULL first ascending and last descending, and the cursor follows the same rule); `ORDER BY 1` sorts by the first output; `DISTINCT` with `ORDER BY` is refused. A View without `ORDER BY` (a `DISTINCT`, an aggregate, a `GROUP BY`) is one page: it takes no cursor and is refused when it has more rows than the page |
48
- | JSON | `->>`, `json_extract`, `json_set`, `json_insert`, `json_remove`, `json_array_length` | `->` is refused |
49
- | Time | `now()`, `date_trunc('hour'\|'day'\|'week'\|'month'\|'year', ts)`, `extract(year\|month\|day\|dow\|hour FROM ts)`, `ts ± interval '<n> seconds\|minutes\|hours'`, `ts - ts` | site time zone; `ts - ts` is microseconds. Calendar intervals (`day`, `month`) are refused: bind the boundary as an input |
50
- | Search and places | `mantle.search(t, q)`, `mantle.search_rank(t)`, `mantle.near(t.f, lat, lng, meters)`, `mantle.distance(t.f, lat, lng)` | `near` takes a literal radius of at most 50 km; ordering by `distance` needs `LIMIT` ≤ 100 and has no cursor |
51
-
52
- Refused on D1: `WITH`, `LATERAL`, `UNION`/`INTERSECT`/`EXCEPT`, window frames,
53
- `FILTER`, `DISTINCT ON`, `ILIKE`, regular expressions and jsonb operators. The
54
- PostgreSQL dialect accepts each of them (next section), and D1 says so in its
55
- refusal: "needs the PostgreSQL dialect".
56
-
57
- Refused on every dialect: `OFFSET`, `RIGHT`/`FULL`/`CROSS JOIN`, `NATURAL`,
58
- `USING`, `FOR UPDATE`, a write inside `WITH`, positional `$1`, `rowid`,
59
- SQLite's clock (`'now'`, `CURRENT_TIMESTAMP`), `strftime`/`date`/`unixepoch`,
60
- `generate_series` and any function outside the allowlist, an unqualified
61
- `search()`, and any relation that is not a declared Schema, a CTE or an
62
- internal View (`_mantle_*` and auth tables included).
63
-
64
- ### What the PostgreSQL dialect adds
65
-
66
- PostgreSQL is Mantle SQL's reference dialect (ADR-0037); D1 runs the subset above.
67
- On PostgreSQL a View may also use:
68
-
69
- | Construct | Notes |
70
- |---|---|
71
- | `WITH`, `WITH RECURSIVE` | every CTE body is a `SELECT`; a Schema read inside one is scoped like any other |
72
- | `UNION [ALL]`, `INTERSECT`, `EXCEPT`, `DISTINCT ON` | inside a `WITH` or a subquery, never the View's own `SELECT`, which Core pages and orders |
73
- | `JOIN LATERAL (…) x ON …`, `, LATERAL (…) x` | |
74
- | Window frames | `ROWS`/`RANGE BETWEEN … PRECEDING AND …` with literal offsets (an integer, or an interval for `RANGE` over time); `avg`, `min`, `max`, `lag`, `lead`, `first_value`, `last_value`, `dense_rank` over a window. `GROUPS` and `EXCLUDE` are refused |
75
- | Aggregates | `FILTER (WHERE …)`, `ORDER BY` inside an aggregate, `string_agg`, `jsonb_agg`, `jsonb_object_agg` |
76
- | jsonb | `->`, `#>`, `#>>`, `@>`, `<@`, `?`, `?\|`, `?&`; `jsonb_build_object`, `jsonb_build_array`, `jsonb_strip_nulls`, `to_jsonb`, `jsonb_typeof`; a json field is stored as `jsonb` |
77
- | Text and numbers | `ILIKE`, `~`, `~*`, `!~`, `!~*`, `split_part`, `greatest`, `least`, `floor`, `ceil`, `sqrt`, `power` |
78
- | Time | `ts AT TIME ZONE 'Asia/Taipei'`; `date_trunc` adds `minute` and `quarter`; `extract` adds `minute`, `quarter`, `week`, `isoyear`, `isodow`, `doy`, `epoch` |
79
- | Casts | any expression to `int4`, `int8`, `numeric(p, s)`, `date`, `timestamptz`, `jsonb`; a text literal compared with a date-time column is cast, as PostgreSQL does |
80
-
81
- Every statement on PostgreSQL has a 10-second `statement_timeout`
82
- (`postgresStorage({ statementTimeoutMs })`).
83
-
84
- ### Reading another View
85
-
86
- A View's `FROM` may name an internal View (`surface: internal`, no `input`, no
87
- `requires`) by its name with `-` written `_`: `FROM free_window w`. The
88
- compiler inlines its `SELECT` as a subquery, so scope and every check apply
89
- inside it, on every dialect. A View that reads itself, directly or through
90
- others, is refused; a View named like a Schema is not readable this way (the name reads the Schema). Write a rule many
91
- Views share (a plan's visible window, a definition of "active") once this way.
92
-
93
- ### Names
94
-
95
- - Unquoted identifiers fold to lower case; Schema and field names resolve
96
- case-insensitively. A Schema whose name is not a plain identifier is quoted:
97
- `FROM "support-tickets"`.
98
- - Native columns are `id`, `status`, `version`, `created_at`, `updated_at`,
99
- `author_id`.
100
- - An output that reads a Schema field unchanged comes back under the field's
101
- declared name and is decoded to its type, and so does `created_at` or
102
- `updated_at` (an ISO date-time). A `sum`, `min` or `max` of one column keeps
103
- that column's type and hints (a sum of a `money-minor` field is money); a
104
- `count` or an `avg` is a plain number. Any other output keeps its alias as
105
- SQL folded it: `AS orderCount` is `ordercount`, `AS "orderCount"` keeps the
106
- case. A staff View's `uiSchema.list.columns` must name each output as the row
107
- carries it; a name that differs only by case is `VIEW_UI_INVALID`, and the
108
- message says to quote the alias.
109
-
110
- ## `input`
111
-
112
- A JSON Schema object with declared `properties`; the SQL reads
113
- `input.<name>`. `limit` and `cursor` are reserved
114
- (`VIEW_INPUT_RESERVED_NAME`). An input the call leaves out binds `NULL`, after
115
- the schema's `default` if it declares one.
116
-
117
- ## `surface`
118
-
119
- | Value | Served |
120
- |---|---|
121
- | `public` | `GET /api/views/<name>` and a tool on `/mcp` |
122
- | `staff` | `GET /admin/api/views/<name>`, `GET /admin/api/views/<name>/export` (CSV), and a tool on the staff MCP surface |
123
- | `internal` | nowhere: `ctx.store.view(name, …)` and `runtime.store` only |
124
-
125
- ## Paging and the response
126
-
127
- Every surface takes `limit` (default 50, maximum 500) and `cursor`, and answers
128
- `{ "rows": [...], "nextCursor": "…" }`. `nextCursor` appears only when more
129
- rows exist; pass it back unchanged. A cursor is bound to its View and order.
130
- REST coerces each `input` query parameter to its declared type.
131
-
132
- ## `uiSchema` (staff Views)
133
-
134
- | Key | Effect |
135
- |---|---|
136
- | `list.columns` | the outputs the console shows, in order; CSV export uses them |
137
- | `list.searchFields` | outputs the console's search box matches: one case-insensitive `LIKE '%text%'` per output, ORed, with `%`, `_` and `\` in the text matched literally |
138
- | `list.filterFields` | outputs the console offers as filters: one `=` each, the value coerced to the output's field type |
139
-
140
- Each name must be one of the View's outputs (`VIEW_UI_INVALID` otherwise).
141
- The conditions wrap the View's own query, after its `WHERE` and the injected
142
- policy and before paging, so they narrow what the caller may already see and
143
- the cursor stays valid. Over HTTP they are Admin's `search` and
144
- `filter.<output>` query parameters on `/admin/api/views/<name>` and its
145
- `/export`; in code, `store.view(name, { search, filters })`. A declared
146
- `input` remains the way to parameterize the query itself. Other keys are
147
- refused (`VIEW_UI_INVALID`).
148
-
149
- ## `cache`
150
-
151
- `{ sharedMaxAge: 1–86400 }` is accepted only on an unguarded public View whose
152
- SQL reads neither `auth.*` nor `now()` (`VIEW_CACHE_INVALID`). The 0.2.0 REST
153
- surface does not send cache headers yet; cache in front of it if you need to.
154
-
155
- ## Diagnostics
156
-
157
- `SQL_SYNTAX`, `SQL_UNSUPPORTED`, `SQL_FUNCTION`, `SQL_RELATION`, `SQL_COLUMN`,
158
- `SQL_SHAPE`, `SQL_TYPE` (each with a line and column in the SQL),
159
- `VIEW_INPUT_INVALID_SHAPE`, `VIEW_INPUT_RESERVED_NAME`, `VIEW_CACHE_INVALID`,
160
- `VIEW_UI_INVALID`, `AUTH_PREDICATE_NOT_IN_ENUM`, `GUARD_PROCEDURE_UNKNOWN`. At
161
- run time: `UNAUTHENTICATED`, `AUTH_DENIED`, `INPUT_VALIDATION_FAILED`,
162
- `NOT_FOUND`. See [Diagnostics](./diagnostics.md).
34
+ Store keeps `find`/`first` search and `count`. `count` scans every matching row; for large tables or frequently shown totals, use an internal View with indexed predicates or avoid exact totals. Aggregates still scan matching rows. See [Store reads](../guides/typed-queries.md#store-reads-and-writes).
35
+
36
+ ## Results and paging
37
+
38
+ Each SELECT output needs a unique static name. Unquoted SQL identifiers fold to lower case; use an explicit quoted alias to preserve case (`r.reqStatus AS "reqStatus"`). Generation warns when an unaliased direct declared field would use its lower-case storage name. Declared-column lineage supplies generated types; computed outputs remain native/unknown, except a top-level output that is a JSON document by construction (a JSON aggregate or builder, a scalar subquery of one, or a `COALESCE` of those; see [SQL patterns](../guides/sql-patterns.md#a-row-with-its-children-in-one-read)), which is typed JSON. An output is non-null (`string`, not `string | null`) only when it reads unchanged a column its table declares NOT NULL (`id`, `version`, `created_at`, `updated_at`, a publishing `status`, or a [required](schema.md#fields-and-storage) field of an operational Schema) directly or through FROM subqueries; the right side of a LEFT JOIN, an aggregate, a column beside an aggregate without GROUP BY, a CTE and an expression stay nullable. SQL formats declared date-time/date outputs, while computed timestamps retain driver values. See [native execution](../guides/native-execution.md).
39
+
40
+ Bare `views/<encoded-name>.ts` returns row arrays. Proved pageable exposed/internal Views also receive native `paged/views/*`, returning `{ rows, nextCursor? }`. Selected REST/MCP boundaries use separate `paged/wire/views/*` SQL when declared integers require exact transport projections; bare modules also export `WireRow`. Indexed ordering after fixed equality prefixes ([index prefixes](schema.md#index-prefixes-for-paged-views)), non-null typed keys, complete groups and singleton joins/lookups are checked at generation. Unsupported internal paging retains its bare View; exposure requires a supported page contract. Aggregates still scan/group their sources: inspect EXPLAIN.
41
+
42
+ Publishing Schema fields may be NULL in drafts even when required, so public View paging cannot order by them. `published_at` is accepted by Store ordering but rejected as a View paging key. Use `ORDER BY id`, or keep the business date in an operational Schema as an indexed, required non-null field.
43
+
44
+ Internal Views have no public route/tool. Public and admin Views use selected REST/MCP/Admin bindings. `uiSchema.list` selects admin search/filter/display metadata; `uiSchema.nav.group/order/hidden` places an admin View in the sidebar ([sidebar](../guides/native-admin.md#sidebar)). See [surfaces](surface.md) for validation, paging and wire conversions and [typed queries](../guides/typed-queries.md) for a complete example.
@@ -10,15 +10,115 @@ open; installing one means choosing an exact version, not a channel.
10
10
  [GitHub Releases](https://github.com/aotter/mantle/releases) is the canonical
11
11
  change history; this page is the narrative one.
12
12
 
13
- From 0.2.0, Mantle is two packages, `@aotter/mantle` and `@aotter/mantle-ui`,
14
- published together at one version: the 0.1.x `-spec`, `-runtime`,
15
- `-cloudflare`, `-auth`, `-admin`, `-mcp`, `-web` and other packages fold into
16
- subpaths of `@aotter/mantle`, and `@aotter/mantle-admin-ui` into
17
- `@aotter/mantle-ui/admin`. Pin every one you use to the
18
- same exact version and upgrade them together.
13
+ From 0.2.0-alpha.7, Mantle publishes three packages together at one version:
14
+ `@aotter/mantle` (native SDK, compiler and CLI), `@aotter/mantle-ui` (pure UI),
15
+ and `@aotter/mantle-admin` (optional Admin server, SPA and MCP App).
16
+ Pin every package you use to the same exact version and upgrade them together.
19
17
 
20
18
  ## 0.2.0 — in preparation
21
19
 
20
+ ### Upgrading to 0.2.0-alpha.10
21
+
22
+ Pin every selected `@aotter/mantle`, `@aotter/mantle-ui` and
23
+ `@aotter/mantle-admin` dependency to `0.2.0-alpha.10`, refresh the lockfile,
24
+ then regenerate and check the application's owned artifacts. Keep existing
25
+ production migrations application-owned; generated initial DDL is for an empty
26
+ database. This alpha includes breaking Admin authoring and paging changes.
27
+
28
+ 1. **Build output and host configuration.** `mantle bundle` writes server
29
+ modules to `dist/worker` and static files to `dist/client`, including
30
+ `dist/client/admin`. Rerun `mantle generate` with the application's `--entry`
31
+ and check the resulting Wrangler `main`, `base_dir`, asset directory and
32
+ build command. See [CLI and generated ownership](../start/project-and-cli.md).
33
+ 2. **Application-owned React.** Install React and React DOM in the application
34
+ at the same exact version (the examples use `19.3.0`). Admin takes them as
35
+ peers; a mismatched pair fails its build.
36
+ 3. **Replace extensions with application composition.** Move to
37
+ `defineAdmin(meta, { nav, pages, home, components, plugins, mcp })` in
38
+ `src/admin.tsx`. Remove `--admin-extensions`, `adminExtensions`,
39
+ `defineAdminExtension`, extension handlers and removed manifest widget,
40
+ `list.cells` and panel references. `navGroups` becomes `nav.groups`.
41
+ Use the [Admin migration table](../guides/native-admin.md#migrating-from-admin-extensions)
42
+ rather than carrying the former registration layer forward.
43
+ 4. **Build the MCP App with the application.** The prebuilt
44
+ `@aotter/mantle-admin/mcp-app` / `mantleAppHtml` export is gone. Use
45
+ `adminMcpApps({ catalogue: mcpAppCatalogues.admin })` with the generated
46
+ catalogue; it reads the built asset. Declare CSP once in `defineAdmin`.
47
+ The default resource URI hashes the built HTML, catalogue and metadata;
48
+ custom HTML functions need an explicit immutable URI. Load interactive
49
+ host HTML through authenticated `resources/read`, which embeds its
50
+ catalogue. See [MCP Apps](../guides/mcp-apps.md).
51
+ 5. **Run the generated compatibility check.** Run
52
+ `node --test generated/admin-mcp-app.check.mjs` after building. Install
53
+ the optional `playwright-core` peer and a browser, or set
54
+ `MANTLE_TEST_CHROMIUM`; a missing browser fails rather than skips. This
55
+ checks rendering with a synthetic catalogue, not application authorization
56
+ or completion of a Procedure action.
57
+ 6. **Keep the host graph safe.** The MCP build rejects `/admin/api` access,
58
+ cookies and undeclared remote loads. Its entry must be readable in Node.
59
+ An optional `src/admin.mcp.tsx` (or `buildAdmin({ mcpEntry })`) isolates
60
+ browser-only integrations; both roots can reuse one host-safe config,
61
+ components and CSS. Without it the whole shared entry graph is checked.
62
+ 7. **Distinguish total bounds from page sizes.** Authored SQL `LIMIT` now
63
+ bounds the complete ordered result set across cursor pages, including web
64
+ indexes. Use paging `options.limit` for page size; remove an authored limit
65
+ only if it was incorrectly being used as a page-size setting. MCP accepts
66
+ sizes of 1–500, but a response budget can return fewer rows: append pages
67
+ until `nextCursor` is absent, not until a short page. See
68
+ [View paging](../reference/surface.md).
69
+ 8. **Install build dependencies where the build runs.** Wrangler dev/deploy
70
+ runs its configured build command, so that environment needs
71
+ `node_modules`. The resulting built server/assets do not read
72
+ `node_modules` when served. See the
73
+ [application shell](../../examples/app-shell/README.md).
74
+
75
+ Record/collection cells, inputs, record actions, asides and `RecordView` are
76
+ now truthfully browser-only (`surface: "browser"`); remove unreachable MCP
77
+ branches. View cells remain `both`, and pages opt in through `pages[].mcp`.
78
+ A Procedure action's input is distinct from a collection record input: use a
79
+ Procedure target and MCP Trigger with the View's unchanged `id` and observed
80
+ `version` for native row actions. [Shared custom-page headers](../guides/mcp-apps.md#customising-admin-for-mcp-hosts)
81
+ can compose localized title, description and actions on both surfaces; omit the
82
+ option to keep prior behavior, or use `header: false` for an element-owned heading.
83
+
84
+ OAuth issuer verification now follows Better Auth's normalized URL while
85
+ preserving explicit issuer/JWKS settings. Cloudflare OAuth configurations need
86
+ `global_fetch_strictly_public` for public JWKS fetches; generated settings and
87
+ the official examples retain it. Native MCP Apps use the official ext-apps
88
+ client. Browser Admin now displays a localized explicit reload action when a
89
+ lazy page fails, rather than going blank; it does not reload automatically or
90
+ replay writes.
91
+
92
+ ### Native SDK migration (alpha.7)
93
+
94
+ Alpha.7 replaces the previous Core runtime and generated service contract.
95
+ Existing alpha.6 applications require a source migration:
96
+
97
+ - Replace `createMantle`, `Store.select` and the old host presets with
98
+ [native generated queries and Store](../guides/typed-queries.md).
99
+ Generate with an explicit target and output directory, for example
100
+ `mantle generate cloudflare-d1 generated manifests/*.yaml --auth src/auth.ts --admin`.
101
+ See [CLI and generated ownership](../start/project-and-cli.md).
102
+ - The application owns routing, native database handles, verified Caller,
103
+ Auth configuration and migrations. Runtime no longer converges storage or
104
+ runs DDL at boot. Apply generated `schema.sql` only to an empty database;
105
+ migrate existing data explicitly. PostgreSQL uses Bun.SQL on Bun and
106
+ postgres.js on Workers. See [native execution](../guides/native-execution.md).
107
+ - Install the separate `@aotter/mantle-admin` package when selecting Admin, with `react` and `react-dom` in the application pinned to one identical exact version (Admin no longer installs them).
108
+ Compose its [native bindings](../guides/native-admin.md) in the application.
109
+ Bare queries retain driver-native values; selected REST/MCP/Admin boundaries
110
+ own validation and declared-column wire conversion.
111
+ - Move lifecycle/schedule handlers and dynamic authorization guards into
112
+ application code. Review [authorization and Caller wiring](../concepts/runtime-and-adapters.md)
113
+ and regenerate all owned artifacts before running `generate --check`.
114
+
115
+ The [reference Worker](https://github.com/aotter/mantle/tree/v0.2.0-alpha.10/docs/examples/reference-service) and
116
+ [app shell](../../examples/app-shell/) demonstrate the current composition.
117
+ The following earlier-alpha notes are historical; the current handbook and
118
+ the native migration above supersede their runtime and CLI instructions.
119
+
120
+ ### Earlier alpha design
121
+
22
122
  0.2.0 replaces 0.1.x's grammar and composition; no stable 0.1.5 was released
23
123
  (`0.1.5-alpha.1` was a prerelease). It breaks every consumer, and
24
124
  `docs/upgrade-0.1-to-0.2.md` in the package is the guide for moving a project
@@ -28,9 +128,10 @@ by hand.
28
128
  Procedures are SQL statements or a `ref`, in PostgreSQL syntax. The builtin
29
129
  handlers, the Filter AST, `params`, `$ctx` references and `x-mantle-bind` are
30
130
  gone; Schemas gain `checks`, and `searchableFields` becomes full-text search.
31
- - **SQL in PostgreSQL syntax.** PostgreSQL is the reference dialect
131
+ - **SQL in the dialect's syntax.** PostgreSQL is the reference dialect
32
132
  (`@aotter/mantle/postgres`); D1 and SQLite run a subset
33
- (`@aotter/mantle/d1`). A plan records its dialect.
133
+ (`@aotter/mantle/d1`). Each dialect is its own target (ADR-0039), and a
134
+ plan records its dialect.
34
135
  - **One Store.** Every read and write goes through Store, which adds caller
35
136
  scope, TTL and published-only to every statement, and an optimistic lock
36
137
  where the caller passes one; a write
@@ -38,8 +139,8 @@ by hand.
38
139
  - **The service is the application's.** `createMantle(service, …)` replaces
39
140
  `createMantleWorker`, and the first `mantle generate` writes the host's
40
141
  preset (`src/service.ts`, `src/index.ts`, ...) once. `--host` is
41
- `cloudflare` (D1, or PostgreSQL through Hyperdrive), `bun` (Bun.SQL or
42
- bun:sqlite, `@aotter/mantle/bun`) or `none` (plan and types only), and
142
+ `cloudflare` (D1, or PostgreSQL through Hyperdrive), `bun` (node-postgres
143
+ or bun:sqlite, `@aotter/mantle/bun`) or `none` (plan and types only), and
43
144
  `--dialect` is `sqlite` or `postgres`; both are chosen once.
44
145
  - **Mantle never owns your users.** A `CallerResolver` turns a request into a
45
146
  `Caller`; identity is `mantle` (Better Auth), `custom` or `none`. Core creates
@@ -56,8 +157,93 @@ by hand.
56
157
  `emit-openapi`, `skills` and `mantle-harness` are removed.
57
158
  - **The Admin console** moves to `@aotter/mantle-ui/admin`, served at `/admin`
58
159
  by the preset through the service's `ASSETS` binding.
59
- - **Not yet in 0.2.0:** Mantle-rendered public pages, the MCP interaction App
60
- tools, and deploying to Mantle Cloud.
160
+ - **Not yet in 0.2.0:** Mantle-rendered public pages and the MCP interaction
161
+ App tools.
162
+
163
+ ### Native driver and before-hook cleanup (#1426)
164
+
165
+ This breaking source migration removes request-scoped PostgreSQL sessions,
166
+ custom write pipelining/retries, SQLite lock polling and before-hook runtime
167
+ policing. Copy the new native preset wiring; existing generated source is not
168
+ overwritten. Authenticated Bun SQLite uses separate Store/Auth handles to the
169
+ same WAL file. Operational before hooks no longer add an implicit version
170
+ lock; explicit OCC, publishing checks and authorization guards remain.
171
+ See [native execution migration](../guides/native-execution.md) and ADR-0041.
172
+ The alpha.6 instructions below describe that release; ADR-0041 supersedes its
173
+ requestScoped/pipeline/shared-SQLite-handle directions after this cleanup.
174
+
175
+ ### Upgrading an existing PostgreSQL service (0.2.0-alpha.6)
176
+
177
+ PostgreSQL is native from this alpha (ADR-0039): each dialect is its own target,
178
+ PostgreSQL's SQL and ordering are PostgreSQL's, and node-postgres (`pg`) is the
179
+ PostgreSQL driver on every host. D1 and SQLite output is unchanged except where
180
+ noted. Work through these in order before deploying.
181
+
182
+ 1. **Role settings (from #1383, now also checked on Bun).** Boot refuses with
183
+ `STORAGE_CHANGE_BLOCKED` (path `storage:settings`) unless the role Mantle
184
+ connects as has a statement limit and UTC:
185
+ `ALTER ROLE app SET statement_timeout = '10s'; ALTER ROLE app SET TimeZone = 'UTC';`
186
+ (10s or less). Bun's `Bun.SQL` entry used to pin its own limit and skip this
187
+ check. A Hyperdrive config must keep `--caching-disabled`: reads, role
188
+ re-reads and grant revocations run outside a transaction.
189
+ 2. **Rewrite SQLite spellings, then run `mantle generate`.** A PostgreSQL
190
+ manifest that uses `json_each`, `-> '$.a'`, `->> '$.a'`, `json_extract`,
191
+ `json_set`, `json_insert`, `json_remove` or `hex` fails validation with its
192
+ position and the PostgreSQL spelling. The
193
+ [dialect contract](../concepts/runtime-and-adapters.md#drivers-and-dialects)
194
+ covers the PostgreSQL target: `json_each(t.col) j` becomes
195
+ `jsonb_array_elements_text(t.col) WITH ORDINALITY AS j(value, n)` (a sorted
196
+ View over a row source needs the alias and `WITH ORDINALITY`, and `j.id`
197
+ becomes `j.n`), `CAST(n AS bool)` of an integer becomes `n <> 0`, and `||`
198
+ needs a text operand. The PostgreSQL dialect version is now 2, so a plan
199
+ compiled earlier fails at boot with `PLAN_FINGERPRINT_MISMATCH`: run
200
+ `mantle generate` and deploy the regenerated plan.
201
+ 3. **NULL order.** Unstated `NULLS` now follows PostgreSQL: NULL last ascending,
202
+ first descending, for every `ORDER BY` including windows and
203
+ `json_group_array`. Write `NULLS FIRST` or `NULLS LAST` to keep a specific
204
+ order. Rows tied on the last sort key are ordered by `id` in that key's
205
+ direction. A cursor live across the deploy may repeat or skip rows once.
206
+ 4. **Bun entry.** Install `pg` and `@types/pg`. Replace
207
+ `new SQL(url, { prepare: false, ... })` with
208
+ `new pg.Pool({ connectionString, pipeline: true })`; `Env.SQL` becomes
209
+ `Env.PG`. The simplest path is to delete `src/service.ts` and `src/index.ts`
210
+ and re-run `mantle generate --host bun`, or copy the new preset. Removed from
211
+ `@aotter/mantle/bun`: `bunPostgresStorage`, `bunPgConnect`,
212
+ `bunDatabaseDriver`, `bunAuthDatabase`, `BunSqlPool`, `BunAuthPool`. The role
213
+ no longer needs `TEMPORARY`. Custom transports lose `temporaryResultMetadata`,
214
+ `describeResult` and `readOnly` from `PgClient` / `PgStatement`.
215
+ 5. **Generated `src/service.ts` changed.** The `database(env).run` wrapper moved
216
+ to the exported `mantle`, and the Bun pooled wrapper ends each client once.
217
+ The preset is never rewritten: re-run `mantle generate` into a scratch
218
+ directory and copy the difference, or delete and regenerate if unedited.
219
+ 6. **First boot does one-time work.** It runs once under the advisory lock:
220
+ - one `_mantle_ix_<schema>_updated` index on `([scope,] updated_at, id)` per
221
+ Schema, built without `CONCURRENTLY` inside the convergence transaction, so
222
+ writes to a large table block while it builds. Pre-create it before
223
+ deploying, on the schema (`search_path`) Mantle uses, with both names quoted:
224
+ `CREATE INDEX CONCURRENTLY "_mantle_ix_<schema>_updated" ON "<schema>" (["<scope>",] updated_at, id)`.
225
+ A matching index is accepted. If a concurrent build fails, drop the invalid
226
+ index before deploying: boot accepts it by name and columns and never
227
+ rebuilds it. A Schema name longer than about 43 bytes gets a hashed index
228
+ name; read it from a fresh database's `pg_indexes` instead;
229
+ - each `_mantle_chk_*` check is rebuilt once (earlier releases left no
230
+ marker); later boots leave unchanged checks alone;
231
+ - the old `_mantle_jget`, `_mantle_bool` and `_mantle_json_each` functions
232
+ stay in place, unused: a previous release still running during a rolling
233
+ deploy calls them.
234
+ 7. **Boot under contention.** Concurrent boots converge once. A boot that cannot
235
+ get a lock within about five tries of one second fails with
236
+ `STORAGE_CHANGE_BLOCKED` naming the lock (another boot still converging, or a
237
+ long transaction on a table the plan changes), and is not retried for 10
238
+ seconds. A winner building a very large index can outlast its waiters, which
239
+ then report the blocked boot; boot again when it has finished (#1408).
240
+ 8. **Auth.** `get-session` no longer carries a `set-auth-jwt` response header
241
+ when the OAuth provider is configured; call the plugin's `/api/auth/token`
242
+ instead. `d1Driver`'s structural `D1PreparedStatement` now requires `first`
243
+ and `all`: a hand-rolled fake must add them.
244
+ 9. **D1.** A paged View with `json_each` in a `JOIN` arm, or with more than one
245
+ `json_each`, now pages by every element's `id`: its order among ties changes,
246
+ no row is skipped, and a cursor issued before the upgrade may need to restart.
61
247
 
62
248
  ## 0.1.4 — 2026-09-24
63
249