@aotter/mantle 0.1.0-alpha.13 → 0.1.0-alpha.14

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.
@@ -106,6 +106,15 @@ optional `/libsql` subpath adapts a caller-owned remote Turso/libSQL client to
106
106
  the canonical SQLite chain; the default entry has no database-vendor policy.
107
107
  Vercel's read-only filesystem and writable `/tmp` are never durable state.
108
108
 
109
+ ### Browser IndexedDB embedding
110
+
111
+ `@aotter/mantle-indexeddb` implements the same required semantic storage ports
112
+ over one application-owned IndexedDB database. It keeps browser globals out of
113
+ Runtime Core, supports declarative Views with a documented O(n) collection
114
+ scan, and exposes `deleteDatabase()` only on the concrete adapter. The host owns
115
+ database naming, `navigator.storage` persistence requests, active-runtime
116
+ selection, UI invalidation, and any remote synchronization.
117
+
109
118
  ## HTTP and MCP surfaces
110
119
 
111
120
  The runtime is a library, not an HTTP server. A new adapter must mount equivalent framework routes:
@@ -2,10 +2,12 @@
2
2
 
3
3
  **Status:** Accepted
4
4
 
5
- **Date:** 2026-08-16; last amended 2026-08-31
5
+ **Date:** 2026-08-16; last amended 2026-09-01
6
6
 
