Repository navigation
Mantle 0.2.0 is the first stable native 0.2 release. Core, UI and optional Admin publish together at exactly 0.2.0. It supports Bun SQLite/PostgreSQL and Cloudflare D1/PostgreSQL with application-owned routing, identity, migrations and deployment.
Breaking upgrade from 0.1.x: use a new 0.2 database and explicitly move data. Read the migration guide and stable release/upgrade entry. From alpha.11, pin selected packages to 0.2.0 and regenerate owned output.
Known follow-ups: Admin/authoring refinements, production social/magic-link recipe verification, real Sites guide verification. Local OTP/native-host checks do not establish provider-specific production acceptance.
The generated history below covers the complete line since stable v0.1.4.
What's Changed
Breaking changes
- docs(adr): 0.2.0 Core contract (ADR-0032) and storage convergence (ADR-0033) by @guyspy in #1191
- feat(postgres)!: one client per request, bare reads, pipelined writes; boot requires TimeZone UTC and a statement_timeout (#1379) by @guyspy in #1383
- feat(bun)!: the Bun PostgreSQL host uses node-postgres by @guyspy in #1397
- feat(postgres)!: PostgreSQL pages in its own NULL order so indexes serve sorts by @guyspy in #1398
- feat(postgres)!: drop the SQLite emulation shims by @guyspy in #1401
- perf(auth): no discarded JWT per request; single-row auth reads without a transaction by @guyspy in #1405
- fix(postgres): safe convergence under concurrent boots; trim cold start by @guyspy in #1407
- refactor: use native drivers and remove before-hook policing by @guyspy in #1427
- refactor!: remove Store.select; reads go through Schema readers (#1432 PR B) by @guyspy in #1440
- feat(core)!: replace Core with native SDK and separate Admin by @guyspy in #1559
- fix: review follow-ups (Admin conflict hint, recipes sitemap/robots, drop bunSqlAdapter) by @guyspy in #1638
- auth: keep offline_access grants usable after the browser session ends by @guyspy in #1651
- feat(admin)!: nav.parentField chooses the fold parent on its own; refuse ambiguous composition (#1667) by @guyspy in #1675
- feat(bundle)!: mantle bundle builds Admin into /admin; Worker output moves to /worker by @guyspy in #1677
- feat(bundle)!: Bun builds Admin with mantle bundle; .mantle-inputs.json records the target by @guyspy in #1684
- feat(admin)!: stop shipping the prebuilt Admin SPA (PR 6) by @guyspy in #1685
- feat(admin)!: remove the Admin extension mechanism; add defineAdmin pages by @guyspy in #1689
- fix: the app owns react and react-dom; Admin refuses a version mismatch by @guyspy in #1692
- feat(admin)!: build the MCP App from the application's Admin entry by @guyspy in #1706
- feat(admin)!: define MCP App ownership and build identities by @guyspy in #1709
- fix(admin)!: align MCP authoring and bounded View pagination by @guyspy in #1715
Features
- feat(admin): manifest-derived business rules in atom overview by @guyspy in #1312
- feat(admin): derive business state paths and constraints from SQL plans by @guyspy in #1328
- feat(admin): show reviewed records and state-matching row actions by @guyspy in #1329
- feat(mcp): observe native tool and caller refusal metadata by @guyspy in #1357
- feat(mcp): restore tenant staff media upload lifecycle by @guyspy in #1386
- feat(admin): Admin extensions for projects and hosts, bound from uiSchema by @guyspy in #1376
- perf(postgres): row-comparison keyset cursor by @guyspy in #1403
- perf(core): cache compiled and printed SQL for sealed Views and Procedures by @guyspy in #1406
- feat(mcp): server instructions and ChatGPT outputTemplate on App tools (#1392, #1393) by @guyspy in #1417
- feat(bench): runtime overhang benchmark harness and develop baseline by @guyspy in #1439
- feat(core): per-Schema readers (store.db, ctx.db) replace Store.select, PR A (ADR-0043) by @guyspy in #1436
- feat(core): generate-time lowering for sealed Views and inline Procedures by @guyspy in #1435
- feat(core): build plan validators eagerly at createMantle (#1433, PR b) by @guyspy in #1441
- feat(cloudflare): experimental Durable Object SQLite driver by @guyspy in #1437
- feat(skills): verify MCP discovery in application smoke flows by @guyspy in #1703
- feat(mcp): demonstrate Store-backed workflows with a source-only reference by @guyspy in #1724
- feat(generator): warn when HTTP Procedures lack MCP exposure by @guyspy in #1737
- feat(examples): default MCP clients to offline access by @guyspy in #1739
Fixes
- fix(storage,sql): no redundant scope index; a Schema field read through a CTE keeps its name and type by @guyspy in #1305
- 0.2.x stack (#1307–#1312) plus review fixes: Bun host guards, json comparisons, RETURNING t.*, CI on every PR by @guyspy in #1313
- fix(auth): keep PostgreSQL host pools compatible with current Kysely by @guyspy in #1318
- auth: local MCP clients register; consent completes through redirecting callbacks; Admin consent at /admin/oauth/consent by @guyspy in #1326
- test(admin): pin scoped, compound-index-sorted entries listing (#1316) by @guyspy in #1413
- fix(ui): label an optional enum's clearing choice "Not set" (#1190) by @guyspy in #1414
- fix(postgres): refuse a nullable native column on an existing table (#1404) by @guyspy in #1415
- fix(web): send public s-maxage for anonymous reads of a cacheable View (#1270) by @guyspy in #1416
- fix(core): key a paged row source first in FROM (#1402, shape 1) by @guyspy in #1418
- fix(admin): one coordinate space and full-bounds fit for system wiring (#1666) by @guyspy in #1674
- fix(admin): derive the system wiring min zoom from the layout bounds (#1666) by @guyspy in #1680
- fix(auth): align OAuth bearer verification with normalized issuer by @guyspy in #1694
- fix(cf): generate public fetch routing required for OAuth discovery by @guyspy in #1697
- fix(admin): inset MCP pages with native headers by @guyspy in #1717
- fix(admin): recover visibly from failed lazy pages by @guyspy in #1719
- fix(examples): enable explicit MCP offline access and test renewal by @guyspy in #1722
- Refuse plugin mappings that several Better Auth instances would share by @guyspy in #1725
- fix: harden SDK security boundaries by @guyspy in #1727
- fix(drivers): expose structured Schema check details by @guyspy in #1734
- fix: qualify translation parent publishing policy by @guyspy in #1732
- fix(mcp): make fresh deployments and retained UI upgrades work by @guyspy in #1731
- test: bound heavyweight integration checks independently by @guyspy in #1742
Documentation
- docs: 0.2.0 scope map and packaging (step 0, ADR-0032 decision 13) by @guyspy in #1193
- docs(adr): ADR-0039 PostgreSQL is native; node-postgres on every host by @guyspy in #1396
- docs: PostgreSQL-native release notes, handbook and skills for the next alpha by @guyspy in #1409
- docs: ship the custom-host guide in the package handbook (#1394) by @guyspy in #1412
- docs: D1 performance notes (date-time, per-member buckets, rollups, scope index) by @guyspy in #1438
- docs: align native SDK guidance and pin alpha skill installs by @guyspy in #1647
- docs: require independent fresh-agent acceptance for every user-facing deliverable by @guyspy in #1728
- docs: record triaged maintainer and host guidance by @guyspy in #1733
Dependencies
- chore(deps): bump pnpm/action-setup from 6.0.10 to 6.1.0 in the actions group by @dependabot[bot] in #1359
- chore(deps-dev): bump the react group across 1 directory with 4 updates by @dependabot[bot] in #1361
- chore(deps-dev): bump vite from 8.2.2 to 8.3.0 in the admin-ui-vite group across 1 directory by @dependabot[bot] in #1362
- chore(deps-dev): bump wrangler from 4.126.0 to 4.137.0 in the cloudflare group across 1 directory by @dependabot[bot] in #1363
- chore(deps): bump the runtime-libs group across 1 directory with 2 updates by @dependabot[bot] in #1364
- chore(deps-dev): bump @tanstack/react-query from 5.102.8 to 5.103.2 by @dependabot[bot] in #1365
- chore(deps-dev): bump shadcn from 4.19.1 to 4.21.0 by @dependabot[bot] in #1366
- chore(deps-dev): bump lucide-react from 1.41.0 to 1.48.0 by @dependabot[bot] in #1367
- chore(deps): bump vitest from 4.1.11 to 5.0.1 in the typescript-toolchain group across 1 directory by @dependabot[bot] in #1360
- chore(deps-dev): bump @tiptap/react from 3.31.3 to 3.31.4 by @dependabot[bot] in #1630
- chore(deps-dev): bump react-day-picker from 10.0.1 to 10.0.2 by @dependabot[bot] in #1631
- chore(deps-dev): bump @tiptap/starter-kit from 3.31.3 to 3.31.4 by @dependabot[bot] in #1632
- chore(deps-dev): bump @modelcontextprotocol/ext-apps from 2.0.0 to 2.0.3 by @dependabot[bot] in #1633
- chore(deps-dev): batch dependabot bumps; Postgres contract fits postgres.js 3.4.9 by @guyspy in #1641
Other changes
- Show live Schema and View data in Admin Developer Console by @guyspy in #1090
- Define progressive generate selection and safe project reruns by @guyspy in #1091
- Generate runnable Cloudflare sites with selected Mantle surfaces by @guyspy in #1092
- feat: safe append-only managed SQLite migrations by @guyspy in #1093
- Generate complete ChatGPT Sites apps with managed D1 migrations by @guyspy in #1094
- Align Mantle skill and docs with progressive generate by @guyspy in #1095
- Add reviewed unique-index tuple migrations for managed Sites SQLite by @guyspy in #1096
- Support atomic multi-Schema entry writes in ref Procedures by @guyspy in #1097
- feat: add scheduled Procedure Triggers for Cloudflare by @guyspy in #1098
- feat: add explicit Schema TTL with D1 and Bun sweeps by @guyspy in #1099
- feat: show scheduled run observations in Developer Console by @guyspy in #1100
- fix: finish Developer Console inspection audit by @guyspy in #1101
- docs: guide generated Cloudflare OTP smoke and blank validation by @guyspy in #1104
- refactor: guide existing-project integration with a skill by @guyspy in #1103
- fix: remove extra managed SQLite cold boot queries by @guyspy in #1107
- refactor(runtime): bind MCP surfaces through createMcpDispatcher by @guyspy in #1126
- feat(runtime): return MCP structuredContent and advertise safe outputSchema by @guyspy in #1127
- docs(adr): accept ADR-0029 official MCP SDK and interaction contracts by @guyspy in #1128
- feat(runtime): transport-neutral capability catalog and single invoke entry by @guyspy in #1132
- feat(spec): add View.spec.description by @guyspy in #1133
- feat(mcp): add @aotter/mantle-mcp on the official MCP SDK by @guyspy in #1134
- feat(spec): x-mantle-ref object form and Procedure.spec.target by @guyspy in #1135
- feat(mcp)!: serve every MCP surface through the official SDK by @guyspy in #1136
- feat(runtime)!: interaction descriptors, View row actions and bounded read_entry by @guyspy in #1137
- feat(mcp): register MCP Apps UI resources with the official ext-apps helpers by @guyspy in #1138
- feat(ui): add @aotter/mantle-ui/controller, a framework-free interaction controller by @guyspy in #1139
- feat(ui): shared interaction components and Admin View row actions by @guyspy in #1141
- feat(ui): ship the Mantle MCP App as one self-contained HTML resource (#1124) by @guyspy in #1142
- test(ui): CI host matrix for MCP Apps on the official ext-apps host bridge (#1119) by @guyspy in #1143
- feat(preview): staff site preview over MCP, App-only (#1125) by @guyspy in #1144
- feat(admin-ui): every Admin operation on the interaction controller; UI kit moves to @aotter/mantle-ui/kit (#1140) by @guyspy in #1145
- fix(spec): reject only the native SQL Views that read a TTL Schema by @guyspy in #1146
- perf(runtime): read atomic group targets once per Schema, two statements per guarded write by @guyspy in #1148
- feat(runtime)!: add store.write and store.sweepExpired (#1151) by @guyspy in #1157
- feat(runtime): add Store with select, view and id (#1151) by @guyspy in #1155
- fix(auth): stop trusting a cached staff role (#1152) by @guyspy in #1154
- feat(runtime)!: record migrations in _mantle_migrations (#1150) by @guyspy in #1153
- fix: dedupe OAuth provider in Wrangler bundle by @guyspy in #1160
- fix(runtime): reject undefined Store where values and non-array columns (#1151) by @guyspy in #1158
- fix(runtime): validate Store input at runtime boundary by @guyspy in #1162
- feat(store): enforce declared caller scope by @guyspy in #1163
- perf(spec): skip Admin UI revalidation at runtime by @guyspy in #1164
- refactor(store): snapshot inputs and reuse SQLite primitives by @guyspy in #1165
- refactor(store): make Runtime-validated input the adapter contract by @guyspy in #1169
- refactor(sqlite): share TTL visibility predicate by @guyspy in #1170
- refactor(sqlite): share insert SQL for builtin and Store writes by @guyspy in #1171
- refactor(runtime): stop revalidating linked Schema indexes by @guyspy in #1172
- refactor(codegen): emit wire-keyed Store type maps by @guyspy in #1174
- fix(runtime): materialize Schema defaults on entry creation by @guyspy in #1175
- feat(store): add validated SQL LIKE predicate by @guyspy in #1176
- perf(parity): bundle one Runtime copy in Worker fixture by @guyspy in #1177
- refactor(store): route legacy ID readers through Store where by @guyspy in #1178
- feat(store): bind host Store to caller context by @guyspy in #1179
- refactor(capability): run Views through caller Store by @guyspy in #1181
- refactor(runtime): remove duplicate View execution API by @guyspy in #1182
- feat(view): route select manifests through caller Store by @guyspy in #1186
- feat(plugins): add mantle-host plugin with Mantle Cloud as a same-level deploy target by @guyspy in #1173
- refactor(plugins): include mantle-host in the root plugin by @guyspy in #1183
- feat(host): own upload rules and script source in Core by @guyspy in #1184
- feat(host): negotiate Cloud Core pin before packaging by @guyspy in #1185
- Fix mantle-host MCP tool names and bundle production connection by @guyspy in #1195
- Hotfix 0.1.4 plugin: connect mantle-host to production Cloud MCP by @guyspy in #1194
- fix(plugin): show Mantle shell icon by @guyspy in #1197
- fix(plugin): keep shell icon on develop by @guyspy in #1198
- fix(plugin): use bundled skills in starter prompts by @guyspy in #1199
- fix(plugin): keep bundled-skill starter prompts on develop by @guyspy in #1200
- docs(adr): 0034 Store is authored as SQL, compiled by the CLI by @guyspy in #1201
- ci: halve Actions minutes on mantle by @guyspy in #1202
- feat(next): ADR-0034 spike — SQL IR, policy, deparser on local D1 by @guyspy in #1203
- feat(next): salvage spec port and LifecycleStateMachine from #1196 by @guyspy in #1204
- docs: accept ADR-0034 and align the next/ scope map by @guyspy in #1206
- feat(next/spec): compile Store SQL to IR (ADR-0034) by @guyspy in #1207
- test(next/spec): ponytail the SQL compiler tests (114 -> 7) by @guyspy in #1208
- feat(next/spec): manifest grammar 改成 SQL,新增 compilePlan by @guyspy in #1209
- feat(next/spec): SQL_COLUMN for undeclared columns, published join rule by @guyspy in #1210
- feat(host): align mantle-host with the Sites hosting flow by @guyspy in #1217
- hotfix(plugin): align mantle-host with the Sites hosting flow by @guyspy in #1225
- Back-merge main into develop after plugin hotfix by @guyspy in #1226
- feat(host): let a frontend-only commit resume a save by @guyspy in #1236
- hotfix(plugin): resume frontend-only commits without restarting the backend by @guyspy in #1238
- Back-merge main into develop after plugin hotfix by @guyspy in #1239
- feat(next/core): Step 2 interfaces and conformance todo (main gate) by @guyspy in #1211
- test(next): local D1 test line (stack 1/n) by @guyspy in #1212
- feat(next/core): storage convergence (stack 2/n) by @guyspy in #1213
- feat(next/core): policy, executor and runners; conformance on D1 (stack 3/n) by @guyspy in #1214
- feat(next/core): Store over the executor (stack 4/n) by @guyspy in #1216
- feat(next/spec): plan v6 and the RuntimePlan fingerprint (stack 5/n) by @guyspy in #1218
- feat(next/core): runtime, invokeProcedure and createMantle (stack 6/n) by @guyspy in #1219
- feat(next/web): the REST surface (stack 7/n) by @guyspy in #1220
- feat(next/core): Store validates written values (stack 8/n) by @guyspy in #1221
- fix(next): TTL semantics (stack 9/n) by @guyspy in #1222
- feat(next/core): lifecycle rules, status and publish hooks (stack 10/n) by @guyspy in #1223
- refactor(next): ponytail pass, one AST builder module and the spike removed (stack 11/n) by @guyspy in #1224
- feat(next): close the open review items (stack 12/n) by @guyspy in #1227
- refactor(next): ponytail review of the tip (stack 13/n) by @guyspy in #1228
- fix(next): the two Opus audits (stack 14/n) by @guyspy in #1229
- feat(next/auth): CallerResolver and AdminIdentity (auth 1/n, stack 15/n) by @guyspy in #1230
- feat(next): withCaller CSRF and resource metadata, per-folder boundaries (stack 16/n) by @guyspy in #1231
- feat(next/core): canonical migrations and the instance id (stack 17/n) by @guyspy in #1232
- feat(next/auth): port Better Auth facade (auth 2/n) by @guyspy in #1233
- feat(next/mcp): MCP surface from Procedures and Views (mcp 1/n) by @guyspy in #1234
- feat(next/spec): plan presentation metadata (admin 1/5) by @guyspy in #1235
- feat(next/admin): createAdminSurface skeleton (admin 2/5) by @guyspy in #1237
- feat(next/admin): entries over the caller's Store (admin 3/5) by @guyspy in #1240
- feat(next): admin 4/5 — site config and media (Core product tables, MantleSite, MediaStorage + R2) by @guyspy in #1241
- feat(next): staff MCP in Admin, /webmcp, developer console, createAuthRoutes (admin 5/5) by @guyspy in #1242
- feat(next): mantle generate — plan.json, typed mantle.ts, generate --check with storage dry-run (step 4, cli 1/6) by @guyspy in #1243
- feat(next): service preset, toCloudflareCron and the schedule gate (step 4, cli 2/6) by @guyspy in #1244
- refactor(next): staff management through Better Auth's admin API by @guyspy in #1251
- refactor(next): split createMantleAuth.ts along its seams by @guyspy in #1252
- refactor(next): auth exports its contract only; drop tests that re-test libraries by @guyspy in #1253
- refactor(next): split ManifestParser, ManifestGraphValidator and SchemaAdminUiChecker by @guyspy in #1254
- docs(adr): ADR-0035 — SQL dialects: PostgreSQL syntax is Mantle SQL, a dialect runs it on one engine by @guyspy in #1255
- refactor(next): move D1 out of Core into @aotter/mantle/d1 (ADR-0035 How to apply 1) by @guyspy in #1256
- feat(next): mantle.* functions, plan v8 with its dialect, config dialect, shared front end (ADR-0035 How to apply 2) by @guyspy in #1257
- refactor(next/cli): the mantle bin is one command, generate by @guyspy in #1258
- feat(next): StoreSelect.search, and Admin's search box on it (ADR-0035 How to apply 3) by @guyspy in #1259
- feat(next/auth): auth reaches no dialect; its SQL is portable (ADR-0035 How to apply 4) by @guyspy in #1260
- feat(next/testing): the compliance suite runs over the dialect interface (ADR-0035 How to apply 5) by @guyspy in #1261
- docs: 0.1.x → 0.2.0 upgrade guide for agents, in place of mantle-update by @guyspy in #1262
- fix(next/core): bind a camelCase input by its declared name by @guyspy in #1263
- feat!: the swap — next/ becomes @aotter/mantle 0.2.0-alpha.1, with the reference service as the release gate by @guyspy in #1264
- feat: the Admin console is @aotter/mantle-ui/admin, served by the preset and ported to the 0.2 wire by @guyspy in #1265
- fix(admin): remaining Low findings from the Admin console fold review by @guyspy in #1266
- docs: port the handbook, examples and skills to 0.2.0 by @guyspy in #1267
- feat(admin,store): staff View search and filters (ADR-0032 decision 5); clear the 0.1.x top-level docs by @guyspy in #1278
- fix: the 0.2.x milestone review — hooks, Store writes, View paging, MCP scope floor, boot cost by @guyspy in #1279
- fix: what a real purchase-request site found on the 0.2.x tip — hook rows, timestamps, unique refs, option labels, aggregates by @guyspy in #1280
- fix(admin): what a full sweep of the console on a real site found by @guyspy in #1281
- refactor(ui): Admin's fields and value renderers move into @aotter/mantle-ui by @guyspy in #1282
- refactor(admin): Admin answers no MCP; /mcp/staff is the one staff MCP mount by @guyspy in #1283
- feat(mcp): Mantle's MCP App on /mcp/staff, with the plan's catalog embedded by @guyspy in #1284
- docs(skills): an MCP App recipe for member-facing Apps by @guyspy in #1285
- fix(ui): the MCP App's review form is Admin's SchemaFields; shared fields fixes by @guyspy in #1286
- fix(store): scoped upserts, unique-conflict opIndex, schedule sweeps and nullable write types by @guyspy in #1292
- feat(postgres): a PostgreSQL dialect for Hyperdrive and Bun by @guyspy in #1294
- fix(sqlite): classify engine errors by the driver's code, not D1's message by @guyspy in #1299
- feat(cli): host × dialect, the Hyperdrive preset, host none (ADR-0036) by @guyspy in #1300
- fix(auth): read an OAuth grant's scopes and resources from PostgreSQL's jsonb by @guyspy in #1301
- fix(mcp): challenge anonymous at initialize when no tool admits anonymous by @guyspy in #1303
- feat(sql): PostgreSQL is the reference dialect; D1 runs a subset (ADR-0037) by @guyspy in #1304
- fix(runtime): preserve JSON types and isolate invocation context by @guyspy in #1307
- feat(admin): visualize SQL procedure execution from compiled AST by @guyspy in #1308
- feat(bun): official native PostgreSQL and SQLite host by @guyspy in #1310
- feat(admin): visualize compiled SQL conditions and dependencies by @guyspy in #1311
- feat(core): verifyPlan for Cloud; DiagnosticError matches across bundles; Worker-safe root exports by @guyspy in #1314
- test: gate 0.2 alpha with populated four-host Admin acceptance by @guyspy in #1319
- 0.2.0 release cleanup: docs audit, #1315, typed view search/filters, release gates PG and Bun by @guyspy in #1320
- auth: session.createdAt for recent-sign-in checks; deleteUser drops pending email codes by @guyspy in #1315
- fix(auth): preserve user deletion retry before first alpha by @guyspy in #1321
- docs(spec): correct unsupported idempotent hint inference by @guyspy in #1323
- fix(web): prevent caching caller-dependent REST responses by @guyspy in #1331
- feat(admin): export isolated full Admin design preview by @guyspy in #1332
- fix(plugin): restore Cloud protocol 3 cooperation and hosted development flow by @guyspy in #1334
- fix: enforce consumer peer versions and upgrade Better Auth 1.7.7 by @guyspy in #1336
- docs: align consumer skills with Cloud and Admin permission contracts by @guyspy in #1338
- feat: inspect procedure logic in a drawer with expanded graph modal by @guyspy in #1340
- fix: keep the expanded procedure graph visible after canvas resizing by @guyspy in #1342
- feat: move overview graph controls into Admin navigation by @guyspy in #1344
- fix(ui): allow Admin preview inside an MCP App host by @guyspy in #1345
- fix(ui): default Builder previews to System wiring by @guyspy in #1346
- fix(ui): keep diagram preferences in host-selected Admin URLs by @guyspy in #1347
- fix(admin): remove Cloud-specific design API instructions by @guyspy in #1348
- feat(ui): expose a host command menu for opt-in Admin previews by @guyspy in #1349
- fix(spec): preserve SQL diagnostics without Node Buffer by @guyspy in #1350
- fix(ui): keep project controls in Home and render INSERT CASE decisions by @guyspy in #1352
- feat(plugin): gate Cloud saves on verified Git source by @guyspy in #1353
- chore(release): prepare 0.2.0-alpha.3 by @guyspy in #1354
- chore(release): promote verified alpha.3 tree to main by @guyspy in #1355
- chore: simplify Cloud plugin to native MCP and offline packing by @guyspy in #1369
- docs: default complete website generation and acceptance by @guyspy in #1371
- feat(plugin): gate Cloud website artifacts before upload by @guyspy in #1373
- fix(plugin): guide custom handler local HTTP acceptance by @guyspy in #1375
- fix(plugin): document bounded native upload recovery by @guyspy in #1378
- feat(plugin): local prepare and native Cloud continuation by @guyspy in #1382
- feat(plugin): align fixed-source delivery with durable Cloud publication by @guyspy in #1387
- docs(plugin): guide safe native preview discard recovery by @guyspy in #1390
- docs: define the thin native toolkit responsibility boundary by @guyspy in #1420
- Integrate reviewed thin-native SDK stability fixes by @guyspy in #1424
- fix(test): clean up browser setup failures and correct timeout docs by @guyspy in #1421
- docs: specify native paging, convergence and host support contracts by @guyspy in #1422
- fix(core): preserve request context and isolate generated service instances by @guyspy in #1423
- perf: finish native query cleanup by @guyspy in #1429
- Keep native View SQL per dialect and remove redundant SQLite count queries by @guyspy in #1431
- feat(mcp): export mcpTools from the runtime mcp entry by @guyspy in #1425
- test(ui): start Chrome once before the browser tests by @guyspy in #1444
- perf(core): build plan validators on first use, per entry by @guyspy in #1446
- perf(next): native-parity writes, Bun.SQL PostgreSQL handle, checked boundary removed by @guyspy in #1461
- feat(next): generate native typed SQL for Bun and Workers on four drivers by @guyspy in #1460
- feat(next): Better Auth off the hot path: native adapter, schema, Caller resolution by @guyspy in #1464
- feat(next): one runtime core, row rules as data, generic Store with batch and transactions (ADR-0045) by @guyspy in #1468
- feat(next): generate writes the Wrangler split build; bundle with a startup guard by @guyspy in #1469
- test(next): size gate on the mantle bundle split build; measured and declined lazy operations by @guyspy in #1481
- feat(next): generated surface foundation and keyset paging by @guyspy in #1486
- feat(next): supported scope and actionable generation refusals by @guyspy in #1484
- feat(next): opt-in publishing lifecycle by @guyspy in #1485
- feat: generate typed ref Procedure handlers by @guyspy in #1482
- docs(next): 0.2 feature inventory and port work packages by @guyspy in #1493
- feat(next): generate REST handler for public Views and HTTP Triggers by @guyspy in #1490
- feat(next): generate optional dynamic web output by @guyspy in #1489
- feat(next): generate lazy official MCP handlers by @guyspy in #1491
- feat(next): optional email port and English templates by @guyspy in #1512
- feat(next): generate system-only TTL sweep procedures by @guyspy in #1513
- feat(next): bind OAuth grants and expose consent routes by @guyspy in #1515
- feat(next): native collection search and SQL search validation by @guyspy in #1517
- feat(next): identity helpers and hardened staff auth template by @guyspy in #1518
- refactor(next): move surface runtimes into kernel modules by @guyspy in #1521
- feat(next): generate static Admin and MCP App descriptors by @guyspy in #1519
- feat(next): optional site settings and native media library by @guyspy in #1516
- feat(next): scoped translations and bounded locale page helpers by @guyspy in #1520
- perf(next): delete keyset columns by literal name in kernel paging by @guyspy in #1522
- perf(next): slim the runtime and generated output; gate startup per surface by @guyspy in #1523
- fix(generate): defer Store initialization until first use by @guyspy in #1539
- feat(next): prove safe native composite and internal View paging by @guyspy in #1537
- feat(next): document native web composition with a runnable Worker by @guyspy in #1531
- feat(generate): check committed artifacts and document service composition by @guyspy in #1530
- test(postgres): add application-owned adapter conformance by @guyspy in #1533
- fix(auth): halve native cookie caller reads by @guyspy in #1536
- refactor(compiler): isolate generator ownership (partial #1479) by @guyspy in #1545
- fix(auth): search UUID member identifiers as text on PostgreSQL by @guyspy in #1560
- fix(next): preserve native integers at selected transport boundaries by @guyspy in #1550
- fix(auth): use one primary cookie read and opt-in bounded read cache by @guyspy in #1561
- feat(admin,mcp): #1563 Admin and MCP follow-ups by @guyspy in #1567
- chore(ci): slim PR CI and tests; heavy checks move to manual full-checks by @guyspy in #1568
- ci(full-checks): run on the full-checks PR label by @guyspy in #1569
- chore(plugin): make the public Mantle plugin OSS-only by @guyspy in #1467
- fix(surfaces): one declared scalar wire form across native targets (#1525, #1526) by @guyspy in #1570
- feat(auth): cookie cache for read-only requests; OAuth resources from runtime config (#1552, #1558) by @guyspy in #1571
- docs: 0.2.0 handbook for canonical native Core (#1566, #1556, #1479) by @guyspy in #1572
- chore(package): slim the published SDK package by @guyspy in #1573
- perf(admin): load only the first screen statically (#1554) by @guyspy in #1574
- chore: Workers best practices for reference service and scaffold (#1575) by @guyspy in #1577
- fix(admin): developer overview defaults to system wiring; sidebar marks the overview active by @guyspy in #1578
- chore(ci): parallel PR CI; integration tests own shared scenarios by @guyspy in #1579
- docs(adr): ADR-0046 roles and user fields in SQL scope (#1492) by @guyspy in #1565
- feat(sdk): acceptance DX — to-one joins page, email format, output-name warning, optional handlers by @guyspy in #1580
- feat(admin): acceptance UX — operation placement, preconditions, developer live data by @guyspy in #1581
- feat(auth): rename the privileged layer to admin (ADR-0046 phase A) by @guyspy in #1582
- feat(auth): ADR-0046 user fields, scope predicates, restrict and { all: true } by @guyspy in #1583
- feat(auth): authorize(target, caller) seam on REST, MCP and Admin by @guyspy in #1585
- fix(user-fields): a target that reads a restricted View carries its restrict by @guyspy in #1587
- feat(mantle): describeApp, targetHash and mantle describe by @guyspy in #1586
- feat(auth): ADR-0046 gateway contract (host caller, pinning, dry run, onAccess) and wave slimming by @guyspy in #1588
- perf(ci): PR CI without PostgreSQL, single SDK compile, halve duplicate tests by @guyspy in #1589
- fix(sql): restrict covers Procedure INSERT and upsert SET by @guyspy in #1590
- fix(auth): identity and caller authority on Better Auth's own model by @guyspy in #1591
- refactor(sql): row mode is required; Admin shares one write admission by @guyspy in #1593
- refactor(auth): Better Auth database rate limiter; remove the KV session mirror by @guyspy in #1592
- ci: run PR CI only for outside PRs; Full checks on demand by @guyspy in #1597
- feat(examples): app shell and three composable examples; DX fixes from a fresh-agent run by @guyspy in #1600
- fix: readOnly properties are server-maintained; check failures are 409; userOf for every credential by @guyspy in #1601
- feat(cli): mantle bundle refuses stale generated output; notes extra Better Auth roles by @guyspy in #1602
- feat(examples): members-only sign-up for club-events by @guyspy in #1603
- fix(admin): child collections out of the sidebar again; examples add records through collectionAction by @guyspy in #1604
- feat(generate): warn when Admin cannot add records to an operational Schema by @guyspy in #1605
- docs: composing examples, seeding native columns, paged View ORDER BY indexes by @guyspy in #1606
- feat(auth): readIdentity for server-side reads of Better Auth users by @guyspy in #1607
- fix: review of the examples series; bundle notes SQL on Better Auth tables by @guyspy in #1609
- fix(generate): repeatable --auth for several Better Auth instances; strict-safe PG Admin entries by @guyspy in #1610
- fix(dx): no pnpm pin in app-shell; overrides reach pnpm 10+; clear error on old Node by @guyspy in #1612
- feat(examples): member sign-in + signed-in employee page; Admin refusal message by @guyspy in #1619
- docs: public-pages SSOT; recipes Open Graph + dateModified by @guyspy in #1620
- fix(examples): employee page submits to the REST Trigger by @guyspy in #1621
- fix(auth): postgresAdapter for Bun.SQL or postgres.js (#1618) by @guyspy in #1622
- fix(handlers): ctx.transaction for atomic ref handlers (#1616) by @guyspy in #1623
- docs(procedure): ctx.store uses storage names in ref handlers by @guyspy in #1615
- fix(store): undefined scope value on insert autofills (#1613) by @guyspy in #1624
- fix(admin): ref operations use adminBindings' handlers (#1614) by @guyspy in #1625
- fix(paging): caller IN scope is a fixed index prefix (#1611) by @guyspy in #1639
- feat(admin): project-defined sidebar groups and order (#1584) by @guyspy in #1640
- fix(admin): sidebar order and empty groups follow the documented rules by @guyspy in #1649
- fix(paging): an IN user-field term never fixes an index prefix (#1644) by @guyspy in #1650
- docs: role-list rule in skills; versioned packaged repo links by @guyspy in #1652
- Postgres reads accept a transaction handle without begin by @guyspy in #1654
- Validate Admin sidebar placement and fix its docs by @guyspy in #1655
- fix(paging): refusal guidance offers only ways that work (#1644) by @guyspy in #1653
- fix(auth): end a user's OAuth grants for good on credential and ban events by @guyspy in #1656
- fix(examples): pin Better Auth core/utils; check fresh npm and pnpm 10 installs by @guyspy in #1663
- feat(validation): cross-field input rules, const and format uri by @guyspy in #1664
- MCP: tool definition versions so a stale host copy is visible to the model by @guyspy in #1665
- fix(mcp): refuse foreign Origins and rebound Hosts; default tool titles and hints by @guyspy in #1671
- docs(adr): ADR-lite 1376 revision 4, application-built Admin by @guyspy in #1672
- feat(admin): @aotter/mantle-admin/app with defineAdmin and by @guyspy in #1673
- fix: review follow-ups for View tool schemas, constant validation and index hints by @guyspy in #1676
- fix(admin): ambiguity diagnostic suggests only a line that passes the cycle check (#1667) by @guyspy in #1682
- feat(mcp-apps): close MCP Apps spec gaps in the Admin App and SDK by @guyspy in #1681
- fix(admin): review fixes for the Admin library by @guyspy in #1679
- fix(admin,bundle): review fixes for #1677 by @guyspy in #1683
- feat(admin): typed data hooks and generated admin-client.ts (PR 7) by @guyspy in #1686
- feat(admin): components override map with renderDefault, plugins and adminVitePlugin by @guyspy in #1687
- feat(admin): nav.groups and nav.items in defineAdmin (PR 9) by @guyspy in #1688
- feat(admin): view-batch route and nav badges (#1669) by @guyspy in #1690
- docs(adr): ADR-lite 1376 revision 4, MCP Apps decision by @guyspy in #1678
- feat(admin): server-side reference titles and optional home landing (#1670) by @guyspy in #1691
- feat(mcp): cut MCP View pages by serialized size by @guyspy in #1695
- fix(core): drain an unread request body once a handler has answered by @guyspy in #1698
- feat(admin): public theme tokens; .dark and data-theme agree by @guyspy in #1700
- feat(admin): load more instead of previous/next paging by @guyspy in #1701
- feat(admin): shadcn registry of Admin slot components by @guyspy in #1702
- docs: fix gaps found by an end-to-end Admin acceptance run by @guyspy in #1707
- fix(admin): use the official MCP App client by @guyspy in #1708
- perf(kernel): keep tool calls and web indexes out of the Worker startup graph by @guyspy in #1735
- test(mcp): pin initialize challenge on an all-closed anonymous surface by @guyspy in #1736
- test(admin): browser acceptance for typed navigation by @guyspy in #1738
- Spike: mantle help, mantle init, unmounted-surface warning and role-only acceptance by @guyspy in #1743
- Document SQL patterns and per-dialect SQL; one check-refusal message on every target by @guyspy in #1746
- Clear fresh-agent findings: Store JSON inputs, typed View outputs, Admin relations and actions, evaluator handoff, complete-site docs by @guyspy in #1751
- Accurate Admin create warnings, MCP scan escape, ref and Admin API boundaries by @guyspy in #1753
- Procedure INSERT into a field-scoped Schema follows the Store insert rule by @guyspy in #1755
- README and package metadata: plain definition, FAQ and search terms (SEO/AEO) by @guyspy in #1756
- fix(store): check x-mantle-ref to a scoped Schema on caller writes by @guyspy in #1759
- fix(auth): a user field scoping an integer column holds only integers by @guyspy in #1758
- Keep a root catch-all app page from shadowing /admin and /mcp by @guyspy in #1764
- Admin: edit a publishing entry only as a draft by @guyspy in #1765
- Admin: check x-mantle-ref to a scoped Schema on generic create and patch by @guyspy in #1766
- Slim Worker cold start: lazy developer snapshot, shared Admin specs, lazy consent and web serving by @guyspy in #1767
- Slim published packages: strip prose comments, light-minify the compiler, ship declarations once by @guyspy in #1768
- Admin MCP App: tree-shake the MCP SDK packages, which declare no sideEffects by @guyspy in #1769
Full Changelog: v0.1.4...v0.2.0