@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,124 +1,71 @@
1
1
  ---
2
- description: Generate a full Mantle app or select smaller modules, then safely rerun the CLI as your manifests evolve.
2
+ description: Generation targets, CLI options and ownership of native application files.
3
3
  ---
4
4
  # Project layout and CLI
5
5
 
6
- `mantle generate` can assemble a new application or compile manifests in an
7
- existing one. A new hosted app defaults to Spec, Runtime, API, MCP, Admin and
8
- an editable blank home. You can select a smaller set explicitly. It never
9
- invents a business Schema or publishes a deployment.
6
+ | File | Owner |
7
+ | --- | --- |
8
+ | `manifests/*.yaml` | App: closed v2 declarations and SQL |
9
+ | `src/worker.ts`, auth, handlers, frontend | App: routing, Caller verification and side effects |
10
+ | `generated/` | Generator: TypeScript, native SQL and selected bindings |
11
+ | `migrations/` | App's agent and native migration tool |
12
+ | `wrangler.jsonc` | App configuration; generator maintains selected split-build keys |
13
+ | `dist/` | Disposable bundle output (`dist/worker`, `dist/client`); do not commit |
10
14
 
11
- ## Start a new app
15
+ ## Accept user-facing work
12
16
 
13
- Choose a host before running the command. The integrated hosts are `cf` and
14
- `chatgpt-sites`; `--features spec` works without a host. Install one exact
15
- published SDK version, then let the CLI declare its matching optional packages:
17
+ Before reporting any user-facing deliverable as done, run the installed
18
+ version's [independent acceptance
19
+ flow](../guides/agent-workflow-acceptance.md) with a fresh agent on the surface
20
+ its user uses. For MCP work, also run that guide's design audit before choosing
21
+ tool names or writing manifests/handlers.
16
22
 
17
- ```sh
18
- mkdir my-app && cd my-app
19
- npm init -y
20
- npm pkg set type=module
21
- MANTLE_VERSION=$(npm view @aotter/mantle@latest version)
22
- npm install --save-exact "@aotter/mantle@$MANTLE_VERSION"
23
- npx mantle generate --host cf
24
- npm install
25
- npx mantle generate
26
- npm run build
27
- ```
28
-
29
- Confirm `MANTLE_VERSION` is a stable release, without a prerelease suffix.
30
- Use `--host chatgpt-sites` for a Site; [its guide](../chatgpt-sites/generated-app.md)
31
- continues with D1 migration, owner identity and local smoke. If you already
32
- use pnpm, keep that one package manager and run `pnpm install` /
33
- `pnpm exec mantle`. The first `generate` may exit asking you to install newly
34
- declared packages; the second completes generation. A README or lockfile from
35
- bootstrapping still counts as a new app. Once choices are saved, omit flags on
36
- rerun.
37
-
38
- For a smaller composition, list wanted modules positively:
23
+ ## Commands
39
24
 
40
25
  ```sh
41
- npx mantle generate --host cf --features spec,api
42
- npx mantle generate --features spec
26
+ mantle help [topic] # these docs, one page at a time; start here
27
+ mantle init [directory] [--dry-run] # write the cloudflare-d1 app shell once; never overwrites
28
+ mantle generate <target> <output-directory> <manifest>... [options]
29
+ mantle bundle <entry> <outdir> [--assets <dir>]
43
30
  ```
44
31
 
45
- Dependencies are expanded in the saved selection: `api` includes Runtime and
46
- Spec; `admin` includes Runtime, API and MCP. Supported features are `spec`,
47
- `runtime`, `api`, `mcp`, `admin`, `web`. No host is needed for Spec-only. Use an
48
- explicit host in automation so a terminal prompt cannot stall. The selection
49
- lives in `mantle.config.json`; changing it later requires a deliberate migration,
50
- not an accidental CLI flag.
32
+ `init` writes application code the app then owns. `generate` writes only generated output and Wrangler build keys,
33
+ on every run; after writing, it follows the `--entry` file's imports and warns for each selected REST, MCP or Admin
34
+ module the entry never imports.
51
35
 