7
7
  **Related:** [#656](https://github.com/aotter/mantle/issues/656),
8
8
  [#662](https://github.com/aotter/mantle/issues/662),
9
+ [#759](https://github.com/aotter/mantle/issues/759),
10
+ [#760](https://github.com/aotter/mantle/issues/760),
9
11
  [#546](https://github.com/aotter/mantle/issues/546), ADR-0008, ADR-0009,
10
12
  ADR-0011, ADR-0018
11
13
 
@@ -106,6 +108,15 @@ Concrete D1/SQLite drivers and SQL repositories remain implementation details.
106
108
  An existing application may either pass its already-owned database/client to
107
109
  an official adapter or implement the semantic ports over its own tables.
108
110
 
111
+ `@aotter/mantle-indexeddb` is the optional browser storage implementation of
112
+ the same semantic ports. One adapter exclusively owns one application-selected
113
+ database name, uses structured-clone persistence and IndexedDB transaction
114
+ completion as its write boundary, and exposes database deletion only on the
115
+ concrete adapter. Runtime Core gains no browser global, browser facade,
116
+ namespace, persistence request, reactive binding, or synchronization port.
117
+ Declarative browser Views use a documented O(n) scan until measured use proves
118
+ an IndexedDB query planner necessary.
119
+
109
120
  Declarative Views compile to logical plans once. Storage preparation lowers
110
121
  those plans to native queries. The v0.1 `View.spec.sql` form remains explicitly
111
122
  SQLite-only and is rejected by unsupported storage during preparation; Mantle
@@ -123,11 +134,18 @@ select a surface and bind transport or browser lifecycle, but do not rescan raw
123
134
  manifests or maintain a second registry.
124
135
 
125
136
  `@aotter/mantle-web/webmcp` is an opt-in host binding over that projection. It
126
- feature-detects `document.modelContext`, registers only public View
127
- capabilities, invokes the existing same-origin View REST route, and uses the
128
- registration `AbortSignal` for teardown. It does not add browser globals to
129
- runtime Core, expose staff/mutating capabilities, or introduce a second
130
- manifest/runtime path.
137
+ feature-detects `document.modelContext`, adds public capabilities without
138
+ replacing existing host tools, and uses the registration `AbortSignal` only for
139
+ teardown. A browser-local host supplies the projected capabilities and a
140
+ late-bound invoker; Procedure calls retain their explicit MCP Trigger identity.
141
+ For a server-backed host, the Cloudflare adapter publishes a minimal public View
142
+ catalog at `GET /api/views`; the binding validates that wire catalog and invokes
143
+ the existing same-origin `GET /api/views/<name>` route. The catalog contains no
144
+ raw manifest or staff capability.
145
+ Invocation hooks may drive host UI effects but cannot replace Runtime
146
+ validation, authorization, dispatch, or domain results. The binding does not
147
+ add browser globals to Runtime Core, expose staff capabilities, or introduce a
148
+ second manifest/runtime path.
131
149
 
132
150
  ### Naming and code generation
133
151
 
@@ -121,17 +121,18 @@ gh api --method POST repos/aotter/mantle/releases/generate-notes \
121
121
  --jq .body
122
122
  ```
123
123
 
124
- The nine public packages publish in dependency order:
124
+ The ten public packages publish in dependency order:
125
125
 
126
126
  1. `@aotter/mantle-spec`
127
127
  2. `@aotter/mantle-admin-ui`
128
128
  3. `@aotter/mantle-runtime`
129
- 4. `@aotter/mantle-web`
130
- 5. `@aotter/mantle-admin`
131
- 6. `@aotter/mantle-bun`
132
- 7. `@aotter/mantle-vercel`
133
- 8. `@aotter/mantle-cloudflare`
134
- 9. `@aotter/mantle`
129
+ 4. `@aotter/mantle-indexeddb`
130
+ 5. `@aotter/mantle-web`
131
+ 6. `@aotter/mantle-admin`
132
+ 7. `@aotter/mantle-bun`
133
+ 8. `@aotter/mantle-vercel`
134
+ 9. `@aotter/mantle-cloudflare`
135
+ 10. `@aotter/mantle`
135
136
 
136
137
  The umbrella package must contain its version-matched `docs/` and `skills/`
137
138
  payload. No tarball may contain `workspace:*` dependencies, secrets, local
@@ -156,7 +157,7 @@ Before creating the Core tag, the controller proves:
156
157
  - the requested version matches every package, plugin, and marketplace ref;
157
158
  - `pnpm check` passes;
158
159
  - packed Core passes in the exact pinned Starter source;
159
- - all nine release tarballs exist;
160
+ - all ten release tarballs exist;
160
161
  - npm and cross-repository credentials are present and readable;
161
162
  - a fresh version is unused across npmjs, GitHub Packages, and Starter tags;
162
163
  - the pinned Starter commit is still the remote `develop` tip.
@@ -194,7 +195,7 @@ Core repository secrets:
194
195
 
195
196
  | Secret | Minimum purpose |
196
197
  |---|---|
197
- | `NPM_TOKEN` | Publish the nine `@aotter/*` packages on npmjs. |
198
+ | `NPM_TOKEN` | Publish the ten `@aotter/*` packages on npmjs. |
198
199
  | `RELEASE_FANOUT_TOKEN` | Read and dispatch `aotter/mantle-starters`; also read and dispatch `aotter/mantle-landing` only when Landing is enabled. |
199
200
 
200
201
  Core's job-scoped `GITHUB_TOKEN` creates the Core tag and release and mirrors
@@ -217,6 +218,7 @@ for p in \
217
218
  @aotter/mantle-spec \
218
219
  @aotter/mantle-admin-ui \
219
220
  @aotter/mantle-runtime \
221
+ @aotter/mantle-indexeddb \
220
222
  @aotter/mantle-web \
221
223
  @aotter/mantle-admin \
222
224
  @aotter/mantle-bun \
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aotter/mantle",
3
- "version": "0.1.0-alpha.13",
3
+ "version": "0.1.0-alpha.14",
4
4
  "description": "Embeddable Mantle Core umbrella with Spec and Runtime; Web, Admin, Bun, Vercel, Cloudflare, and Admin UI are optional peer packages.",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://mantle.tools/",
@@ -83,8 +83,8 @@
83
83
  "README.md"
84
84
  ],
85
85
  "dependencies": {
86
- "@aotter/mantle-runtime": "0.1.0-alpha.13",
87
- "@aotter/mantle-spec": "0.1.0-alpha.13"
86
+ "@aotter/mantle-spec": "0.1.0-alpha.14",
87
+ "@aotter/mantle-runtime": "0.1.0-alpha.14"
88
88
  },
89
89
  "peerDependencies": {
90
90
  "aws4fetch": "^1.0.20",
@@ -92,12 +92,12 @@
92
92
  "hono": "^4.12.0",
93
93
  "@libsql/client": "^0.17.4",
94
94
  "zod": "^4.5.0",
95
- "@aotter/mantle-admin": "0.1.0-alpha.13",
96
- "@aotter/mantle-admin-ui": "0.1.0-alpha.13",
97
- "@aotter/mantle-bun": "0.1.0-alpha.13",
98
- "@aotter/mantle-cloudflare": "0.1.0-alpha.13",
99
- "@aotter/mantle-web": "0.1.0-alpha.13",
100
- "@aotter/mantle-vercel": "0.1.0-alpha.13"
95
+ "@aotter/mantle-admin-ui": "0.1.0-alpha.14",
96
+ "@aotter/mantle-cloudflare": "0.1.0-alpha.14",
97
+ "@aotter/mantle-vercel": "0.1.0-alpha.14",
98
+ "@aotter/mantle-web": "0.1.0-alpha.14",
99
+ "@aotter/mantle-admin": "0.1.0-alpha.14",
100
+ "@aotter/mantle-bun": "0.1.0-alpha.14"
101
101
  },
102
102
  "peerDependenciesMeta": {
103
103
  "@aotter/mantle-admin": {
@@ -140,12 +140,12 @@
140
140
  "typescript": "^6.0.3",
141
141
  "vitest": "^4.1.10",
142
142
  "zod": "^4.5.4",
143
- "@aotter/mantle-admin-ui": "0.1.0-alpha.13",
144
- "@aotter/mantle-bun": "0.1.0-alpha.13",
145
- "@aotter/mantle-cloudflare": "0.1.0-alpha.13",
146
- "@aotter/mantle-admin": "0.1.0-alpha.13",
147
- "@aotter/mantle-vercel": "0.1.0-alpha.13",
148
- "@aotter/mantle-web": "0.1.0-alpha.13"
143
+ "@aotter/mantle-admin": "0.1.0-alpha.14",
144
+ "@aotter/mantle-admin-ui": "0.1.0-alpha.14",
145
+ "@aotter/mantle-bun": "0.1.0-alpha.14",
146
+ "@aotter/mantle-cloudflare": "0.1.0-alpha.14",
147
+ "@aotter/mantle-vercel": "0.1.0-alpha.14",
148
+ "@aotter/mantle-web": "0.1.0-alpha.14"
149
149
  },
150
150
  "engines": {
151
151
  "node": ">=22"