Pre-Publish Check
Final quality gate before publishing. Run this after the draft is done and you're ready to publish.
Copy this checklist and track progress:
Pre-Publish Check:
- [ ] Pass 1: Tone & voice match
- [ ] Pass 2: Conciseness audit
- [ ] Pass 3: Thesis connectivity
- [ ] Pass 4: Evidence audit
- [ ] Pass 5: Opening & closing strength
- [ ] Pass 6: Link & frontmatter check
- [ ] Pass 7: Readability scan
- [ ] Report findings to user
Setup
Read the post file provided as argument. Also read:
.claude/skills/draft-post/AUTHOR_PROFILE.md for voice reference
- 2-3 of Ben's published essays from
src/content/writing/ (prefer essays, not notes — check type: essay in frontmatter) for tone comparison
Pass 1: Tone & Voice Match
Read AI_MARKERS.md (in this skill's directory) for the full reference checklist. Compare the draft against Ben's published essays.
AI writing marker scan (from AI_MARKERS.md):
- Ctrl+F for all Tier 1 vocabulary (delve, tapestry, realm, pivotal, etc.) - any hit is a flag
- Check for Tier 2 vocabulary in clusters (3+ in one section = flag)
- Search for "not X, it's Y" / "not only...but also" negative parallelism constructions - flag multiples
- Count em-dashes per 1000 words. Compare against Ben's published baseline (Ben uses
- not —; his baseline is ~9-10 dashes per 1000 words). Flag if significantly above
- Check for rule-of-three (tricolon) lists, especially with near-synonyms - flag clusters
- Check for bold-header bullet list formatting (each item = Bold: description) - convert to narrative
- Check for elegant variation / copula avoidance ("serves as", "stands as", "represents a")
- Check for throat-clearing openers, sycophantic patterns, false balance templates, vague attributions, and canned significance phrases (see AI_MARKERS.md for full lists)
- Check for uniform paragraph structure (topic sentence + support + summary, repeated)
- Check for sandwich structure on opinions (positive, concern, reassurance - never just the concern)
- Flag paragraphs starting with "So,", "Now,", "Look,"
Voice mismatch detection:
- Compare sentence length standard deviation against published essays (AI text has lower variance)
- Check for contractions (Ben uses them consistently - their absence signals AI drift)
- Check for "I think" usage (Ben uses it deliberately to mark opinion vs. fact - absence or overuse both signal problems)
- Rhetorical questions (Ben uses them occasionally - zero or too many is a flag)
- Authority claims should reference specific experience, not generic credibility ("Experts argue..." is an AI tell)
- Check for genuine voice quirks (sentence fragments, intentional rule-breaking) - their total absence is a flag
Output: List each flagged instance with line number, the phrase, and a suggested fix.
Pass 2: Conciseness Audit
Sentence level
- Flag sentences over 30 words (Ben's style allows slightly longer than typical web writing, but 30+ is a warning)
- Flag 3+ consecutive sentences of similar length (monotonous rhythm)
- Flag filler phrases: "in order to" → "to", "due to the fact that" → "because", "has the ability to" → "can", "it is important to note that" → cut, "the reason why is that" → "because", "in the event that" → "if", "a large number of" → "many"
- Flag hedge words that aren't earning their keep: "very", "really", "quite", "rather", "somewhat", "just", "actually", "basically"
- Flag nominalizations where a verb would be stronger: "made a decision" → "decided", "gave consideration to" → "considered"
- Flag "There is/are..." and "It is...that..." constructions — rewrite with a real subject
Paragraph level
- Flag paragraphs over 5 sentences
- Flag paragraphs that make two distinct points (should be split)
Section level
- Flag sections over 350 words without a subheading break
- Flag any section where the first sentence doesn't carry the point (readers scan first lines)
Output: List each flag with line number, the text, and a suggested tighter version.
Pass 3: Thesis Connectivity
State the thesis in one sentence (from the post itself or inferred).
For each section and each paragraph, ask: Does this advance the thesis? Apply these checks:
- If you can delete a paragraph and the argument still holds, flag it as cuttable
- If a paragraph's connection to the thesis requires the reader to make an inferential leap, flag it and suggest making the connection explicit
- If two sections make the same point with different evidence, flag the weaker one for merging
- If a section introduces a tangent that isn't resolved, flag it
Output: For each flag, state: the section/paragraph, why it's disconnected, and whether to cut, merge, or add a connecting sentence.
Pass 4: Evidence Audit
For each factual claim in the post:
- Supported: Has a linked source, named example, or specific personal experience → mark as good
- Opinion (marked): Author flags it with "I think" or equivalent → mark as good
- Unsupported: Stated as fact but no source or experience → flag it
Also check:
- Are any sources cited twice for different claims? (each point should stand on its own evidence)
- Are any sources stale? (check dates — anything older than 18 months may need a freshness note)
- Do block quotes have attribution?
Output: Table of claims, their evidence status, and flags.
Pass 5: Opening & Closing Strength
Opening (first 3 paragraphs):
- Does the first sentence hook? (Stakes a position, tells a story, or provokes — not throat-clearing)
- By paragraph 3, does the reader know what the post is about and why they should care?
- Is there a clear "turn" — the moment the post shifts from setup to argument?
Closing (last 2 paragraphs):
- Does it end with a forward-looking bet or actionable challenge?
- Does it summarize? (If yes, flag — Ben's posts don't summarize)
- Does the last sentence land? Read it in isolation — does it work as a standalone statement?
Output: Assessment of opening hook strength, closing strength, and specific suggestions if either is weak.
Pass 6: Link & Frontmatter Check
Links:
- Find all markdown links in the post
- Check for placeholder links (TBD, TODO, #, empty href)
- Attempt to fetch each URL with WebFetch to verify it resolves (just check for 200/redirect, don't analyze content)
- Flag any broken or placeholder links
Frontmatter:
date — is it today or a reasonable publish date?
type — should be "essay" for full posts
tags — are they present and relevant?
description — is it a hook (good) or a summary (bad)? Should make someone want to click, not tell them what they'll read
draft — should be true until user explicitly approves
Output: List of link issues and frontmatter issues.
Pass 7: Readability Scan
- Flag jargon or acronyms not defined on first use (exception: terms the target audience universally knows, like PM, AI, PR)
- Flag inside-baseball references that assume the reader has read Ben's prior posts (each post should stand alone — brief context is fine, but don't require prior reading)
- Estimate reading time (assume 250 words/minute for online reading) — flag if over 10 minutes
- Check that bold text is used for emphasis on key phrases, not for entire sentences
- Check that H2 headers appear every 200-350 words (wall-of-text detection)
Output: List of readability flags with suggestions.
Report
Present findings organized by severity:
Must fix — Broken links, placeholder URLs, unsupported factual claims, AI-typical phrases, paragraphs disconnected from thesis
Should fix — Verbose sentences, monotonous rhythm, weak opening/closing, missing evidence, excessive sections
Consider — Minor conciseness improvements, readability polish, frontmatter tweaks
For each finding, include: what the issue is, where it is (line number or quote), and a specific suggested fix.
After presenting, ask the user which fixes to apply. Apply approved changes and re-verify the affected checks.
Error Handling
| Situation |
Action |
| Post file not found |
Ask user for the correct path |
| AUTHOR_PROFILE.md not found |
Skip voice comparison against profile, note reduced confidence in tone check |
| No published essays found for comparison |
Skip comparative tone analysis, rely only on the voice profile rules |
| URL check fails (timeout/network) |
Note as "unverifiable" rather than "broken" |
1---2name: pre-publish-check3description: Final quality gate before publishing a blog post. Checks tone/voice match, conciseness, thesis connectivity, evidence backing, structural strength, links, frontmatter, and readability. Use after /draft-post iteration is complete. Replaces /tone-check.4---56# Pre-Publish Check78Final quality gate before publishing. Run this after the draft is done and you're ready to publish.910Copy this checklist and track progress:1112```13Pre-Publish Check:14- [ ] Pass 1: Tone & voice match15- [ ] Pass 2: Conciseness audit16- [ ] Pass 3: Thesis connectivity17- [ ] Pass 4: Evidence audit18- [ ] Pass 5: Opening & closing strength19- [ ] Pass 6: Link & frontmatter check20- [ ] Pass 7: Readability scan21- [ ] Report findings to user22```2324## Setup2526Read the post file provided as argument. Also read:27- `.claude/skills/draft-post/AUTHOR_PROFILE.md` for voice reference28- 2-3 of Ben's published essays from `src/content/writing/` (prefer essays, not notes — check `type: essay` in frontmatter) for tone comparison2930## Pass 1: Tone & Voice Match3132Read `AI_MARKERS.md` (in this skill's directory) for the full reference checklist. Compare the draft against Ben's published essays.3334**AI writing marker scan (from AI_MARKERS.md):**351. Ctrl+F for all Tier 1 vocabulary (delve, tapestry, realm, pivotal, etc.) - any hit is a flag362. Check for Tier 2 vocabulary in clusters (3+ in one section = flag)373. Search for "not X, it's Y" / "not only...but also" negative parallelism constructions - flag multiples384. Count em-dashes per 1000 words. Compare against Ben's published baseline (Ben uses ` - ` not `—`; his baseline is ~9-10 dashes per 1000 words). Flag if significantly above395. Check for rule-of-three (tricolon) lists, especially with near-synonyms - flag clusters406. Check for bold-header bullet list formatting (each item = **Bold:** description) - convert to narrative417. Check for elegant variation / copula avoidance ("serves as", "stands as", "represents a")428. Check for throat-clearing openers, sycophantic patterns, false balance templates, vague attributions, and canned significance phrases (see AI_MARKERS.md for full lists)439. Check for uniform paragraph structure (topic sentence + support + summary, repeated)4410. Check for sandwich structure on opinions (positive, concern, reassurance - never just the concern)4511. Flag paragraphs starting with "So,", "Now,", "Look,"4647**Voice mismatch detection:**48- Compare sentence length standard deviation against published essays (AI text has lower variance)49- Check for contractions (Ben uses them consistently - their absence signals AI drift)50- Check for "I think" usage (Ben uses it deliberately to mark opinion vs. fact - absence or overuse both signal problems)51- Rhetorical questions (Ben uses them occasionally - zero or too many is a flag)52- Authority claims should reference specific experience, not generic credibility ("Experts argue..." is an AI tell)53- Check for genuine voice quirks (sentence fragments, intentional rule-breaking) - their total absence is a flag5455**Output:** List each flagged instance with line number, the phrase, and a suggested fix.5657## Pass 2: Conciseness Audit5859### Sentence level60- Flag sentences over 30 words (Ben's style allows slightly longer than typical web writing, but 30+ is a warning)61- Flag 3+ consecutive sentences of similar length (monotonous rhythm)62- Flag filler phrases: "in order to" → "to", "due to the fact that" → "because", "has the ability to" → "can", "it is important to note that" → cut, "the reason why is that" → "because", "in the event that" → "if", "a large number of" → "many"63- Flag hedge words that aren't earning their keep: "very", "really", "quite", "rather", "somewhat", "just", "actually", "basically"64- Flag nominalizations where a verb would be stronger: "made a decision" → "decided", "gave consideration to" → "considered"65- Flag "There is/are..." and "It is...that..." constructions — rewrite with a real subject6667### Paragraph level68- Flag paragraphs over 5 sentences69- Flag paragraphs that make two distinct points (should be split)7071### Section level72- Flag sections over 350 words without a subheading break73- Flag any section where the first sentence doesn't carry the point (readers scan first lines)7475**Output:** List each flag with line number, the text, and a suggested tighter version.7677## Pass 3: Thesis Connectivity7879State the thesis in one sentence (from the post itself or inferred).8081For each section and each paragraph, ask: **Does this advance the thesis?** Apply these checks:8283- If you can delete a paragraph and the argument still holds, flag it as cuttable84- If a paragraph's connection to the thesis requires the reader to make an inferential leap, flag it and suggest making the connection explicit85- If two sections make the same point with different evidence, flag the weaker one for merging86- If a section introduces a tangent that isn't resolved, flag it8788**Output:** For each flag, state: the section/paragraph, why it's disconnected, and whether to cut, merge, or add a connecting sentence.8990## Pass 4: Evidence Audit9192For each factual claim in the post:9394- **Supported:** Has a linked source, named example, or specific personal experience → mark as good95- **Opinion (marked):** Author flags it with "I think" or equivalent → mark as good96- **Unsupported:** Stated as fact but no source or experience → flag it9798Also check:99- Are any sources cited twice for different claims? (each point should stand on its own evidence)100- Are any sources stale? (check dates — anything older than 18 months may need a freshness note)101- Do block quotes have attribution?102103**Output:** Table of claims, their evidence status, and flags.104105## Pass 5: Opening & Closing Strength106107**Opening (first 3 paragraphs):**108- Does the first sentence hook? (Stakes a position, tells a story, or provokes — not throat-clearing)109- By paragraph 3, does the reader know what the post is about and why they should care?110- Is there a clear "turn" — the moment the post shifts from setup to argument?111112**Closing (last 2 paragraphs):**113- Does it end with a forward-looking bet or actionable challenge?114- Does it summarize? (If yes, flag — Ben's posts don't summarize)115- Does the last sentence land? Read it in isolation — does it work as a standalone statement?116117**Output:** Assessment of opening hook strength, closing strength, and specific suggestions if either is weak.118119## Pass 6: Link & Frontmatter Check120121**Links:**122- Find all markdown links in the post123- Check for placeholder links (TBD, TODO, #, empty href)124- Attempt to fetch each URL with WebFetch to verify it resolves (just check for 200/redirect, don't analyze content)125- Flag any broken or placeholder links126127**Frontmatter:**128- `date` — is it today or a reasonable publish date?129- `type` — should be "essay" for full posts130- `tags` — are they present and relevant?131- `description` — is it a hook (good) or a summary (bad)? Should make someone want to click, not tell them what they'll read132- `draft` — should be `true` until user explicitly approves133134**Output:** List of link issues and frontmatter issues.135136## Pass 7: Readability Scan137138- Flag jargon or acronyms not defined on first use (exception: terms the target audience universally knows, like PM, AI, PR)139- Flag inside-baseball references that assume the reader has read Ben's prior posts (each post should stand alone — brief context is fine, but don't require prior reading)140- Estimate reading time (assume 250 words/minute for online reading) — flag if over 10 minutes141- Check that bold text is used for emphasis on key phrases, not for entire sentences142- Check that H2 headers appear every 200-350 words (wall-of-text detection)143144**Output:** List of readability flags with suggestions.145146## Report147148Present findings organized by severity:149150**Must fix** — Broken links, placeholder URLs, unsupported factual claims, AI-typical phrases, paragraphs disconnected from thesis151152**Should fix** — Verbose sentences, monotonous rhythm, weak opening/closing, missing evidence, excessive sections153154**Consider** — Minor conciseness improvements, readability polish, frontmatter tweaks155156For each finding, include: what the issue is, where it is (line number or quote), and a specific suggested fix.157158After presenting, ask the user which fixes to apply. Apply approved changes and re-verify the affected checks.159160## Error Handling161162| Situation | Action |163|-----------|--------|164| Post file not found | Ask user for the correct path |165| AUTHOR_PROFILE.md not found | Skip voice comparison against profile, note reduced confidence in tone check |166| No published essays found for comparison | Skip comparative tone analysis, rely only on the voice profile rules |167| URL check fails (timeout/network) | Note as "unverifiable" rather than "broken" |