@latellu/atlas-agent-skills 0.3.0 → 0.3.1

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,6 +1,6 @@
1
1
  {
2
2
  "name": "atlas",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Work with Atlas CMS from Claude Code: bundles the Atlas MCP server (read/write content via tools) and the atlas-cms skill that teaches agents when and how to use the MCP tools, the @latellu/atlas-sdk delivery/management clients, and the @latellu/atlas-cli type generator.",
5
5
  "author": {
6
6
  "name": "Latellu",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@latellu/atlas-agent-skills",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Agent skill + MCP configuration for Atlas CMS. Works as a Claude Code plugin and as plain markdown guidance for any AI coding agent (Cursor, Codex, opencode, Gemini CLI, ...).",
5
5
  "license": "MIT",
6
6
  "author": "Latellu (https://github.com/tenriajeng)",
@@ -113,6 +113,14 @@ The real write shape (`POST/PUT /pages`) differs from what the reading API shows
113
113
  - MCP `create_page`/`update_page` extra caveats: the `title` argument is ignored by the
114
114
  backend (set `seo.title`), `seo` there accepts only `title`/`description`, and block
115
115
  `translations`/`seo_translations` aren't expressible.
116
+ - **A page without blocks cannot be published** — publish returns an error requiring at
117
+ least one block. Combined with `block_type_id` being undiscoverable, an API-only
118
+ workflow can create and edit pages but **never publish a new one**; publishing needs
119
+ someone to add a block in the dashboard first (or block-type UUIDs supplied to you).
120
+ - **The write plane has no reads**, and write responses don't echo `seo_translations` —
121
+ you cannot fully verify a translation write without a live key for the same workspace.
122
+ Trick: `PUT /pages/:slug` with body `{}` is a safe no-op that returns the page's
123
+ current base state (status + seo) — the only "read" available on the management plane.
116
124
 
117
125
  ## Practical write checklist
118
126
 
@@ -108,3 +108,7 @@ matters double here because MCP swallows per-field validation errors.
108
108
  actually landed (e.g. `get_entry`) before retrying creates.
109
109
  - One MCP server = one workspace (the key's). Multi-workspace work needs one server
110
110
  registration per workspace.
111
+ - **The server never checks that the live and mgmt keys belong to the same workspace.**
112
+ A mismatched pair is maximally confusing: schema and reads come from workspace A while
113
+ every write 404s ("content type not found") against workspace B. If reads succeed but
114
+ writes 404 on types you just listed, suspect mismatched keys before anything else.
@@ -67,7 +67,7 @@ All idOrSlug parameters accept either the entry ID or its slug.
67
67
  // (seo_translations, block translations, nesting) and the block_type_id caveat.
68
68
  await client.pages.create({ slug: "landing", seo: { title: "Landing" }, blocks: [...] });
69
69
  await client.pages.update("landing", { seo: { title: "Landing v2" } });
70
- await client.pages.publish("landing");
70
+ await client.pages.publish("landing"); // fails unless the page has ≥1 block — see authoring.md
71
71
  await client.pages.unpublish("landing"); // pages have the FULL lifecycle here
72
72
  await client.pages.archive("landing"); // (unlike the MCP tools)
73
73
  await client.pages.schedule("landing", "2026-08-01T09:00:00Z");