@aotter/mantle 0.1.5-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 (495) hide show
  1. package/README.md +166 -298
  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/build/spec/domain/model/ManifestGrammar.d.ts +439 -0
  20. package/dist/build/spec/domain/model/RuntimePlan.d.ts +168 -0
  21. package/dist/build/spec/domain/model/SqlIr.d.ts +129 -0
  22. package/dist/build/spec/domain/model/UserFields.d.ts +21 -0
  23. package/dist/build/spec/domain/service/PlanFingerprint.d.ts +7 -0
  24. package/dist/build/spec/kernel/diagnostic.d.ts +108 -0
  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/kernel/cron.d.ts +1 -0
  71. package/dist/kernel/cron.js +58 -0
  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/kernel/email.js +38 -0
  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/kernel/r2-media.d.ts +42 -0
  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/kernel/site-types.d.ts +146 -0
  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 -0
  145. package/dist/testing/index.js +1 -0
  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 -18
  166. package/docs/examples/app-shell/.dev.vars.example +4 -0
  167. package/docs/examples/app-shell/README.md +121 -0
  168. package/docs/examples/app-shell/accept.mjs +91 -0
  169. package/docs/examples/app-shell/gitignore +7 -0
  170. package/docs/examples/app-shell/package.json +43 -0
  171. package/docs/examples/app-shell/pnpm-workspace.yaml +8 -0
  172. package/docs/examples/app-shell/smoke-kit.mjs +168 -0
  173. package/docs/examples/app-shell/src/auth.ts +58 -0
  174. package/docs/examples/app-shell/src/handlers.ts +5 -0
  175. package/docs/examples/app-shell/src/index.ts +4 -0
  176. package/docs/examples/app-shell/src/routes.ts +14 -0
  177. package/docs/examples/app-shell/src/schedule.ts +8 -0
  178. package/docs/examples/app-shell/src/service.ts +70 -0
  179. package/docs/examples/app-shell/src/sign-in.ts +41 -0
  180. package/docs/examples/app-shell/src/signup.ts +8 -0
  181. package/docs/examples/app-shell/tsconfig.json +26 -0
  182. package/docs/examples/app-shell/worker-configuration.d.ts +22 -0
  183. package/docs/examples/app-shell/wrangler.jsonc +62 -0
  184. package/docs/examples/club-events/README.md +65 -0
  185. package/docs/examples/club-events/manifests/club-events.yaml +247 -0
  186. package/docs/examples/club-events/smoke.mjs +127 -0
  187. package/docs/examples/club-events/src/handlers.ts +25 -0
  188. package/docs/examples/club-events/src/signup.ts +9 -0
  189. package/docs/examples/generated-web/README.md +78 -0
  190. package/docs/examples/generated-web/posts.yaml +38 -0
  191. package/docs/examples/generated-web/seed.sql +6 -0
  192. package/docs/examples/generated-web/src/worker.ts +43 -0
  193. package/docs/examples/generated-web/tsconfig.json +8 -0
  194. package/docs/examples/generated-web/wrangler.jsonc +8 -0
  195. package/docs/examples/purchasing/.dev.vars.example +6 -0
  196. package/docs/examples/purchasing/README.md +99 -0
  197. package/docs/examples/purchasing/manifests/purchasing.yaml +374 -0
  198. package/docs/examples/purchasing/seed.sql +4 -0
  199. package/docs/examples/purchasing/smoke.mjs +191 -0
  200. package/docs/examples/purchasing/src/admin.tsx +13 -0
  201. package/docs/examples/purchasing/src/handlers.ts +33 -0
  202. package/docs/examples/purchasing/src/notify.ts +29 -0
  203. package/docs/examples/purchasing/src/requests-page.ts +57 -0
  204. package/docs/examples/purchasing/src/routes.ts +53 -0
  205. package/docs/examples/purchasing/src/schedule.ts +31 -0
  206. package/docs/examples/purchasing/src/signup.ts +5 -0
  207. package/docs/examples/purchasing/src/supplier.ts +32 -0
  208. package/docs/examples/purchasing/wrangler.jsonc +69 -0
  209. package/docs/examples/recipes/README.md +60 -0
  210. package/docs/examples/recipes/manifests/recipes.yaml +75 -0
  211. package/docs/examples/recipes/smoke.mjs +102 -0
  212. package/docs/examples/recipes/src/media.ts +13 -0
  213. package/docs/examples/recipes/src/pages.ts +99 -0
  214. package/docs/examples/recipes/src/routes.ts +71 -0
  215. package/docs/examples/recipes/src/site-config.ts +12 -0
  216. package/docs/examples/recipes/wrangler.jsonc +74 -0
  217. package/docs/handbook/cloudflare/authentication.md +180 -322
  218. package/docs/handbook/cloudflare/chatgpt-sites.md +5 -23
  219. package/docs/handbook/cloudflare/deploy-and-operate.md +55 -77
  220. package/docs/handbook/cloudflare/media-r2.md +61 -205
  221. package/docs/handbook/cloudflare/service-entry.md +239 -0
  222. package/docs/handbook/concepts/authorization.md +10 -107
  223. package/docs/handbook/concepts/four-atoms.md +9 -168
  224. package/docs/handbook/concepts/lifecycle-and-locales.md +9 -132
  225. package/docs/handbook/concepts/mcp-and-agents.md +24 -121
  226. package/docs/handbook/concepts/procedures-and-triggers.md +5 -217
  227. package/docs/handbook/concepts/runtime-and-adapters.md +15 -169
  228. package/docs/handbook/concepts/views.md +10 -185
  229. package/docs/handbook/examples/hub.md +3 -8
  230. package/docs/handbook/guides/adapter-guide.md +11 -0
  231. package/docs/handbook/guides/admin-ui.md +115 -133
  232. package/docs/handbook/guides/agent-setup.md +64 -74
  233. package/docs/handbook/guides/agent-workflow-acceptance.md +232 -0
  234. package/docs/handbook/guides/email.md +86 -0
  235. package/docs/handbook/guides/local-testing.md +40 -0
  236. package/docs/handbook/guides/mcp-apps.md +560 -0
  237. package/docs/handbook/guides/native-admin.md +566 -0
  238. package/docs/handbook/guides/native-execution.md +133 -0
  239. package/docs/handbook/guides/oauth.md +219 -0
  240. package/docs/handbook/guides/postgres-adapters.md +56 -0
  241. package/docs/handbook/guides/public-pages.md +87 -0
  242. package/docs/handbook/guides/size-and-startup.md +9 -0
  243. package/docs/handbook/guides/sql-patterns.md +266 -0
  244. package/docs/handbook/guides/typed-queries.md +211 -107
  245. package/docs/handbook/navigation.json +176 -55
  246. package/docs/handbook/reference/admin-descriptors.md +53 -0
  247. package/docs/handbook/reference/authorization.md +39 -266
  248. package/docs/handbook/reference/describe.md +56 -0
  249. package/docs/handbook/reference/diagnostics.md +19 -186
  250. package/docs/handbook/reference/features.md +45 -55
  251. package/docs/handbook/reference/manifest.md +6 -129
  252. package/docs/handbook/reference/procedure.md +11 -303
  253. package/docs/handbook/reference/schema.md +64 -240
  254. package/docs/handbook/reference/site-config.md +5 -218
  255. package/docs/handbook/reference/sql.md +64 -0
  256. package/docs/handbook/reference/surface.md +392 -201
  257. package/docs/handbook/reference/trigger.md +56 -192
  258. package/docs/handbook/reference/view.md +24 -243
  259. package/docs/handbook/releases/index.md +244 -77
  260. package/docs/handbook/start/agents.md +45 -0
  261. package/docs/handbook/start/overview.md +9 -48
  262. package/docs/handbook/start/project-and-cli.md +51 -104
  263. package/docs/handbook/start/quickstart-worker.md +43 -178
  264. package/docs/skills/develop/SKILL.md +79 -249
  265. package/docs/skills/integrate/SKILL.md +39 -50
  266. package/docs/skills/media-gc/SKILL.md +34 -10
  267. package/docs/skills/provision/SKILL.md +36 -186
  268. package/docs/skills/update/SKILL.md +23 -38
  269. package/docs/source/scripts/postgres-adapter.ts +101 -0
  270. package/docs/upgrade-0.1-to-0.2.md +227 -0
  271. package/package.json +120 -131
  272. package/skills/README.md +48 -108
  273. package/skills/mantle/SKILL.md +76 -0
  274. package/dist/admin-ui.d.ts +0 -2
  275. package/dist/admin-ui.d.ts.map +0 -1
  276. package/dist/admin-ui.js +0 -2
  277. package/dist/admin-ui.js.map +0 -1
  278. package/dist/admin.d.ts +0 -2
  279. package/dist/admin.d.ts.map +0 -1
  280. package/dist/admin.js +0 -2
  281. package/dist/admin.js.map +0 -1
  282. package/dist/auth.d.ts +0 -2
  283. package/dist/auth.d.ts.map +0 -1
  284. package/dist/auth.js +0 -2
  285. package/dist/auth.js.map +0 -1
  286. package/dist/bun.d.ts +0 -2
  287. package/dist/bun.d.ts.map +0 -1
  288. package/dist/bun.js +0 -2
  289. package/dist/bun.js.map +0 -1
  290. package/dist/cli/generate-cloudflare.d.ts +0 -7
  291. package/dist/cli/generate-cloudflare.d.ts.map +0 -1
  292. package/dist/cli/generate-cloudflare.js +0 -123
  293. package/dist/cli/generate-cloudflare.js.map +0 -1
  294. package/dist/cli/generate-project.d.ts +0 -25
  295. package/dist/cli/generate-project.d.ts.map +0 -1
  296. package/dist/cli/generate-project.js +0 -282
  297. package/dist/cli/generate-project.js.map +0 -1
  298. package/dist/cli/generate-sites.d.ts +0 -8
  299. package/dist/cli/generate-sites.d.ts.map +0 -1
  300. package/dist/cli/generate-sites.js +0 -273
  301. package/dist/cli/generate-sites.js.map +0 -1
  302. package/dist/cli/generate.d.ts +0 -20
  303. package/dist/cli/generate.d.ts.map +0 -1
  304. package/dist/cli/generate.js +0 -299
  305. package/dist/cli/generate.js.map +0 -1
  306. package/dist/cli/harness.d.ts +0 -3
  307. package/dist/cli/harness.d.ts.map +0 -1
  308. package/dist/cli/harness.js +0 -214
  309. package/dist/cli/harness.js.map +0 -1
  310. package/dist/cli/main.d.ts +0 -3
  311. package/dist/cli/main.d.ts.map +0 -1
  312. package/dist/cli/main.js +0 -77
  313. package/dist/cli/main.js.map +0 -1
  314. package/dist/cli/skills.d.ts +0 -3
  315. package/dist/cli/skills.d.ts.map +0 -1
  316. package/dist/cli/skills.js +0 -128
  317. package/dist/cli/skills.js.map +0 -1
  318. package/dist/cloudflare.d.ts +0 -2
  319. package/dist/cloudflare.d.ts.map +0 -1
  320. package/dist/cloudflare.js +0 -2
  321. package/dist/cloudflare.js.map +0 -1
  322. package/dist/codegen/emitMantleModule.d.ts +0 -22
  323. package/dist/codegen/emitMantleModule.d.ts.map +0 -1
  324. package/dist/codegen/emitMantleModule.js +0 -291
  325. package/dist/codegen/emitMantleModule.js.map +0 -1
  326. package/dist/codegen.d.ts +0 -2
  327. package/dist/codegen.d.ts.map +0 -1
  328. package/dist/codegen.js +0 -2
  329. package/dist/codegen.js.map +0 -1
  330. package/dist/runtime-testing.d.ts +0 -2
  331. package/dist/runtime-testing.d.ts.map +0 -1
  332. package/dist/runtime-testing.js +0 -2
  333. package/dist/runtime-testing.js.map +0 -1
  334. package/dist/runtime.d.ts +0 -2
  335. package/dist/runtime.d.ts.map +0 -1
  336. package/dist/runtime.js +0 -2
  337. package/dist/runtime.js.map +0 -1
  338. package/dist/spec.d.ts +0 -2
  339. package/dist/spec.d.ts.map +0 -1
  340. package/dist/spec.js +0 -2
  341. package/dist/spec.js.map +0 -1
  342. package/dist/vercel-libsql.d.ts +0 -2
  343. package/dist/vercel-libsql.d.ts.map +0 -1
  344. package/dist/vercel-libsql.js +0 -2
  345. package/dist/vercel-libsql.js.map +0 -1
  346. package/dist/vercel.d.ts +0 -2
  347. package/dist/vercel.d.ts.map +0 -1
  348. package/dist/vercel.js +0 -2
  349. package/dist/vercel.js.map +0 -1
  350. package/dist/web.d.ts +0 -2
  351. package/dist/web.d.ts.map +0 -1
  352. package/dist/web.js +0 -2
  353. package/dist/web.js.map +0 -1
  354. package/docs/adapter-guide.md +0 -222
  355. package/docs/adr/0001-four-atom-manifest-model.md +0 -440
  356. package/docs/adr/0002-closed-enums-for-bindings.md +0 -253
  357. package/docs/adr/0007-ai-as-primary-author.md +0 -473
  358. package/docs/adr/0008-structured-diagnostic-shape.md +0 -338
  359. package/docs/adr/0009-consumer-supplied-manifests.md +0 -149
  360. package/docs/adr/0010-locale-and-translates.md +0 -453
  361. package/docs/adr/0011-adapter-port-spec.md +0 -281
  362. package/docs/adr/0012-views-as-public-rest.md +0 -161
  363. package/docs/adr/0013-agent-provisioned-consumer-projects.md +0 -154
  364. package/docs/adr/0014-auth-better-auth-and-multi-tenant-mcp.md +0 -900
  365. package/docs/adr/0016-site-semantic-layer.md +0 -70
  366. package/docs/adr/0017-media-multi-variant-agent-side-optimization.md +0 -181
  367. package/docs/adr/0018-core-starters-repository-boundary.md +0 -179
  368. package/docs/adr/0019-sealed-manifest-runtime-pipeline.md +0 -240
  369. package/docs/adr/0020-builtin-handler-contracts-and-matched-upsert.md +0 -199
  370. package/docs/adr/0021-retire-starter-scaffolding.md +0 -30
  371. package/docs/adr/0022-caller-observed-version-occ.md +0 -212
  372. package/docs/adr/0023-port-failure-contract.md +0 -69
  373. package/docs/adr/0024-manifest-native-schema-tables.md +0 -264
  374. package/docs/adr/0025-reserved-native-columns-and-published-only-public-views.md +0 -105
  375. package/docs/adr/0026-progressive-generate.md +0 -36
  376. package/docs/adr/0027-scheduled-procedure-triggers.md +0 -31
  377. package/docs/adr/0028-schema-ttl-expiry.md +0 -33
  378. package/docs/adr/README.md +0 -81
  379. package/docs/adr/adr-lite-803-request-diagnostics.md +0 -38
  380. package/docs/adr/adr-lite-808-route-readiness.md +0 -47
  381. package/docs/adr/adr-lite-809-bounded-public-content.md +0 -71
  382. package/docs/adr/adr-lite-812-native-parity.md +0 -150
  383. package/docs/adr/adr-lite-823-home-statistics.md +0 -64
  384. package/docs/adr/adr-lite-842-mcp-authoring.md +0 -30
  385. package/docs/adr/adr-lite-845-frontend-client.md +0 -38
  386. package/docs/adr/adr-lite-861-admin-webmcp.md +0 -42
  387. package/docs/adr/adr-lite-909-admin-ui-kit.md +0 -37
  388. package/docs/agent-prompts.md +0 -64
  389. package/docs/api-mcp-authorization.md +0 -5
  390. package/docs/assets/mantle-admin-developer.png +0 -0
  391. package/docs/assets/mantle-admin-operations.png +0 -0
  392. package/docs/assets/mantle-hero.jpg +0 -0
  393. package/docs/auth-hosting-model.md +0 -166
  394. package/docs/cloudflare-low-level-composition.md +0 -5
  395. package/docs/consumer-onboarding-audit.md +0 -65
  396. package/docs/deferred-lifecycle-queues.md +0 -5
  397. package/docs/design-atoms.md +0 -16
  398. package/docs/design-references/editorial-blog-2026-05-05.md +0 -218
  399. package/docs/direct-authoring.md +0 -5
  400. package/docs/examples/builtin-commerce.md +0 -269
  401. package/docs/examples/builtin-intake.md +0 -143
  402. package/docs/examples/builtin-legal-documents.md +0 -189
  403. package/docs/examples/builtin-procurement.md +0 -241
  404. package/docs/examples/builtin-publication.md +0 -241
  405. package/docs/examples/builtin-reservation.md +0 -149
  406. package/docs/examples/cf-primitives-commerce-inventory.md +0 -809
  407. package/docs/examples/cf-primitives-guarded-api.md +0 -429
  408. package/docs/examples/cf-primitives-intake-hooks.md +0 -319
  409. package/docs/examples/host-chatgpt-sites/.openai/hosting.json +0 -1
  410. package/docs/examples/host-chatgpt-sites/README.md +0 -70
  411. package/docs/examples/host-chatgpt-sites/drizzle/0000_sites_users.sql +0 -8
  412. package/docs/examples/host-chatgpt-sites/drizzle/0001_mantle.sql +0 -294
  413. package/docs/examples/host-chatgpt-sites/drizzle/0002_article_cover.sql +0 -5
  414. package/docs/examples/host-chatgpt-sites/drizzle/0003_store_instance_id.sql +0 -1
  415. package/docs/examples/host-chatgpt-sites/drizzle/0004_mantle.sql +0 -10
  416. package/docs/examples/host-chatgpt-sites/drizzle/0005_mantle.sql +0 -24
  417. package/docs/examples/host-chatgpt-sites/drizzle/meta/_journal.json +0 -1
  418. package/docs/examples/host-chatgpt-sites/drizzle/meta/mantle-state.json +0 -60
  419. package/docs/examples/host-chatgpt-sites/manifests/site.yaml +0 -27
  420. package/docs/examples/host-chatgpt-sites/package.json +0 -1
  421. package/docs/examples/host-chatgpt-sites/public/site.css +0 -1
  422. package/docs/examples/host-chatgpt-sites/scripts/build.mjs +0 -13
  423. package/docs/examples/host-chatgpt-sites/scripts/check.mjs +0 -101
  424. package/docs/examples/host-chatgpt-sites/scripts/migration.mjs +0 -43
  425. package/docs/examples/host-chatgpt-sites/src/chatgpt-auth.ts +0 -66
  426. package/docs/examples/host-chatgpt-sites/src/index.ts +0 -46
  427. package/docs/examples/host-chatgpt-sites/src/mcp.ts +0 -49
  428. package/docs/examples/host-chatgpt-sites/src/media.ts +0 -109
  429. package/docs/examples/host-chatgpt-sites/src/r2-lab.ts +0 -38
  430. package/docs/examples/host-chatgpt-sites/src/storage-fingerprint.json +0 -1
  431. package/docs/examples/host-chatgpt-sites/src/web.ts +0 -35
  432. package/docs/examples/host-chatgpt-sites/tsconfig.json +0 -1
  433. package/docs/examples/host-chatgpt-sites/wrangler.jsonc +0 -10
  434. package/docs/examples/host-local-admin-otp/.dev.vars.example +0 -3
  435. package/docs/examples/host-local-admin-otp/README.md +0 -80
  436. package/docs/examples/host-local-admin-otp/ensure-dev-vars.mjs +0 -5
  437. package/docs/examples/host-local-admin-otp/manifests/site.yaml +0 -25
  438. package/docs/examples/host-local-admin-otp/package.json +0 -29
  439. package/docs/examples/host-local-admin-otp/public/.gitkeep +0 -1
  440. package/docs/examples/host-local-admin-otp/smoke.mjs +0 -141
  441. package/docs/examples/host-local-admin-otp/src/index.ts +0 -54
  442. package/docs/examples/host-local-admin-otp/tsconfig.json +0 -17
  443. package/docs/examples/host-local-admin-otp/wrangler.jsonc +0 -23
  444. package/docs/examples/host-minimal-worker/README.md +0 -41
  445. package/docs/examples/host-minimal-worker/manifests/site.yaml +0 -25
  446. package/docs/examples/host-minimal-worker/package.json +0 -26
  447. package/docs/examples/host-minimal-worker/smoke.mjs +0 -23
  448. package/docs/examples/host-minimal-worker/src/index.ts +0 -4
  449. package/docs/examples/host-minimal-worker/tsconfig.json +0 -17
  450. package/docs/examples/host-minimal-worker/wrangler.jsonc +0 -22
  451. package/docs/handbook/chatgpt-sites/equipment-checkout.md +0 -231
  452. package/docs/handbook/chatgpt-sites/generated-app.md +0 -84
  453. package/docs/handbook/chatgpt-sites/host-reference.md +0 -113
  454. package/docs/handbook/chatgpt-sites/index.md +0 -133
  455. package/docs/handbook/cloudflare/bindings.md +0 -291
  456. package/docs/handbook/cloudflare/conventional-worker.md +0 -166
  457. package/docs/handbook/cloudflare/deferred-hooks-queues.md +0 -170
  458. package/docs/handbook/cloudflare/low-level-composition.md +0 -169
  459. package/docs/handbook/cloudflare/public-web.md +0 -144
  460. package/docs/handbook/cloudflare/site-chrome.md +0 -75
  461. package/docs/handbook/examples/commerce-transaction.md +0 -11
  462. package/docs/handbook/examples/commerce.md +0 -11
  463. package/docs/handbook/examples/guarded-api.md +0 -10
  464. package/docs/handbook/examples/intake-form.md +0 -12
  465. package/docs/handbook/examples/intake-hooks.md +0 -11
  466. package/docs/handbook/examples/legal-documents.md +0 -10
  467. package/docs/handbook/examples/procurement-approvals.md +0 -10
  468. package/docs/handbook/examples/publication.md +0 -10
  469. package/docs/handbook/examples/reservation.md +0 -10
  470. package/docs/handbook/start/quickstart-admin.md +0 -52
  471. package/docs/labels.md +0 -71
  472. package/docs/media-uploads.md +0 -5
  473. package/docs/migration-0.1.2.md +0 -13
  474. package/docs/performance-harness.md +0 -228
  475. package/docs/release-process.md +0 -244
  476. package/docs/schema-indexes.md +0 -5
  477. package/docs/sealed-pipeline-ownership.md +0 -101
  478. package/docs/skills/plugin/SKILL.md +0 -132
  479. package/docs/skills/theme/SKILL.md +0 -77
  480. package/docs/spec-only-host-adoption.md +0 -157
  481. package/docs/transaction-patterns.md +0 -5
  482. package/skills/develop/SKILL.md +0 -258
  483. package/skills/install/SKILL.md +0 -112
  484. package/skills/integrate/SKILL.md +0 -60
  485. package/skills/media-gc/SKILL.md +0 -85
  486. package/skills/plugin/SKILL.md +0 -132
  487. package/skills/provision/SKILL.md +0 -194
  488. package/skills/theme/SKILL.md +0 -77
  489. package/skills/update/SKILL.md +0 -51
  490. package/templates/chatgpt-sites/auth.ts +0 -66
  491. package/templates/chatgpt-sites/build.mjs +0 -14
  492. package/templates/chatgpt-sites/env.ts +0 -1
  493. package/templates/chatgpt-sites/mcp.ts +0 -48
  494. package/templates/chatgpt-sites/public-mcp.ts +0 -29
  495. package/templates/chatgpt-sites/smoke-local.mjs +0 -20
