From 66d7937b0c1541b3ff5f103218d462637f529f81 Mon Sep 17 00:00:00 2001 From: Court Schuett Date: Sat, 22 Aug 2026 08:43:53 -0500 Subject: [PATCH] fix(ghost): the draft template emitted raw HTML, so no draft could be reviewed (v0.1.6) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit draft-post's template stamped as the first line of every draft body. Drafts are reviewed in galley, which REFUSES raw HTML outright — and an HTML comment is raw HTML. So every draft this skill produced was unopenable for review before the author had typed a character: the tool put the blocker in ahead of the writing. Measured rather than reasoned, against a real corpus: 19 of 24 drafts in ghost-site refused, every one on that banner, at lines 7-11. Not scattered content — one generated line, in every file. The provenance moves into front matter as `generator` and `next`. galley parses and skips front matter, and push-draft reads named keys and ignores the rest, so nothing downstream needs teaching and the note survives. Proved both directions with the real binary: the old shape refuses at line 8, the new shape opens. This is the second half of a fix whose first half landed in ghost-site — that repo's style guide and create-blog-post skill now separate a prose-only draft from a publish-prep transform that adds the HTML tables and card markers Ghost wants. Fixing the rules without fixing the generator would have left every new draft broken anyway, which is why this half exists. The comment above the template says not to put an HTML comment back, and why. Claude-Session: https://claude.ai/code/session_01YNgqJnFLD1gunVWy5bHNAT --- .claude-plugin/marketplace.json | 2 +- ghost/.claude-plugin/plugin.json | 2 +- ghost/skills/draft-post/SKILL.md | 17 +++++++++++++++-- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 250d482..c7cf437 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -44,7 +44,7 @@ "name": "ghost", "source": "./ghost", "description": "Write, revise, and push blog posts to a Ghost site from Claude Code — a Ghost Admin API MCP plus a plan→draft→revise→push skill set.", - "version": "0.1.5" + "version": "0.1.6" } ] } diff --git a/ghost/.claude-plugin/plugin.json b/ghost/.claude-plugin/plugin.json index 5ea4665..e5fe236 100644 --- a/ghost/.claude-plugin/plugin.json +++ b/ghost/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "ghost", - "version": "0.1.5", + "version": "0.1.6", "description": "Write, revise, and push blog posts to a Ghost site from Claude Code — a Ghost Admin API MCP plus a plan→draft→revise→push skill set.", "author": { "name": "Court Schuett" diff --git a/ghost/skills/draft-post/SKILL.md b/ghost/skills/draft-post/SKILL.md index a8e30c3..59925e5 100644 --- a/ghost/skills/draft-post/SKILL.md +++ b/ghost/skills/draft-post/SKILL.md @@ -114,13 +114,26 @@ title: "" status: draft date: tags: [] +generator: "ghost:draft-post" +next: "/ghost:revise-post" --- - - ``` +**The provenance note is front matter, not an HTML comment, and that is load-bearing.** +This template used to emit `` as the +first line of the body. Drafts are reviewed in galley (`galley edit `), which +REFUSES raw HTML outright — and an HTML comment is raw HTML. So every draft this skill +produced was unopenable for review, and the author had not typed a character yet: the +tool put the blocker in before the writing started. Measured 2026-08-22 against a real +corpus — 19 of 24 drafts in ghost-site refused, every one on that banner line, at lines +7-11. Front matter is parsed and skipped by galley, and `push-draft` reads named keys +and ignores the rest, so the provenance survives with nothing downstream to teach. + +DO NOT put an HTML comment back into the emitted draft, here or anywhere else in this +skill. If something new needs to ride along with a draft, it goes in front matter. + Apply every constraint from the style guide as you write: **From Stated voice:**