@aotter/mantle 0.0.11-alpha.28 → 0.0.11-alpha.30

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.
@@ -1,24 +1,29 @@
1
- # ADR-0016: Site semantic layer — `AGENTS.md` + `mantle/site.md`
1
+ # ADR-0016: Site semantic layer — `AGENTS.md` + launch state
2
2
 
3
3
  ## Status
4
4
 
5
- Accepted (slimmed 2026-05-12 per Epic #116; letter surface suspended 2026-06-19).
5
+ Accepted (slimmed 2026-05-12 per Epic #116; `mantle/site.md` letter
6
+ surface suspended 2026-06-19 and removed from first-run scaffolds).
6
7
 
7
8
  ## Decision
8
9
 
9
- Every agent-authored mantle project carries two files at fixed paths. They serve different audiences, change at different rates, and are filled by `create-mantle` from `_common/*.template` files.
10
+ Every agent-authored mantle project carries a small cross-tool entry file
11
+ and deterministic launch state at fixed paths:
10
12
 
11
13
  | File | Audience | Size budget | Format |
12
14
  |---|---|---|---|
13
15
  | `AGENTS.md` | Any cross-tool agent harness (Codex / Cursor / Aider / Amp / Factory / Claude Code) | ~30 lines | Plain markdown |
14
- | `mantle/site.md` | Mantle install / customize / deploy context | ~300 lines | Frontmatter + section bodies |
16
+ | `.mantle/launch-state.json` | Install/provision context captured by landing or direct CLI flags | Small JSON record | JSON |
15
17
 
16
- `AGENTS.md` answers "what is this and how do I run it." `mantle/site.md` carries the site's semantic layer:
18
+ `AGENTS.md` answers "what is this and how do I run it." Launch state
19
+ carries install-critical facts such as archetype, brand, description,
20
+ locales, selected features, GitHub owner/admin login, starter ref, and
21
+ repo target.
17
22
 
18
- - Frontmatter: machine-readable (`archetype`, `brand`, `locales`, `site_url`, `revisions[]`, `futures[]`, `dont_touch[]`).
19
- - Body sections (`## site`, `## voice`, `## editor`, `## history`) each open with a `> purpose:` header so agents can route reads without parsing prose. Mantle reads the whole file on return, edits sections, writes the whole file back. **Atomic replace, not append.**
20
-
21
- The earlier `## welcome` 5-card letter surface is suspended. Provisioning must not block on prose completion in `mantle/site.md`; a first deploy should be possible from deterministic scaffold state.
23
+ The earlier `mantle/site.md` semantic/letter surface and `## welcome`
24
+ 5-card letter surface are suspended for the first-run path. Provisioning
25
+ must not block on prose completion; a first deploy should be possible
26
+ from deterministic scaffold state.
22
27
 
23
28
  ## Placeholder macros
24
29
 
@@ -40,18 +45,21 @@ New macros must be added here, to `_common/*.template`, and to the substitution
40
45
 
41
46
  ## Update rules
42
47
 
43
- - **Mantle on return**: read whole `mantle/site.md`, edit relevant sections, write whole atomically, append one paragraph to `## history`.
44
- - **provision on deploy**: rewrite frontmatter `site_url:` placeholder → real Workers URL; append a `revisions:` entry. Same `Public site:` rewrite in `AGENTS.md`. Single commit at end of provision.
45
- - **No mid-section staged-and-running mutation.** A section is prose-replaced atomically, or a frontmatter scalar/list is replaced — never partial writes.
48
+ - **Mantle on return**: read `AGENTS.md`, `.mantle/launch-state.json`,
49
+ and repo-local skills before changing code.
50
+ - **provision on deploy**: rewrite `AGENTS.md` `Public site:`
51
+ placeholder → real Workers URL. Single commit at end of provision.
52
+ - **No hidden letter gate.** Prose may be added later, but first deploy
53
+ only depends on deterministic scaffold state and provider configuration.
46
54
 
47
55
  ## Cross-tool compatibility
48
56
 
49
- `AGENTS.md` lives at repo root because that is where the AGENTS.md ecosystem (`agents.md`) looks. `mantle/` is a mantle-owned subdirectory; the naming is deliberately specific so a generic AGENTS.md reader does not interpret it as its own state.
57
+ `AGENTS.md` lives at repo root because that is where the AGENTS.md ecosystem (`agents.md`) looks. `.mantle/` is for Mantle-owned non-secret state.
50
58
 
51
59
  ## Implementation
52
60
 
53
- - Templates: `mantle-starters/_common/AGENTS.md.template` and `mantle-starters/_common/mantle/site.md.template`.
61
+ - Templates: `mantle-starters/_common/AGENTS.md.template`.
54
62
  - Substitution: `packages/create-mantle/src/placeholder.ts`.
55
63
  - Install handoff: `skills/install/SKILL.md` describes deterministic scaffold validation and the short post-substitution notes fill.
56
- - Provision update: `skills/provision/SKILL.md` describes the `site_url:` + `revisions:` write after deploy.
64
+ - Provision update: `skills/provision/SKILL.md` describes the `AGENTS.md` public-site rewrite after deploy.
57
65
  - Theme overlay merge (Epic #116): `themes/<theme-key>/` overlay applies after the archetype starter and may touch `src/theme/` — never these two files.
@@ -16,7 +16,7 @@ Records of *why* mantle ended up shaped this way. The numbering preserves POC AD
16
16
  | [0012](0012-views-as-public-rest.md) | Views auto-expose `GET /api/views/<name>` as the public REST read surface. Schemas never get a public REST endpoint. Filter comparison values accept `{ $param: <name> }`; `?page=&show=` reserved for pagination. | Accepted (new) |
17
17
  | [0013](0013-agent-provisioned-consumer-projects.md) | Agent-provisioned consumer projects: website prompt → Skill → npm packages → starter setup → first-run provision/seed → owner/MCP handoff. | Accepted (new) |
18
18
  | [0014](0014-auth-better-auth-and-multi-tenant-mcp.md) | Better Auth for staff sign-in (D1 session); the MCP OAuth surface carves out to `@cloudflare/workers-oauth-provider` (KV grant store) at top level. The two meet at `/oauth/authorize` where the consent handler reads the Better Auth session. MCP splits into `/mcp/staff` (write, admin-role) and `/mcp` (read, any signed-in). Scope advertised as `["mcp"]` (single non-colon) because claude.ai rejects colon-shaped scopes. Auth port disappears; runtime takes Better Auth instance directly. See § "Amendment 2026-05-15". | Accepted + amended |
19
- | [0016](0016-site-semantic-layer.md) | Site semantic layer: `AGENTS.md` (cross-tool entry, ~30 lines) + `mantle/site.md` (Mantle's frontmatter + section bodies, ~300 lines). Both ship as `{{PLACEHOLDER}}` templates filled by `create-mantle`; Mantle reads whole, edits sections, writes whole atomically. Slimmed 2026-05-12 per Epic #116. | Accepted (slimmed) |
19
+ | [0016](0016-site-semantic-layer.md) | Site semantic layer: `AGENTS.md` (cross-tool entry) + `.mantle/launch-state.json` (deterministic install context). The older `mantle/site.md` letter surface is suspended from first-run scaffolds. | Accepted (slimmed) |
20
20
 
21
21
  ## Reading order
22
22
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aotter/mantle",
3
- "version": "0.0.11-alpha.28",
3
+ "version": "0.0.11-alpha.30",
4
4
  "description": "Umbrella entry for @aotter/mantle. Adopters install this one package and import from subpaths: /spec, /runtime, /cloudflare, /admin-ui. Sub-packages remain individually installable on npm for tooling / alt-adapter authors. The Netlify adapter ships as a private workspace stub in v0.1 — its subpath will be added when the impl lands in v0.2.",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://mantle.tools/",
@@ -47,10 +47,10 @@
47
47
  "README.md"
48
48
  ],
49
49
  "dependencies": {
50
- "@aotter/mantle-admin-ui": "0.0.11-alpha.28",
51
- "@aotter/mantle-runtime": "0.0.11-alpha.28",
52
- "@aotter/mantle-spec": "0.0.11-alpha.28",
53
- "@aotter/mantle-cloudflare": "0.0.11-alpha.28"
50
+ "@aotter/mantle-admin-ui": "0.0.11-alpha.30",
51
+ "@aotter/mantle-cloudflare": "0.0.11-alpha.30",
52
+ "@aotter/mantle-runtime": "0.0.11-alpha.30",
53
+ "@aotter/mantle-spec": "0.0.11-alpha.30"
54
54
  },
55
55
  "peerDependencies": {
56
56
  "@cloudflare/workers-oauth-provider": "^0.7.0",
@@ -49,7 +49,6 @@ After `create-mantle` runs, the scaffold's ground truth lives in:
49
49
  | `src/.mantle/generated.*.ts` | Scaffolder-owned feature glue |
50
50
  | `.mantle/features.json` | Selected feature overlays |
51
51
  | `.mantle/launch-state.json` | Non-secret launch choices from landing |
52
- | `mantle/site.md` | Site semantic layer |
53
52
  | `AGENTS.md` | Cross-tool agent entry |
54
53
 
55
54
  ## Accepted Inputs
@@ -214,7 +213,7 @@ from the landing answers or the user's explicit request:
214
213
  - delete an unused manifest;
215
214
  - add one clearly requested field to an existing Schema;
216
215
  - correct site defaults in `src/mantleConfig.ts`;
217
- - fix a typo in `mantle/site.md` or `AGENTS.md`.
216
+ - fix a typo in `AGENTS.md`.
218
217
 
219
218
  Run `pnpm validate` after every edit. Route larger feature work to
220
219
  `mantle:development` after production provision.
@@ -222,7 +221,7 @@ Run `pnpm validate` after every edit. Route larger feature work to
222
221
  ## Don't
223
222
 
224
223
  - Don't resurrect the manual interview / prompt-composition harness.
225
- - Don't block first deploy on polishing `mantle/site.md` prose.
224
+ - Don't block first deploy on polishing prose or writing a site letter.
226
225
  - Don't ask for a Cloudflare API token in the base first-run path.
227
226
  - Don't commit provider secrets.
228
227
  - Don't use `127.0.0.1` in OAuth callback examples; use `localhost`
@@ -38,8 +38,7 @@ expected result, and what value the user should report back.
38
38
  `ADMIN_GITHUB_LOGIN`, and the correct Worker name.
39
39
  - Worker secrets are set: `GITHUB_CLIENT_SECRET`,
40
40
  `BETTER_AUTH_SECRET`, and optional feature/provider secrets.
41
- - `mantle/site.md` frontmatter `site_url:` and `AGENTS.md` `Public
42
- site:` point at the deployed Worker URL.
41
+ - `AGENTS.md` `Public site:` points at the deployed Worker URL.
43
42
  - Staff MCP and browser admin sign-in are ready to test.
44
43
  - Operator setup URL is ready to hand to the owner:
45
44
  `https://mantle.tools/connect?site=<url-encoded-worker-url>`.
@@ -136,8 +135,8 @@ unset GITHUB_CLIENT_SECRET
136
135
  8. Commit and push generated non-secret outputs:
137
136
 
138
137
  ```bash
139
- git status --short -- wrangler.toml src/mantleConfig.ts mantle/site.md AGENTS.md
140
- git add wrangler.toml src/mantleConfig.ts mantle/site.md AGENTS.md
138
+ git status --short -- wrangler.toml src/mantleConfig.ts AGENTS.md
139
+ git add wrangler.toml src/mantleConfig.ts AGENTS.md
141
140
  git commit -m "mantle: wire production provision"
142
141
  git push
143
142
  ```
@@ -183,8 +182,8 @@ language:
183
182
  - What changed locally and what was committed.
184
183
  - Any intentionally deferred feature setup.
185
184
 
186
- Point future agents at `mantle/site.md`, `AGENTS.md`, and the repo-local
187
- `.agent/skills/` directory.
185
+ Point future agents at `AGENTS.md`, `.mantle/launch-state.json`, and the
186
+ repo-local `.agent/skills/` directory.
188
187
 
189
188
  ## Diagnostics
190
189