@@ -1,80 +1,249 @@
1
1
  ---
2
- description: Every stable Mantle release — what it contains, what it requires, and what changed since the previous stable.
2
+ description: Every Mantle release line — what 0.2.0 changes, and what each stable 0.1.x release contained.
3
3
  ---
4
4
  # Releases
5
5
 
6
6
  Mantle publishes to npm under the `@aotter/*` scope. A **stable** release is a
7
- plain `X.Y.Z` version on the `latest` dist-tag; it is the only kind of release
8
- covered by this chapter and the only kind intended for production use.
9
-
10
- ```sh
11
- npm install @aotter/mantle
12
- ```
13
-
14
- Prereleases exist so a stable can be prepared in the open, and they are not
15
- covered here: `alpha` is cut from `develop` and may break anything, `rc` is a
16
- stable candidate cut from `main`. Installing a prerelease means opting into an
17
- exact version, not a channel. [GitHub Releases](https://github.com/aotter/mantle/releases)
18
- is the canonical, immutable change history; this chapter is the narrative one.
19
-
20
- All eleven packages share a single version and are published together, so mixed
21
- versions across `@aotter/mantle*` are never a supported combination. Pin the
22
- version you install and upgrade the whole set at once.
23
-
24
- ## 0.1.5 — in preparation
25
-
26
- `mantle generate` now assembles a blank, editable full site by default for
27
- Cloudflare Workers or ChatGPT Sites. `--features` positively selects a smaller
28
- composition; Spec-only needs no host. The first run declares exact matching
29
- dependencies, and a second run after installation completes the project.
30
- Existing directly authored applications retain their compile path. Saved
31
- choices and user-owned files survive reruns, while `--check` reports drift
32
- without writing. On Sites, review and apply append-only D1 migrations before
33
- running code that expects the new Schema. The new Sites worker trusts identity
34
- only behind the Sites dispatcher and does not expose a separate `workers.dev`
35
- URL.
36
-
37
- Reviewed Sites unique-index tuple replacement can now generate an immutable
38
- SQL migration with source/target fingerprints, checksum and an explicit report.
39
- Local D1 duplicate preflight fails before writing files; production D1 still
40
- enforces the new constraint when the reviewed migration is applied. Runtime-
41
- managed CF boot continues to reject uniqueness changes without a reviewed
42
- artifact path.
43
-
44
- The owner-only Developer Console can inspect live Schema entries and run
45
- declared Views on demand through guarded Admin routes. Its HTTP and MCP lists
46
- link to the owning declarations. UI action placement is no longer shown as a
47
- Procedure-to-Schema execution path; custom handlers and native SQL Views state
48
- when their data relationships cannot be inferred from the Manifest.
49
-
50
- Ref Procedures can now group create, update and delete operations across
51
- Schemas with `ctx.writeAtomically`. D1 and Bun commit the group or roll it
52
- back, including when the last conditional write finds a stale version. Other
53
- adapters must explicitly implement the optional capability before using it.
54
-
55
- Cloudflare Cron Triggers now target ordinary Procedures through `source.kind:
56
- schedule`. The generated runtime plan records each schedule, while Wrangler
57
- registration remains application-owned. Scheduled calls have no user or staff
58
- authority, carry a stable retry key, and pass through Procedure validation and
59
- authorization. D1-backed Workers retain owner-only run observations
60
- for 30 days; the Console distinguishes a declaration from registration and
61
- observed executions. Managed SQLite hosts must apply the append-only
62
- `0007-schedule-run-observations` migration before boot. Other hosts do not
63
- register schedules.
64
-
65
- Schemas may declare a `ttl` date-time policy. D1 and Bun hide expired entries
66
- from semantic reads and declarative Views before any deletion. Physical cleanup
67
- is an explicit bounded sweep, previewed by default and resumable by cursor;
68
- there is no automatic bulk deletion when a policy is introduced or shortened.
69
- Native SQL Views and shared View caches are rejected for TTL Schemas because
70
- they cannot guarantee the expiry boundary. Cloudflare public routes that can
71
- include TTL content use `no-store` so a cached page cannot outlive its entries.
72
-
73
- Agents installed through `npx skills add aotter/mantle` must still inspect the
74
- target project's actual SDK version. Published 0.1.4 packages do **not**
75
- support the new project flags; 0.1.5-alpha.1 does. Use the installed docs and
76
- upgrade all selected packages together. The bootstrap skill remains a small directory,
77
- not a repository clone.
7
+ plain `X.Y.Z` version on the `latest` dist-tag and is the only kind intended
8
+ for production. Prereleases (`alpha`, `rc`) let a release be prepared in the
9
+ open; installing one means choosing an exact version, not a channel.
10
+ [GitHub Releases](https://github.com/aotter/mantle/releases) is the canonical
11
+ change history; this page is the narrative one.
12
+
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.
17
+
18
+ ## 0.2.0 — in preparation
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
+
122
+ 0.2.0 replaces 0.1.x's grammar and composition; no stable 0.1.5 was released
123
+ (`0.1.5-alpha.1` was a prerelease). It breaks every consumer, and
124
+ `docs/upgrade-0.1-to-0.2.md` in the package is the guide for moving a project
125
+ by hand.
126
+
127
+ - **Manifests are `cms.mantle.aotter.net/v2`.** Views are one SQL `SELECT` and
128
+ Procedures are SQL statements or a `ref`, in PostgreSQL syntax. The builtin
129
+ handlers, the Filter AST, `params`, `$ctx` references and `x-mantle-bind` are
130
+ gone; Schemas gain `checks`, and `searchableFields` becomes full-text search.
131
+ - **SQL in the dialect's syntax.** PostgreSQL is the reference dialect
132
+ (`@aotter/mantle/postgres`); D1 and SQLite run a subset
133
+ (`@aotter/mantle/d1`). Each dialect is its own target (ADR-0039), and a
134
+ plan records its dialect.
135
+ - **One Store.** Every read and write goes through Store, which adds caller
136
+ scope, TTL and published-only to every statement, and an optimistic lock
137
+ where the caller passes one; a write
138
+ is all or nothing.
139
+ - **The service is the application's.** `createMantle(service, …)` replaces
140
+ `createMantleWorker`, and the first `mantle generate` writes the host's
141
+ preset (`src/service.ts`, `src/index.ts`, ...) once. `--host` is
142
+ `cloudflare` (D1, or PostgreSQL through Hyperdrive), `bun` (node-postgres
143
+ or bun:sqlite, `@aotter/mantle/bun`) or `none` (plan and types only), and
144
+ `--dialect` is `sqlite` or `postgres`; both are chosen once.
145
+ - **Mantle never owns your users.** A `CallerResolver` turns a request into a
146
+ `Caller`; identity is `mantle` (Better Auth), `custom` or `none`. Core creates
147
+ no auth tables.
148
+ - **Storage converges to the plan** at boot: additions are applied, unsafe
149
+ changes are refused with a diagnostic, nothing is dropped, and there are no
150
+ migration files.
151
+ - **Schedules are POSIX cron**; `toCloudflareCron` translates them for Wrangler.
152
+ - **MCP tools come from Views and Procedures only.** Staff tools are at
153
+ `/mcp/staff` for an OAuth client, with Mantle's MCP App rendering staff
154
+ View rows in the chat; Admin's WebMCP runs the same tools on Admin's own
155
+ routes.
156
+ - **The CLI is `mantle generate`** and `mantle generate --check`. `validate`,
157
+ `emit-openapi`, `skills` and `mantle-harness` are removed.
158
+ - **The Admin console** moves to `@aotter/mantle-ui/admin`, served at `/admin`
159
+ by the preset through the service's `ASSETS` binding.
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.
78
247
 
79
248
  ## 0.1.4 — 2026-09-24
80
249
 
@@ -178,7 +347,7 @@ See [HTTP, MCP, CLI and packages](../reference/surface.md) for the full list.
178
347
  D1 and assets bindings, Better Auth 1.7 (social providers, email OTP, magic
179
348
  link, passkey), Admin, MCP, Web and R2 media uploads. The Bun and Vercel
180
349
  adapters are experimental, cover public Views and HTTP Triggers only, and leave
181
- authentication and CSRF to the host. [ChatGPT Sites](../chatgpt-sites/index.md) is a
350
+ authentication and CSRF to the host. ChatGPT Sites is a
182
351
  first-class integration with a runnable reference.
183
352
 
184
353
  **Agents.** `mantle skills` projects the installed package's skills into
@@ -193,7 +362,5 @@ Bun and Vercel adapters may change in a minor release.
193
362
 
194
363
  ## Source
195
364
 
196
- - [`CHANGELOG.md`](../../../CHANGELOG.md)
197
- - [`docs/release-process.md`](../../../docs/release-process.md)
198
- - [`.github/workflows/release.yml`](../../../.github/workflows/release.yml)
199
- - [`scripts/release-tag-order.mjs`](../../../scripts/release-tag-order.mjs)
365
+ - [GitHub Releases](https://github.com/aotter/mantle/releases)
366
+ - [`CHANGELOG.md`](https://github.com/aotter/mantle/blob/main/CHANGELOG.md)
@@ -0,0 +1,45 @@
1
+ ---
2
+ description: The entry point `mantle help` prints first: choose a complete app or generation only, use examples as references, accept before done.
3
+ ---
4
+ # Build with an agent
5
+
6
+ `mantle help` prints this page. `mantle help <topic>` prints one handbook page and ends with the commands for its next page and for every page it links; run those to read further.
7
+ Topics are the handbook paths below (for example `guides/native-admin`) or their last segment when unique (`native-admin`).
8
+ The installed package's `docs/` is the source of every topic, so the text always matches the installed version.
9
+
10
+ ## Choose how much Mantle owns
11
+
12
+ | You want | Do |
13
+ | --- | --- |
14
+ | A complete application | `mantle init [directory]`, then follow its `README.md`. It writes the app shell once: Better Auth email OTP with `admin` and `user`, the Admin console, MCP for both roles, REST, and a member `/sign-in` page. Existing files stop it; `--dry-run` lists what it would write. |
15
+ | Only typed SQL and bindings inside an app you already have | Skip `init`. Write manifests and run `mantle generate <target> <output-directory> <manifest>...`; see `mantle help project-and-cli` and `mantle help typed-queries`. |
16
+
17
+ `init` writes the `cloudflare-d1` shell, the default target. `bun-sqlite`, `bun-postgres` and `cloudflare-postgres`
18
+ generate the same bindings; their app entry is yours (`mantle help service-entry`).
19
+
20
+ `init` writes app code you then own; it never runs again. `generate` writes only `generated/` and Wrangler build keys,
21
+ and overwrites them on every run. When `generate` sees a selected surface (REST, MCP, Admin) whose generated module
22
+ the app entry (`--entry`) never imports, it warns and names the topic that shows the wiring.
23
+
24
+ ## Build from a product brief
25
+
26
+ 1. `mantle init`, install, then read the app's `README.md` and search for `AGENT:`.
27
+ 2. Map the brief to the [four atoms](../concepts/four-atoms.md): Schemas, Views, Procedures, Triggers.
28
+ Decide what each role (`admin`, `user`) does on each surface: Admin, MCP, REST and any visitor pages.
29
+ 3. For each need, find the pattern in `mantle help examples` (the **Combining** table) and read that example's
30
+ manifest and source. Examples are references: take the pattern into your own manifests; do not copy an example
31
+ directory into the app.
32
+ - Business rules (status transitions, approval thresholds, stock, guards, several rows that commit together)
33
+ belong in SQL Procedures, not in handler code around separate writes: `mantle help sql-patterns`, and
34
+ `mantle help sql` for the SQL each dialect accepts.
35
+ - Visitor pages (anything anonymous and indexable) follow `mantle help public-pages`: server-rendered HTML,
36
+ canonical and Open Graph tags, JSON-LD and an answer block on detail pages, Markdown alternates, `/sitemap.xml`,
37
+ `/robots.txt` and `/llms.txt`. A brief that names a site, shop or catalogue for visitors includes all of them.
38
+ 4. `pnpm generate`, implement every handler it lists, `pnpm check`, then `pnpm smoke`.
39
+ 5. Before reporting the app or a feature done, run [role-only acceptance](../guides/agent-workflow-acceptance.md)
40
+ (`mantle help agent-workflow-acceptance`). Scripted smoke is not acceptance. `pnpm accept` starts the app and hands
41
+ each role to a fresh evaluator as a URL that carries that role's session.
42
+
43
+ The first verified sign-in with `ADMIN_EMAIL` becomes the admin. Further administrators are added in Admin:
44
+ **More → Administrators** invites by email, and **More → Members** grants Admin to an existing member.
45
+ [Authentication](../cloudflare/authentication.md#identity-helpers) documents the same operations as an API.
@@ -1,55 +1,16 @@
1
1
  ---
2
- description: Choose a Mantle integration, discover manifest capabilities, and find tutorials, task guides, concepts and field-level reference.
2
+ description: The native 0.2.0 handbook and its three package boundaries.
3
3
  ---
4
4
  # Mantle handbook
5
5
 
6
- Mantle turns YAML manifests into a validated runtime plan, typed TypeScript
7
- bindings, and optional HTTP, MCP and Admin surfaces. Your application owns the
8
- host, storage and frontend. Four atoms describe the contract: **Schema** stores
9
- data, **View** reads it, **Procedure** acts on it, and **Trigger** binds an action
10
- to HTTP, MCP or lifecycle events.
6
+ Mantle compiles a closed v2 manifest into native SQL and typed TypeScript. The app owns its database handle, verified Caller, routes, auth, migrations and deployment.
11
7
 
12
- This handbook describes the SDK snapshot that carries it. For an installed
13
- project, read `node_modules/@aotter/mantle/docs/handbook/`; a website or Git
14
- branch can describe a different version. The [release index](../releases/index.md)
15
- links published releases. A prerelease capability is not a promise that the
16
- current npm `latest` contains it.
8
+ | Package | Responsibility |
9
+ | --- | --- |
10
+ | `@aotter/mantle` | SDK, private compiler, generator and `mantle` CLI |
11
+ | `@aotter/mantle-ui` | Pure UI kit and generic interaction controller; no SDK dependency |
12
+ | `@aotter/mantle-admin` | Admin server, app-built SPA library, preview and MCP App; SDK peer |
17
13
 
18
- ## Start with your integration
14
+ Start with [a Worker](quickstart-worker.md) or [CLI and targets](project-and-cli.md). Existing TypeScript/Node apps can import selected generated operations using their own handle and verified Caller; no router or identity replacement is required. See the packaged [integrate skill](../../skills/integrate/SKILL.md).
19
15
 
20
- | Goal | Start here | Result |
21
- |---|---|---|
22
- | Understand what manifests can express | [Manifest feature reference](../reference/features.md) | A capability-to-field map across the four atoms. |
23
- | Validate manifests in an existing tool | [Spec-only adoption](../../spec-only-host-adoption.md) | Parse and link without Runtime, storage or a UI. |
24
- | Bring Mantle into an existing application | [Integration skill](../../skills/integrate/SKILL.md) | Inspect the app and choose embedding, incremental replacement or rebuilding with data migration. |
25
- | Embed Runtime in an existing host | [Runtime and adapters](../concepts/runtime-and-adapters.md), then [typed queries](../guides/typed-queries.md) | Bind your storage and call the generated API. |
26
- | Build a local Cloudflare API | [Minimal Worker tutorial](./quickstart-worker.md) | A running public View and a verified HTTP response. |
27
- | Add a staff console | [Local Admin tutorial](./quickstart-admin.md) | Email OTP, Admin assets and a local human workflow. |
28
- | Build on ChatGPT Sites | [Sites integration](../chatgpt-sites/index.md) | Host-owned sign-in and deployment with Mantle content. |
29
- | Work through a coding agent | [Skill installation and handoff](../guides/agent-setup.md) | Bootstrap skill, pinned package, then project-local instructions. |
30
-
31
- Human authors can follow these pages directly; installing an agent skill is
32
- optional. For a new app, install an exact SDK version and run
33
- `mantle generate --host cf` or `--host chatgpt-sites`. The CLI assembles a blank
34
- site by default; add your own Manifests after generation. Use explicit
35
- `--features` for a smaller composition, including host-free Spec-only.
36
-
37
- ## Find the right kind of documentation
38
-
39
- - **Tutorials** walk through a running minimal service or local Admin.
40
- - **Task guides** explain typed queries, Admin customization and agent setup.
41
- - **Concepts** explain the four atoms, runtime, lifecycle, authorization and transports.
42
- - **Reference** lists accepted fields, defaults, restrictions and diagnostics.
43
- - **Host guides** cover Cloudflare and Sites wiring and operations.
44
- - **Examples** supply complete domain manifests and runnable host references.
45
-
46
- The [project and CLI guide](./project-and-cli.md) describes file ownership and
47
- the verification loop. The [examples hub](../examples/hub.md) helps select a
48
- domain model. Use the [field reference](../reference/manifest.md) when checking
49
- exact syntax; do not infer grammar from a UI screenshot.
50
-
51
- ## Source
52
-
53
- - [Core package](../../../packages/mantle/README.md)
54
- - [Handbook navigation](../navigation.json)
55
- - [Consumer skills](../../../skills/README.md)
16
+ Choose [Store or internal Views](../guides/typed-queries.md), review [database and migration ownership](../concepts/runtime-and-adapters.md), and mount only selected [surfaces](../reference/surface.md). Optional [Admin](../guides/native-admin.md) lives in its own package. Installed SDK docs are the authority for that exact version. [Release notes](../releases/index.md) describe historical releases.