@aotter/mantle 0.1.0-alpha.12 → 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
 
@@ -99,15 +99,17 @@ rollback or unpublish behavior, or deploy Landing unless
99
99
  3. Set that exact version in every workspace package and in all four agent
100
100
  plugin manifests. Set `.agents/plugins/marketplace.json` to the immutable
101
101
  `v<version>` ref.
102
- 4. Pin both the controller and Core CI to the exact reviewed
103
- `mantle-starters/develop` commit intended for this release. Do not use a
104
- branch, latest tag, or inferred fallback.
102
+ 4. Pin the controller to the exact reviewed `mantle-starters/develop` and
103
+ `mantle-landing/develop` commits intended for this release, and Core CI to
104
+ the same Starter commit. Do not use a branch, latest tag, or inferred
105
+ fallback.
105
106
  5. If an SDK type changed, audit downstream literal constructors and exhaustive
106
107
  switches before publication. CI in Core cannot prove downstream source
107
108
  compatibility by itself.
108
109
  6. Run `pnpm check`, inspect the packed umbrella package, and run the exact
109
- packed-consumer gate. Review and merge a same-repository PR into `develop`;
110
- the controller rejects a direct-push release commit.
110
+ packed-consumer gates against both pinned Starter and Landing commits before
111
+ tagging. Review and merge a same-repository PR into `develop`; the
112
+ controller rejects a direct-push release commit.
111
113
 
112
114
  Preview the native notes before merging the release PR:
113
115
 
@@ -119,17 +121,18 @@ gh api --method POST repos/aotter/mantle/releases/generate-notes \
119
121
  --jq .body
120
122
  ```
121
123
 
122
- The nine public packages publish in dependency order:
124
+ The ten public packages publish in dependency order:
123
125
 
124
126
  1. `@aotter/mantle-spec`
125
127
  2. `@aotter/mantle-admin-ui`
126
128
  3. `@aotter/mantle-runtime`
127
- 4. `@aotter/mantle-web`
128
- 5. `@aotter/mantle-admin`
129
- 6. `@aotter/mantle-bun`
130
- 7. `@aotter/mantle-vercel`
131
- 8. `@aotter/mantle-cloudflare`
132
- 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`
133
136
 
134
137
  The umbrella package must contain its version-matched `docs/` and `skills/`
135
138
  payload. No tarball may contain `workspace:*` dependencies, secrets, local
@@ -154,7 +157,7 @@ Before creating the Core tag, the controller proves:
154
157
  - the requested version matches every package, plugin, and marketplace ref;
155
158
  - `pnpm check` passes;
156
159
  - packed Core passes in the exact pinned Starter source;
157
- - all nine release tarballs exist;
160
+ - all ten release tarballs exist;
158
161
  - npm and cross-repository credentials are present and readable;
159
162
  - a fresh version is unused across npmjs, GitHub Packages, and Starter tags;
160
163
  - the pinned Starter commit is still the remote `develop` tip.
@@ -192,7 +195,7 @@ Core repository secrets:
192
195
 
193
196
  | Secret | Minimum purpose |
194
197
  |---|---|
195
- | `NPM_TOKEN` | Publish the nine `@aotter/*` packages on npmjs. |
198
+ | `NPM_TOKEN` | Publish the ten `@aotter/*` packages on npmjs. |
196
199
  | `RELEASE_FANOUT_TOKEN` | Read and dispatch `aotter/mantle-starters`; also read and dispatch `aotter/mantle-landing` only when Landing is enabled. |
197
200
 
198
201
  Core's job-scoped `GITHUB_TOKEN` creates the Core tag and release and mirrors
@@ -215,6 +218,7 @@ for p in \
215
218
  @aotter/mantle-spec \
216
219
  @aotter/mantle-admin-ui \
217
220
  @aotter/mantle-runtime \
221
+ @aotter/mantle-indexeddb \
218
222
  @aotter/mantle-web \
219
223
  @aotter/mantle-admin \
220
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.12",
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.12",
87
- "@aotter/mantle-spec": "0.1.0-alpha.12"
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.12",
96
- "@aotter/mantle-admin-ui": "0.1.0-alpha.12",
97
- "@aotter/mantle-cloudflare": "0.1.0-alpha.12",
98
- "@aotter/mantle-web": "0.1.0-alpha.12",
99
- "@aotter/mantle-bun": "0.1.0-alpha.12",
100
- "@aotter/mantle-vercel": "0.1.0-alpha.12"
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.12",
144
- "@aotter/mantle-admin": "0.1.0-alpha.12",
145
- "@aotter/mantle-bun": "0.1.0-alpha.12",
146
- "@aotter/mantle-cloudflare": "0.1.0-alpha.12",
147
- "@aotter/mantle-vercel": "0.1.0-alpha.12",
148
- "@aotter/mantle-web": "0.1.0-alpha.12"
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"