52
- ## Files and ownership
36
+ | Target | Dialect | Handle |
37
+ | --- | --- | --- |
38
+ | `bun-sqlite` | sqlite | bun:sqlite Database |
39
+ | `bun-postgres` | postgres | Bun.SQL |
40
+ | `cloudflare-d1` | sqlite | D1 binding/session |
41
+ | `cloudflare-postgres` | postgres | postgres.js, usually with Hyperdrive |
53
42
 
54
- | File | Owner | What happens on rerun |
55
- |---|---|---|
56
- | `manifests/*.yaml`, `src/handlers.ts`, `src/home.ts` | You | Preserved. Add domain behavior and edit the blank home here. |
57
- | `package.json`, `mantle.config.json`, `wrangler.jsonc` | Shared | Required versions and scripts are added; existing user values are preserved or conflicts reported. |
58
- | `.mantle/generated/*`, `src/storage-fingerprint.json` | CLI | Rebuilt from the saved selection and manifests. |
59
- | `drizzle/*.sql` on Sites | Review and apply | New migrations append; applied migrations are never rewritten. |
60
- | `public/_mantle/admin/*` | CLI | Prebuilt Admin assets copied from the selected exact package. |
61
- | `.openai/hosting.json` on Sites | Sites | Binding metadata is created locally; existing project metadata is preserved. |
43
+ Other handles may adapt to the same [structural driver contracts](../guides/adapter-guide.md). Dialects are exactly postgres and sqlite in 0.2.0.
62
44
 
