Skip to content

Promote dev to main — ghost v0.1.6 - #60

Merged
schuettc merged 4 commits into
mainfrom
dev
Aug 22, 2026
Merged

schuettc merged 4 commits into
mainfrom
dev

Conversation

@schuettc

Copy link
Copy Markdown
Owner

Promotion. ghost 0.1.5 → 0.1.6.

The headline is that no draft this plugin produced could be reviewed. draft-post's template stamped <!-- DRAFT — produced by /ghost:draft-post … --> as the first line of every draft body, and galley — the review surface those drafts go into — refuses raw HTML outright. An HTML comment is raw HTML. Measured against a real corpus: 19 of 24 drafts in ghost-site refused, every one on that banner line. The tool put the blocker in before the author typed a character.

Provenance now rides in front matter (generator, next), which galley parses and skips and push-draft ignores. Proved both directions with the real binary: old shape refuses at line 8, new shape opens.

Also in this promotion:

Companion change, different repo

ghost-site separately split its blog workflow so a draft is prose-only markdown and the HTML tables plus <!-- card --> markers are added by a publish-prep transform after review. Neither half works alone: fixing the authoring rules while the generator still wrote HTML into the file would have left every new draft broken anyway. That gap was caught by running galley against the corpus, not by reviewing the spec.

https://claude.ai/code/session_01YNgqJnFLD1gunVWy5bHNAT

schuettc added 4 commits July 3, 2026 19:49
… and a correction (#57)

exit-code-integrity — a pipeline reports the LAST command's status, so
`check | tail` turns a failing check into a passing one. Four incidents in one
codebase, the last of them printing BUILD OK over a build whose failure text was
three lines above the word OK.

verify-the-artifact — source is a claim about behaviour; only the running
artifact is evidence. A CSS rule was written, commented in its own defence,
reviewed and shipped without ever applying once, because a container rule
out-specified it. Reading the file cannot answer 'does this rule apply' — that
is decided by every other rule.

testing-interactions-over-time — ten defects surfaced in the first real human
session of a well-tested editor, and none had been found by any test. All were
interactions across time. State tests have one actor and one moment; these bugs
need two of each, so adding more of them leaves coverage of the class at zero.

worktree-isolation gains the bare-primary exception: the skill's own location
rule puts worktrees inside the git directory when the primary clone is bare,
which makes every go build fail with an error naming VCS stamping rather than
anything about worktrees.
… reviewed (v0.1.6) (#58)

draft-post's template stamped

    <!-- DRAFT — produced by /ghost:draft-post. Run /ghost:revise-post to refine. -->

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
…sses (#59)

Written 2026-07-15 and left uncommitted in the working tree since. Landing it
as its own commit rather than folding it into an unrelated fix — it is a
complete, deliberate change and deserves its own line in the history.

A matched pair, which is why both files move together: draft-post's Phase 5
tell list and revise-post's Axis 2 checklist are the same rules read at two
moments, and a rule in one and not the other is a rule the second pass quietly
un-applies.

The rule: pre-emptive explanation of mechanisms, alternatives, dead ends or
edge cases the reader did not need is a cut. One clause of warning is the
ceiling for a dead end, and only where the reader would plausibly hit it. A
sentence that exists to head off a hypothetical objection goes.

Claude-Session: https://claude.ai/code/session_01YNgqJnFLD1gunVWy5bHNAT
@schuettc
schuettc enabled auto-merge August 22, 2026 14:08
@schuettc
schuettc merged commit b2dae64 into main Aug 22, 2026
4 checks passed
@schuettc
schuettc deleted the dev branch August 22, 2026 14:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant