@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,157 +0,0 @@
1
- # Spec-only adoption in an existing host
2
-
3
- An existing application can reuse Mantle's Schema grammar and validation by
4
- consuming the published `@aotter/mantle-spec` package, without running Mantle
5
- Runtime. This Spec-only path is allowed by
6
- [ADR-0019](adr/0019-sealed-manifest-runtime-pipeline.md), not a new adapter,
7
- manifest grammar, or fork of Core.
8
-
9
- This recipe targets `0.1.4`. Pin the package, record the tested version, and
10
- rerun compatibility checks when upgrading.
11
-
12
- ## What stays with the host
13
-
14
- | Concern | Spec reuse | Host responsibility |
15
- |---|---|---|
16
- | Model definitions | Schema grammar, parse/link diagnostics | Project existing definitions into supported JSON Schema |
17
- | Input | `EntryDataValidator` and structured errors | Authentication, authorization, normalization, write orchestration |
18
- | Model browser | Parsed/linked Schema metadata | UI, metadata visibility, field display, graph layout |
19
- | Relationships | Translation declaration/link validation | Existing slug joins, record integrity, locale policy |
20
- | Storage and publishing | None in this recipe | Files, database, transactions, revisions, release/recovery |
21
- | Operations and tools | None in this recipe | No automatic View, Procedure, Trigger, REST or MCP execution |
22
-
23
- Mantle's Web, Admin UI and platform adapters remain optional. A Vue host does
24
- not have to embed the React Admin SPA to reuse Spec. Avoid importing SDK
25
- internals or maintaining a second manifest interpreter.
26
-
27
- ## One definition, several projections
28
-
29
- The motivating Aotter official-website implementation keeps its existing
30
- Nuxt/Nitro host and Git/D1 storage. Shared content definitions drive the site's
31
- content layer, admin write validation, a responsive model/ER browser, and
32
- Schema export. That website implementation was validated locally; this SDK
33
- contribution does not deploy it or claim a production rollout.
34
-
35
- ```text
36
- Host-owned content definitions
37
- ├─ existing CMS/content queries
38
- └─ JSON Schema in Mantle Schema manifests
39
- ├─ parse + link → model browser / metadata export
40
- └─ EntryDataValidator → host-authorized write path
41
- ```
42
-
43
- Use the existing definitions as the source of truth. If the host starts with
44
- Zod or another schema language, conversion is a host concern: verify that the
45
- result uses supported JSON Schema keywords and preserves the intended
46
- validation semantics. Do not hand-maintain a second field list for the graph.
47
-
48
- ## Minimal public-API recipe
49
-
50
- Install the exact Spec package and its supported peer, without Runtime:
51
-
52
- ```sh
53
- npm install --save-exact @aotter/mantle-spec zod@4.5.4
54
- ```
55
-
56
- The [synthetic fixture](../packages/mantle-spec/test/fixtures/spec-only-host.yaml)
57
- contains categories, articles and article translations. It contains no real
58
- website records, account configuration or credentials. Given that fixture as
59
- `manifestYaml`, the application can prepare its validated model once:
60
-
61
- ```ts
62
- import {
63
- EntryDataValidator,
64
- parseManifestSources,
65
- ValidateManifestsUseCase,
66
- } from "@aotter/mantle-spec";
67
-
68
- const parsed = parseManifestSources({
69
- sources: [{ sourceId: "host:content-model", text: manifestYaml }],
70
- });
71
- if (!parsed.ok) throw new Error(JSON.stringify(parsed.diagnostics));
72
-
73
- const checked = ValidateManifestsUseCase.run({
74
- parsed: parsed.value,
75
- siteLocales: ["zh-TW", "en-US"],
76
- });
77
- if (checked.errorCount || !checked.linked) {
78
- throw new Error(JSON.stringify(checked.diagnostics));
79
- }
80
-
81
- const article = checked.linked.schemas.find(
82
- ({ manifest }) => manifest.metadata.name === "articles",
83
- )!.manifest;
84
- const validator = new EntryDataValidator();
85
- const diagnostics = validator.validate(article, { category: 42 }, { partial: true });
86
- // INPUT_VALIDATION_FAILED at /category. The host must reject the write.
87
- ```
88
-
89
- The non-null assertion is specific to this known fixture. A dynamic host must
90
- handle an unknown collection explicitly and fail closed. Do not fabricate
91
- sealed parser/linker values or re-parse the same revision in each request.
92
-
93
- `EntryDataValidator` returns diagnostics, not a sanitized payload. It does not
94
- persist, authorize, coerce the original object, or enforce storage integrity.
95
- Normalize explicitly in the host before validation and write only after
96
- successful validation and authorization. An `additionalProperties: true`
97
- compatibility policy accepts legacy fields; it is not a reason to expose those
98
- fields publicly.
99
-
100
- `partial: true` relaxes top-level required fields for drafts, while still
101
- checking supplied types and nested required fields. Validate without `partial`
102
- when the host needs a complete record, alongside its own publication rules.
103
- Create a fresh validator for each model revision: its compiled cache is keyed
104
- by manifest name (and partial/full mode), not by a changing schema body.
105
-
106
- ## Honest ER diagrams and metadata export
107
-
108
- - Derive model nodes and field details from Schema properties. Use a small
109
- host-owned relationship registry for relations not represented by Mantle
110
- grammar; show logical joins distinctly from actual database foreign keys.
111
- - The fixture's `x-example-source` and `x-example-relations` live inside JSON
112
- Schema. They are illustrative vendor annotations, **not new Mantle keys or
113
- executable relationship definitions**. Core may preserve them without
114
- interpreting them. The host must validate their shape and endpoint fields.
115
- - Do not label a filename/slug join as `x-mantle-ref`: that keyword represents
116
- Mantle entry-ID references. A category slug matching a key inside a YAML
117
- array remains a host-specific relation, not a generated SQL foreign key.
118
- - `translates` validates the parent and join-field declarations, not whether
119
- actual translation records exist. A Spec-only host still owns allowed
120
- locales, uniqueness, fallback, and orphan handling. See
121
- [ADR-0010](adr/0010-locale-and-translates.md); Runtime locale/storage gates
122
- are not installed by this recipe.
123
- - A read-only inventory can add derived fields such as filename `slug` or
124
- directory `locale` without changing stored files. Document that projection;
125
- it is not evidence that existing data is ready for Runtime import.
126
- - The fixture uses JSON Schema `readOnly` as an inventory annotation. It is
127
- not a security boundary: entry validation does not enforce host write
128
- permissions. Export only after applying the host's metadata access policy.
129
- - Exclude credential/account models and private data. Export schemas, not
130
- records. Where appropriate, require an administrator and use
131
- `Cache-Control: private, no-store` for model and export endpoints.
132
- - Keep the graph usable on narrow screens: searchable model selection,
133
- focused relationships, zoom/scroll, keyboard controls and a field-table
134
- alternative. A graph must not be the only accessible representation.
135
-
136
- ## Reproducible evidence
137
-
138
- From this SDK checkout:
139
-
140
- ```sh
141
- pnpm --filter @aotter/mantle-spec test -- test/spec-only-host.test.ts
142
- pnpm --filter @aotter/mantle-spec typecheck
143
- ```
144
-
145
- The [regression test](../packages/mantle-spec/test/spec-only-host.test.ts)
146
- exercises the public export surface, manifest round trips, translation linking,
147
- and strict/partial entry validation without Runtime. It is an SDK regression
148
- fixture, not a new Starter workspace or a certification test suite.
149
-
150
- An adopting host must also test its own installed package, real content
151
- compatibility, HTTP authorization/invalid-input paths, metadata exclusions and
152
- responsive UI. Existing data need not be published or uploaded to prove this.
153
- Keep sensitive evidence internal and expose only an agreed verification report.
154
-
155
- Spec validation against an exact SDK version is not official certification or
156
- proof of Runtime compatibility, data migration, or security. Recognition policy
157
- is tracked separately in [#840](https://github.com/aotter/mantle/issues/840).
@@ -1,5 +0,0 @@
1
- # Transaction patterns
2
-
3
- This guide lives in the Examples hub: [`docs/examples/cf-primitives-commerce-inventory.md`](examples/cf-primitives-commerce-inventory.md). The Builder-safe catalog is [`docs/examples/builtin-commerce.md`](examples/builtin-commerce.md).
4
-
5
- The handbook and examples hub ship inside the `@aotter/mantle` package under `node_modules/@aotter/mantle/docs/` and describe the installed release.
@@ -1,258 +0,0 @@
1
- ---
2
- name: develop
3
- description: Work on any Mantle project using the Core SDK contract. Use for manifest, runtime, content model, handler, adapter, validation, and MCP work after a project already exists.
4
- metadata:
5
- source: "@aotter/mantle"
6
- sourcePath: docs/skills/develop/SKILL.md
7
- applies_to: mantle grammar v0.1
8
- projection: project
9
- ---
10
-
11
- # Mantle Develop
12
-
13
- This is the Core workflow skill for an existing Mantle project. Repo-local
14
- copies are byte-for-byte projections from the installed package; its embedded
15
- docs govern runtime/API behavior.
16
-
17
- ## First Read
18
-
19
- 1. `package.json` for the installed `@aotter/mantle*` versions.
20
- 2. The manifest directory selected by the project scripts, the actual host
21
- entry and adapter config (for example `wrangler.jsonc` on Cloudflare).
22
- Read custom Auth construction there when present.
23
- 3. Optional local context: `.mantle/plugins.json`, `.mantle/plugins.lock.json`,
24
- and `.mantle/recipes/`. Legacy launch/handoff files are context only.
25
- 4. Installed Core docs in `node_modules/@aotter/mantle/docs/`.
26
-
27
- If `node_modules/` is missing, run `pnpm install --frozen-lockfile` before
28
- falling back to remote docs. Remote docs must use a tag matching the installed
29
- version; never use `develop` branch docs for a versioned consumer project.
30
-
31
- ## Existing Examples
32
-
33
- Read installed `docs/handbook/start/project-and-cli.md` and
34
- `docs/examples/README.md`. Use `docs/examples/host-minimal-worker/` for Spec +
35
- adapter without Admin. Read `docs/examples/host-local-admin-otp/` only when the
36
- project already has Admin or the human asked for Dev UI — that path is opt-in.
37
- Ingest only `docs/examples/builtin-*.md` Manifests as grammar for new domains.
38
- Read `docs/examples/cf-primitives-*.md` before inventing Durable Object, Queue,
39
- cron, or `ref` handler patterns.
40
- References are test/documentation, not a Starter or a fixed application shape.
41
-
42
- Public rendering is opt-in consumer wiring: `mountPublicRoutes`, a
43
- `TemplateRegistry`, and a matching `publicPathResolver` must agree on the
44
- exposed collections. Do not auto-publish every Schema. Applications document their mounted URL surface in their own README.
45
- Import the registry and resolver from `@aotter/mantle/web`; Core runtime does
46
- not install public rendering by itself.
47
-
48
- ## Authoring CLI
49
-
50
- Use the project's scripts first; applications use the shipping
51
- `mantle` authoring CLI from `@aotter/mantle`. Ask the installed CLI for its
52
- command list instead of trusting one copied into prose — the surface is
53
- version-matched and changes between releases:
54
-
55
- ```bash
56
- pnpm exec mantle --help
57
- pnpm validate
58
- ```
59
-
60
- On 0.1.5 and newer, `generate --host cf|chatgpt-sites` assembles a new blank
61
- app; no `--features` selects Spec, Runtime, API, MCP, Admin and Web. Explicit
62
- `--features` selects a smaller composition. It never invents a business
63
- Schema. Existing authored apps keep compile mode, and older installed CLIs
64
- may not support project generation. Check this project's CLI help first.
65
-
66
- ## Core Model
67
-
68
- Mantle exposes exactly four declarative atoms:
69
-
70
- | Atom | Purpose |
71
- |---|---|
72
- | `Schema` | Stored entity/table shape. |
73
- | `View` | Read/query surface. |
74
- | `Procedure` | Typed mutation or operation. |
75
- | `Trigger` | HTTP/lifecycle/MCP invocation binding. |
76
-
77
- Do not invent manifest kinds such as `Form`, `Feature`, `Workflow`, or
78
- `Membership`. Compose those from the four atoms plus TypeScript only where
79
- the atoms cannot express the behavior.
80
-
81
- ## Choose the manifest feature first
82
-
83
- Read installed `docs/handbook/reference/features.md` to map the requested
84
- behavior to fields before adding handlers or a custom UI. For host-only reads,
85
- `surface: internal` keeps a View out of REST/MCP/Admin while preserving its
86
- `requires` checks. Read `docs/handbook/guides/typed-queries.md` for generated
87
- View params/results, indexed entry reads, and their authorization boundary.
88
- Use `from` for portable typed projections; SQL is for queries needing native
89
- SQLite and produces `unknown` row types.
90
-
91
- For Admin labels, inputs, collection columns/tabs, reports or action buttons,
92
- read `docs/handbook/guides/admin-ui.md`. Prefer supported Schema/Procedure/View
93
- metadata and `uiSchema` before custom frontend code. These control the Admin
94
- console, not the visitor frontend. Regenerate and verify the actual console;
95
- never edit generated `public/_mantle/admin/` assets.
96
-
97
- ## Content Edits
98
-
99
- - Follow the actual frontend content source. Use Admin or Staff MCP for
100
- runtime-backed content. Do not invent an overlay/seed homepage.
101
- - For a new submitted field, update the stored `Schema` and the public
102
- `Procedure.spec.input` before any form UI. Keep public mutation inputs
103
- `additionalProperties: false`; otherwise JSON Schema's default may strip an
104
- undeclared field while returning success.
105
- - Use `lifecycle: operational` for submissions, inquiries, orders, and other
106
- Procedure-created operational records that staff inspect or correct. Reserve
107
- `publishing` for content a person stages and publishes.
108
- - Lifecycle `before_update` / `after_update` hooks also fire for unpublish,
109
- archive, and every other status transition whose target is not `published`;
110
- do not use them for edit-only work.
111
- - When a form's fixed option values change, update the stored Schema and public
112
- Procedure input `enum` together. Keep translated labels in the frontend content source;
113
- Admin and Staff MCP derive their typed controls from the manifest values.
114
- - If the application has a `page` Schema with sections, update its declared
115
- section properties when adding display fields; an undeclared property has no
116
- runtime-backed Admin or Staff MCP path.
117
- - Update notification handlers when they need the new field. Test the stored
118
- entry, not only the HTTP `{ "ok": true }` response.
119
-
120
- ## Locales
121
-
122
- - `data.locale` is reserved for `localized: true` Schemas. A non-localized
123
- Schema must use a domain field such as `replyLocale`.
124
- - Use a standalone localized Schema only for independent locale rows. For
125
- versions of one entity, use a non-localized parent plus a localized child
126
- with `translates: { parent, on }`. The child must own at least one field
127
- besides `locale` and the join field.
128
- - Parallel locale blocks must keep field names, option values, step IDs, and
129
- result keys identical; translate display strings only.
130
- - `siteDefaults.origin`, `siteDefaults.locales`, and `siteDefaults.icons` are
131
- code-owned and boot-synced. The icon list is shared by browser favicons,
132
- Admin chrome, and MCP `serverInfo.icons`; keep its static files under
133
- `public/`. Brand, title, and description seed once, then change through site
134
- settings.
135
- - When changing an existing collection from `[slug]` to `[slug, locale]`,
136
- boot with a Mantle version that reconciles obsolete unique indexes and test
137
- the same slug in two locales. Do not patch D1 manually.
138
-
139
- ## Adapter Boundary
140
-
141
- The runtime is adapter-neutral. A `MantleStorageAdapter` prepares the compiled
142
- plan into semantic storage ports; `createMantleRuntime` binds that prepared
143
- storage and selected capabilities. Database drivers and asset serving belong
144
- to the host/optional composition. Follow the installed adapter guide.
145
-
146
- Do not assume Cloudflare unless the project imports `@aotter/mantle/cloudflare`
147
- or its adapter config is visible. A future Netlify adapter should satisfy the
148
- same Core workflow through its own ports and provider setup.
149
-
150
- Site code is a consumer of this abstraction. Use Manifests, runtime use cases,
151
- `runtime.entries`, and optional `runtime.siteConfig`; do not query Mantle-owned `entries` or
152
- `site_config`, reach through deprecated `runtime.db`, copy generated-column
153
- names, or construct SDK KV keys. Cloudflare bindings belong only at the
154
- composition root. If a normal feature cannot be expressed through a
155
- purpose-shaped surface, treat that as a Core abstraction gap instead of
156
- teaching the project Mantle internals.
157
-
158
- ## Auth Composition
159
-
160
- Generated full apps select Admin by default; smaller selections can omit it.
161
- A project without `@aotter/mantle-admin-ui` is complete when Admin was not
162
- selected. If Admin was selected but its package is missing, install the
163
- CLI-declared exact version and rerun generation.
164
- When Admin is installed, `createMantleWorker({ auth })` with `email-otp`
165
- and `ConsoleEmailSender` is the local human path (OTP in wrangler logs).
166
- That override owns Auth construction; Core still owns `/admin` and
167
- `/api/auth/*`. Admin also requires wrangler `assets.directory=./public`
168
- and an `ASSETS` binding. A white screen at `/admin` with HTML 200 and
169
- `/_mantle/admin/assets/*` 404 is a missing assets binding, not a missing
170
- frontend build.
171
-
172
- Generated Cloudflare apps use `MANTLE_AUTH_MODE=local-otp` on loopback after
173
- copying `.dev.vars.example` to `.dev.vars` and setting a real owner email and
174
- random secret. Production uses `hosted` or `self-managed` with provider
175
- credentials and `ADMIN_GITHUB_LOGIN`. Conventional Cloudflare projects that
176
- do not replace Auth use those two production modes; Core owns that standard
177
- composition and rejects partial or mixed bindings. Preserve the explicit
178
- mode recorded in Worker config, keep provider secrets out of source, and
179
- do not infer a mode from whichever credentials happen to be present.
180
-
181
- ## Performance Loop
182
-
183
- After changing a Schema index, View filter/order, public API, or rendered page,
184
- run the project's index check when present. Otherwise run the installed
185
- harness directly:
186
-
187
- ```bash
188
- pnpm exec mantle-harness indexes --require-public --format text
189
- ```
190
-
191
- The check uses crowded real SQLite and the shipped compiler. It complements
192
- `pnpm validate`; it does not replace correctness validation. Declare the
193
- smallest ordered index justified by the measured path and respect SQLite's
194
- leftmost-prefix rule; which columns an index may name and how a public View's
195
- status predicate shapes it is in the handbook (`reference/schema.md#indexes`).
196
- Do not change user-visible filter or ordering semantics
197
- just to make the gate pass. Do not add every permutation or cache every read.
198
-
199
- For relevant Cloudflare serving changes, start the project and sample the
200
- actual routes:
201
-
202
- ```bash
203
- pnpm exec mantle-harness http \
204
- --base-url http://127.0.0.1:8787 \
205
- --route page=/en/example \
206
- --rounds 20 --warmup 2 --format text
207
- ```
208
-
209
- Prefer query plan, query count, `rows_read` scaling, and cache MISS/HIT
210
- evidence. Do not create CI gates from absolute local milliseconds.
211
-
212
- ## Loop
213
-
214
- ```bash
215
- pnpm install --frozen-lockfile
216
- pnpm validate
217
- pnpm check:indexes # when the project provides it
218
- pnpm typecheck
219
- pnpm check
220
- ```
221
-
222
- Use `pnpm dev` for local preview when the project provides it.
223
-
224
- ## Connect a Local MCP Client
225
-
226
- Start the project with `pnpm dev`, then use the exact local origin it prints.
227
- The conventional Cloudflare adapter exposes:
228
-
229
- - `http://localhost:8787/mcp` for public tools;
230
- - `http://localhost:8787/mcp/staff` for authenticated authoring tools.
231
-
232
- Prefer the client's native remote HTTP + OAuth support. Use a standard
233
- HTTP-to-stdio bridge such as `npx -y mcp-remote <url>` only when the client
234
- accepts stdio MCP servers but cannot connect to remote HTTP directly. Mantle
235
- does not own a separate local proxy or an auth-bypass mode.
236
-
237
- Before changing client config, confirm the Worker is reachable:
238
-
239
- ```bash
240
- curl -i http://localhost:8787/mcp
241
- ```
242
-
243
- An OAuth-protected endpoint should respond with `401` and a
244
- `WWW-Authenticate` resource-metadata challenge before sign-in. After
245
- connecting, inspect `tools/list`; make one read-only `query_view_*` call when
246
- available before invoking any mutation. Use project-scoped client config when
247
- the client offers it, and never commit OAuth tokens or the bridge's token
248
- cache.
249
-
250
- ## Rules
251
-
252
- - Keep content models in the configured manifest directory; its immediate
253
- `.yaml` and `.yml` files are loaded together.
254
- - Add TypeScript only for handlers, rendering, adapter wiring, or real behavior.
255
- - Do not write directly to D1, KV, Postgres, or object storage for content
256
- authoring. Use runtime use cases, admin APIs, or Staff MCP.
257
- - Do not commit provider secrets.
258
- - If the work is an installable capability, switch to `mantle:plugin`.
@@ -1,112 +0,0 @@
1
- ---
2
- name: mantle
3
- description: Set up a new Mantle application or continue an existing one using the installed SDK's matching instructions.
4
- metadata:
5
- source: "@aotter/mantle"
6
- sourcePath: skills/install/SKILL.md
7
- applies_to: mantle grammar v0.1
8
- projection: plugin
9
- projectionReason: Creates a new project; nothing to project into an existing one.
10
- ---
11
-
12
- # Mantle
13
-
14
- `npx skills add aotter/mantle` installs this small bootstrap skill. It does not
15
- install the SDK or create a project. The skill name is `mantle`; the source
16
- folder remains `skills/install/` so installation does not copy the repository.
17
-
18
- ## Find the application and its version
19
-
20
- First locate the user's target project. If it already has `@aotter/mantle`,
21
- read that project's `package.json`, lockfile, and
22
- `node_modules/@aotter/mantle/package.json`. Follow the CLI and docs shipped in
23
- that exact installed package. Never use another project's dependencies, the
24
- SDK checkout, a floating GitHub handbook, or an old alpha/Starter fallback.
25
- An older installed SDK may only support direct authoring; its own
26
- `mantle generate --help` decides which flags exist. Upgrade only when requested.
27
-
28
- For a new project, choose `cf` or `chatgpt-sites` from the request; ask only if
29
- it remains ambiguous. A host-free Spec-only project needs no host. Resolve the
30
- latest **published stable** `@aotter/mantle` version from npm once, confirm it
31
- is not a prerelease, and install it with an exact version in the new project.
32
- For example, run `npm view @aotter/mantle@latest version`, inspect the returned
33
- plain `X.Y.Z`, then `npm install --save-exact @aotter/mantle@X.Y.Z` with that
34
- actual version substituted. Set `type=module` in `package.json` first; npm's
35
- default project type may be CommonJS.
36
- When testing a release candidate, use the explicitly supplied exact version
37
- or local tarball instead of npm latest. Pin every selected `@aotter/mantle*`
38
- package to the running CLI's exact version; `generate` writes the required
39
- package declarations. Do not let npm's default `^` range remain. If the
40
- project registry overrides public npmjs, set `@aotter:registry=https://registry.npmjs.org/`
41
- in a project-owned `.npmrc`.
42
-
43
- ## New project sequence
44
-
45
- 1. Create a separate application directory with Node 22+ and a project
46
- `package.json` containing `"type":"module"`. Install the exact chosen
47
- `@aotter/mantle` version locally. Read its
48
- `node_modules/@aotter/mantle/skills/install/SKILL.md` and version-matched
49
- `docs/handbook/start/overview.md` before continuing. These installed
50
- instructions take precedence over this GitHub bootstrap copy. Check
51
- `npx mantle generate --help`: if it does not list `--host`, follow the
52
- installed version's direct-authoring path instead of the steps below.
53
- 2. On a CLI that supports it, run with an explicit host, for example
54
- `npx mantle generate --host cf` or `npx mantle generate --host chatgpt-sites`.
55
- No `--features` means Spec, Runtime, API, MCP, Admin and a blank editable
56
- home. For a smaller app, positively list the modules with `--features`
57
- (for example `spec,api`); use `--features spec` for a host-free compiler.
58
- Do not remove Admin merely because its package is not installed yet.
59
- 3. The first run may declare selected dependencies and exit asking for an
60
- install. Install them using the project's package manager, then rerun
61
- `mantle generate` to finish. Read `docs/handbook/start/project-and-cli.md`
62
- from the same installed package for saved selections, owned files,
63
- `--check`.
64
- 4. Before adding a Schema on ChatGPT Sites, review and apply its initial local
65
- D1 migration as the installed Sites guide says. Then add only the user's
66
- Schema, View, Procedure and Trigger manifests. Keep the blank home editable;
67
- do not invent business data or media bindings. Run `mantle generate` to
68
- append any new migration, review and apply it, then run `generate --check`,
69
- `validate`, `skills`, build/typecheck and local smoke.
70
- 5. For Cloudflare, follow installed `docs/handbook/start/project-and-cli.md`
71
- and `docs/handbook/cloudflare/authentication.md`. Copy `.dev.vars.example`
72
- to `.dev.vars`, set `ADMIN_EMAIL` and `BETTER_AUTH_SECRET`, and match
73
- `PUBLIC_ORIGIN` to the loopback URL printed by `wrangler dev`. Open
74
- `/admin/sign-in` with that email; read the OTP from wrangler logs. Check
75
- Admin assets and an owner-only Admin API before claiming Admin works. For
76
- ChatGPT Sites, follow installed
77
- `docs/handbook/chatgpt-sites/generated-app.md`: review and apply local D1
78
- migrations, set `OWNER_EMAIL` and `PUBLIC_ORIGIN`, then test the blank home,
79
- unauthorized Admin, owner Admin, public MCP and staff MCP. Local owner
80
- identity is simulated by the loopback-only smoke; it does not create a
81
- browser ChatGPT session. Sites owns
82
- production identity and deployment; do not deploy its Worker directly.
83
- Browser Admin WebMCP and Sites-session `/api/mcp/staff` do not provide
84
- remote staff OAuth MCP. The owner can maintain content through Admin and
85
- the applicable authenticated MCP surface.
86
-
87
- Use installed `docs/handbook/reference/features.md` for Manifest choices and
88
- `docs/examples/` for optional examples. The generated project is the starting
89
- point; a domain example is not a template to copy wholesale. Do not use a
90
- `mantle-starters` tag or `mantle create`.
91
-
92
- ## Existing project and handoff
93
-
94
- For an application that already uses Mantle, preserve selected features,
95
- user-authored files, migrations, package versions, identity settings and
96
- provider resources. Use its installed CLI's `--help` and package-local docs.
97
- Run `generate --check` without writing, then the project's normal tests.
98
-
99
- When the request is to add Mantle to an independently authored application,
100
- inspect its host, code and data first. Use the exact installed package's
101
- `docs/skills/integrate/SKILL.md` if available. If Mantle is not installed,
102
- choose between selective embedding, incremental replacement and creating a
103
- separate Mantle app followed by frontend/data migration before installing an
104
- exact SDK version. The existing application does not need to adopt the
105
- generated project's entry or directory layout. An older SDK's own docs and
106
- CLI govern its behavior; upgrade deliberately if the selected strategy needs
107
- newer capabilities.
108
-
109
- When deployment is requested, read the installed version's
110
- `skills/provision/SKILL.md`. Report the target path, exact SDK version, local
111
- HTTP results, Admin/MCP identity evidence, and any missing provider setup.
112
- Local simulated Sites headers do not prove deployed ChatGPT sign-in.
@@ -1,60 +0,0 @@
1
- ---
2
- name: integrate
3
- description: Integrate Mantle into an existing application. Use when the application has its own code, routes, storage or deployment and the owner wants to add Mantle, replace part of it, or rebuild with Mantle while migrating frontend and data.
4
- metadata:
5
- source: "@aotter/mantle"
6
- sourcePath: docs/skills/integrate/SKILL.md
7
- applies_to: mantle grammar v0.1
8
- projection: package
9
- projectionReason: Existing-project migration is opt-in; a fresh generated app does not need this brief.
10
- ---
11
-
12
- # Integrate Mantle into an existing application
13
-
14
- Work in the target application. Read its installed `@aotter/mantle` version,
15
- CLI help and package-local docs before editing. If Mantle is absent, inspect
16
- the application first, then install an exact SDK version only after choosing an
17
- integration strategy. Use the installed version's contract; do not copy
18
- `develop` branch examples into an older consumer.
19
-
20
- ## Inspect and decide
21
-
22
- Map the actual entry points, router, frontend, auth, storage, data volume and
23
- relationships, deployment pipeline, URLs, background jobs and existing tests.
24
- Identify which behavior the owner wants Mantle to own and what must remain
25
- stable. Compare three approaches using the application's evidence:
26
-
27
- 1. **Embed selectively:** keep the host and call Mantle's parser, Runtime or
28
- selected surfaces through its documented package APIs. The host owns wiring.
29
- 2. **Replace incrementally:** move one bounded capability at a time. Define
30
- where reads and writes go during coexistence and how each step is checked.
31
- 3. **Rebuild and migrate:** create a separate new Mantle application, port the
32
- frontend and business behavior, and transform/import existing data. Prefer
33
- this when adapting the old structure costs more than rebuilding. Preserve
34
- relevant IDs, relations, URLs and identity semantics; rehearse the data
35
- transfer before a production cutover.
36
-
37
- Explain the chosen path and its concrete tradeoffs to the owner. A small
38
- prototype or read-only inventory may resolve uncertainty. Do not run a generic
39
- project converter or assume the current application's shape matches a
40
- generated Cloudflare or ChatGPT Sites skeleton.
41
-
42
- ## Implement and verify
43
-
44
- - For embedding, retain user-owned entry/config/build files. Use the installed
45
- direct-authoring docs and CLI to validate manifests and emit bindings; wire
46
- the selected Mantle capabilities into the existing host explicitly.
47
- - For incremental replacement, establish a clear owner for each data write
48
- and request route at every stage. Verify old and new behavior together.
49
- - For rebuilding, generate in a **separate directory** with the installed
50
- CLI, move frontend and handlers deliberately, and plan data mapping and
51
- import separately. Review database migrations before application or cutover.
52
- - Run the application's build and representative behavior checks for the
53
- changed routes, auth and data. `mantle generate --check` checks generated
54
- output against its declared selection; it cannot certify host integration.
55
- For live data, record migration counts and a rollback or recovery path
56
- appropriate to the project.
57
-
58
- Leave existing data and deployment untouched until the requested migration
59
- and release steps are ready. Report which capabilities Mantle now owns,
60
- what was verified, and what remains for application deployment or cutover.