Drafting Workflow — Three Stages, Two Gates
Every article moves through three drafts. The team approves each gate. Don't advance without a go-ahead, and don't collapse the stages.
Before drafting, the relevant KB items are loaded (Brand Guidelines incl. named author, ICP Personas, the matching Page/Blog Template, the Webmap, Competitors for angle/gaps, Target Prompts for what to win). Route by content type: blog/article → seo-geo-content-writing; location/service page → location-page-creator. Standards and the scored gate live in geo-quality-standards.md.
Stage 1 — First Draft
Get substance and angle right. Write the full piece in the client's voice, attributed to the named author, aimed at the relevant ICP persona(s), hitting word count and required keywords, using the client's template structure. Pull in researched facts with sources, applying source-tier and recency discipline (geo-quality-standards.md). Weave in first-person/first-hand experience where genuine — both a slop fix and the E-E-A-T "Experience" signal.
Not yet final polish. Deliver, then stop for feedback:
First draft for [client] — [topic]. Tell me what to change (angle, depth, sections, tone) and I'll fold it into the optimized draft.
Wait. Don't proceed unsolicited.
Stage 2 — Optimized Draft
Apply every Stage-1 change, then the optimisation layer:
- Optimised internal linking — destinations from the Webmap + the brief's named targets, contextual anchors (
internal-linking.md). - SEO — primary keyword in title/first 100 words/H2s, LSI terms, meta title + description, sane density.
- GEO — direct-answer leads, chunkable stand-alone sections, named stats with attribution, precise terminology (
geo-quality-standards.md). - GEO structure — FAQ answering the persona's real questions and the target AI-prompts; question-style H2s where they fit.
- Tables / components — only if the client's template uses them.
- Schema — generate matching JSON-LD via
flood-schema-generator(Article/BlogPosting, FAQPage, LocalBusiness/Service, author/Organization). - Scored de-slop gate — run
stop-slopplus the LLM-as-judge rubric ingeo-quality-standards.md. Auto-revise until it passes (total ≥ 49/70, no dimension < 7). Do this before presenting — reviewers see a piece that already cleared the bar. - Distribution note — a short off-site repurposing/citation play (
geo-quality-standards.md).
Deliver with a changelog (feedback applied + optimisation added + the quality score), then stop for sign-off:
Optimized draft for [client] — [topic] (quality score N/70). Anything else before the final?
Wait.
Stage 3 — Final Draft
Apply last notes; re-verify the checklist holds — links resolve, meta present, FAQ present, schema attached, template structure matched, gate still passes, no fabricated facts. Deliver the clean piece + meta block + internal-link report + source list + schema + distribution note (output-format.md).
Ask once:
Final draft for [client] — [topic]. Approve to finish, and I'll update the knowledge base.
On approval → finished → update the KB.
After approval — Update the knowledge base (via Socrates)
Assess each item; write only what changed.
| Item | Tool | Update when… | Frequency |
|---|---|---|---|
| Internal Linking Webmap | socrates_append_webmap_rows |
Always — every link placed (source = this piece's slug/URL, destination = target) | Every time |
| Content Run Log | socrates_log_run |
Always — one row: date, article, type, keyword, target prompts, links, quality score, author, URL | Every time |
| Target Prompts & Visibility | socrates_upsert_target_prompts |
The piece targeted a tracked prompt → set its Target content + status | When applicable |
| Blog / Page Template | socrates_upsert_kb_doc |
The final piece refined/improved the template, or it's still maturing early | Often early, rarely once stable |
| ICP Personas | socrates_upsert_kb_doc |
Research/feedback surfaced a new audience insight, question, or objection | Occasionally |
| Competitors & Gap | socrates_upsert_kb_doc |
The piece closed a known gap (mark done) or a new competitor/gap surfaced | Occasionally |
| Brand Guidelines | socrates_upsert_kb_doc |
A voice/terminology/banned-word/author decision was made in feedback | Rarely |
Bump Last updated on any doc changed. If Socrates is unreachable, emit the update packet for paste-back (output-format.md) so nothing is lost.