63
- A generated Worker imports the sealed `plan`, your handler map and the selected
64
- modules. Generated files carry a marker so the CLI can distinguish them from
65
- user-owned code. A rerun refuses to replace an unmarked file. Existing
66
- applications without a saved selection keep their direct-authoring compile
67
- behavior. For integration into an independently authored application, use the
68
- installed `docs/skills/integrate/SKILL.md` to choose an embedding, incremental
69
- replacement or rebuild strategy. Generation does not verify arbitrary host
70
- entry points or deployment wiring.
45
+ | Option | Meaning |
46
+ | --- | --- |
47
+ | `--check` | Compare generated owned files and Wrangler build keys without writing; stale output exits nonzero. No database or credentials are needed. |
48
+ | `--admin` | Emit native Admin bindings and `admin/*` modules; install the separate Admin package. |
49
+ | `--auth <module>` | Read plain `authOptions(env)` (or an exported auth instance's options) and append selected Better Auth DDL. Repeat it once per Better Auth instance. Prefer plain options without initialization side effects. |
50
+ | `--site <module>` | Read `siteDefaults`; emit site/media bindings and deployment SQL. |
51
+ | `--wrangler <path>` | Existing JSONC/JSON/TOML config; default finds one or creates `wrangler.jsonc`. TOML receives manual-edit instructions. |
52
+ | `--entry <path>` | Worker source entry; default `src/worker.ts`. |
53
+ | `--outdir <path>` | Bundle output; default `dist`. The Worker goes to `<outdir>/worker`. Keep separate from source/generated files. |
54
+ | `--assets <path>` | With `--admin`: the static assets directory `mantle bundle` builds Admin into (`<assets>/admin`); default `<outdir>/client`. Written to Wrangler's `assets.directory`, and to the build command when not the default. New assets blocks default to `ASSETS`, Worker-first routing and no HTML rewriting; existing blocks keep their binding/routing. |
71
55
 
72
- `generate` accepts `--manifests <dir>` (default `./manifests`), `--output <dir>`
73
- (default `.mantle/generated`), `--namespace <name>`, `--host cf|chatgpt-sites`,
74
- `--features <comma-list>` and `--check`. Check mode exits nonzero
75
- on drift and does not write. Sites also accepts `--review-unique-indexes` for
76
- an explicit, source-bound unique tuple migration and duplicate preflight;
77
- [review the D1 procedure](../chatgpt-sites/generated-app.md) before applying
78
- it. `mantle validate` checks grammar and linked
79
- capabilities; `--phase deploy` adds deployment checks. `mantle skills` projects
80
- the installed SDK's project skills into `.agents/skills/` and `.claude/skills/`;
81
- `mantle skills --check` detects drift. `mantle emit-openapi` describes HTTP
82
- Triggers and View REST routes; `mantle-harness indexes` and `http` inspect
83
- queries and running routes. [Command reference](../reference/surface.md).
56
+ ## Outputs
84
57
 
85
- ## Verify the assembled app
86
-
87
- ```sh
88
- npx mantle generate --check
89
- npx mantle skills
90
- npx mantle skills --check
91
- npm run typecheck
92
- npm run build
93
- npm run dev
94
- ```
58
+ `generated/.mantle-inputs.json` records the Mantle version, the target, and a hash of every input the run read (manifests and the
59
+ `--auth` and `--site` modules). `mantle bundle`, which Wrangler runs for `wrangler dev` and every
60
+ deploy, refuses to build when an input changed since, so stale generated code cannot run; regenerate and rebuild.
61
+ Commit it with the other generated files.
62
+ The bundle also prints notes, never errors, for SQL in the app's own code against Better Auth's tables (read users
63
+ through `userOf(caller)` or `readIdentity(auth)` instead) and for Better Auth roles beyond `admin` and `user`.
95
64
 
96
- Run scripts that exist in the selected project; Spec-only has no server to
97
- start. Run `npx mantle validate` after adding the first Manifest: the validator
98
- reports `MANIFEST_ROOT_NOT_FOUND` on an intentionally empty app. A full
99
- Cloudflare app should serve the blank home and Admin assets.
100
- For local CF Admin, copy `.dev.vars.example` to `.dev.vars`, replace
101
- `ADMIN_EMAIL` with the intended owner's address and `BETTER_AUTH_SECRET` with
102
- a random 32-byte secret, and keep `PUBLIC_ORIGIN` equal to the loopback URL
103
- wrangler prints. Open `/admin/sign-in` with that email and read the OTP in
104
- wrangler logs. Check that `/_mantle/admin/assets/*` loads, an anonymous
105
- `/admin/api/site-settings` request is denied, and the signed-in owner can read
106
- it. Verify anonymous staff MCP access fails before claiming it works. A full
107
- Site must also apply its reviewed
108
- D1 migration before the Worker boots. The public MCP endpoint is discoverable
109
- without a staff session; the staff endpoint requires the host's verified
110
- identity and a Mantle role. See [MCP and agents](../concepts/mcp-and-agents.md).
65
+ `generated.ts` exports typed queries and Store. Direct `views/<encoded-name>.ts` and `procedures/<encoded-name>.ts` entries export an operation and its types. Proved pageable Views also have `paged/views/*`; boundary checks live in `validation/*`. `admin-descriptors.ts`, `rest.ts` and `web.ts` are always emitted. Manifest exposure selects `mcp.ts`; `admin-bindings.ts`, `admin-client.ts` (browser-side types and hooks for `admin.tsx`) and `admin/*` require `--admin`. Auth and site are explicit options.
111
66
 
112
- For an already installed app, confirm `node_modules/@aotter/mantle/package.json`
113
- and the lockfile agree. Use that package's CLI and `docs/` tree; the latest
114
- GitHub handbook may describe a newer release. Keep all selected
115
- `@aotter/mantle*` packages on one exact version. The prior direct-authoring
116
- contract remains valid for older installed SDKs; upgrade deliberately using
117
- [release notes](../releases/index.md).
67
+ Apply `schema.sql` only to an empty database. Later changes require [explicit migrations](../concepts/runtime-and-adapters.md#schema-installation-and-migrations); generation and runtime do not inspect the database. Ref declarations print the `Handlers` keys to implement.
118
68
 
119
- ## Source
69
+ Never edit generated output by hand. Merge manifests/options, regenerate with the same command, then review TypeScript and SQL diffs. Use that exact command with `--check` in CI. Unmarked app files are preserved. Imported option modules must be pure; generation does not make their side effects safe.
120
70
 
121
- - [Generate CLI](../../../packages/mantle/src/cli/generate.ts)
122
- - [Project selection and package pins](../../../packages/mantle/src/cli/generate-project.ts)
123
- - [Cloudflare assembly](../../../packages/mantle/src/cli/generate-cloudflare.ts)
124
- - [ChatGPT Sites assembly](../../../packages/mantle/src/cli/generate-sites.ts)
71
+ On Workers, generation configures `mantle bundle` as Wrangler's build command. It emits minified split ESM into `<outdir>/worker` with a startup guard for eager Better Auth imports and for Admin's browser code (`@aotter/mantle-admin/app` and `/hooks`, which `generated/admin-client.ts` imports; they belong to `admin.tsx`). When the Worker imports `@aotter/mantle-admin/server`, it also builds Admin with Vite into `<assets>/admin` (`--assets`, default `<outdir>/client`), from `admin.tsx` beside the Worker entry or Admin's built-in entry; `src/admin.ts` is not an entry. The assets directory must not overlap the Worker directory, and neither the outdir nor the assets directory may be the working directory or contain the Worker entry. The built-in entry is not rebuilt while the installed `@aotter/mantle-admin` keeps its path and version and its direct dependencies and its `react`/`react-dom` peers keep theirs; an `admin.tsx` entry builds every time. The build needs no install scripts (`npm ci --ignore-scripts` works). A `package-lock.json` made on one OS can lack the native build binaries (rolldown, `@tailwindcss/oxide`, lightningcss) that npm installs per platform from `optionalDependencies`, so a lockfile made on macOS can fail the build on a Linux host; create the lockfile on the build platform or use pnpm. `wrangler dev` and `wrangler deploy` run that build command, so they need `node_modules`. The built output (`<outdir>/worker`, `<assets>`) never reads it, so a pipeline that deletes `node_modules` must run `wrangler deploy` first. On Bun, the app owns `Bun.serve`, its Database/SQL pool and scheduler; Bun runs the server as TypeScript, so for a `bun-*` target recorded in `.mantle-inputs.json`, `mantle bundle src/server.ts dist` skips the Worker bundle and builds only Admin, into `dist/client/admin` (read with `bunAdminAssets("dist/client/admin")`, adapted for `adminShell` as in service composition). See [service composition](../cloudflare/service-entry.md).
@@ -1,203 +1,68 @@
1
1
  ---
2
- description: "Author a minimal Cloudflare Worker from scratch: one Schema, one public View, generate, validate, run locally and probe it with curl."
2
+ description: Generate a small native D1 service and mount an application-owned Worker.
3
3
  ---
4
- # Quickstart: a minimal Worker
4
+ # Quickstart: a service on Workers
5
5
 
6
- This page reproduces the API-only Worker reference as a direct-authoring
7
- walkthrough: View REST without Admin, Auth or a visitor frontend. For a new
8
- project, `mantle generate --host cf --features spec,api` assembles that smaller
9
- composition. Omit `--features` to include Admin, MCP and a blank home. The
10
- [local Admin tutorial](./quickstart-admin.md) covers an authored Worker entry.
11
- Pin every selected `@aotter/mantle*` package to one exact version; see
12
- [Versions](../reference/surface.md#versions).
6
+ Create an application outside the SDK checkout. Install an exact released `@aotter/mantle` version, TypeScript, Wrangler and Cloudflare Worker types; `node_modules/@aotter/mantle/docs/examples/app-shell/package.json` lists the versions this release is tested with. Read that installed version's handbook; this page describes the native 0.2.0 contract.
13
7
 
14
- ## Prerequisites
15
-
16
- - Node.js 22 or newer.
17
- - pnpm 9 or newer. The reference is tested with pnpm; see the npm note at the end of this page.
18
- - `wrangler` is installed as a project devDependency below. No Cloudflare account, D1 database or secret is needed for the local loop.
19
-
20
- ## 1. `package.json`
21
-
22
- Step 5 adds the two Mantle packages at one exact version. For a prerelease
23
- evaluation, select its exact version explicitly rather than mixing channels.
24
- The entries below are the peers and tools used by this direct-authored reference.
25
-
26
- ```json
27
- {
28
- "name": "mantle-minimal-consumer",
29
- "private": true,
30
- "type": "module",
31
- "scripts": {
32
- "generate": "mantle generate",
33
- "validate": "mantle validate",
34
- "typecheck": "tsc --noEmit",
35
- "dev": "wrangler dev --local --ip 127.0.0.1 --port 8787",
36
- "check": "mantle generate && mantle generate --check && mantle validate && mantle skills && mantle skills --check && tsc --noEmit"
37
- },
38
- "dependencies": {
39
- "better-auth": "1.7.2",
40
- "hono": "^4.13.3",
41
- "zod": "^4.5.4",
42
- "aws4fetch": "^1.0.20"
43
- },
44
- "devDependencies": {
45
- "@cloudflare/workers-types": "^5.20260907.1",
46
- "typescript": "^6.0.3",
47
- "wrangler": "^4.125.0"
48
- },
49
- "packageManager": "pnpm@9.15.0"
50
- }
51
- ```
52
-
53
- The reference's own `check` script ends with `&& node smoke.mjs`, a test that starts the Worker and asserts the three probes in step 6. This walkthrough runs those probes by hand instead.
54
-
55
- Add a `tsconfig.json` that includes the generated module:
56
-
57
- ```json
58
- {
59
- "compilerOptions": {
60
- "target": "ES2022",
61
- "module": "ESNext",
62
- "moduleResolution": "bundler",
63
- "strict": true,
64
- "noEmit": true,
65
- "skipLibCheck": true,
66
- "types": ["@cloudflare/workers-types"]
67
- },
68
- "include": ["src/**/*.ts", ".mantle/generated/**/*.ts"]
69
- }
70
- ```
71
-
72
- ## 2. `manifests/site.yaml`
73
-
74
- One publishing Schema and one public View. `mantle generate` never invents a Schema; this notes model is example business data.
8
+ Save `manifests/tickets.yaml`:
75
9
 
76
10
  ```yaml
77
- apiVersion: cms.mantle.aotter.net/v1
11
+ apiVersion: cms.mantle.aotter.net/v2
78
12
  kind: Schema
79
- metadata:
80
- name: notes
13
+ metadata: { name: tickets }
81
14
  spec:
82
- title: Notes
15
+ title: Tickets
16
+ lifecycle: operational
17
+ indexes: [[ticketState]]
83
18
  schema:
84
19
  type: object
85
- required: [title]
20
+ additionalProperties: false
21
+ required: [subject, ticketState]
86
22
  properties:
87
- title: { type: string }
88
- lifecycle: publishing
23
+ subject: { type: string }
24
+ ticketState: { type: string, enum: [open, closed] }
89
25
  ---
90
- apiVersion: cms.mantle.aotter.net/v1
26
+ apiVersion: cms.mantle.aotter.net/v2
91
27
  kind: View
92
- metadata:
93
- name: published-notes
28
+ metadata: { name: tickets-by-state }
94
29
  spec:
95
30
  surface: public
96
- from: notes
97
- cache: { sharedMaxAge: 3600 }
98
- fields: [id, title]
99
- filter:
100
- eq: { field: status, value: published }
101
- limit: 20
102
- ```
103
-
104
- ## 3. `src/index.ts`
105
-
106
- The conventional Worker entry hands the sealed plan to the Cloudflare adapter.
107
-
108
- ```ts
109
- import { createMantleWorker } from "@aotter/mantle/cloudflare";
110
- import { plan } from "../.mantle/generated/mantle.js";
111
-
112
- export default createMantleWorker({ plan });
113
- ```
114
-
115
- `createMantleWorker` owns the D1 and assets bindings, Auth, Admin, View REST, HTTP Triggers, OAuth, MCP and cache policy. Application handlers and extra routes go through its `extend` option; see [the conventional Worker](../cloudflare/conventional-worker.md).
116
-
117
- ## 4. `wrangler.jsonc`
118
-
119
- ```jsonc
120
- {
121
- "$schema": "node_modules/wrangler/config-schema.json",
122
- "name": "mantle-reference",
123
- "main": "src/index.ts",
124
- "compatibility_date": "2026-09-08",
125
- "compatibility_flags": ["nodejs_compat", "global_fetch_strictly_public"],
126
- "observability": { "enabled": true },
127
- "vars": { "MANTLE_AUTH_MODE": "self-managed" },
128
- "d1_databases": [
129
- { "binding": "DB", "database_name": "mantle-reference-local" }
130
- ]
131
- }
132
- ```
133
-
134
- Both compatibility flags are required by the adapter. `MANTLE_AUTH_MODE` must be explicit; `self-managed` without GitHub credentials is a deliberate partial configuration for this local reference, so Auth-owned routes fail closed while public routes work. Local `wrangler dev` creates the D1 database on demand; configure a real `database_id` and the full auth matrix before any remote deploy ([Authentication](../cloudflare/authentication.md)).
135
-
136
- ## 5. Install, generate, validate, run
137
-
138
- ```sh
139
- # Resolve once; for a requested prerelease, set its exact version instead.
140
- MANTLE_VERSION=$(pnpm view @aotter/mantle@latest version)
141
- pnpm add --save-exact "@aotter/mantle@$MANTLE_VERSION" "@aotter/mantle-cloudflare@$MANTLE_VERSION"
142
- pnpm exec mantle generate
143
- pnpm exec mantle validate
144
- pnpm exec wrangler dev --local --ip 127.0.0.1 --port 8787
145
- ```
146
-
147
- `mantle validate` prints `OK no issues (root: manifests, phase: preview)`. Wrangler prints `Ready on http://127.0.0.1:8787`. Use that origin in the next step. The Admin OTP path uses the same pin; `PUBLIC_ORIGIN` must match wrangler's printed origin there.
148
-
149
- ## 6. Probe the Worker
150
-
151
- ```sh
152
- curl -s http://127.0.0.1:8787/api/views/published-notes
153
- ```
154
-
155
- ```json
156
- { "ok": true, "data": { "rows": [], "page": 1, "show": 20, "hasMore": false } }
31
+ input:
32
+ type: object
33
+ additionalProperties: false
34
+ required: [ticketState]
35
+ properties:
36
+ ticketState: { type: string, enum: [open, closed] }
37
+ sql: |
38
+ SELECT id, subject, ticketState AS "ticketState" FROM tickets
39
+ WHERE ticketState = input.ticketState
40
+ ORDER BY id ASC
157
41
  ```
158
42
 
159
- The View is served with no data because the local D1 is fresh. `show` follows the View's `limit` when the request carries no `?show=`; `?page=` and `?show=` are the reserved pagination params ([Reads: Views, REST and MCP](../concepts/views.md)).
160
-
161
43
  ```sh
162
- curl -i http://127.0.0.1:8787/
44
+ pnpm exec mantle generate cloudflare-d1 generated manifests/tickets.yaml
45
+ pnpm exec mantle generate cloudflare-d1 generated manifests/tickets.yaml --check
163
46
  ```
164
47
 
165
- `GET /` returns `404`. No visitor frontend is installed or rendered; `mantle-web` is optional composition and never owns an implicit home route. Add your own routes or templates when the product needs them ([Public web, SEO and cache](../cloudflare/public-web.md)).
48
+ Write `src/worker.ts`:
166
49
 
167
- ```sh
168
- curl -i http://127.0.0.1:8787/mcp/staff
50
+ ```ts
51
+ import { rest } from '../generated/rest.js';
52
+ interface Env { DB: D1Database }
53
+ const api = rest<Env>({
54
+ db: env => env.DB,
55
+ caller: () => ({ kind: 'anonymous' }),
56
+ });
57
+ export default {
58
+ async fetch(request: Request, env: Env): Promise<Response> {
59
+ return await api(request, env) ?? new Response('Not found', { status: 404 });
60
+ },
61
+ };
169
62
  ```
170
63
 
171
- `GET /mcp/staff` returns `503` with the error code `setup_incomplete` until `MANTLE_AUTH_MODE` is backed by a complete configuration. This is the expected fail-closed state; a working public endpoint is not evidence of a working Admin or MCP login.
172
-
173
- ## What `mantle generate` wrote
174
-
175
- - `.mantle/generated/mantle.ts` — one module with the sealed `plan`, generated types (`MantleHandlers<Env>`), `createMantle` and `bindMantle`. The Worker entry above imports only `plan`.
176
- - `public/_mantle/admin/` — the Admin SPA, synced only when `@aotter/mantle-admin-ui` is installed. This project did not install it, so nothing is written there and `/admin` has no assets.
177
-
178
- This walkthrough uses the existing direct-authored Worker entry; in that legacy
179
- compile mode, `generate` expects the supplied manifests and does not add a
180
- home route. New applications can instead use `mantle generate --host cf`
181
- with `--features spec,api` for a smaller assembled Worker. The CLI never
182
- invents a Schema. `mantle generate --check` reports stale output without
183
- writing. The reference keeps `.mantle/`, `.agents/` and `.claude/` out of git
184
- and regenerates them in `check`; see [Project layout and CLI](./project-and-cli.md).
185
-
186
- ## Next steps
64
+ Set the database binding `DB`, Worker name and compatibility date in `wrangler.jsonc`. Generation adds the split build configuration. Apply `generated/schema.sql` explicitly to an empty local database, for example `pnpm exec wrangler d1 execute <database> --local --file generated/schema.sql`. The first request creates nothing.
187
65
 
188
- - [Quickstart: local Admin](./quickstart-admin.md) — opt-in Dev UI: ASSETS, prebuilt Admin, email OTP.
189
- - [Project layout and the CLI loop](./project-and-cli.md) — the files you own, every CLI flag, the daily check loop.
190
- - [The four atoms](../concepts/four-atoms.md) — add a Procedure and a Trigger to accept writes.
191
- - [Authentication](../cloudflare/authentication.md) — complete Auth so Admin and `/mcp/staff` open.
192
- - [Public web, SEO and cache](../cloudflare/public-web.md) — give the service a rendered public surface.
66
+ Typecheck, then run `pnpm exec wrangler dev --local`. Query `/api/views/tickets-by-state?ticketState=open`; the response is `{ rows, nextCursor? }`. The empty database returns no rows. Use Store or a declared Procedure for writes.
193
67
 
194
- ## Source
195
- - [`docs/examples/host-minimal-worker/README.md`](../../../docs/examples/host-minimal-worker/README.md)
196
- - [`docs/examples/host-minimal-worker/package.json`](../../../docs/examples/host-minimal-worker/package.json)
197
- - [`docs/examples/host-minimal-worker/tsconfig.json`](../../../docs/examples/host-minimal-worker/tsconfig.json)
198
- - [`docs/examples/host-minimal-worker/manifests/site.yaml`](../../../docs/examples/host-minimal-worker/manifests/site.yaml)
199
- - [`docs/examples/host-minimal-worker/src/index.ts`](../../../docs/examples/host-minimal-worker/src/index.ts)
200
- - [`docs/examples/host-minimal-worker/wrangler.jsonc`](../../../docs/examples/host-minimal-worker/wrangler.jsonc)
201
- - [`docs/examples/host-minimal-worker/smoke.mjs`](../../../docs/examples/host-minimal-worker/smoke.mjs)
202
- - [`docs/direct-authoring.md`](../../../docs/direct-authoring.md)
203
- - [`packages/mantle-runtime/src/domain/service/Pagination.ts`](../../../packages/mantle-runtime/src/domain/service/Pagination.ts)
68
+ Commit generated files and Wrangler edits; keep bundle `dist/` untracked. Follow [service composition](../cloudflare/service-entry.md) to add auth, Admin or MCP and [deploy and operate](../cloudflare/deploy-and-operate.md) before changing schema or deploying.